@@ -148,7 +148,12 @@ def pack(target, sources, no_compress, verbose): | |||
print "Wrote %s - %sk" % (target, str(int(os.path.getsize(target)/1024))) | |||
def html_to_js_template(path, content): | |||
# remove whitespace to a single space | |||
content = re.sub("\s+", " ", content).replace("'", "\'") | |||
# strip comments | |||
content = re.sub("(<!--.*?-->)", "", content) | |||
return """frappe.templates["{key}"] = '{content}';\n""".format(\ | |||
key=path.rsplit("/", 1)[-1][:-5], content=content) | |||
@@ -122,10 +122,10 @@ frappe.DataImportTool = Class.extend({ | |||
} | |||
}); | |||
frappe.pages['data-import-tool'].onload = function(wrapper) { | |||
frappe.pages['data-import-tool'].on_page_load = function(wrapper) { | |||
frappe.data_import_tool = new frappe.DataImportTool(wrapper); | |||
} | |||
frappe.pages['data-import-tool'].onshow = function(wrapper) { | |||
frappe.pages['data-import-tool'].on_page_show = function(wrapper) { | |||
frappe.data_import_tool && frappe.data_import_tool.set_route_options(); | |||
} |
@@ -1,6 +1,6 @@ | |||
frappe.provide('frappe.desktop'); | |||
frappe.pages['desktop'].onload = function(wrapper) { | |||
frappe.pages['desktop'].on_page_load = function(wrapper) { | |||
frappe.desktop.background = $('<div style="background: none; text-align: center; \ | |||
margin: 0px auto;"> \ | |||
<div id="icon-grid">\ | |||
@@ -1,5 +1,5 @@ | |||
frappe.pages['modules_setup'].onload = function(wrapper) { | |||
frappe.pages['modules_setup'].on_page_load = function(wrapper) { | |||
var page = frappe.ui.make_app_page({ | |||
parent: wrapper, | |||
title: __('Show or Hide Modules'), | |||
@@ -1,4 +1,4 @@ | |||
frappe.pages['permission-manager'].onload = function(wrapper) { | |||
frappe.pages['permission-manager'].on_page_load = function(wrapper) { | |||
var page = frappe.ui.make_app_page({ | |||
parent: wrapper, | |||
title: __('Role Permissions Manager'), | |||
@@ -1,4 +1,4 @@ | |||
frappe.pages['user-permissions'].onload = function(wrapper) { | |||
frappe.pages['user-permissions'].on_page_load = function(wrapper) { | |||
var page = frappe.ui.make_app_page({ | |||
parent: wrapper, | |||
title: __("User Permissions Manager"), | |||
@@ -3,7 +3,7 @@ | |||
frappe.provide("frappe.activity"); | |||
frappe.pages['activity'].onload = function(wrapper) { | |||
frappe.pages['activity'].on_page_load = function(wrapper) { | |||
var me = this; | |||
frappe.require('assets/frappe/js/lib/flot/jquery.flot.js'); | |||
@@ -1,6 +1,6 @@ | |||
frappe.provide("frappe.applications"); | |||
frappe.pages['applications'].onload = function(parent) { | |||
frappe.pages['applications'].on_page_load = function(parent) { | |||
frappe.applications.installer = new frappe.applications.Installer(parent); | |||
}; | |||
@@ -6,7 +6,7 @@ | |||
frappe.provide('frappe.desk.pages.messages'); | |||
frappe.pages.messages.onload = function(parent) { | |||
frappe.pages.messages.on_page_load = function(parent) { | |||
var page = frappe.ui.make_app_page({ | |||
parent: parent, | |||
}); | |||
@@ -21,7 +21,7 @@ frappe.ui.form.on("Print Format", "edit_format", function(frm) { | |||
return; | |||
} | |||
frappe.route_options = { | |||
print_format: frm.doc | |||
print_format: frm | |||
}; | |||
frappe.set_route("print-format-builder"); | |||
}); |
@@ -1,20 +1,26 @@ | |||
.print-format-builder-section, .print-format-builder-add-section { | |||
border: 1px dashed #d1d8dd; | |||
border: 1px solid #d1d8dd; | |||
margin: 0px; | |||
margin-bottom: 15px; | |||
} | |||
.print-format-builder-add-section { | |||
border: 1px dashed #d1d8dd; | |||
text-align: center; | |||
padding: 15px; | |||
cursor: pointer; | |||
} | |||
.print-format-builder-column { | |||
border: 1px dashed #d1d8dd; | |||
padding: 15px; | |||
margin: 15px 0px; | |||
margin: 0px -15px 0 -16px; | |||
background-color: white; | |||
min-height: 64px; | |||
border-left: 1px solid #d1d8dd; | |||
border-right: 1px solid #d1d8dd; | |||
} | |||
.section-column:last-child .print-format-builder-column { | |||
margin-right: -16px; | |||
} | |||
.print-format-builder-field { | |||
@@ -22,7 +28,7 @@ | |||
border: 1px solid #d1d8dd; | |||
border-radius: 3px; | |||
margin-bottom: 10px; | |||
height: 34px; | |||
min-height: 34px; | |||
} | |||
.print-format-builder-field:last-child { | |||
@@ -45,5 +51,13 @@ | |||
.print-format-builder-section-head { | |||
cursor: move; | |||
padding: 10px 15px; | |||
border-bottom: 1px dashed #d1d8dd; | |||
border-bottom: 1px solid #d1d8dd; | |||
} | |||
.column-selector-row:hover { | |||
background-color: #fafbfc; | |||
} | |||
.column-selector-row .form-control { | |||
margin-top: 5px; | |||
} |
@@ -1,12 +1,12 @@ | |||
frappe.pfbuilder = null; | |||
frappe.pages['print-format-builder'].onload = function(wrapper) { | |||
frappe.pages['print-format-builder'].on_page_load = function(wrapper) { | |||
frappe.print_format_builder = new frappe.PrintFormatBuilder(wrapper); | |||
} | |||
frappe.pages['print-format-builder'].onshow = function(wrapper) { | |||
frappe.pages['print-format-builder'].on_page_show = function(wrapper) { | |||
// load a new page | |||
if(frappe.route_options.print_format != frappe.print_format_builder.print_format) { | |||
var frm = frappe.route_options.print_format | |||
if(!frm || !frappe.print_format_builder.doc || | |||
(frm.doc.name != frappe.print_format_builder.doc.name)) { | |||
frappe.print_format_builder.refresh(); | |||
} | |||
} | |||
@@ -15,16 +15,14 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
init: function(parent) { | |||
this.parent = parent; | |||
this.make(); | |||
this.refresh(); | |||
}, | |||
refresh: function() { | |||
this.print_format = frappe.route_options.print_format; | |||
this.visible_columns = {}; | |||
this.frm = frappe.route_options.print_format; | |||
if(!this.print_format) { | |||
this.as_user_to_start_from_print_format(); | |||
if(!(this.frm && this.frm.doc)) { | |||
this.ask_user_to_start_from_print_format(); | |||
} else { | |||
this.page.set_title(this.print_format.name); | |||
this.page.set_title(this.frm.doc.name); | |||
this.setup_print_format(); | |||
} | |||
}, | |||
@@ -34,27 +32,43 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
title: __("Print Format Builder") | |||
}); | |||
}, | |||
as_user_to_start_from_print_format: function() { | |||
ask_user_to_start_from_print_format: function() { | |||
this.page.main.html('<div class="padding"><a class="btn btn-default btn-sm" href="#List/Print Format">' | |||
+__("Please create or edit a new Print Format")+'</a></div>'); | |||
this.page.sidebar.html(""); | |||
this.page.clear_primary_action(); | |||
}, | |||
setup_print_format: function() { | |||
var me = this; | |||
frappe.model.with_doctype(this.print_format.doc_type, function(doctype) { | |||
me.meta = frappe.get_meta(me.print_format.doc_type); | |||
frappe.model.with_doctype(this.frm.doc.doc_type, function(doctype) { | |||
me.meta = frappe.get_meta(me.frm.doc.doc_type); | |||
me.setup_sidebar(); | |||
me.render_layout(); | |||
me.page.set_primary_action(__("Save"), function() { | |||
me.save_print_format(); | |||
}); | |||
}); | |||
}, | |||
setup_sidebar: function() { | |||
var me = this; | |||
this.page.sidebar.empty(); | |||
// prepend custom HTML field | |||
var fields = [this.get_custom_html_field()].concat(this.meta.fields); | |||
$(frappe.render_template("print_format_builder_sidebar", | |||
{fields: this.meta.fields})) | |||
{fields: fields})) | |||
.appendTo(this.page.sidebar); | |||
this.setup_field_filter(); | |||
}, | |||
get_custom_html_field: function() { | |||
return { | |||
fieldtype: "Custom HTML", | |||
fieldname: "_custom_html", | |||
label: __("Custom HTML") | |||
} | |||
}, | |||
render_layout: function() { | |||
this.page.main.empty(); | |||
this.prepare_data(); | |||
@@ -62,12 +76,13 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
data: this.layout_data, me: this})) | |||
.appendTo(this.page.main); | |||
this.setup_sortable(); | |||
this.setup_settings(); | |||
this.setup_section_settings(); | |||
this.setup_column_selector(); | |||
this.setup_edit_custom_html(); | |||
this.setup_add_section(); | |||
}, | |||
prepare_data: function() { | |||
this.data = JSON.parse(this.print_format.format_data || "[]"); | |||
this.data = JSON.parse(this.frm.doc.format_data || "[]"); | |||
if(!this.data.length) { | |||
// new layout | |||
this.data = this.meta.fields; | |||
@@ -86,6 +101,18 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
// break the layout into sections and columns | |||
// so that it is easier to render in a template | |||
$.each(this.data, function(i, f) { | |||
if(!f.name && f.fieldname) { | |||
// from format_data (designed format) | |||
// print_hide should always be false | |||
if(f.fieldname==="_custom_html") { | |||
f.label = "Custom HTML"; | |||
f.fieldtype = "Custom HTML" | |||
} else { | |||
f = $.extend(frappe.meta.get_docfield(me.frm.doc.doc_type, | |||
f.fieldname) || {}, f); | |||
} | |||
} | |||
if(f.fieldtype==="Section Break") { | |||
section = me.get_new_section(); | |||
column = null; | |||
@@ -119,14 +146,20 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
return {fields: []} | |||
}, | |||
add_table_properties: function(f) { | |||
// build table columns and widths in a dict | |||
// visible_columns | |||
var me = this; | |||
this.visible_columns[f.options] = []; | |||
$.each(frappe.get_meta(f.options).fields, function(i, _f) { | |||
if(!in_list(["Section Break", "Column Break"], _f.fieldtype) && | |||
!_f.print_hide && f.label) { | |||
me.visible_columns[f.options].push(_f.fieldname); | |||
} | |||
}); | |||
if(!f.visible_columns) { | |||
f.visible_columns = [] | |||
$.each(frappe.get_meta(f.options).fields, function(i, _f) { | |||
if(!in_list(["Section Break", "Column Break"], _f.fieldtype) && | |||
!_f.print_hide && f.label) { | |||
// column names set as fieldname|width | |||
f.visible_columns.push({fieldname: _f.fieldname, width: _f.width}); | |||
} | |||
}); | |||
} | |||
}, | |||
setup_sortable: function() { | |||
var me = this; | |||
@@ -163,8 +196,13 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
// on drop, change the HTML | |||
var $item = $(evt.item); | |||
if(!$item.hasClass("print-format-builder-field")) { | |||
var fieldname = $item.attr("data-fieldname"), | |||
field = frappe.meta.get_docfield(me.print_format.doc_type, fieldname); | |||
var fieldname = $item.attr("data-fieldname"); | |||
if(fieldname==="_custom_html") { | |||
var field = me.get_custom_html_field(); | |||
} else { | |||
var field = frappe.meta.get_docfield(me.frm.doc.doc_type, fieldname); | |||
} | |||
$item.replaceWith(frappe.render_template("print_format_builder_field", | |||
{field: field, me:me})) | |||
@@ -183,7 +221,7 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
}) | |||
}); | |||
}, | |||
setup_settings: function() { | |||
setup_section_settings: function() { | |||
var me = this; | |||
this.page.main.on("click", ".section-settings", function() { | |||
var section = $(this).parent().parent(); | |||
@@ -194,9 +232,24 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
title: "Edit Section", | |||
fields: [ | |||
{ | |||
label:__("No of Columns"), fieldname:"no_of_columns", | |||
fieldtype:"Select", options: ["1", "2", "3"], | |||
label:__("No of Columns"), | |||
fieldname:"no_of_columns", | |||
fieldtype:"Select", | |||
options: ["1", "2", "3"], | |||
}, | |||
{ | |||
label: __("Remove Section"), | |||
fieldname: "remove_section", | |||
fieldtype: "Button", | |||
click: function() { | |||
d.hide(); | |||
section.fadeOut(function() {section.remove()}); | |||
}, | |||
input_class: "btn-danger", | |||
input_css: { | |||
"margin-top": "20px" | |||
} | |||
} | |||
], | |||
}); | |||
@@ -212,7 +265,8 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
d.show(); | |||
}) | |||
return false; | |||
}); | |||
}, | |||
update_columns_in_section: function(section, no_of_columns, new_no_of_columns) { | |||
var col_size = 12 / new_no_of_columns, | |||
@@ -275,38 +329,134 @@ frappe.PrintFormatBuilder = Class.extend({ | |||
setup_column_selector: function() { | |||
var me = this; | |||
this.page.main.on("click", ".select-columns", function() { | |||
var parent = $(this).parent(), | |||
var parent = $(this).parents(".print-format-builder-field:first"), | |||
doctype = parent.attr("data-doctype"), | |||
label = parent.attr("data-label"), | |||
columns = parent.attr("data-columns").split(","); | |||
columns = parent.attr("data-columns").split(",") | |||
column_names = $.map(columns, function(v) { return v.split("|")[0]; }); | |||
widths = {}; | |||
$.each(columns, function(i, v) { | |||
var parts = v.split("|"); | |||
widths[parts[0]] = parts[1]; | |||
}); | |||
var d = new frappe.ui.Dialog({ | |||
title: __("Select Table Columns for {0}", [label]), | |||
}); | |||
var $body = $(d.body); | |||
// render checkboxes | |||
$(frappe.render_template("print_format_builder_column_selector", { | |||
fields: frappe.get_meta(doctype).fields, | |||
columns: columns | |||
column_names: column_names, | |||
widths: widths | |||
})).appendTo(d.body); | |||
Sortable.create($(d.body).find(".column-selector-list").get(0)); | |||
Sortable.create($body.find(".column-selector-list").get(0)); | |||
var get_width_input = function(fieldname) { | |||
return $body.find(".column-width[data-fieldname='"+ fieldname +"']") | |||
} | |||
// update data-columns property on update | |||
d.set_primary_action(__("Update"), function() { | |||
me.visible_columns[doctype] = []; | |||
$(d.body).find("input:checked").each(function() { | |||
me.visible_columns[doctype].push($(this).attr("data-fieldname")); | |||
var visible_columns = []; | |||
$body.find("input:checked").each(function() { | |||
var fieldname = $(this).attr("data-fieldname"), | |||
width = get_width_input(fieldname).val() || ""; | |||
visible_columns.push(fieldname + "|" + width); | |||
}); | |||
parent.attr("data-columns", me.visible_columns[doctype].join(me.visible_columns[doctype])); | |||
parent.attr("data-columns", visible_columns.join(",")); | |||
d.hide(); | |||
}); | |||
// enable / disable input based on selection | |||
$body.on("click", "input[type='checkbox']", function() { | |||
var disabled = !$(this).prop("checked"), | |||
input = get_width_input($(this).attr("data-fieldname")); | |||
input.prop("disabled", disabled); | |||
if(disabled) input.val(""); | |||
}); | |||
d.show(); | |||
return false; | |||
}); | |||
}, | |||
get_visible_columns_string: function(f) { | |||
return $.map(f.visible_columns, function(v) { return v.fieldname + "|" + v.width }).join(",") | |||
}, | |||
get_no_content: function() { | |||
return '<div class="text-extra-muted" data-no-content>'+__("Edit to add content")+'</div>' | |||
}, | |||
setup_edit_custom_html: function() { | |||
var me = this; | |||
this.page.main.on("click", ".edit-html", function() { | |||
var parent = $(this).parents(".print-format-builder-field:first"), | |||
$content = parent.find(".html-content"); | |||
var d = new frappe.ui.Dialog({ | |||
title: __("Edit Custom HTML"), | |||
fields: [ | |||
{ | |||
fieldname: "content", | |||
fieldtype: "Text Editor", | |||
label: "Custom HTML" | |||
} | |||
] | |||
}); | |||
var content = $content.html(); | |||
if(content.indexOf("data-no-content")!==-1) content = ""; | |||
d.set_input("content", content); | |||
d.set_primary_action(__("Update"), function() { | |||
$content.html(d.get_value("content")); | |||
d.hide(); | |||
}); | |||
d.show(); | |||
return false; | |||
}); | |||
}, | |||
save_print_format: function() { | |||
var data = [], | |||
me = this; | |||
this.page.main.find(".print-format-builder-section").each(function() { | |||
data.push({"fieldtype": "Section Break"}); | |||
$(this).find(".print-format-builder-column").each(function() { | |||
data.push({"fieldtype": "Column Break"}); | |||
$(this).find(".print-format-builder-field").each(function() { | |||
var $this = $(this), | |||
fieldtype = $this.attr("data-fieldtype"), | |||
df = { | |||
fieldname: $this.attr("data-fieldname") | |||
}; | |||
if(fieldtype==="Table") { | |||
// append the user selected columns to visible_columns | |||
var columns = $this.attr("data-columns").split(","); | |||
df.visible_columns = []; | |||
$.each(columns, function(i, c) { | |||
var parts = c.split("|"); | |||
df.visible_columns.push({fieldname:parts[0], | |||
width:parts[1]}); | |||
}); | |||
} | |||
if(fieldtype==="Custom HTML") { | |||
// custom html as HTML field | |||
df.fieldtype = "HTML"; | |||
df.options = $this.find(".html-content").html(); | |||
} | |||
data.push(df); | |||
}); | |||
}); | |||
}); | |||
this.frm.doc.format_data = JSON.stringify(data); | |||
setTimeout(function() { me.frm.save(); }, 100); | |||
} | |||
}); | |||
frappe.PrintFormatField = Class.extend({ | |||
init: function() { } | |||
}); |
@@ -1,14 +1,31 @@ | |||
<p class="text-muted">{%= __("Check columns to select, drag to set order.") %}</p> | |||
<p class="text-muted">{%= __("Check columns to select, drag to set order.") %} | |||
<br>{%= __("Widths can be set in px or %.") %}</p> | |||
<div class="row"> | |||
<div class="col-sm-6"><h4>{%= __("Column") %}</h4></div> | |||
<div class="col-sm-6 text-right"><h4>{%= __("Width") %}</h4></div> | |||
</div> | |||
<div class="column-selector-list"> | |||
{% for (i=0; i < fields.length; i++) { var f = fields[i]; %} | |||
{% if(!in_list(["Section Break", "Column Break"]) && f.label) { %} | |||
<div class="checkbox"> | |||
<label> | |||
<input type="checkbox" | |||
{% if(!in_list(["Section Break", "Column Break"]) && f.label) { | |||
var selected = in_list(column_names, f.fieldname) %} | |||
<div class="row column-selector-row"> | |||
<div class="col-sm-6"> | |||
<div class="checkbox"> | |||
<label> | |||
<input type="checkbox" | |||
data-fieldname="{%= f.fieldname %}" | |||
{%= selected ? "checked" : "" %}> | |||
{%= f.label %} | |||
</label> | |||
</div> | |||
</div> | |||
<div class="col-sm-6 text-right"> | |||
<input class="form-control column-width input-sm text-right" | |||
value="{%= widths[f.fieldname] || "" %}" | |||
data-fieldname="{%= f.fieldname %}" | |||
{% if(in_list(columns, f.fieldname)) { %}checked{% } %}> | |||
{%= f.label %} | |||
</label> | |||
style="width: 100px; display: inline" | |||
{%= selected ? "" : "disabled" %}> | |||
</div> | |||
</div> | |||
{% } %} | |||
{% } %} | |||
@@ -1,13 +1,23 @@ | |||
<div class="print-format-builder-field" | |||
data-fieldname="{%= field.fieldname %}" | |||
data-label="{%= field.label %}" | |||
data-fieldtype="{%= field.fieldtype %}" | |||
{% if(field.fieldtype==="Table") { %} | |||
data-columns="{%= me.visible_columns[field.options].join(",") %}" | |||
data-columns="{%= me.get_visible_columns_string(field) %}" | |||
data-doctype="{%= field.options %}" | |||
{% } %}> | |||
<span>{%= field.label %}</span> | |||
{% if(field.fieldtype==="Table") { %} | |||
<span> ({%= __("Table") %})</span> | |||
<a class="pull-right select-columns btn btn-default btn-xs">Select Columns</a> | |||
{% if(field.fieldtype==="Custom HTML") { %} | |||
<div class="text-right"> | |||
<a class="edit-html btn btn-default btn-xs"> | |||
{%= __("Edit HTML") %}</a> | |||
</div> | |||
<div class="html-content">{%= field.options || me.get_no_content() %}</div> | |||
{% } else { %} | |||
<span>{%= field.label %}</span> | |||
{% if(field.fieldtype==="Table") { %} | |||
<span> ({%= __("Table") %})</span> | |||
<a class="pull-right select-columns btn btn-default btn-xs"> | |||
{%= __("Select Columns") %}</a> | |||
{% } %} | |||
{% } %} | |||
</div> |
@@ -1,7 +1,8 @@ | |||
<div class="print-format-builder-section row light-bg"> | |||
<div class="print-format-builder-section-head"> | |||
<a class="section-settings pull-right | |||
btn-default btn-xs">Settings</a> | |||
btn-default btn-xs"> | |||
<span class="octicon octicon-gear text-muted"></span></a> | |||
<span class="octicon octicon-three-bars drag-handle"></span> | |||
</div> | |||
{% for(var j=0; j < section.columns.length; j++) { | |||
@@ -1,4 +1,4 @@ | |||
<div class="panel-bg" style="padding: 10px; margin-right: -30px;"> | |||
<div class="panel-bg" style="padding: 10px; margin-right: -15px; margin-bottom: 10px;"> | |||
<input type="text" class="form-control input-sm filter-fields" name="filter-fields" | |||
placeholder="{%= __("Filter...") %}"> | |||
</div> | |||
@@ -7,7 +7,8 @@ | |||
{% if(!in_list(["Section Break", "Column Break", "Fold"], f.fieldtype)) { %} | |||
<div class="print-format-builder-field-placeholder text-ellipsis" | |||
data-fieldname="{%= f.fieldname %}"> | |||
<span class="label label-default" | |||
<span class="btn btn-xs | |||
{%= (f.fieldtype==="Custom HTML") ? "btn-info" : "btn-default" %}" | |||
style="cursor: grab; display: inline-block"> | |||
{%= f.label %} | |||
</span> | |||
@@ -303,10 +303,15 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ | |||
.attr("data-fieldtype", this.df.fieldtype) | |||
.attr("data-fieldname", this.df.fieldname) | |||
.attr("placeholder", this.df.placeholder || "") | |||
if(this.doctype) | |||
if(this.doctype) { | |||
this.$input.attr("data-doctype", this.doctype); | |||
if(this.df.input_css) | |||
} | |||
if(this.df.input_css) { | |||
this.$input.css(this.df.input_css); | |||
} | |||
if(this.df.input_class) { | |||
this.$input.addClass(this.df.input_class); | |||
} | |||
}, | |||
set_input: function(val) { | |||
this.$input && this.$input.val(this.format_for_input(val)); | |||
@@ -44,7 +44,7 @@ frappe.ui.form.LinkedWith = Class.extend({ | |||
return; | |||
} | |||
this.dialog.onshow = function() { | |||
this.dialog.on_page_show = function() { | |||
me.dialog.fields_dict.list.$wrapper.html('<div class="text-muted text-center">' | |||
+ __("Loading") + '...</div>'); | |||
@@ -243,11 +243,13 @@ $.extend(frappe.model, { | |||
if(doc && doc[fieldname] !== value) { | |||
doc[fieldname] = value; | |||
frappe.model.trigger(fieldname, value, doc); | |||
setTimeout(function() { console.log(doc[fieldname]) }, 100); | |||
return true; | |||
} else { | |||
// execute link triggers (want to reselect to execute triggers) | |||
if(fieldtype=="Link") | |||
if(fieldtype=="Link") { | |||
frappe.model.trigger(fieldname, value, doc); | |||
} | |||
} | |||
}, | |||
@@ -56,16 +56,20 @@ frappe.ui.Dialog = frappe.ui.FieldGroup.extend({ | |||
console.log("Dialog: unable to focus on first input: " + e); | |||
} | |||
} | |||
me.onshow && me.onshow(); | |||
me.on_page_show && me.on_page_show(); | |||
}) | |||
}, | |||
get_primary_btn: function() { | |||
return this.$wrapper.find(".modal-header .btn-primary").removeClass("hide"); | |||
return this.$wrapper.find(".modal-header .btn-primary"); | |||
}, | |||
set_primary_action: function(label, click) { | |||
return this.get_primary_btn().html(label).click(click); | |||
this.has_primary_action = true; | |||
return this.get_primary_btn() | |||
.removeClass("hide") | |||
.html(label) | |||
.click(click); | |||
}, | |||
make_head: function() { | |||
var me = this; | |||
@@ -19,11 +19,10 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({ | |||
this.refresh(); | |||
// set default | |||
$.each(this.fields_list, function(i, f) { | |||
if(f.df["default"]) f.set_input(f.df["default"]); | |||
if(f.df["default"]) | |||
f.set_input(f.df["default"]); | |||
}) | |||
if(!this.no_submit_on_enter) { | |||
$(this.body).find("[data-fieldtype='Button']").filter(":first") | |||
.removeClass("btn-default").addClass("btn-primary"); | |||
this.catch_enter_as_submit(); | |||
} | |||
} | |||
@@ -33,8 +32,10 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({ | |||
var me = this; | |||
$(this.body).find('input[type="text"], input[type="password"]').keypress(function(e) { | |||
if(e.which==13) { | |||
e.preventDefault(); | |||
$(me.body).find('.btn-primary:first').click(); | |||
if(this.has_primary_action) { | |||
e.preventDefault(); | |||
this.get_primary_btn().trigger("click"); | |||
} | |||
} | |||
}); | |||
}, | |||
@@ -108,6 +108,7 @@ frappe.ui.Page = Class.extend({ | |||
label = this.get_icon_label(icon, label); | |||
} | |||
this.clear_primary_action(); | |||
this.btn_primary.removeClass("hide").prop("disabled", false).html(label).on("click", click); | |||
}, | |||
@@ -120,7 +121,7 @@ frappe.ui.Page = Class.extend({ | |||
}, | |||
clear_primary_action: function() { | |||
this.btn_primary.addClass("hide"); | |||
this.btn_primary.addClass("hide").unbind("click"); | |||
}, | |||
clear_actions: function() { | |||
@@ -18,7 +18,7 @@ frappe.ui.misc.about = function() { | |||
frappe.ui.misc.about_dialog = d; | |||
frappe.ui.misc.about_dialog.onshow = function() { | |||
frappe.ui.misc.about_dialog.on_page_show = function() { | |||
if(!frappe.versions) { | |||
frappe.call({ | |||
method: "frappe.get_versions", | |||
@@ -148,7 +148,7 @@ frappe.views.CommunicationComposer = Class.extend({ | |||
} | |||
} | |||
this.dialog.onshow = function() { | |||
this.dialog.on_page_show = function() { | |||
if (cur_frm && cur_frm.docname && !me.txt && | |||
(frappe.last_edited_communication[cur_frm.doctype] || {})[cur_frm.docname]) { | |||
@@ -20,16 +20,12 @@ frappe.views.Container = Class.extend({ | |||
$("body").attr("data-route", frappe.get_route_str()); | |||
}); | |||
}, | |||
add_page: function(label, onshow, onhide) { | |||
add_page: function(label) { | |||
var page = $('<div class="content page-container"></div>') | |||
.attr('id', "page-" + label) | |||
.attr("data-page-route", label) | |||
.toggle(false) | |||
.appendTo(this.container).get(0); | |||
if(onshow) | |||
$(page).bind('show', onshow); | |||
if(onshow) | |||
$(page).bind('hide', onhide); | |||
page.label = label; | |||
frappe.pages[label] = page; | |||
@@ -78,20 +78,18 @@ frappe.views.Page = Class.extend({ | |||
frappe.dom.set_style(this.pagedoc.style || ''); | |||
} | |||
this.trigger('onload'); | |||
this.trigger_page_event('on_page_load'); | |||
// set events | |||
$(this.wrapper).bind('show', function() { | |||
$(this.wrapper).on('show', function() { | |||
cur_frm = null; | |||
me.trigger('onshow'); | |||
me.trigger('refresh'); | |||
me.trigger_page_event('on_page_show'); | |||
me.trigger_page_event('refresh'); | |||
}); | |||
}, | |||
trigger: function(eventname) { | |||
trigger_page_event: function(eventname) { | |||
var me = this; | |||
if(pscript[eventname+'_'+this.name]) { | |||
pscript[eventname+'_'+this.name](me.wrapper); | |||
} else if(me.wrapper[eventname]) { | |||
if(me.wrapper[eventname]) { | |||
me.wrapper[eventname](me.wrapper); | |||
} | |||
} | |||
@@ -207,6 +207,9 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) { | |||
frappe.model.set_value(me.doctype, me.doc.name, f, v); | |||
} | |||
} | |||
} else { | |||
msgprint("Field " + f + " not found."); | |||
throw "frm.set_value"; | |||
} | |||
} | |||
@@ -7,10 +7,6 @@ frappe.provide('frappe.utils'); | |||
frappe.provide('frappe.model'); | |||
frappe.provide('frappe.user'); | |||
frappe.provide('frappe.session'); | |||
frappe.provide('_f'); | |||
frappe.provide('_p'); | |||
frappe.provide('_r'); | |||
frappe.provide('_startup_data') | |||
frappe.provide('locals') | |||
frappe.provide('locals.DocType') | |||
@@ -29,8 +25,6 @@ var user_fullname=null; | |||
var user_email=null; | |||
var user_img = {}; | |||
var pscript = {}; | |||
// Name Spaces | |||
// ============ | |||
@@ -43,4 +37,3 @@ var FILTER_SEP = '\1'; | |||
// API globals | |||
var frms={}; | |||
var cur_frm=null; | |||
var pscript = {}; |
@@ -32,7 +32,6 @@ function new_doc(doctype, in_form) { | |||
} | |||
var newdoc = new_doc; | |||
var pscript={}; | |||
function loadpage(page_name, call_back, no_history) { | |||
frappe.set_route(page_name); | |||
} | |||
@@ -84,7 +84,7 @@ $.extend(_p, { | |||
); | |||
}); | |||
dialog.onshow = function() { | |||
dialog.on_page_show = function() { | |||
var $print = dialog.fields_dict.print_format.$input; | |||
$print.empty().add_options(cur_frm.print_preview.print_formats); | |||