Lint and fix JS filesversion-14
@@ -0,0 +1,9 @@ | |||||
frappe/public/js/lib/* | |||||
frappe/public/js/frappe/misc/tests/* | |||||
frappe/public/js/frappe/views/test_runner.js | |||||
frappe/core/doctype/doctype/boilerplate/* | |||||
frappe/core/doctype/report/boilerplate/* | |||||
frappe/public/js/frappe/class.js | |||||
frappe/templates/includes/* | |||||
frappe/tests/testcafe/* | |||||
frappe/www/website_script.js |
@@ -0,0 +1,119 @@ | |||||
{ | |||||
"env": { | |||||
"browser": true, | |||||
"node": true, | |||||
"es6": true | |||||
}, | |||||
"extends": "eslint:recommended", | |||||
"rules": { | |||||
"indent": [ | |||||
"error", | |||||
"tab", | |||||
{ "SwitchCase": 1 } | |||||
], | |||||
"linebreak-style": [ | |||||
"error", | |||||
"unix" | |||||
], | |||||
"quotes": [ | |||||
"off" | |||||
], | |||||
"semi": [ | |||||
"warn", | |||||
"always" | |||||
], | |||||
"no-unused-vars": [ | |||||
"warn" | |||||
], | |||||
"no-redeclare": [ | |||||
"warn" | |||||
], | |||||
"no-console": [ | |||||
"warn" | |||||
], | |||||
"no-extra-boolean-cast": [ | |||||
"off" | |||||
], | |||||
"no-control-regex": [ | |||||
"off" | |||||
] | |||||
}, | |||||
"root": true, | |||||
"globals": { | |||||
"frappe": true, | |||||
"$": true, | |||||
"jQuery": true, | |||||
"moment": true, | |||||
"hljs": true, | |||||
"Awesomplete": true, | |||||
"CalHeatMap": true, | |||||
"Sortable": true, | |||||
"Showdown": true, | |||||
"Taggle": true, | |||||
"Gantt": true, | |||||
"Slick": true, | |||||
"PhotoSwipe": true, | |||||
"PhotoSwipeUI_Default": true, | |||||
"fluxify": true, | |||||
"io": true, | |||||
"c3": true, | |||||
"__": true, | |||||
"_p": true, | |||||
"_f": true, | |||||
"repl": true, | |||||
"Class": true, | |||||
"locals": true, | |||||
"cint": true, | |||||
"cstr": true, | |||||
"cur_frm": true, | |||||
"cur_dialog": true, | |||||
"cur_page": true, | |||||
"cur_list": true, | |||||
"cur_tree": true, | |||||
"msg_dialog": true, | |||||
"is_null": true, | |||||
"in_list": true, | |||||
"has_common": true, | |||||
"has_words": true, | |||||
"validate_email": true, | |||||
"get_number_format": true, | |||||
"format_number": true, | |||||
"format_currency": true, | |||||
"comment_when": true, | |||||
"replace_newlines": true, | |||||
"open_url_post": true, | |||||
"toTitle": true, | |||||
"lstrip": true, | |||||
"strip": true, | |||||
"strip_html": true, | |||||
"replace_all": true, | |||||
"flt": true, | |||||
"precision": true, | |||||
"md5": true, | |||||
"CREATE": true, | |||||
"AMEND": true, | |||||
"CANCEL": true, | |||||
"copy_dict": true, | |||||
"get_number_format_info": true, | |||||
"print_table": true, | |||||
"Layout": true, | |||||
"web_form_settings": true, | |||||
"$c": true, | |||||
"$a": true, | |||||
"$i": true, | |||||
"$bg": true, | |||||
"$y": true, | |||||
"$c_obj": true, | |||||
"refresh_many": true, | |||||
"refresh_field": true, | |||||
"toggle_field": true, | |||||
"get_field_obj": true, | |||||
"get_query_params": true, | |||||
"unhide_field": true, | |||||
"hide_field": true, | |||||
"set_field_options": true, | |||||
"getCookie": true, | |||||
"getCookies": true, | |||||
"get_url_arg": true | |||||
} | |||||
} |
@@ -25,7 +25,7 @@ const action = process.argv[2] || '--build'; | |||||
if (['--build', '--watch'].indexOf(action) === -1) { | if (['--build', '--watch'].indexOf(action) === -1) { | ||||
console.log('Invalid argument: ', action); | console.log('Invalid argument: ', action); | ||||
return; | |||||
process.exit(); | |||||
} | } | ||||
if (action === '--build') { | if (action === '--build') { | ||||
@@ -33,7 +33,7 @@ frappe.ui.form.on("Communication", { | |||||
if(frm.doc.communication_type == "Feedback") { | if(frm.doc.communication_type == "Feedback") { | ||||
frm.add_custom_button(__("Resend"), function() { | frm.add_custom_button(__("Resend"), function() { | ||||
feedback = new frappe.utils.Feedback(); | |||||
var feedback = new frappe.utils.Feedback(); | |||||
feedback.resend_feedback_request(frm.doc); | feedback.resend_feedback_request(frm.doc); | ||||
}); | }); | ||||
} | } | ||||
@@ -111,7 +111,7 @@ frappe.ui.form.on("Communication", { | |||||
d.set_value("reference_doctype", frm.doc.reference_doctype); | d.set_value("reference_doctype", frm.doc.reference_doctype); | ||||
d.set_value("reference_name", frm.doc.reference_name); | d.set_value("reference_name", frm.doc.reference_name); | ||||
d.set_primary_action(__("Relink"), function () { | d.set_primary_action(__("Relink"), function () { | ||||
values = d.get_values(); | |||||
var values = d.get_values(); | |||||
if (values) { | if (values) { | ||||
frappe.confirm( | frappe.confirm( | ||||
__('Are you sure you want to relink this communication to {0}?', [values["reference_name"]]), | __('Are you sure you want to relink this communication to {0}?', [values["reference_name"]]), | ||||
@@ -130,7 +130,7 @@ frappe.ui.form.on("Communication", { | |||||
}); | }); | ||||
}, | }, | ||||
function () { | function () { | ||||
show_alert('Document not Relinked') | |||||
frappe.show_alert('Document not Relinked') | |||||
} | } | ||||
); | ); | ||||
} | } | ||||
@@ -139,8 +139,8 @@ frappe.ui.form.on("Communication", { | |||||
}, | }, | ||||
mark_as_read_unread: function(frm) { | mark_as_read_unread: function(frm) { | ||||
action = frm.doc.seen? "Unread": "Read"; | |||||
flag = "(\\SEEN)"; | |||||
var action = frm.doc.seen? "Unread": "Read"; | |||||
var flag = "(\\SEEN)"; | |||||
return frappe.call({ | return frappe.call({ | ||||
method: "frappe.email.inbox.create_email_flag_queue", | method: "frappe.email.inbox.create_email_flag_queue", | ||||
@@ -154,7 +154,7 @@ frappe.ui.form.on("Communication", { | |||||
}, | }, | ||||
reply: function(frm) { | reply: function(frm) { | ||||
args = frm.events.get_mail_args(frm); | |||||
var args = frm.events.get_mail_args(frm); | |||||
$.extend(args, { | $.extend(args, { | ||||
subject: __("Re: {0}", [frm.doc.subject]), | subject: __("Re: {0}", [frm.doc.subject]), | ||||
recipients: frm.doc.sender | recipients: frm.doc.sender | ||||
@@ -164,7 +164,7 @@ frappe.ui.form.on("Communication", { | |||||
}, | }, | ||||
reply_all: function(frm) { | reply_all: function(frm) { | ||||
args = frm.events.get_mail_args(frm) | |||||
var args = frm.events.get_mail_args(frm) | |||||
$.extend(args, { | $.extend(args, { | ||||
subject: __("Re: {0}", [frm.doc.subject]), | subject: __("Re: {0}", [frm.doc.subject]), | ||||
recipients: frm.doc.sender, | recipients: frm.doc.sender, | ||||
@@ -174,7 +174,7 @@ frappe.ui.form.on("Communication", { | |||||
}, | }, | ||||
forward_mail: function(frm) { | forward_mail: function(frm) { | ||||
args = frm.events.get_mail_args(frm) | |||||
var args = frm.events.get_mail_args(frm) | |||||
$.extend(args, { | $.extend(args, { | ||||
forward: true, | forward: true, | ||||
subject: __("Fw: {0}", [frm.doc.subject]), | subject: __("Fw: {0}", [frm.doc.subject]), | ||||
@@ -184,7 +184,7 @@ frappe.ui.form.on("Communication", { | |||||
}, | }, | ||||
get_mail_args: function(frm) { | get_mail_args: function(frm) { | ||||
sender_email_id = "" | |||||
var sender_email_id = "" | |||||
$.each(frappe.boot.email_accounts, function(idx, account) { | $.each(frappe.boot.email_accounts, function(idx, account) { | ||||
if(account.email_account == frm.doc.email_account) { | if(account.email_account == frm.doc.email_account) { | ||||
sender_email_id = account.email_id | sender_email_id = account.email_id | ||||
@@ -202,11 +202,11 @@ frappe.ui.form.on("Communication", { | |||||
add_to_contact: function(frm) { | add_to_contact: function(frm) { | ||||
var me = this; | var me = this; | ||||
fullname = frm.doc.sender_full_name || "" | |||||
var fullname = frm.doc.sender_full_name || "" | |||||
names = fullname.split(" ") | |||||
first_name = names[0] | |||||
last_name = names.length >= 2? names[names.length - 1]: "" | |||||
var names = fullname.split(" ") | |||||
var first_name = names[0] | |||||
var last_name = names.length >= 2? names[names.length - 1]: "" | |||||
frappe.route_options = { | frappe.route_options = { | ||||
"email_id": frm.doc.sender, | "email_id": frm.doc.sender, | ||||
@@ -9,7 +9,7 @@ frappe.listview_settings['Communication'] = { | |||||
filters: [["status", "=", "Open"]], | filters: [["status", "=", "Open"]], | ||||
onload: function(list_view) { | onload: function(list_view) { | ||||
method = "frappe.email.inbox.create_email_flag_queue" | |||||
var method = "frappe.email.inbox.create_email_flag_queue" | |||||
list_view.page.add_menu_item(__("Mark as Read"), function() { | list_view.page.add_menu_item(__("Mark as Read"), function() { | ||||
list_view.call_for_selected_items(method, { action: "Read" }) | list_view.call_for_selected_items(method, { action: "Read" }) | ||||
@@ -1,3 +1,4 @@ | |||||
/* eslint-disable */ | |||||
frappe.listview_settings['{doctype}'] = {{ | frappe.listview_settings['{doctype}'] = {{ | ||||
add_fields: ["status"], | add_fields: ["status"], | ||||
filters:[["status","=", "Open"]] | filters:[["status","=", "Open"]] | ||||
@@ -13,7 +13,7 @@ | |||||
frappe.ui.form.on('DocType', { | frappe.ui.form.on('DocType', { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
if(frm.is_new() && (user !== "Administrator" || !frappe.boot.developer_mode)) { | |||||
if(frm.is_new() && (frappe.session.user !== "Administrator" || !frappe.boot.developer_mode)) { | |||||
frm.set_value("custom", 1); | frm.set_value("custom", 1); | ||||
frm.toggle_enable("custom", 0); | frm.toggle_enable("custom", 0); | ||||
} | } | ||||
@@ -1,9 +1,9 @@ | |||||
frappe.listview_settings['Error Log'] = { | frappe.listview_settings['Error Log'] = { | ||||
add_fields: ["seen"], | add_fields: ["seen"], | ||||
get_indicator: function(doc) { | get_indicator: function(doc) { | ||||
if(cint(doc.seen)) { | |||||
if(cint(doc.seen)) { | |||||
return [__("Seen"), "green", "seen,=,1"]; | return [__("Seen"), "green", "seen,=,1"]; | ||||
} else { | |||||
} else { | |||||
return [__("Not Seen"), "red", "seen,=,0"]; | return [__("Not Seen"), "red", "seen,=,0"]; | ||||
} | } | ||||
}, | }, | ||||
@@ -1,9 +1,9 @@ | |||||
frappe.ui.form.on("Error Snapshot", "load", function(frm){ | frappe.ui.form.on("Error Snapshot", "load", function(frm){ | ||||
frm.set_read_only(true); | |||||
frm.set_read_only(true); | |||||
}); | }); | ||||
frappe.ui.form.on("Error Snapshot", "refresh", function(frm){ | frappe.ui.form.on("Error Snapshot", "refresh", function(frm){ | ||||
frm.set_df_property("view", "options", frappe.render_template("error_snapshot", {"doc": frm.doc})); | |||||
frm.set_df_property("view", "options", frappe.render_template("error_snapshot", {"doc": frm.doc})); | |||||
if (frm.doc.relapses) { | if (frm.doc.relapses) { | ||||
frm.add_custom_button(__('Show Relapses'), function() { | frm.add_custom_button(__('Show Relapses'), function() { | ||||
@@ -1,14 +1,14 @@ | |||||
frappe.listview_settings["Error Snapshot"] = { | frappe.listview_settings["Error Snapshot"] = { | ||||
add_fields: ["parent_error_snapshot", "relapses", "seen"], | |||||
filters:[ | |||||
["parent_error_snapshot","=",null], | |||||
["seen", "=", false] | |||||
], | |||||
get_indicator: function(doc){ | |||||
if (doc.parent_error_snapshot && doc.parent_error_snapshot.length){ | |||||
return [__("Relapsed"), !doc.seen ? "orange" : "blue", "parent_error_snapshot,!=,"]; | |||||
} else { | |||||
return [__("First Level"), !doc.seen ? "red" : "green", "parent_error_snapshot,=,"]; | |||||
} | |||||
} | |||||
add_fields: ["parent_error_snapshot", "relapses", "seen"], | |||||
filters:[ | |||||
["parent_error_snapshot","=",null], | |||||
["seen", "=", false] | |||||
], | |||||
get_indicator: function(doc){ | |||||
if (doc.parent_error_snapshot && doc.parent_error_snapshot.length){ | |||||
return [__("Relapsed"), !doc.seen ? "orange" : "blue", "parent_error_snapshot,!=,"]; | |||||
} else { | |||||
return [__("First Level"), !doc.seen ? "red" : "green", "parent_error_snapshot,=,"]; | |||||
} | |||||
} | |||||
} | } |
@@ -3,7 +3,7 @@ | |||||
frappe.ui.form.on('Feedback Request', { | frappe.ui.form.on('Feedback Request', { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
rating_icons = frappe.render_template("rating_icons", {rating: frm.doc.rating, show_label: false}); | |||||
var rating_icons = frappe.render_template("rating_icons", {rating: frm.doc.rating, show_label: false}); | |||||
$(frm.fields_dict.feedback_rating.wrapper).html(rating_icons); | $(frm.fields_dict.feedback_rating.wrapper).html(rating_icons); | ||||
if(frm.doc.reference_doctype && frm.doc.reference_name) { | if(frm.doc.reference_doctype && frm.doc.reference_name) { | ||||
@@ -4,13 +4,13 @@ frappe.listview_settings['Feedback Request'] = { | |||||
}, | }, | ||||
column_render: { | column_render: { | ||||
rating: function(doc) { | rating: function(doc) { | ||||
html = "" | |||||
var html = "" | |||||
for (var i = 0; i < 5; i++) { | for (var i = 0; i < 5; i++) { | ||||
html += repl("<span class='indicator %(color)s'></span>", | html += repl("<span class='indicator %(color)s'></span>", | ||||
{color: i<doc.rating? "blue": "darkgrey"}) | {color: i<doc.rating? "blue": "darkgrey"}) | ||||
} | } | ||||
return html | |||||
return html; | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -37,7 +37,7 @@ frappe.ui.form.on('Feedback Trigger', { | |||||
frappe.model.with_doctype(frm.doc.document_type, function() { | frappe.model.with_doctype(frm.doc.document_type, function() { | ||||
var fields = frappe.get_doc("DocType", frm.doc.document_type).fields; | var fields = frappe.get_doc("DocType", frm.doc.document_type).fields; | ||||
$.each(fields, function(idx, field) { | $.each(fields, function(idx, field) { | ||||
if(!inList(frappe.model.no_value_type, field.fieldtype) && field.options == "Email") { | |||||
if(!in_list(frappe.model.no_value_type, field.fieldtype) && field.options == "Email") { | |||||
frm.options.push(field.label); | frm.options.push(field.label); | ||||
frm.fieldname_mapper[field.label] = field.fieldname; | frm.fieldname_mapper[field.label] = field.fieldname; | ||||
} | } | ||||
@@ -42,12 +42,12 @@ frappe.listview_settings['File'] = { | |||||
doclist.list_renderer.settings.setup_dragdrop(doclist); | doclist.list_renderer.settings.setup_dragdrop(doclist); | ||||
doclist.$page.on("click", ".list-row-checkbox", function(event) { | doclist.$page.on("click", ".list-row-checkbox", function(event) { | ||||
doclist.list_renderer.settings.add_menu_item_copy(doclist); | |||||
doclist.list_renderer.settings.add_menu_item_copy(doclist); | |||||
}) | }) | ||||
}, | }, | ||||
list_view_doc:function(doclist){ | list_view_doc:function(doclist){ | ||||
$(doclist.wrapper).on("click", 'button[list_view_doc="'+doclist.doctype+'"]', function(){ | |||||
dialog = frappe.ui.get_upload_dialog({ | |||||
$(doclist.wrapper).on("click", 'button[list_view_doc="'+doclist.doctype+'"]', function() { | |||||
frappe.ui.get_upload_dialog({ | |||||
"args": { | "args": { | ||||
"folder": doclist.current_folder, | "folder": doclist.current_folder, | ||||
"from_form": 1 | "from_form": 1 | ||||
@@ -83,7 +83,7 @@ frappe.listview_settings['File'] = { | |||||
doclist.page.add_menu_item(__("Import .zip"), function() { | doclist.page.add_menu_item(__("Import .zip"), function() { | ||||
// make upload dialog | // make upload dialog | ||||
dialog = frappe.ui.get_upload_dialog({ | |||||
frappe.ui.get_upload_dialog({ | |||||
args: { | args: { | ||||
folder: doclist.current_folder, | folder: doclist.current_folder, | ||||
from_form: 1 | from_form: 1 | ||||
@@ -197,7 +197,7 @@ frappe.listview_settings['File'] = { | |||||
set_primary_action:function(doclist){ | set_primary_action:function(doclist){ | ||||
doclist.page.clear_primary_action(); | doclist.page.clear_primary_action(); | ||||
doclist.page.set_primary_action(__("New"), function() { | doclist.page.set_primary_action(__("New"), function() { | ||||
dialog = frappe.ui.get_upload_dialog({ | |||||
frappe.ui.get_upload_dialog({ | |||||
"args": { | "args": { | ||||
"folder": doclist.current_folder, | "folder": doclist.current_folder, | ||||
"from_form": 1 | "from_form": 1 | ||||
@@ -1,5 +1,6 @@ | |||||
// Copyright (c) 2016, {app_publisher} and contributors | // Copyright (c) 2016, {app_publisher} and contributors | ||||
// For license information, please see license.txt | // For license information, please see license.txt | ||||
/* eslint-disable */ | |||||
frappe.query_reports["{name}"] = {{ | frappe.query_reports["{name}"] = {{ | ||||
"filters": [ | "filters": [ | ||||
@@ -39,8 +39,8 @@ frappe.ui.form.on('Role Permission for Page and Report', { | |||||
}, | }, | ||||
clear_fields: function(frm) { | clear_fields: function(frm) { | ||||
field = (frm.doc.set_role_for == 'Report') ? 'page' : 'report'; | |||||
frm.set_value(field, '') | |||||
var field = (frm.doc.set_role_for == 'Report') ? 'page' : 'report'; | |||||
frm.set_value(field, ''); | |||||
}, | }, | ||||
page: function(frm) { | page: function(frm) { | ||||
@@ -7,16 +7,16 @@ frappe.ui.form.on("System Settings", "refresh", function(frm) { | |||||
$.each(data.message.defaults, function(key, val) { | $.each(data.message.defaults, function(key, val) { | ||||
frm.set_value(key, val); | frm.set_value(key, val); | ||||
sys_defaults[key] = val; | |||||
frappe.sys_defaults[key] = val; | |||||
}) | }) | ||||
} | } | ||||
}); | }); | ||||
}); | }); | ||||
frappe.ui.form.on("System Settings", "enable_password_policy", function(frm) { | frappe.ui.form.on("System Settings", "enable_password_policy", function(frm) { | ||||
if(frm.doc.enable_password_policy == 0){ | |||||
frm.set_value("minimum_password_score", ""); | |||||
}else{ | |||||
frm.set_value("minimum_password_score", "2"); | |||||
} | |||||
if(frm.doc.enable_password_policy == 0){ | |||||
frm.set_value("minimum_password_score", ""); | |||||
} else { | |||||
frm.set_value("minimum_password_score", "2"); | |||||
} | |||||
}); | }); |
@@ -18,7 +18,7 @@ frappe.ui.form.on('User', { | |||||
}, | }, | ||||
onload: function(frm) { | onload: function(frm) { | ||||
if(has_common(roles, ["Administrator", "System Manager"]) && !frm.doc.__islocal) { | |||||
if(has_common(frappe.user_roles, ["Administrator", "System Manager"]) && !frm.doc.__islocal) { | |||||
if(!frm.roles_editor) { | if(!frm.roles_editor) { | ||||
var role_area = $('<div style="min-height: 300px">') | var role_area = $('<div style="min-height: 300px">') | ||||
.appendTo(frm.fields_dict.roles_html.wrapper); | .appendTo(frm.fields_dict.roles_html.wrapper); | ||||
@@ -35,11 +35,11 @@ frappe.ui.form.on('User', { | |||||
refresh: function(frm) { | refresh: function(frm) { | ||||
var doc = frm.doc; | var doc = frm.doc; | ||||
if(doc.name===user && !doc.__unsaved | |||||
if(doc.name===frappe.session.user && !doc.__unsaved | |||||
&& frappe.all_timezones | && frappe.all_timezones | ||||
&& (doc.language || frappe.boot.user.language) | && (doc.language || frappe.boot.user.language) | ||||
&& doc.language !== frappe.boot.user.language) { | && doc.language !== frappe.boot.user.language) { | ||||
msgprint(__("Refreshing...")); | |||||
frappe.msgprint(__("Refreshing...")); | |||||
window.location.reload(); | window.location.reload(); | ||||
} | } | ||||
@@ -53,7 +53,7 @@ frappe.ui.form.on('User', { | |||||
frappe.set_route("modules_setup"); | frappe.set_route("modules_setup"); | ||||
}, null, "btn-default") | }, null, "btn-default") | ||||
if(has_common(roles, ["Administrator", "System Manager"])) { | |||||
if(has_common(frappe.user_roles, ["Administrator", "System Manager"])) { | |||||
frm.add_custom_button(__("Set User Permissions"), function() { | frm.add_custom_button(__("Set User Permissions"), function() { | ||||
frappe.route_options = { | frappe.route_options = { | ||||
@@ -79,10 +79,10 @@ frappe.ui.form.on('User', { | |||||
frm.roles_editor && frm.roles_editor.show(); | frm.roles_editor && frm.roles_editor.show(); | ||||
frm.module_editor && frm.module_editor.refresh(); | frm.module_editor && frm.module_editor.refresh(); | ||||
if(user==doc.name) { | |||||
if(frappe.session.user==doc.name) { | |||||
// update display settings | // update display settings | ||||
if(doc.user_image) { | if(doc.user_image) { | ||||
frappe.boot.user_info[user].image = frappe.utils.get_file_link(doc.user_image); | |||||
frappe.boot.user_info[frappe.session.user].image = frappe.utils.get_file_link(doc.user_image); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -102,11 +102,10 @@ frappe.ui.form.on('User', { | |||||
if (frappe.route_flags.unsaved===1){ | if (frappe.route_flags.unsaved===1){ | ||||
delete frappe.route_flags.unsaved; | delete frappe.route_flags.unsaved; | ||||
for ( var i=0;i<frm.doc.user_emails.length;i++){ | |||||
for ( var i=0;i<frm.doc.user_emails.length;i++) { | |||||
frm.doc.user_emails[i].idx=frm.doc.user_emails[i].idx+1; | frm.doc.user_emails[i].idx=frm.doc.user_emails[i].idx+1; | ||||
} | } | ||||
frm.doc.email_account | |||||
cur_frm.dirty(); | |||||
cur_frm.dirty(); | |||||
} | } | ||||
}, | }, | ||||
validate: function(frm) { | validate: function(frm) { | ||||
@@ -116,12 +115,12 @@ frappe.ui.form.on('User', { | |||||
}, | }, | ||||
enabled: function(frm) { | enabled: function(frm) { | ||||
var doc = frm.doc; | var doc = frm.doc; | ||||
if(!doc.__islocal && has_common(roles, ["Administrator", "System Manager"])) { | |||||
if(!doc.__islocal && has_common(frappe.user_roles, ["Administrator", "System Manager"])) { | |||||
frm.toggle_display(['sb1', 'sb3', 'modules_access'], doc.enabled); | frm.toggle_display(['sb1', 'sb3', 'modules_access'], doc.enabled); | ||||
frm.set_df_property('enabled', 'read_only', 0); | frm.set_df_property('enabled', 'read_only', 0); | ||||
} | } | ||||
if(user!="Administrator") { | |||||
if(frappe.session.user!=="Administrator") { | |||||
frm.toggle_enable('email', doc.__islocal); | frm.toggle_enable('email', doc.__islocal); | ||||
} | } | ||||
}, | }, | ||||
@@ -177,6 +176,7 @@ frappe.ModuleEditor = Class.extend({ | |||||
}); | }); | ||||
}, | }, | ||||
bind: function() { | bind: function() { | ||||
var me = this; | |||||
this.wrapper.on("change", ".block-module-check", function() { | this.wrapper.on("change", ".block-module-check", function() { | ||||
var module = $(this).attr('data-module'); | var module = $(this).attr('data-module'); | ||||
if($(this).prop("checked")) { | if($(this).prop("checked")) { | ||||
@@ -22,7 +22,7 @@ frappe.DataImportTool = Class.extend({ | |||||
} | } | ||||
if(in_list(frappe.boot.user.can_import, doctype)) { | if(in_list(frappe.boot.user.can_import, doctype)) { | ||||
this.select.val(doctype).change(); | |||||
this.select.val(doctype).change(); | |||||
} | } | ||||
frappe.route_options = null; | frappe.route_options = null; | ||||
@@ -129,12 +129,12 @@ frappe.DataImportTool = Class.extend({ | |||||
queued: function() { | queued: function() { | ||||
// async, show queued | // async, show queued | ||||
msg_dialog.clear(); | msg_dialog.clear(); | ||||
msgprint(__("Import Request Queued. This may take a few moments, please be patient.")); | |||||
frappe.msgprint(__("Import Request Queued. This may take a few moments, please be patient.")); | |||||
}, | }, | ||||
running: function() { | running: function() { | ||||
// update async status as running | // update async status as running | ||||
msg_dialog.clear(); | msg_dialog.clear(); | ||||
msgprint(__("Importing...")); | |||||
frappe.msgprint(__("Importing...")); | |||||
me.write_messages([__("Importing")]); | me.write_messages([__("Importing")]); | ||||
me.has_progress = false; | me.has_progress = false; | ||||
}, | }, | ||||
@@ -74,16 +74,16 @@ $.extend(frappe.desktop, { | |||||
// TEMP: test activiation without this message. | // TEMP: test activiation without this message. | ||||
return; | return; | ||||
if(!frappe.user.has_role('System Manager')) { | |||||
return; | |||||
} | |||||
frappe.call({ | |||||
method: 'frappe.core.page.desktop.desktop.get_help_messages', | |||||
callback: function(r) { | |||||
frappe.desktop.render_help_messages(r.message); | |||||
} | |||||
}); | |||||
// if(!frappe.user.has_role('System Manager')) { | |||||
// return; | |||||
// } | |||||
// frappe.call({ | |||||
// method: 'frappe.core.page.desktop.desktop.get_help_messages', | |||||
// callback: function(r) { | |||||
// frappe.desktop.render_help_messages(r.message); | |||||
// } | |||||
// }); | |||||
}, | }, | ||||
@@ -91,7 +91,7 @@ $.extend(frappe.desktop, { | |||||
var wrapper = frappe.desktop.wrapper.find('.help-message-wrapper'); | var wrapper = frappe.desktop.wrapper.find('.help-message-wrapper'); | ||||
var $help_messages = wrapper.find('.help-messages'); | var $help_messages = wrapper.find('.help-messages'); | ||||
set_current_message = function(idx) { | |||||
var set_current_message = function(idx) { | |||||
idx = cint(idx); | idx = cint(idx); | ||||
wrapper.current_message_idx = idx; | wrapper.current_message_idx = idx; | ||||
wrapper.find('.left-arrow, .right-arrow').addClass('disabled'); | wrapper.find('.left-arrow, .right-arrow').addClass('disabled'); | ||||
@@ -166,7 +166,7 @@ $.extend(frappe.desktop, { | |||||
} | } | ||||
return false; | return false; | ||||
} else { | } else { | ||||
module = frappe.get_module(parent.attr("data-name")); | |||||
var module = frappe.get_module(parent.attr("data-name")); | |||||
if (module && module.onclick) { | if (module && module.onclick) { | ||||
module.onclick(); | module.onclick(); | ||||
return false; | return false; | ||||
@@ -181,7 +181,7 @@ $.extend(frappe.desktop, { | |||||
new Sortable($("#icon-grid").get(0), { | new Sortable($("#icon-grid").get(0), { | ||||
onUpdate: function(event) { | onUpdate: function(event) { | ||||
new_order = []; | |||||
var new_order = []; | |||||
$("#icon-grid .case-wrapper").each(function(i, e) { | $("#icon-grid .case-wrapper").each(function(i, e) { | ||||
new_order.push($(this).attr("data-name")); | new_order.push($(this).attr("data-name")); | ||||
}); | }); | ||||
@@ -59,7 +59,7 @@ frappe.pages['modules_setup'].on_page_load = function(wrapper) { | |||||
}; | }; | ||||
// application installer | // application installer | ||||
if(frappe.boot.user.roles.indexOf('System Manager')!==-1) { | |||||
if(frappe.user_roles.includes('System Manager')) { | |||||
page.add_inner_button('Install Apps', function() { | page.add_inner_button('Install Apps', function() { | ||||
frappe.set_route('applications'); | frappe.set_route('applications'); | ||||
}); | }); | ||||
@@ -298,7 +298,7 @@ frappe.PermissionEngine = Class.extend({ | |||||
r.message = $.map(r.message, function(p) { | r.message = $.map(r.message, function(p) { | ||||
return $.format('<a href="#Form/User/{0}">{1}</a>', [p, p]); | return $.format('<a href="#Form/User/{0}">{1}</a>', [p, p]); | ||||
}) | }) | ||||
msgprint(__("Users with role {0}:", [__(role)]) | |||||
frappe.msgprint(__("Users with role {0}:", [__(role)]) | |||||
+ "<br>" + r.message.join("<br>")); | + "<br>" + r.message.join("<br>")); | ||||
} | } | ||||
}) | }) | ||||
@@ -324,7 +324,7 @@ frappe.PermissionEngine = Class.extend({ | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Did not remove")); | |||||
frappe.msgprint(__("Did not remove")); | |||||
} else { | } else { | ||||
me.refresh(); | me.refresh(); | ||||
} | } | ||||
@@ -380,7 +380,8 @@ frappe.PermissionEngine = Class.extend({ | |||||
options:me.options.roles, reqd:1,fieldname:"role"}, | options:me.options.roles, reqd:1,fieldname:"role"}, | ||||
{fieldtype:"Select", label:__("Permission Level"), | {fieldtype:"Select", label:__("Permission Level"), | ||||
options:[0,1,2,3,4,5,6,7,8,9], reqd:1, fieldname: "permlevel", | options:[0,1,2,3,4,5,6,7,8,9], reqd:1, fieldname: "permlevel", | ||||
description: __("Level 0 is for document level permissions, higher levels for field level permissions.")} | |||||
description: __("Level 0 is for document level permissions, \ | |||||
higher levels for field level permissions.")} | |||||
] | ] | ||||
}); | }); | ||||
if(me.get_doctype()) { | if(me.get_doctype()) { | ||||
@@ -404,7 +405,7 @@ frappe.PermissionEngine = Class.extend({ | |||||
args: args, | args: args, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Did not add")); | |||||
frappe.msgprint(__("Did not add")); | |||||
} else { | } else { | ||||
me.refresh(); | me.refresh(); | ||||
} | } | ||||
@@ -417,6 +418,7 @@ frappe.PermissionEngine = Class.extend({ | |||||
}, | }, | ||||
show_user_permission_doctypes: function(d) { | show_user_permission_doctypes: function(d) { | ||||
var me = this; | |||||
if (!d.dialog) { | if (!d.dialog) { | ||||
var fields = []; | var fields = []; | ||||
for (var i=0, l=d.linked_doctypes.length; i<l; i++) { | for (var i=0, l=d.linked_doctypes.length; i<l; i++) { | ||||
@@ -476,9 +478,9 @@ frappe.PermissionEngine = Class.extend({ | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Did not set")); | |||||
frappe.msgprint(__("Did not set")); | |||||
} else { | } else { | ||||
var msg = msgprint(__("Saved!")); | |||||
var msg = frappe.msgprint(__("Saved!")); | |||||
setTimeout(function() { msg.hide(); }, 3000); | setTimeout(function() { msg.hide(); }, 3000); | ||||
d.user_permission_doctypes = user_permission_doctypes; | d.user_permission_doctypes = user_permission_doctypes; | ||||
dialog.hide(); | dialog.hide(); | ||||
@@ -50,9 +50,9 @@ frappe.UserPermissions = Class.extend({ | |||||
var me = this; | var me = this; | ||||
$(this.wrapper).find(".view-role-permissions").on("click", function() { | $(this.wrapper).find(".view-role-permissions").on("click", function() { | ||||
frappe.route_options = { doctype: me.get_doctype() || "" }; | |||||
frappe.set_route("permission-manager"); | |||||
}) | |||||
frappe.route_options = { doctype: me.get_doctype() || "" }; | |||||
frappe.set_route("permission-manager"); | |||||
}) | |||||
return frappe.call({ | return frappe.call({ | ||||
module:"frappe.core", | module:"frappe.core", | ||||
@@ -82,7 +82,7 @@ frappe.UserPermissions = Class.extend({ | |||||
options: "[Select]" | options: "[Select]" | ||||
}); | }); | ||||
if(roles.indexOf("System Manager")!==-1) { | |||||
if(frappe.user_roles.includes("System Manager")) { | |||||
me.download = me.wrapper.page.add_field({ | me.download = me.wrapper.page.add_field({ | ||||
fieldname: "download", | fieldname: "download", | ||||
label: __("Download"), | label: __("Download"), | ||||
@@ -141,7 +141,7 @@ frappe.UserPermissions = Class.extend({ | |||||
primary_action: function() { | primary_action: function() { | ||||
var filedata = d.fields_dict.attach.get_value(); | var filedata = d.fields_dict.attach.get_value(); | ||||
if(!filedata) { | if(!filedata) { | ||||
msgprint(_("Please attach a file")); | |||||
frappe.msgprint(__("Please attach a file")); | |||||
return; | return; | ||||
} | } | ||||
frappe.call({ | frappe.call({ | ||||
@@ -151,7 +151,7 @@ frappe.UserPermissions = Class.extend({ | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(!r.exc) { | if(!r.exc) { | ||||
msgprint(__("Permissions Updated")); | |||||
frappe.msgprint(__("Permissions Updated")); | |||||
d.hide(); | d.hide(); | ||||
} | } | ||||
} | } | ||||
@@ -250,9 +250,11 @@ frappe.UserPermissions = Class.extend({ | |||||
$.each([[__("Allow User"), 150], [__("If Document Type"), 150], [__("Is"),150], ["", 50]], | $.each([[__("Allow User"), 150], [__("If Document Type"), 150], [__("Is"),150], ["", 50]], | ||||
function(i, col) { | function(i, col) { | ||||
$("<th>").html(col[0]).css("width", col[1]+"px") | |||||
.appendTo(me.table.find("thead tr")); | |||||
}); | |||||
$("<th>") | |||||
.html(col[0]) | |||||
.css("width", col[1]+"px") | |||||
.appendTo(me.table.find("thead tr")); | |||||
}); | |||||
$.each(this.prop_list, function(i, d) { | $.each(this.prop_list, function(i, d) { | ||||
@@ -288,7 +290,7 @@ frappe.UserPermissions = Class.extend({ | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Did not remove")); | |||||
frappe.msgprint(__("Did not remove")); | |||||
} else { | } else { | ||||
me.refresh(); | me.refresh(); | ||||
} | } | ||||
@@ -349,7 +351,7 @@ frappe.UserPermissions = Class.extend({ | |||||
args: args, | args: args, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Did not add")); | |||||
frappe.msgprint(__("Did not add")); | |||||
} else { | } else { | ||||
me.refresh(); | me.refresh(); | ||||
} | } | ||||
@@ -16,7 +16,7 @@ frappe.query_reports["Permitted Documents For User"] = { | |||||
"fieldtype": "Link", | "fieldtype": "Link", | ||||
"options": "DocType", | "options": "DocType", | ||||
"reqd": 1, | "reqd": 1, | ||||
"get_query": function() { | |||||
"get_query": function () { | |||||
return { | return { | ||||
"query": "frappe.core.report.permitted_documents_for_user.permitted_documents_for_user.query_doctypes", | "query": "frappe.core.report.permitted_documents_for_user.permitted_documents_for_user.query_doctypes", | ||||
"filters": { | "filters": { | ||||
@@ -25,10 +25,10 @@ frappe.query_reports["Permitted Documents For User"] = { | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
{ | |||||
"fieldname": "show_permissions", | |||||
"label": __("Show Permissions"), | |||||
"fieldtype": "Check" | |||||
} | |||||
{ | |||||
"fieldname": "show_permissions", | |||||
"label": __("Show Permissions"), | |||||
"fieldtype": "Check" | |||||
} | |||||
] | ] | ||||
} | } |
@@ -7,10 +7,10 @@ | |||||
frappe.ui.form.on('Custom Field', { | frappe.ui.form.on('Custom Field', { | ||||
setup: function(frm) { | setup: function(frm) { | ||||
frm.set_query('dt', function(doc) { | frm.set_query('dt', function(doc) { | ||||
filters = [ | |||||
var filters = [ | |||||
['DocType', 'issingle', '=', 0], | ['DocType', 'issingle', '=', 0], | ||||
]; | ]; | ||||
if(user!=="Administrator") { | |||||
if(frappe.session.user!=="Administrator") { | |||||
filters.push(['DocType', 'module', '!=', 'Core']) | filters.push(['DocType', 'module', '!=', 'Core']) | ||||
} | } | ||||
return { | return { | ||||
@@ -57,7 +57,7 @@ frappe.ui.form.on('Custom Field', { | |||||
fieldtype: function(frm) { | fieldtype: function(frm) { | ||||
if(frm.doc.fieldtype == 'Link') { | if(frm.doc.fieldtype == 'Link') { | ||||
frm.fields_dict['options_help'].disp_area.innerHTML = | frm.fields_dict['options_help'].disp_area.innerHTML = | ||||
__('Name of the Document Type (DocType) you want this field to be linked to. e.g. Customer'); | |||||
__('Name of the Document Type (DocType) you want this field to be linked to. e.g. Customer'); | |||||
} else if(frm.doc.fieldtype == 'Select') { | } else if(frm.doc.fieldtype == 'Select') { | ||||
frm.fields_dict['options_help'].disp_area.innerHTML = | frm.fields_dict['options_help'].disp_area.innerHTML = | ||||
__('Options for select. Each option on a new line.')+' '+__('e.g.:')+'<br>'+__('Option 1')+'<br>'+__('Option 2')+'<br>'+__('Option 3')+'<br>'; | __('Options for select. Each option on a new line.')+' '+__('e.g.:')+'<br>'+__('Option 1')+'<br>'+__('Option 2')+'<br>'+__('Option 3')+'<br>'; | ||||
@@ -14,8 +14,8 @@ frappe.ui.form.on("Customize Form", { | |||||
['DocType', 'issingle', '=', 0], | ['DocType', 'issingle', '=', 0], | ||||
['DocType', 'custom', '=', 0], | ['DocType', 'custom', '=', 0], | ||||
['DocType', 'name', 'not in', 'DocType, DocField, DocPerm, User, Role, Has Role, \ | ['DocType', 'name', 'not in', 'DocType, DocField, DocPerm, User, Role, Has Role, \ | ||||
Page, Has Role, Module Def, Print Format, Report, Customize Form, \ | |||||
Customize Form Field'] | |||||
Page, Has Role, Module Def, Print Format, Report, Customize Form, \ | |||||
Customize Form Field'] | |||||
] | ] | ||||
}; | }; | ||||
}); | }); | ||||
@@ -129,7 +129,7 @@ frappe.ui.form.on("Customize Form Field", { | |||||
before_fields_remove: function(frm, doctype, name) { | before_fields_remove: function(frm, doctype, name) { | ||||
var row = frappe.get_doc(doctype, name); | var row = frappe.get_doc(doctype, name); | ||||
if(!(row.is_custom_field || row.__islocal)) { | if(!(row.is_custom_field || row.__islocal)) { | ||||
msgprint(__("Cannot delete standard field. You can hide it if you want")); | |||||
frappe.msgprint(__("Cannot delete standard field. You can hide it if you want")); | |||||
throw "cannot delete custom field"; | throw "cannot delete custom field"; | ||||
} | } | ||||
}, | }, | ||||
@@ -171,7 +171,7 @@ frappe.customize_form.confirm = function(msg, frm) { | |||||
method: "reset_to_defaults", | method: "reset_to_defaults", | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(r.exc); | |||||
frappe.msgprint(r.exc); | |||||
} else { | } else { | ||||
d.hide(); | d.hide(); | ||||
frappe.customize_form.clear_locals_and_refresh(frm); | frappe.customize_form.clear_locals_and_refresh(frm); | ||||
@@ -262,7 +262,7 @@ frappe.customize_form.add_fields_help = function(frm) { | |||||
<td>\ | <td>\ | ||||
Show field if a condition is met<br />\ | Show field if a condition is met<br />\ | ||||
Example: <code>eval:doc.status=='Cancelled'</code>\ | Example: <code>eval:doc.status=='Cancelled'</code>\ | ||||
on a field like \"reason_for_cancellation\" will reveal \ | |||||
on a field like \"reason_for_cancellation\" will reveal \ | |||||
\"Reason for Cancellation\" only if the record is Cancelled.\ | \"Reason for Cancellation\" only if the record is Cancelled.\ | ||||
</td>\ | </td>\ | ||||
</tr>\ | </tr>\ | ||||
@@ -4,8 +4,8 @@ | |||||
$.extend(cur_frm.cscript, { | $.extend(cur_frm.cscript, { | ||||
validate: function(doc) { | validate: function(doc) { | ||||
if(doc.property_type=='Check' && !in_list(['0','1'], doc.value)) { | if(doc.property_type=='Check' && !in_list(['0','1'], doc.value)) { | ||||
msgprint(__('Value for a check field can be either 0 or 1')); | |||||
validated = false; | |||||
frappe.msgprint(__('Value for a check field can be either 0 or 1')); | |||||
frappe.validated = false; | |||||
} | } | ||||
} | } | ||||
}) | }) |
@@ -4,8 +4,8 @@ | |||||
frappe.ui.form.on("Event", { | frappe.ui.form.on("Event", { | ||||
onload: function(frm) { | onload: function(frm) { | ||||
frm.set_query("ref_type", function(txt) { | frm.set_query("ref_type", function(txt) { | ||||
return { | |||||
"filters": { | |||||
return { | |||||
"filters": { | |||||
"issingle": 0, | "issingle": 0, | ||||
} | } | ||||
}; | }; | ||||
@@ -20,8 +20,8 @@ frappe.ui.form.on("Event", { | |||||
}, | }, | ||||
repeat_on: function(frm) { | repeat_on: function(frm) { | ||||
if(frm.doc.repeat_on==="Every Day") { | if(frm.doc.repeat_on==="Every Day") { | ||||
$.each(["monday", "tuesday", "wednesday", "thursday", "friday", | |||||
"saturday", "sunday"], function(i,v) { | |||||
["monday", "tuesday", "wednesday", "thursday", | |||||
"friday", "saturday", "sunday"].map(function(v) { | |||||
frm.set_value(v, 1); | frm.set_value(v, 1); | ||||
}); | }); | ||||
} | } | ||||
@@ -35,7 +35,7 @@ frappe.ui.form.on('Kanban Board', { | |||||
field.options && field.options.split('\n').forEach(function(o, i) { | field.options && field.options.split('\n').forEach(function(o, i) { | ||||
o = o.trim(); | o = o.trim(); | ||||
if(!o) return; | if(!o) return; | ||||
d = frm.add_child('columns'); | |||||
var d = frm.add_child('columns'); | |||||
d.column_name = o; | d.column_name = o; | ||||
}); | }); | ||||
frm.refresh(); | frm.refresh(); | ||||
@@ -3,8 +3,8 @@ | |||||
frappe.ui.form.on("ToDo", { | frappe.ui.form.on("ToDo", { | ||||
onload: function(frm) { | onload: function(frm) { | ||||
frm.set_query("reference_type", function(txt) { | frm.set_query("reference_type", function(txt) { | ||||
return { | |||||
"filters": { | |||||
return { | |||||
"filters": { | |||||
"issingle": 0, | "issingle": 0, | ||||
} | } | ||||
}; | }; | ||||
@@ -1,7 +1,7 @@ | |||||
frappe.listview_settings['ToDo'] = { | frappe.listview_settings['ToDo'] = { | ||||
onload: function(me) { | onload: function(me) { | ||||
frappe.route_options = { | frappe.route_options = { | ||||
"owner": user, | |||||
"owner": frappe.session.user, | |||||
"status": "Open" | "status": "Open" | ||||
}; | }; | ||||
me.page.set_title(__("To Do")); | me.page.set_title(__("To Do")); | ||||
@@ -14,7 +14,7 @@ frappe.listview_settings['ToDo'] = { | |||||
var assign_filter = me.filter_list.get_filter("assigned_by"); | var assign_filter = me.filter_list.get_filter("assigned_by"); | ||||
assign_filter && assign_filter.remove(true); | assign_filter && assign_filter.remove(true); | ||||
me.filter_list.add_filter(me.doctype, "owner", '=', user); | |||||
me.filter_list.add_filter(me.doctype, "owner", '=', frappe.session.user); | |||||
me.run(); | me.run(); | ||||
}); | }); | ||||
@@ -23,7 +23,7 @@ frappe.listview_settings['ToDo'] = { | |||||
var assign_filter = me.filter_list.get_filter("owner"); | var assign_filter = me.filter_list.get_filter("owner"); | ||||
assign_filter && assign_filter.remove(true); | assign_filter && assign_filter.remove(true); | ||||
me.filter_list.add_filter(me.doctype, "assigned_by", '=', user); | |||||
me.filter_list.add_filter(me.doctype, "assigned_by", '=', frappe.session.user); | |||||
me.run(); | me.run(); | ||||
}, ".assigned-to-me"); | }, ".assigned-to-me"); | ||||
}, | }, | ||||
@@ -32,7 +32,7 @@ frappe.pages['activity'].on_page_load = function(wrapper) { | |||||
}, | }, | ||||
show_filters: true, | show_filters: true, | ||||
doctype: "Communication", | doctype: "Communication", | ||||
get_args: function() { | |||||
get_args: function() { | |||||
if (frappe.route_options && frappe.route_options.show_likes) { | if (frappe.route_options && frappe.route_options.show_likes) { | ||||
delete frappe.route_options.show_likes; | delete frappe.route_options.show_likes; | ||||
return { | return { | ||||
@@ -80,7 +80,7 @@ frappe.pages['activity'].on_page_load = function(wrapper) { | |||||
this.page.add_menu_item(__('Authentication Log'), function() { | this.page.add_menu_item(__('Authentication Log'), function() { | ||||
frappe.route_options = { | frappe.route_options = { | ||||
"user": user | |||||
"user": frappe.session.user | |||||
} | } | ||||
frappe.set_route('Report', "Authentication Log"); | frappe.set_route('Report', "Authentication Log"); | ||||
@@ -147,17 +147,18 @@ frappe.activity.Feed = Class.extend({ | |||||
data.feed_type = data.comment_type || data.communication_medium; | data.feed_type = data.comment_type || data.communication_medium; | ||||
}, | }, | ||||
add_date_separator: function(row, data) { | add_date_separator: function(row, data) { | ||||
var date = dateutil.str_to_obj(data.creation); | |||||
var date = frappe.datetime.str_to_obj(data.creation); | |||||
var last = frappe.activity.last_feed_date; | var last = frappe.activity.last_feed_date; | ||||
if((last && dateutil.obj_to_str(last) != dateutil.obj_to_str(date)) || (!last)) { | |||||
var diff = dateutil.get_day_diff(dateutil.get_today(), dateutil.obj_to_str(date)); | |||||
if((last && frappe.datetime.obj_to_str(last) != frappe.datetime.obj_to_str(date)) || (!last)) { | |||||
var diff = frappe.datetime.get_day_diff(frappe.datetime.get_today(), frappe.datetime.obj_to_str(date)); | |||||
var pdate; | |||||
if(diff < 1) { | if(diff < 1) { | ||||
pdate = 'Today'; | pdate = 'Today'; | ||||
} else if(diff < 2) { | } else if(diff < 2) { | ||||
pdate = 'Yesterday'; | pdate = 'Yesterday'; | ||||
} else { | } else { | ||||
pdate = dateutil.global_date_format(date); | |||||
pdate = frappe.datetime.global_date_format(date); | |||||
} | } | ||||
data.date_sep = pdate; | data.date_sep = pdate; | ||||
data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator"; | data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator"; | ||||
@@ -182,7 +183,7 @@ frappe.activity.render_heatmap = function(page) { | |||||
var legend = []; | var legend = []; | ||||
var max = Math.max.apply(this, $.map(r.message, function(v) { return v })); | var max = Math.max.apply(this, $.map(r.message, function(v) { return v })); | ||||
var legend = [cint(max/5), cint(max*2/5), cint(max*3/5), cint(max*4/5)]; | var legend = [cint(max/5), cint(max*2/5), cint(max*3/5), cint(max*4/5)]; | ||||
heatmap = new CalHeatMap(); | |||||
var heatmap = new CalHeatMap(); | |||||
heatmap.init({ | heatmap.init({ | ||||
itemSelector: ".heatmap", | itemSelector: ".heatmap", | ||||
domain: "month", | domain: "month", | ||||
@@ -21,7 +21,7 @@ frappe.applications.Installer = Class.extend({ | |||||
me.make_page(); | me.make_page(); | ||||
// no apps | // no apps | ||||
if(!keys(apps).length) { | |||||
if(!Object.keys(apps).length) { | |||||
me.wrapper.html('<div class="text-muted app-listing padding">' + __("No Apps Installed") + '</div>'); | me.wrapper.html('<div class="text-muted app-listing padding">' + __("No Apps Installed") + '</div>'); | ||||
return; | return; | ||||
} | } | ||||
@@ -5,7 +5,7 @@ frappe.pages['backups'].on_page_load = function(wrapper) { | |||||
single_column: true | single_column: true | ||||
}); | }); | ||||
page.add_inner_button(__("Set Number of Backups"), function() { | |||||
page.add_inner_button(__("Set Number of Backups"), function () { | |||||
frappe.set_route('Form', 'System Settings'); | frappe.set_route('Form', 'System Settings'); | ||||
}); | }); | ||||
@@ -40,10 +40,10 @@ frappe.Chat = Class.extend({ | |||||
setup_realtime: function() { | setup_realtime: function() { | ||||
var me = this; | var me = this; | ||||
frappe.realtime.on('new_message', function(comment) { | frappe.realtime.on('new_message', function(comment) { | ||||
if(comment.modified_by !== user || comment.communication_type === 'Bot') { | |||||
if(comment.modified_by !== frappe.session.user || comment.communication_type === 'Bot') { | |||||
if(frappe.get_route()[0] === 'chat') { | if(frappe.get_route()[0] === 'chat') { | ||||
var current_contact = $(cur_page.page).find('[data-contact]').data('contact'); | var current_contact = $(cur_page.page).find('[data-contact]').data('contact'); | ||||
var on_broadcast_page = current_contact === user; | |||||
var on_broadcast_page = current_contact === frappe.session.user; | |||||
if ((current_contact == comment.owner) | if ((current_contact == comment.owner) | ||||
|| (on_broadcast_page && comment.broadcast) | || (on_broadcast_page && comment.broadcast) | ||||
|| current_contact === 'Bot' && comment.communication_type === 'Bot') { | || current_contact === 'Bot' && comment.communication_type === 'Bot') { | ||||
@@ -220,7 +220,7 @@ frappe.Chat = Class.extend({ | |||||
if(data.owner==data.reference_name | if(data.owner==data.reference_name | ||||
&& data.communication_type!=="Notification" | && data.communication_type!=="Notification" | ||||
&& data.comment_type!=="Bot") { | && data.comment_type!=="Bot") { | ||||
data.is_public = true; | |||||
data.is_public = true; | |||||
} | } | ||||
if(data.owner==data.reference_name && data.communication_type !== "Bot") { | if(data.owner==data.reference_name && data.communication_type !== "Bot") { | ||||
@@ -63,7 +63,7 @@ frappe.pages['modules'].on_page_load = function(wrapper) { | |||||
module: module_name | module: module_name | ||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
m = frappe.get_module(module_name); | |||||
var m = frappe.get_module(module_name); | |||||
m.data = r.message.data; | m.data = r.message.data; | ||||
process_data(module_name, m.data); | process_data(module_name, m.data); | ||||
page.section_data[module_name] = m; | page.section_data[module_name] = m; | ||||
@@ -155,7 +155,7 @@ frappe.wiz.Wizard = Class.extend({ | |||||
}, 2000); | }, 2000); | ||||
}, | }, | ||||
error: function(r) { | error: function(r) { | ||||
var d = msgprint(__("There were errors.")); | |||||
var d = frappe.msgprint(__("There were errors.")); | |||||
d.custom_onhide = function() { | d.custom_onhide = function() { | ||||
frappe.set_route(me.page_name, me.slides.length - 1); | frappe.set_route(me.page_name, me.slides.length - 1); | ||||
}; | }; | ||||
@@ -229,14 +229,14 @@ frappe.wiz.WizardSlide = Class.extend({ | |||||
} | } | ||||
this.$body = $(frappe.render_template("setup_wizard_page", { | this.$body = $(frappe.render_template("setup_wizard_page", { | ||||
help: __(this.help), | |||||
title:__(this.title), | |||||
main_title:__(this.wiz.title), | |||||
step: this.id + 1, | |||||
name: this.name, | |||||
css_class: this.css_class || "", | |||||
slides_count: this.wiz.slides.length | |||||
})).appendTo(this.$wrapper); | |||||
help: __(this.help), | |||||
title:__(this.title), | |||||
main_title:__(this.wiz.title), | |||||
step: this.id + 1, | |||||
name: this.name, | |||||
css_class: this.css_class || "", | |||||
slides_count: this.wiz.slides.length | |||||
})).appendTo(this.$wrapper); | |||||
this.body = this.$body.find(".form")[0]; | this.body = this.$body.find(".form")[0]; | ||||
@@ -314,7 +314,7 @@ frappe.wiz.WizardSlide = Class.extend({ | |||||
//setup mousefree navigation | //setup mousefree navigation | ||||
this.$body.on('keypress', function(e) { | this.$body.on('keypress', function(e) { | ||||
if(e.which === 13) { | if(e.which === 13) { | ||||
$target = $(e.target); | |||||
var $target = $(e.target); | |||||
if($target.hasClass('prev-btn')) { | if($target.hasClass('prev-btn')) { | ||||
me.prev(); | me.prev(); | ||||
} else if($target.hasClass('btn-attach')) { | } else if($target.hasClass('btn-attach')) { | ||||
@@ -469,7 +469,7 @@ function load_frappe_slides() { | |||||
var data = frappe.wiz.regional_data; | var data = frappe.wiz.regional_data; | ||||
slide.get_input("country").empty() | slide.get_input("country").empty() | ||||
.add_options([""].concat(keys(data.country_info).sort())); | |||||
.add_options([""].concat(Object.keys(data.country_info).sort())); | |||||
slide.get_input("currency").empty() | slide.get_input("currency").empty() | ||||
@@ -559,7 +559,7 @@ function load_frappe_slides() { | |||||
], | ], | ||||
help: __('The first user will become the System Manager (you can change this later).'), | help: __('The first user will become the System Manager (you can change this later).'), | ||||
onload: function(slide) { | onload: function(slide) { | ||||
if(user!=="Administrator") { | |||||
if(frappe.session.user!=="Administrator") { | |||||
slide.form.fields_dict.password.$wrapper.toggle(false); | slide.form.fields_dict.password.$wrapper.toggle(false); | ||||
slide.form.fields_dict.email.$wrapper.toggle(false); | slide.form.fields_dict.email.$wrapper.toggle(false); | ||||
if(frappe.boot.user.first_name || frappe.boot.user.last_name) { | if(frappe.boot.user.first_name || frappe.boot.user.last_name) { | ||||
@@ -580,7 +580,7 @@ function load_frappe_slides() { | |||||
}, | }, | ||||
css_class: "single-column" | css_class: "single-column" | ||||
}; | }; | ||||
}; | |||||
} | |||||
frappe.wiz.on("before_load", function() { | frappe.wiz.on("before_load", function() { | ||||
load_frappe_slides(); | load_frappe_slides(); | ||||
@@ -27,7 +27,7 @@ frappe.ui.form.on('Auto Email Report', { | |||||
"/api/method/frappe.email.doctype.auto_email_report.auto_email_report.download?" | "/api/method/frappe.email.doctype.auto_email_report.auto_email_report.download?" | ||||
+"name="+encodeURIComponent(frm.doc.name))); | +"name="+encodeURIComponent(frm.doc.name))); | ||||
if(!w) { | if(!w) { | ||||
msgprint(__("Please enable pop-ups")); return; | |||||
frappe.msgprint(__("Please enable pop-ups")); return; | |||||
} | } | ||||
}); | }); | ||||
frm.add_custom_button(__('Send Now'), function() { | frm.add_custom_button(__('Send Now'), function() { | ||||
@@ -35,7 +35,7 @@ frappe.ui.form.on('Auto Email Report', { | |||||
method: 'frappe.email.doctype.auto_email_report.auto_email_report.send_now', | method: 'frappe.email.doctype.auto_email_report.auto_email_report.send_now', | ||||
args: {name: frm.doc.name}, | args: {name: frm.doc.name}, | ||||
callback: function() { | callback: function() { | ||||
msgprint(__('Scheduled to send')); | |||||
frappe.msgprint(__('Scheduled to send')); | |||||
} | } | ||||
}); | }); | ||||
}); | }); | ||||
@@ -62,13 +62,13 @@ frappe.ui.form.on('Auto Email Report', { | |||||
var table = $('<table class="table table-bordered" style="cursor:pointer; margin:0px;"><thead>\ | var table = $('<table class="table table-bordered" style="cursor:pointer; margin:0px;"><thead>\ | ||||
<tr><th style="width: 50%">'+__('Filter')+'</th><th>'+__('Value')+'</th></tr>\ | <tr><th style="width: 50%">'+__('Filter')+'</th><th>'+__('Value')+'</th></tr>\ | ||||
</thead><tbody></tbody></table>').appendTo(wrapper); | </thead><tbody></tbody></table>').appendTo(wrapper); | ||||
$('<p class="text-muted small">' + __("Click table to edit") + '</p>').appendTo(wrapper); | |||||
$('<p class="text-muted small">' + __("Click table to edit") + '</p>').appendTo(wrapper); | |||||
var filters = JSON.parse(frm.doc.filters || '{}'); | var filters = JSON.parse(frm.doc.filters || '{}'); | ||||
var report_filters = frappe.query_reports[frm.doc.report].filters; | var report_filters = frappe.query_reports[frm.doc.report].filters; | ||||
frm.set_value('filter_meta', JSON.stringify(report_filters)); | frm.set_value('filter_meta', JSON.stringify(report_filters)); | ||||
report_filters_list = [] | |||||
var report_filters_list = [] | |||||
$.each(report_filters, function(key, val){ | $.each(report_filters, function(key, val){ | ||||
// Remove break fieldtype from the filters | // Remove break fieldtype from the filters | ||||
if(val.fieldtype != 'Break') { | if(val.fieldtype != 'Break') { | ||||
@@ -18,7 +18,6 @@ frappe.email_defaults = { | |||||
"use_imap": 1 | "use_imap": 1 | ||||
}, | }, | ||||
"Sendgrid": { | "Sendgrid": { | ||||
"enable_outgoing": 0, | |||||
"enable_outgoing": 1, | "enable_outgoing": 1, | ||||
"smtp_server": "smtp.sendgrid.net", | "smtp_server": "smtp.sendgrid.net", | ||||
"smtp_port": 587, | "smtp_port": 587, | ||||
@@ -71,7 +70,7 @@ frappe.ui.form.on("Email Account", { | |||||
service: function(frm) { | service: function(frm) { | ||||
$.each(frappe.email_defaults[frm.doc.service], function(key, value) { | $.each(frappe.email_defaults[frm.doc.service], function(key, value) { | ||||
frm.set_value(key, value); | frm.set_value(key, value); | ||||
}) | |||||
}); | |||||
if (!frm.doc.use_imap) { | if (!frm.doc.use_imap) { | ||||
$.each(frappe.email_defaults_pop[frm.doc.service], function(key, value) { | $.each(frappe.email_defaults_pop[frm.doc.service], function(key, value) { | ||||
frm.set_value(key, value); | frm.set_value(key, value); | ||||
@@ -94,7 +93,7 @@ frappe.ui.form.on("Email Account", { | |||||
}, | }, | ||||
enable_incoming: function(frm) { | enable_incoming: function(frm) { | ||||
frm.doc.no_remaining = null //perform full sync | |||||
frm.doc.no_remaining = null; //perform full sync | |||||
//frm.set_df_property("append_to", "reqd", frm.doc.enable_incoming); | //frm.set_df_property("append_to", "reqd", frm.doc.enable_incoming); | ||||
}, | }, | ||||
@@ -114,8 +113,8 @@ frappe.ui.form.on("Email Account", { | |||||
frm.events.show_gmail_message_for_less_secure_apps(frm); | frm.events.show_gmail_message_for_less_secure_apps(frm); | ||||
if(frappe.route_flags.delete_user_from_locals && frappe.route_flags.linked_user) { | if(frappe.route_flags.delete_user_from_locals && frappe.route_flags.linked_user) { | ||||
delete frappe.route_flags.delete_user_from_locals | |||||
delete locals['User'][frappe.route_flags.linked_user] | |||||
delete frappe.route_flags.delete_user_from_locals; | |||||
delete locals['User'][frappe.route_flags.linked_user]; | |||||
} | } | ||||
}, | }, | ||||
@@ -134,7 +133,7 @@ frappe.ui.form.on("Email Account", { | |||||
update_domain: function(frm){ | update_domain: function(frm){ | ||||
if (!frm.doc.email_id && !frm.doc.service){ | if (!frm.doc.email_id && !frm.doc.service){ | ||||
return | |||||
return; | |||||
} | } | ||||
frappe.call({ | frappe.call({ | ||||
@@ -145,17 +144,17 @@ frappe.ui.form.on("Email Account", { | |||||
}, | }, | ||||
callback: function (r) { | callback: function (r) { | ||||
if (r.message) { | if (r.message) { | ||||
frm.events.set_domain_fields(frm, r.message) | |||||
frm.events.set_domain_fields(frm, r.message); | |||||
} else { | } else { | ||||
frm.set_value("domain", "") | |||||
frm.set_value("domain", ""); | |||||
frappe.confirm(__('Email Domain not configured for this account, Create one?'), | frappe.confirm(__('Email Domain not configured for this account, Create one?'), | ||||
function () { | function () { | ||||
frappe.model.with_doctype("Email Domain", function() { | frappe.model.with_doctype("Email Domain", function() { | ||||
frappe.route_options = { email_id: frm.doc.email_id }; | frappe.route_options = { email_id: frm.doc.email_id }; | ||||
frappe.route_flags.return_to_email_account = 1 | |||||
frappe.route_flags.return_to_email_account = 1; | |||||
var doc = frappe.model.get_new_doc("Email Domain"); | var doc = frappe.model.get_new_doc("Email Domain"); | ||||
frappe.set_route("Form", "Email Domain", doc.name); | frappe.set_route("Form", "Email Domain", doc.name); | ||||
}) | |||||
}); | |||||
} | } | ||||
); | ); | ||||
} | } | ||||
@@ -165,26 +164,26 @@ frappe.ui.form.on("Email Account", { | |||||
set_domain_fields: function(frm, args) { | set_domain_fields: function(frm, args) { | ||||
if(!args){ | if(!args){ | ||||
args = frappe.route_flags.set_domain_values? frappe.route_options: {} | |||||
args = frappe.route_flags.set_domain_values? frappe.route_options: {}; | |||||
} | } | ||||
for(field in args) { | |||||
for(var field in args) { | |||||
frm.set_value(field, args[field]); | frm.set_value(field, args[field]); | ||||
} | } | ||||
delete frappe.route_flags.set_domain_values | |||||
frappe.route_options = {} | |||||
delete frappe.route_flags.set_domain_values; | |||||
frappe.route_options = {}; | |||||
}, | }, | ||||
email_sync_option: function(frm) { | email_sync_option: function(frm) { | ||||
// confirm if the ALL sync option is selected | // confirm if the ALL sync option is selected | ||||
if(frm.doc.email_sync_option == "ALL"){ | if(frm.doc.email_sync_option == "ALL"){ | ||||
msg = __("You are selecting Sync Option as ALL, It will resync all \ | |||||
var msg = __("You are selecting Sync Option as ALL, It will resync all \ | |||||
read as well as unread message from server. This may also cause the duplication\ | read as well as unread message from server. This may also cause the duplication\ | ||||
of Communication (emails).") | |||||
of Communication (emails)."); | |||||
frappe.confirm(msg, null, function() { | frappe.confirm(msg, null, function() { | ||||
frm.set_value("email_sync_option", "UNSEEN") | |||||
frm.set_value("email_sync_option", "UNSEEN"); | |||||
}); | }); | ||||
} | } | ||||
} | } | ||||
@@ -70,9 +70,9 @@ frappe.ui.form.on("Email Alert", { | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.message) { | if(r.message) { | ||||
msgprint(r.message); | |||||
frappe.msgprint(r.message); | |||||
} else { | } else { | ||||
msgprint(__('No alerts for today')); | |||||
frappe.msgprint(__('No alerts for today')); | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
@@ -9,8 +9,8 @@ frappe.ui.form.on("Email Domain", { | |||||
frm.set_value("domain_name",frm.doc.email_id.split("@")[1]) | frm.set_value("domain_name",frm.doc.email_id.split("@")[1]) | ||||
} | } | ||||
if (frm.doc.__islocal != 1 && frappe.route_flags.return_to_email_account) { | |||||
var route = frappe.get_prev_route() | |||||
if (frm.doc.__islocal != 1 && frappe.route_flags.return_to_email_account) { | |||||
var route = frappe.get_prev_route(); | |||||
delete frappe.route_flags.return_to_email_account; | delete frappe.route_flags.return_to_email_account; | ||||
frappe.route_flags.set_domain_values = true | frappe.route_flags.set_domain_values = true | ||||
@@ -10,7 +10,8 @@ frappe.ui.form.on("Email Group", "refresh", function(frm) { | |||||
frm.add_custom_button(__("Import Subscribers"), function() { | frm.add_custom_button(__("Import Subscribers"), function() { | ||||
frappe.prompt({fieldtype:"Select", options: frm.doc.__onload.import_types, | frappe.prompt({fieldtype:"Select", options: frm.doc.__onload.import_types, | ||||
label:__("Import Email From"), fieldname:"doctype", reqd:1}, function(data) { | |||||
label:__("Import Email From"), fieldname:"doctype", reqd:1}, | |||||
function(data) { | |||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.email.doctype.email_group.email_group.import_from", | method: "frappe.email.doctype.email_group.email_group.import_from", | ||||
args: { | args: { | ||||
@@ -26,7 +27,8 @@ frappe.ui.form.on("Email Group", "refresh", function(frm) { | |||||
frm.add_custom_button(__("Add Subscribers"), function() { | frm.add_custom_button(__("Add Subscribers"), function() { | ||||
frappe.prompt({fieldtype:"Text", | frappe.prompt({fieldtype:"Text", | ||||
label:__("Email Addresses"), fieldname:"email_list", reqd:1}, function(data) { | |||||
label:__("Email Addresses"), fieldname:"email_list", reqd:1}, | |||||
function(data) { | |||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.email.doctype.email_group.email_group.add_subscribers", | method: "frappe.email.doctype.email_group.email_group.add_subscribers", | ||||
args: { | args: { | ||||
@@ -1,10 +1,10 @@ | |||||
frappe.listview_settings['Email Queue'] = { | frappe.listview_settings['Email Queue'] = { | ||||
get_indicator: function(doc) { | get_indicator: function(doc) { | ||||
colour = {'Sent': 'green', 'Sending': 'blue', 'Not Sent': 'grey', 'Error': 'red', 'Expired': 'orange'}; | |||||
var colour = {'Sent': 'green', 'Sending': 'blue', 'Not Sent': 'grey', 'Error': 'red', 'Expired': 'orange'}; | |||||
return [__(doc.status), colour[doc.status], "status,=," + doc.status]; | return [__(doc.status), colour[doc.status], "status,=," + doc.status]; | ||||
}, | }, | ||||
refresh: function(doclist){ | refresh: function(doclist){ | ||||
if (has_common(roles, ["Administrator", "System Manager"])){ | |||||
if (has_common(frappe.user_roles, ["Administrator", "System Manager"])){ | |||||
if (cint(frappe.defaults.get_default("hold_queue"))){ | if (cint(frappe.defaults.get_default("hold_queue"))){ | ||||
doclist.page.clear_inner_toolbar() | doclist.page.clear_inner_toolbar() | ||||
doclist.page.add_inner_button(__("Resume Sending"), function() { | doclist.page.add_inner_button(__("Resume Sending"), function() { | ||||
@@ -1,10 +1,11 @@ | |||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | ||||
// License: GNU General Public License v3. See license.txt | // License: GNU General Public License v3. See license.txt | ||||
/* globals erpnext */ | |||||
cur_frm.cscript.refresh = function(doc) { | cur_frm.cscript.refresh = function(doc) { | ||||
if(window.erpnext) erpnext.toggle_naming_series(); | if(window.erpnext) erpnext.toggle_naming_series(); | ||||
if(!doc.__islocal && !cint(doc.email_sent) && !doc.__unsaved | if(!doc.__islocal && !cint(doc.email_sent) && !doc.__unsaved | ||||
&& inList(frappe.boot.user.can_write, doc.doctype)) { | |||||
&& in_list(frappe.boot.user.can_write, doc.doctype)) { | |||||
cur_frm.add_custom_button(__('Send'), function() { | cur_frm.add_custom_button(__('Send'), function() { | ||||
return $c_obj(doc, 'send_emails', '', function(r) { | return $c_obj(doc, 'send_emails', '', function(r) { | ||||
cur_frm.refresh(); | cur_frm.refresh(); | ||||
@@ -9,12 +9,12 @@ frappe.ui.form.on("Print Format", { | |||||
refresh: function(frm) { | refresh: function(frm) { | ||||
frm.set_intro(""); | frm.set_intro(""); | ||||
frm.toggle_enable(["html", "doc_type", "module"], false); | frm.toggle_enable(["html", "doc_type", "module"], false); | ||||
if (user==="Administrator" || frm.doc.standard==="No") { | |||||
if (frappe.session.user==="Administrator" || frm.doc.standard==="No") { | |||||
frm.toggle_enable(["html", "doc_type", "module"], true); | frm.toggle_enable(["html", "doc_type", "module"], true); | ||||
frm.enable_save(); | frm.enable_save(); | ||||
} | } | ||||
if(frm.doc.standard==="Yes" && user !== "Administrator") { | |||||
if(frm.doc.standard==="Yes" && frappe.session.user !== "Administrator") { | |||||
frm.set_intro(__("Please duplicate this to make changes")); | frm.set_intro(__("Please duplicate this to make changes")); | ||||
} | } | ||||
frm.trigger('render_buttons'); | frm.trigger('render_buttons'); | ||||
@@ -25,7 +25,7 @@ frappe.ui.form.on("Print Format", { | |||||
if(!frm.doc.custom_format) { | if(!frm.doc.custom_format) { | ||||
frm.add_custom_button(__("Edit Format"), function() { | frm.add_custom_button(__("Edit Format"), function() { | ||||
if(!frm.doc.doc_type) { | if(!frm.doc.doc_type) { | ||||
msgprint(__("Please select DocType first")); | |||||
frappe.msgprint(__("Please select DocType first")); | |||||
return; | return; | ||||
} | } | ||||
frappe.set_route("print-format-builder", frm.doc.name); | frappe.set_route("print-format-builder", frm.doc.name); | ||||
@@ -42,7 +42,7 @@ frappe.ui.form.on("Print Format", { | |||||
} | } | ||||
}, | }, | ||||
custom_format: function(frm) { | custom_format: function(frm) { | ||||
value = frm.doc.custom_format ? 0:1; | |||||
var value = frm.doc.custom_format ? 0:1; | |||||
frm.set_value('align_labels_left', value); | frm.set_value('align_labels_left', value); | ||||
frm.set_value('show_section_headings', value); | frm.set_value('show_section_headings', value); | ||||
frm.set_value('line_breaks', value); | frm.set_value('line_breaks', value); | ||||
@@ -123,7 +123,7 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
var doctype = me.doctype_input.get_value(), | var doctype = me.doctype_input.get_value(), | ||||
name = me.name_input.get_value(); | name = me.name_input.get_value(); | ||||
if(!(doctype && name)) { | if(!(doctype && name)) { | ||||
msgprint(__("Both DocType and Name required")); | |||||
frappe.msgprint(__("Both DocType and Name required")); | |||||
return; | return; | ||||
} | } | ||||
me.setup_new_print_format(doctype, name); | me.setup_new_print_format(doctype, name); | ||||
@@ -272,7 +272,7 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
set_column(); | set_column(); | ||||
} else if(!in_list(["Section Break", "Column Break", "Fold"], f.fieldtype) | } else if(!in_list(["Section Break", "Column Break", "Fold"], f.fieldtype) | ||||
&& f.label) { | |||||
&& f.label) { | |||||
if(!column) set_column(); | if(!column) set_column(); | ||||
if(f.fieldtype==="Table") { | if(f.fieldtype==="Table") { | ||||
@@ -564,7 +564,7 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
section.no_of_columns = 1; | section.no_of_columns = 1; | ||||
var $section = $(frappe.render_template("print_format_builder_section", | var $section = $(frappe.render_template("print_format_builder_section", | ||||
{section: section, me: me})) | |||||
{section: section, me: me})) | |||||
.appendTo(me.page.main.find(".print-format-builder-layout")) | .appendTo(me.page.main.find(".print-format-builder-layout")) | ||||
me.setup_sortable_for_column($section.find(".print-format-builder-column").get(0)); | me.setup_sortable_for_column($section.find(".print-format-builder-column").get(0)); | ||||
@@ -587,8 +587,8 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
var parent = $(this).parents(".print-format-builder-field:first"), | var parent = $(this).parents(".print-format-builder-field:first"), | ||||
doctype = parent.attr("data-doctype"), | doctype = parent.attr("data-doctype"), | ||||
label = parent.attr("data-label"), | label = parent.attr("data-label"), | ||||
columns = parent.attr("data-columns").split(",") | |||||
column_names = $.map(columns, function(v) { return v.split("|")[0]; }); | |||||
columns = parent.attr("data-columns").split(","), | |||||
column_names = $.map(columns, function(v) { return v.split("|")[0]; }), | |||||
widths = {}; | widths = {}; | ||||
$.each(columns, function(i, v) { | $.each(columns, function(i, v) { | ||||
@@ -622,7 +622,7 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
$.each(doc_fields, function(j, f) { | $.each(doc_fields, function(j, f) { | ||||
if (f && !in_list(column_names, f.fieldname) | if (f && !in_list(column_names, f.fieldname) | ||||
&& !in_list(["Section Break", "Column Break"], f.fieldtype) && f.label) { | && !in_list(["Section Break", "Column Break"], f.fieldtype) && f.label) { | ||||
fields.push(f); | |||||
fields.push(f); | |||||
} | } | ||||
}) | }) | ||||
// render checkboxes | // render checkboxes | ||||
@@ -683,26 +683,26 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
get_edit_html_dialog: function(title, label, $content) { | get_edit_html_dialog: function(title, label, $content) { | ||||
var me = this; | var me = this; | ||||
var d = new frappe.ui.Dialog({ | var d = new frappe.ui.Dialog({ | ||||
title: title, | |||||
fields: [ | |||||
{ | |||||
fieldname: "content", | |||||
fieldtype: "Code", | |||||
label: label | |||||
}, | |||||
{ | |||||
fieldname: "help", | |||||
fieldtype: "HTML", | |||||
options: '<p>' | |||||
+ __("You can add dynamic properties from the document by using Jinja templating.") | |||||
+ __("For example: If you want to include the document ID, use {0}", ["<code>{{ doc.name }}</code>"]) | |||||
+ '</p>' | |||||
} | |||||
] | |||||
}); | |||||
title: title, | |||||
fields: [ | |||||
{ | |||||
fieldname: "content", | |||||
fieldtype: "Code", | |||||
label: label | |||||
}, | |||||
{ | |||||
fieldname: "help", | |||||
fieldtype: "HTML", | |||||
options: '<p>' | |||||
+ __("You can add dynamic properties from the document by using Jinja templating.") | |||||
+ __("For example: If you want to include the document ID, use {0}", ["<code>{{ doc.name }}</code>"]) | |||||
+ '</p>' | |||||
} | |||||
] | |||||
}); | |||||
// set existing content in input | // set existing content in input | ||||
content = $content.data('content') || ""; | |||||
var content = $content.data('content') || ""; | |||||
if(content.indexOf(me.get_no_content())!==-1) content = ""; | if(content.indexOf(me.get_no_content())!==-1) content = ""; | ||||
d.set_input("content", content); | d.set_input("content", content); | ||||
@@ -791,4 +791,4 @@ frappe.PrintFormatBuilder = Class.extend({ | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
}); | |||||
}); |
@@ -45,7 +45,7 @@ frappe.assets = { | |||||
}); | }); | ||||
// clear assets | // clear assets | ||||
for(key in localStorage) { | |||||
for(var key in localStorage) { | |||||
if(key.indexOf("desk_assets:")===0 || key.indexOf("_page:")===0 | if(key.indexOf("desk_assets:")===0 || key.indexOf("_page:")===0 | ||||
|| key.indexOf("_doctype:")===0 || key.indexOf("preferred_breadcrumbs:")===0) { | || key.indexOf("_doctype:")===0 || key.indexOf("preferred_breadcrumbs:")===0) { | ||||
localStorage.removeItem(key); | localStorage.removeItem(key); | ||||
@@ -10,7 +10,7 @@ frappe.db = { | |||||
fieldname: fieldname, | fieldname: fieldname, | ||||
filters: filters | filters: filters | ||||
}, | }, | ||||
callback: function(r, rt) { | |||||
callback: function(r) { | |||||
callback && callback(r.message); | callback && callback(r.message); | ||||
} | } | ||||
}); | }); | ||||
@@ -26,12 +26,12 @@ frappe.defaults = { | |||||
return d; | return d; | ||||
}, | }, | ||||
get_global_default: function(key) { | get_global_default: function(key) { | ||||
var d = sys_defaults[key]; | |||||
var d = frappe.sys_defaults[key]; | |||||
if($.isArray(d)) d = d[0]; | if($.isArray(d)) d = d[0]; | ||||
return d; | return d; | ||||
}, | }, | ||||
get_global_defaults: function(key) { | get_global_defaults: function(key) { | ||||
var d = sys_defaults[key]; | |||||
var d = frappe.sys_defaults[key]; | |||||
if(!$.isArray(d)) d = [d]; | if(!$.isArray(d)) d = [d]; | ||||
return d; | return d; | ||||
}, | }, | ||||
@@ -99,9 +99,9 @@ frappe.Application = Class.extend({ | |||||
}); | }); | ||||
dialog.get_close_btn().toggle(false); | dialog.get_close_btn().toggle(false); | ||||
}); | }); | ||||
if (sys_defaults.email_user_password){ | |||||
var email_list = sys_defaults.email_user_password.split(','); | |||||
for (u in email_list) { | |||||
if (frappe.sys_defaults.email_user_password){ | |||||
var email_list = frappe.sys_defaults.email_user_password.split(','); | |||||
for (var u in email_list) { | |||||
if (email_list[u]===frappe.user.name){ | if (email_list[u]===frappe.user.name){ | ||||
this.set_password(email_list[u]) | this.set_password(email_list[u]) | ||||
} | } | ||||
@@ -144,47 +144,47 @@ frappe.Application = Class.extend({ | |||||
} | } | ||||
] | ] | ||||
}); | }); | ||||
d.get_input("submit").on("click", function() { | |||||
//setup spinner | |||||
d.hide(); | |||||
var s = new frappe.ui.Dialog({ | |||||
title: __("Checking one moment"), | |||||
fields: [{ | |||||
d.get_input("submit").on("click", function() { | |||||
//setup spinner | |||||
d.hide(); | |||||
var s = new frappe.ui.Dialog({ | |||||
title: __("Checking one moment"), | |||||
fields: [{ | |||||
"fieldtype": "HTML", | "fieldtype": "HTML", | ||||
"fieldname": "checking" | "fieldname": "checking" | ||||
}] | }] | ||||
}); | |||||
s.fields_dict.checking.$wrapper.html('<i class="fa fa-spinner fa-spin fa-4x"></i>') | |||||
s.show(); | |||||
frappe.call({ | |||||
method: 'frappe.core.doctype.user.user.set_email_password', | |||||
args: { | |||||
"email_account": email_account[i]["email_account"], | |||||
"user": user, | |||||
"password": d.get_value("password") | |||||
}, | |||||
callback: function (passed) | |||||
}); | |||||
s.fields_dict.checking.$wrapper.html('<i class="fa fa-spinner fa-spin fa-4x"></i>') | |||||
s.show(); | |||||
frappe.call({ | |||||
method: 'frappe.core.doctype.user.user.set_email_password', | |||||
args: { | |||||
"email_account": email_account[i]["email_account"], | |||||
"user": user, | |||||
"password": d.get_value("password") | |||||
}, | |||||
callback: function (passed) | |||||
{ | |||||
s.hide(); | |||||
d.hide();//hide waiting indication | |||||
if (!passed["message"]) | |||||
{ | { | ||||
s.hide(); | |||||
d.hide();//hide waiting indication | |||||
if (!passed["message"]) | |||||
frappe.show_alert("Login Failed please try again", 5); | |||||
me.email_password_prompt(email_account, user, i) | |||||
} | |||||
else | |||||
{ | |||||
if (i + 1 < email_account.length) | |||||
{ | { | ||||
show_alert("Login Failed please try again", 5); | |||||
i = i + 1; | |||||
me.email_password_prompt(email_account, user, i) | me.email_password_prompt(email_account, user, i) | ||||
} | } | ||||
else | |||||
{ | |||||
if (i + 1 < email_account.length) | |||||
{ | |||||
i = i + 1; | |||||
me.email_password_prompt(email_account, user, i) | |||||
} | |||||
} | |||||
} | } | ||||
}); | |||||
} | |||||
}); | }); | ||||
d.show(); | |||||
}); | |||||
d.show(); | |||||
}, | }, | ||||
load_bootinfo: function() { | load_bootinfo: function() { | ||||
if(frappe.boot) { | if(frappe.boot) { | ||||
@@ -269,15 +269,18 @@ frappe.Application = Class.extend({ | |||||
}, | }, | ||||
set_globals: function() { | set_globals: function() { | ||||
// for backward compatibility | |||||
console.warn('The global `user` has been deprecated. Please use `frappe.session.user` instead.'); | |||||
frappe.session.user = frappe.boot.user.name; | frappe.session.user = frappe.boot.user.name; | ||||
frappe.session.user_fullname = frappe.boot.user.name; | |||||
user = frappe.boot.user.name; | |||||
user_fullname = frappe.user_info(user).fullname; | |||||
user_defaults = frappe.boot.user.defaults; | |||||
roles = frappe.boot.user.roles; | |||||
user_email = frappe.boot.user.email; | |||||
sys_defaults = frappe.boot.sysdefaults; | |||||
frappe.session.user_email = frappe.boot.user.email; | |||||
frappe.session.user_fullname = frappe.user_info().fullname; | |||||
console.warn('The global `user_defaults` has been deprecated. Please use `frappe.user_roles` instead.'); | |||||
frappe.user_defaults = frappe.boot.user.defaults; | |||||
console.warn('The global `roles` has been deprecated. Please use `frappe.user_roles` instead.'); | |||||
frappe.user_roles = frappe.boot.user.roles; | |||||
console.warn('The global `sys_defaults` has been deprecated. Please use `frappe.sys_defaults` instead.'); | |||||
frappe.sys_defaults = frappe.boot.sysdefaults; | |||||
frappe.ui.py_date_format = frappe.boot.sysdefaults.date_format.replace('dd', '%d').replace('mm', '%m').replace('yyyy', '%Y'); | frappe.ui.py_date_format = frappe.boot.sysdefaults.date_format.replace('dd', '%d').replace('mm', '%m').replace('yyyy', '%Y'); | ||||
frappe.boot.user.last_selected_values = {}; | frappe.boot.user.last_selected_values = {}; | ||||
}, | }, | ||||
@@ -285,7 +288,7 @@ frappe.Application = Class.extend({ | |||||
// clear cached pages if timestamp is not found | // clear cached pages if timestamp is not found | ||||
if(localStorage["page_info"]) { | if(localStorage["page_info"]) { | ||||
frappe.boot.allowed_pages = []; | frappe.boot.allowed_pages = []; | ||||
page_info = JSON.parse(localStorage["page_info"]); | |||||
var page_info = JSON.parse(localStorage["page_info"]); | |||||
$.each(frappe.boot.page_info, function(name, p) { | $.each(frappe.boot.page_info, function(name, p) { | ||||
if(!page_info[name] || (page_info[name].modified != p.modified)) { | if(!page_info[name] || (page_info[name].modified != p.modified)) { | ||||
delete localStorage["_page:" + name]; | delete localStorage["_page:" + name]; | ||||
@@ -293,19 +296,18 @@ frappe.Application = Class.extend({ | |||||
frappe.boot.allowed_pages.push(name); | frappe.boot.allowed_pages.push(name); | ||||
}); | }); | ||||
} else { | } else { | ||||
frappe.boot.allowed_pages = keys(frappe.boot.page_info); | |||||
frappe.boot.allowed_pages = Object.keys(frappe.boot.page_info); | |||||
} | } | ||||
localStorage["page_info"] = JSON.stringify(frappe.boot.page_info); | localStorage["page_info"] = JSON.stringify(frappe.boot.page_info); | ||||
}, | }, | ||||
set_as_guest: function() { | set_as_guest: function() { | ||||
// for backward compatibility | |||||
user = {name:'Guest'}; | |||||
user = 'Guest'; | |||||
user_fullname = 'Guest'; | |||||
user_defaults = {}; | |||||
roles = ['Guest']; | |||||
user_email = ''; | |||||
sys_defaults = {}; | |||||
frappe.session.user = 'Guest'; | |||||
frappe.session.user_email = ''; | |||||
frappe.session.user_fullname = 'Guest'; | |||||
frappe.user_defaults = {}; | |||||
frappe.user_roles = ['Guest']; | |||||
frappe.sys_defaults = {}; | |||||
}, | }, | ||||
make_page_container: function() { | make_page_container: function() { | ||||
if($("#body_div").length) { | if($("#body_div").length) { | ||||
@@ -558,20 +560,19 @@ frappe.get_desktop_icons = function(show_hidden, show_global) { | |||||
for (var i=0, l=frappe.boot.desktop_icons.length; i < l; i++) { | for (var i=0, l=frappe.boot.desktop_icons.length; i < l; i++) { | ||||
var m = frappe.boot.desktop_icons[i]; | var m = frappe.boot.desktop_icons[i]; | ||||
if ((['Setup', 'Core'].indexOf(m.module_name) === -1) | |||||
&& show_module(m)) { | |||||
add_to_out(m) | |||||
if ((['Setup', 'Core'].indexOf(m.module_name) === -1) && show_module(m)) { | |||||
add_to_out(m); | |||||
} | } | ||||
} | } | ||||
if(roles.indexOf('System Manager')!=-1) { | |||||
if(frappe.user_roles.includes('System Manager')) { | |||||
var m = frappe.get_module('Setup'); | var m = frappe.get_module('Setup'); | ||||
if(show_module(m)) add_to_out(m) | |||||
if(show_module(m)) add_to_out(m); | |||||
} | } | ||||
if(roles.indexOf('Administrator')!=-1) { | |||||
if(frappe.user_roles.includes('Administrator')) { | |||||
var m = frappe.get_module('Core'); | var m = frappe.get_module('Core'); | ||||
if(show_module(m)) add_to_out(m) | |||||
if(show_module(m)) add_to_out(m); | |||||
} | } | ||||
return out; | return out; | ||||
@@ -589,7 +590,7 @@ frappe.add_to_desktop = function(label, doctype, report) { | |||||
}, | }, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.message) { | if(r.message) { | ||||
show_alert(__("Added")); | |||||
frappe.show_alert(__("Added")); | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
@@ -58,19 +58,19 @@ frappe.dom = { | |||||
}, | }, | ||||
is_element_in_viewport: function (el) { | is_element_in_viewport: function (el) { | ||||
//special bonus for those using jQuery | |||||
if (typeof jQuery === "function" && el instanceof jQuery) { | |||||
el = el[0]; | |||||
} | |||||
//special bonus for those using jQuery | |||||
if (typeof jQuery === "function" && el instanceof jQuery) { | |||||
el = el[0]; | |||||
} | |||||
var rect = el.getBoundingClientRect(); | |||||
var rect = el.getBoundingClientRect(); | |||||
return ( | |||||
rect.top >= 0 | |||||
&& rect.left >= 0 | |||||
// && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ | |||||
// && rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ | |||||
); | |||||
return ( | |||||
rect.top >= 0 | |||||
&& rect.left >= 0 | |||||
// && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ | |||||
// && rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ | |||||
); | |||||
}, | }, | ||||
set_style: function(txt, id) { | set_style: function(txt, id) { | ||||
@@ -115,7 +115,7 @@ frappe.dom = { | |||||
css: function(ele, s) { | css: function(ele, s) { | ||||
if(ele && s) { | if(ele && s) { | ||||
$.extend(ele.style, s); | $.extend(ele.style, s); | ||||
}; | |||||
} | |||||
return ele; | return ele; | ||||
}, | }, | ||||
freeze: function(msg, css_class) { | freeze: function(msg, css_class) { | ||||
@@ -155,7 +155,7 @@ frappe.dom = { | |||||
save_selection: function() { | save_selection: function() { | ||||
// via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element | // via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element | ||||
if (window.getSelection) { | if (window.getSelection) { | ||||
sel = window.getSelection(); | |||||
var sel = window.getSelection(); | |||||
if (sel.getRangeAt && sel.rangeCount) { | if (sel.getRangeAt && sel.rangeCount) { | ||||
var ranges = []; | var ranges = []; | ||||
for (var i = 0, len = sel.rangeCount; i < len; ++i) { | for (var i = 0, len = sel.rangeCount; i < len; ++i) { | ||||
@@ -171,7 +171,7 @@ frappe.dom = { | |||||
restore_selection: function(savedSel) { | restore_selection: function(savedSel) { | ||||
if (savedSel) { | if (savedSel) { | ||||
if (window.getSelection) { | if (window.getSelection) { | ||||
sel = window.getSelection(); | |||||
var sel = window.getSelection(); | |||||
sel.removeAllRanges(); | sel.removeAllRanges(); | ||||
for (var i = 0, len = savedSel.length; i < len; ++i) { | for (var i = 0, len = savedSel.length; i < len; ++i) { | ||||
sel.addRange(savedSel[i]); | sel.addRange(savedSel[i]); | ||||
@@ -242,48 +242,48 @@ frappe._in = function(source, target) { | |||||
})(jQuery); | })(jQuery); | ||||
(function($) { | (function($) { | ||||
function pasteIntoInput(el, text) { | |||||
el.focus(); | |||||
if (typeof el.selectionStart == "number") { | |||||
var val = el.value; | |||||
var selStart = el.selectionStart; | |||||
el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd); | |||||
el.selectionEnd = el.selectionStart = selStart + text.length; | |||||
} else if (typeof document.selection != "undefined") { | |||||
var textRange = document.selection.createRange(); | |||||
textRange.text = text; | |||||
textRange.collapse(false); | |||||
textRange.select(); | |||||
} | |||||
} | |||||
function pasteIntoInput(el, text) { | |||||
el.focus(); | |||||
if (typeof el.selectionStart == "number") { | |||||
var val = el.value; | |||||
var selStart = el.selectionStart; | |||||
el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd); | |||||
el.selectionEnd = el.selectionStart = selStart + text.length; | |||||
} else if (typeof document.selection != "undefined") { | |||||
var textRange = document.selection.createRange(); | |||||
textRange.text = text; | |||||
textRange.collapse(false); | |||||
textRange.select(); | |||||
} | |||||
} | |||||
function allowTabChar(el) { | |||||
$(el).keydown(function(e) { | |||||
if (e.which == 9) { | |||||
pasteIntoInput(this, "\t"); | |||||
return false; | |||||
} | |||||
}); | |||||
function allowTabChar(el) { | |||||
$(el).keydown(function(e) { | |||||
if (e.which == 9) { | |||||
pasteIntoInput(this, "\t"); | |||||
return false; | |||||
} | |||||
}); | |||||
// For Opera, which only allows suppression of keypress events, not keydown | |||||
$(el).keypress(function(e) { | |||||
if (e.which == 9) { | |||||
return false; | |||||
} | |||||
}); | |||||
} | |||||
// For Opera, which only allows suppression of keypress events, not keydown | |||||
$(el).keypress(function(e) { | |||||
if (e.which == 9) { | |||||
return false; | |||||
} | |||||
}); | |||||
} | |||||
$.fn.allowTabs = function() { | |||||
if (this.jquery) { | |||||
this.each(function() { | |||||
if (this.nodeType == 1) { | |||||
var nodeName = this.nodeName.toLowerCase(); | |||||
if (nodeName == "textarea" || (nodeName == "input" && this.type == "text")) { | |||||
allowTabChar(this); | |||||
} | |||||
} | |||||
}) | |||||
} | |||||
return this; | |||||
} | |||||
$.fn.allowTabs = function() { | |||||
if (this.jquery) { | |||||
this.each(function() { | |||||
if (this.nodeType == 1) { | |||||
var nodeName = this.nodeName.toLowerCase(); | |||||
if (nodeName == "textarea" || (nodeName == "input" && this.type == "text")) { | |||||
allowTabChar(this); | |||||
} | |||||
} | |||||
}) | |||||
} | |||||
return this; | |||||
} | |||||
})(jQuery); | })(jQuery); |
@@ -3,7 +3,7 @@ frappe.provide("frappe.utils") | |||||
frappe.utils.Feedback = Class.extend({ | frappe.utils.Feedback = Class.extend({ | ||||
resend_feedback_request: function(doc) { | resend_feedback_request: function(doc) { | ||||
/* resend the feedback request email */ | /* resend the feedback request email */ | ||||
args = { | |||||
var args = { | |||||
reference_name: doc.reference_name, | reference_name: doc.reference_name, | ||||
reference_doctype: doc.reference_doctype, | reference_doctype: doc.reference_doctype, | ||||
request: doc.feedback_request, | request: doc.feedback_request, | ||||
@@ -14,12 +14,12 @@ frappe.utils.Feedback = Class.extend({ | |||||
manual_feedback_request: function(doc) { | manual_feedback_request: function(doc) { | ||||
var me = this; | var me = this; | ||||
args = { | |||||
var args = { | |||||
reference_doctype: doc.doctype, | reference_doctype: doc.doctype, | ||||
reference_name: doc.name | reference_name: doc.name | ||||
} | } | ||||
if(frappe.boot.feedback_triggers[doc.doctype]) { | if(frappe.boot.feedback_triggers[doc.doctype]) { | ||||
feedback_trigger = frappe.boot.feedback_triggers[doc.doctype] | |||||
var feedback_trigger = frappe.boot.feedback_triggers[doc.doctype] | |||||
$.extend(args, { trigger: feedback_trigger }) | $.extend(args, { trigger: feedback_trigger }) | ||||
me.get_feedback_request_details(args, false) | me.get_feedback_request_details(args, false) | ||||
} else{ | } else{ | ||||
@@ -43,7 +43,7 @@ frappe.utils.Feedback = Class.extend({ | |||||
make_feedback_request_dialog: function(args, is_resend) { | make_feedback_request_dialog: function(args, is_resend) { | ||||
var me = this; | var me = this; | ||||
dialog = new frappe.ui.Dialog({ | |||||
var dialog = new frappe.ui.Dialog({ | |||||
title: __("{0} Feedback Request", [ is_resend? "Resend": "Send" ]), | title: __("{0} Feedback Request", [ is_resend? "Resend": "Send" ]), | ||||
fields: [ | fields: [ | ||||
{ | { | ||||
@@ -18,7 +18,7 @@ frappe.ui.form.Control = Class.extend({ | |||||
// if developer_mode=1, show fieldname as tooltip | // if developer_mode=1, show fieldname as tooltip | ||||
if(frappe.boot.user && frappe.boot.user.name==="Administrator" && | if(frappe.boot.user && frappe.boot.user.name==="Administrator" && | ||||
frappe.boot.developer_mode===1 && this.$wrapper) { | frappe.boot.developer_mode===1 && this.$wrapper) { | ||||
this.$wrapper.attr("title", __(this.df.fieldname)); | |||||
this.$wrapper.attr("title", __(this.df.fieldname)); | |||||
} | } | ||||
if(this.render_input) { | if(this.render_input) { | ||||
@@ -75,8 +75,9 @@ frappe.ui.form.Control = Class.extend({ | |||||
if (this.doctype && status==="Read" && !this.only_input | if (this.doctype && status==="Read" && !this.only_input | ||||
&& is_null(frappe.model.get_value(this.doctype, this.docname, this.df.fieldname)) | && is_null(frappe.model.get_value(this.doctype, this.docname, this.df.fieldname)) | ||||
&& !in_list(["HTML", "Image"], this.df.fieldtype)) { | && !in_list(["HTML", "Image"], this.df.fieldtype)) { | ||||
if(explain) console.log("By Hide Read-only, null fields: None"); | |||||
status = "None"; | |||||
if(explain) console.log("By Hide Read-only, null fields: None"); | |||||
status = "None"; | |||||
} | } | ||||
return status; | return status; | ||||
@@ -189,19 +190,19 @@ frappe.ui.form.ControlImage = frappe.ui.form.Control.extend({ | |||||
this.$body = $("<div></div>").appendTo(this.$wrapper) | this.$body = $("<div></div>").appendTo(this.$wrapper) | ||||
.css({"margin-bottom": "10px"}) | .css({"margin-bottom": "10px"}) | ||||
this.$wrapper.on("refresh", function() { | this.$wrapper.on("refresh", function() { | ||||
var doc = null; | |||||
me.$body.empty(); | |||||
var doc = null; | |||||
me.$body.empty(); | |||||
var doc = me.get_doc(); | |||||
if(doc && me.df.options && doc[me.df.options]) { | |||||
me.$img = $("<img src='"+doc[me.df.options]+"' class='img-responsive'>") | |||||
.appendTo(me.$body); | |||||
} else { | |||||
me.$buffer = $("<div class='missing-image'><i class='octicon octicon-circle-slash'></i></div>") | |||||
.appendTo(me.$body) | |||||
} | |||||
return false; | |||||
}); | |||||
var doc = me.get_doc(); | |||||
if(doc && me.df.options && doc[me.df.options]) { | |||||
me.$img = $("<img src='"+doc[me.df.options]+"' class='img-responsive'>") | |||||
.appendTo(me.$body); | |||||
} else { | |||||
me.$buffer = $("<div class='missing-image'><i class='octicon octicon-circle-slash'></i></div>") | |||||
.appendTo(me.$body) | |||||
} | |||||
return false; | |||||
}); | |||||
$('<div class="clearfix"></div>').appendTo(this.$wrapper); | $('<div class="clearfix"></div>').appendTo(this.$wrapper); | ||||
} | } | ||||
}); | }); | ||||
@@ -430,7 +431,7 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ | |||||
if (in_list(['Data', 'Link', 'Dynamic Link', 'Password', 'Select', 'Read Only', 'Attach', 'Attach Image'], | if (in_list(['Data', 'Link', 'Dynamic Link', 'Password', 'Select', 'Read Only', 'Attach', 'Attach Image'], | ||||
this.df.fieldtype)) { | this.df.fieldtype)) { | ||||
this.$input.attr("maxlength", this.df.length || 140); | |||||
this.$input.attr("maxlength", this.df.length || 140); | |||||
} | } | ||||
this.set_input_attributes(); | this.set_input_attributes(); | ||||
@@ -476,7 +477,7 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ | |||||
callback(""); | callback(""); | ||||
return; | return; | ||||
} | } | ||||
v1 = '' | |||||
var v1 = '' | |||||
// phone may start with + and must only have numbers later, '-' and ' ' are stripped | // phone may start with + and must only have numbers later, '-' and ' ' are stripped | ||||
v = v.replace(/ /g, '').replace(/-/g, '').replace(/\(/g, '').replace(/\)/g, ''); | v = v.replace(/ /g, '').replace(/-/g, '').replace(/\(/g, '').replace(/\)/g, ''); | ||||
@@ -507,7 +508,7 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ | |||||
var invalid_email = false; | var invalid_email = false; | ||||
email_list.forEach(function(email) { | email_list.forEach(function(email) { | ||||
if (!validate_email(email)) { | if (!validate_email(email)) { | ||||
msgprint(__("Invalid Email: {0}", [email])); | |||||
frappe.msgprint(__("Invalid Email: {0}", [email])); | |||||
invalid_email = true; | invalid_email = true; | ||||
} | } | ||||
}); | }); | ||||
@@ -671,18 +672,18 @@ frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({ | |||||
}, | }, | ||||
parse: function(value) { | parse: function(value) { | ||||
if(value) { | if(value) { | ||||
return dateutil.user_to_str(value); | |||||
return frappe.datetime.user_to_str(value); | |||||
} | } | ||||
}, | }, | ||||
format_for_input: function(value) { | format_for_input: function(value) { | ||||
if(value) { | if(value) { | ||||
return dateutil.str_to_user(value); | |||||
return frappe.datetime.str_to_user(value); | |||||
} | } | ||||
return ""; | return ""; | ||||
}, | }, | ||||
validate: function(value, callback) { | validate: function(value, callback) { | ||||
if(value && !dateutil.validate(value)) { | |||||
msgprint (__("Date must be in format: {0}", [sys_defaults.date_format || "yyyy-mm-dd"])); | |||||
if(value && !frappe.datetime.validate(value)) { | |||||
frappe.msgprint(__("Date must be in format: {0}", [frappe.sys_defaults.date_format || "yyyy-mm-dd"])); | |||||
callback(""); | callback(""); | ||||
return; | return; | ||||
} | } | ||||
@@ -733,14 +734,14 @@ frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({ | |||||
parse: function(value) { | parse: function(value) { | ||||
if(value) { | if(value) { | ||||
// parse and convert | // parse and convert | ||||
value = dateutil.convert_to_system_tz(dateutil.user_to_str(value)); | |||||
value = frappe.datetime.convert_to_system_tz(frappe.datetime.user_to_str(value)); | |||||
} | } | ||||
return value; | return value; | ||||
}, | }, | ||||
format_for_input: function(value) { | format_for_input: function(value) { | ||||
if(value) { | if(value) { | ||||
// convert and format | // convert and format | ||||
value = dateutil.str_to_user(dateutil.convert_to_user_tz(value)); | |||||
value = frappe.datetime.str_to_user(frappe.datetime.convert_to_user_tz(value)); | |||||
} | } | ||||
return value || ""; | return value || ""; | ||||
} | } | ||||
@@ -789,16 +790,16 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({ | |||||
}, | }, | ||||
parse: function(value) { | parse: function(value) { | ||||
if(value && (value.indexOf(',') !== -1 || value.indexOf('to') !== -1)) { | if(value && (value.indexOf(',') !== -1 || value.indexOf('to') !== -1)) { | ||||
vals = value.split(/[( to )(,)]/) | |||||
from_date = moment(dateutil.user_to_obj(vals[0])).format('YYYY-MM-DD'); | |||||
to_date = moment(dateutil.user_to_obj(vals[vals.length-1])).format('YYYY-MM-DD'); | |||||
var vals = value.split(/[( to )(,)]/) | |||||
var from_date = moment(frappe.datetime.user_to_obj(vals[0])).format('YYYY-MM-DD'); | |||||
var to_date = moment(frappe.datetime.user_to_obj(vals[vals.length-1])).format('YYYY-MM-DD'); | |||||
return [from_date, to_date]; | return [from_date, to_date]; | ||||
} | } | ||||
}, | }, | ||||
format_for_input: function(value,value2) { | format_for_input: function(value,value2) { | ||||
if(value && value2) { | if(value && value2) { | ||||
value = dateutil.str_to_user(value); | |||||
value2 = dateutil.str_to_user(value2); | |||||
value = frappe.datetime.str_to_user(value); | |||||
value2 = frappe.datetime.str_to_user(value2); | |||||
return value + " to " + value2 | return value + " to " + value2 | ||||
} | } | ||||
return ""; | return ""; | ||||
@@ -1025,7 +1026,7 @@ frappe.ui.form.ControlAttach = frappe.ui.form.ControlData.extend({ | |||||
me.dialog.hide(); | me.dialog.hide(); | ||||
me.frm.save(); | me.frm.save(); | ||||
} else { | } else { | ||||
msgprint(__("Please attach a file or set a URL")); | |||||
frappe.msgprint(__("Please attach a file or set a URL")); | |||||
} | } | ||||
}, | }, | ||||
callback: function(attachment, r) { | callback: function(attachment, r) { | ||||
@@ -1346,7 +1347,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ | |||||
return true; | return true; | ||||
}, | }, | ||||
item: function (item, input) { | item: function (item, input) { | ||||
d = this.get_item(item.value); | |||||
var d = this.get_item(item.value); | |||||
if(!d.label) { d.label = d.value; } | if(!d.label) { d.label = d.value; } | ||||
var _label = (me.translate_values) ? __(d.label) : d.label; | var _label = (me.translate_values) ? __(d.label) : d.label; | ||||
@@ -1408,7 +1409,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ | |||||
value: "create_new__link_option", | value: "create_new__link_option", | ||||
action: me.new_doc | action: me.new_doc | ||||
}) | }) | ||||
}; | |||||
} | |||||
// advanced search | // advanced search | ||||
r.results.push({ | r.results.push({ | ||||
label: "<span class='text-primary link-option'>" | label: "<span class='text-primary link-option'>" | ||||
@@ -1591,7 +1592,7 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({ | |||||
} | } | ||||
var options = frappe.model.get_value(this.df.parent, this.docname, this.df.options); | var options = frappe.model.get_value(this.df.parent, this.docname, this.df.options); | ||||
// if(!options) { | // if(!options) { | ||||
// msgprint(__("Please set {0} first", | |||||
// frappe.msgprint(__("Please set {0} first", | |||||
// [frappe.meta.get_docfield(this.df.parent, this.df.options, this.docname).label])); | // [frappe.meta.get_docfield(this.df.parent, this.df.options, this.docname).label])); | ||||
// } | // } | ||||
return options; | return options; | ||||
@@ -1797,7 +1798,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ | |||||
me.editor.summernote('insertImage', selected); | me.editor.summernote('insertImage', selected); | ||||
me.image_dialog.hide(); | me.image_dialog.hide(); | ||||
} else { | } else { | ||||
msgprint(__("Please attach a file or set a URL")); | |||||
frappe.msgprint(__("Please attach a file or set a URL")); | |||||
} | } | ||||
}, | }, | ||||
callback: function(attachment, r) { | callback: function(attachment, r) { | ||||
@@ -1908,9 +1909,9 @@ frappe.ui.form.ControlSignature = frappe.ui.form.ControlData.extend({ | |||||
// make jSignature field | // make jSignature field | ||||
this.$pad = $('<div class="signature-field"></div>') | this.$pad = $('<div class="signature-field"></div>') | ||||
.appendTo(me.wrapper) | |||||
.jSignature({height:300, width: "100%", "lineWidth": 0.8}) | |||||
.on('change', this.on_save_sign.bind(this)); | |||||
.appendTo(me.wrapper) | |||||
.jSignature({height:300, width: "100%", "lineWidth": 0.8}) | |||||
.on('change', this.on_save_sign.bind(this)); | |||||
this.img_wrapper = $(`<div class="signature-display"> | this.img_wrapper = $(`<div class="signature-display"> | ||||
<div class="missing-image attach-missing-image"> | <div class="missing-image attach-missing-image"> | ||||
@@ -1938,7 +1939,7 @@ frappe.ui.form.ControlSignature = frappe.ui.form.ControlData.extend({ | |||||
this.set_editable(this.get_status()=="Write"); | this.set_editable(this.get_status()=="Write"); | ||||
this.load_pad(); | this.load_pad(); | ||||
if(this.get_status()=="Read") { | if(this.get_status()=="Read") { | ||||
$(this.disp_area).toggle(false); | |||||
$(this.disp_area).toggle(false); | |||||
} | } | ||||
}, | }, | ||||
set_image: function(value) { | set_image: function(value) { | ||||
@@ -1976,15 +1977,15 @@ frappe.ui.form.ControlSignature = frappe.ui.form.ControlData.extend({ | |||||
} | } | ||||
}, | }, | ||||
set_editable: function(editable) { | set_editable: function(editable) { | ||||
this.$pad.toggle(editable); | |||||
this.img_wrapper.toggle(!editable); | |||||
this.$btnWrapper.toggle(editable); | |||||
if (editable) { | |||||
this.$btnWrapper.addClass('editing'); | |||||
} | |||||
else { | |||||
this.$btnWrapper.removeClass('editing'); | |||||
} | |||||
this.$pad.toggle(editable); | |||||
this.img_wrapper.toggle(!editable); | |||||
this.$btnWrapper.toggle(editable); | |||||
if (editable) { | |||||
this.$btnWrapper.addClass('editing'); | |||||
} | |||||
else { | |||||
this.$btnWrapper.removeClass('editing'); | |||||
} | |||||
}, | }, | ||||
set_my_value: function(value) { | set_my_value: function(value) { | ||||
if (this.saving || this.loading) return; | if (this.saving || this.loading) return; | ||||
@@ -259,7 +259,7 @@ frappe.ui.form.Dashboard = Class.extend({ | |||||
group.items.forEach(function(item) { items.push(item); }); | group.items.forEach(function(item) { items.push(item); }); | ||||
}); | }); | ||||
method = this.data.method || 'frappe.desk.notifications.get_open_count'; | |||||
var method = this.data.method || 'frappe.desk.notifications.get_open_count'; | |||||
frappe.call({ | frappe.call({ | ||||
type: "GET", | type: "GET", | ||||
@@ -359,7 +359,7 @@ frappe.ui.form.Dashboard = Class.extend({ | |||||
} else { | } else { | ||||
heatmap_message.addClass('hidden'); | heatmap_message.addClass('hidden'); | ||||
} | } | ||||
} | |||||
} | |||||
}, | }, | ||||
add_indicator: function(label, color) { | add_indicator: function(label, color) { | ||||
@@ -370,6 +370,7 @@ frappe.ui.form.Dashboard = Class.extend({ | |||||
// set colspan | // set colspan | ||||
var indicators = this.stats_area_row.find('.indicator-column'); | var indicators = this.stats_area_row.find('.indicator-column'); | ||||
var n_indicators = indicators.length + 1; | var n_indicators = indicators.length + 1; | ||||
var colspan; | |||||
if(n_indicators > 4) { colspan = 3 } | if(n_indicators > 4) { colspan = 3 } | ||||
else { colspan = 12 / n_indicators; } | else { colspan = 12 / n_indicators; } | ||||
@@ -55,13 +55,13 @@ frappe.ui.form.AssignTo = Class.extend({ | |||||
</li>', info)) | </li>', info)) | ||||
.insertBefore(this.parent.find('.add-assignment')); | .insertBefore(this.parent.find('.add-assignment')); | ||||
if(d[i].owner===user) { | |||||
if(d[i].owner===frappe.session.user) { | |||||
me.primary_action = this.frm.page.add_menu_item(__("Assignment Complete"), function() { | me.primary_action = this.frm.page.add_menu_item(__("Assignment Complete"), function() { | ||||
me.remove(user); | |||||
me.remove(frappe.session.user); | |||||
}, "fa fa-check", "btn-success") | }, "fa fa-check", "btn-success") | ||||
} | } | ||||
if(!(d[i].owner === user || me.frm.perm[0].write)) { | |||||
if(!(d[i].owner === frappe.session.user || me.frm.perm[0].write)) { | |||||
me.parent.find('a.close').remove(); | me.parent.find('a.close').remove(); | ||||
} | } | ||||
} | } | ||||
@@ -164,7 +164,7 @@ frappe.ui.form.AssignToDialog = Class.extend({ | |||||
toggle_myself: function(myself) { | toggle_myself: function(myself) { | ||||
var me = this; | var me = this; | ||||
if($(myself).prop("checked")) { | if($(myself).prop("checked")) { | ||||
me.set_value("assign_to", user); | |||||
me.set_value("assign_to", frappe.session.user); | |||||
me.set_value("notify", 0); | me.set_value("notify", 0); | ||||
me.get_field("notify").$wrapper.toggle(false); | me.get_field("notify").$wrapper.toggle(false); | ||||
me.get_field("assign_to").$wrapper.toggle(false); | me.get_field("assign_to").$wrapper.toggle(false); | ||||
@@ -18,7 +18,7 @@ frappe.ui.form.Attachments = Class.extend({ | |||||
}, | }, | ||||
max_reached: function() { | max_reached: function() { | ||||
// no of attachments | // no of attachments | ||||
var n = keys(this.get_attachments()).length; | |||||
var n = Object.keys(this.get_attachments()).length; | |||||
// button if the number of attachments is less than max | // button if the number of attachments is less than max | ||||
if(n < this.frm.meta.max_attachments || !this.frm.meta.max_attachments) { | if(n < this.frm.meta.max_attachments || !this.frm.meta.max_attachments) { | ||||
@@ -135,7 +135,7 @@ frappe.ui.form.Attachments = Class.extend({ | |||||
callback: function(r,rt) { | callback: function(r,rt) { | ||||
if(r.exc) { | if(r.exc) { | ||||
if(!r._server_messages) | if(!r._server_messages) | ||||
msgprint(__("There were errors")); | |||||
frappe.msgprint(__("There were errors")); | |||||
return; | return; | ||||
} | } | ||||
me.remove_fileid(fileid); | me.remove_fileid(fileid); | ||||
@@ -207,13 +207,13 @@ frappe.ui.form.Attachments = Class.extend({ | |||||
}); | }); | ||||
frappe.ui.get_upload_dialog = function(opts){ | frappe.ui.get_upload_dialog = function(opts){ | ||||
dialog = new frappe.ui.Dialog({ | |||||
title: __('Upload Attachment'), | |||||
var dialog = new frappe.ui.Dialog({ | |||||
title: __('Upload Attachment'), | |||||
no_focus: true, | no_focus: true, | ||||
fields: [ | |||||
fields: [ | |||||
{fieldtype: "Section Break"}, | {fieldtype: "Section Break"}, | ||||
{"fieldtype": "Link" , "fieldname": "file" , "label": __("Select uploaded file"), "options": "File"}, | {"fieldtype": "Link" , "fieldname": "file" , "label": __("Select uploaded file"), "options": "File"}, | ||||
], | |||||
], | |||||
}); | }); | ||||
var btn = dialog.set_primary_action(__("Attach")); | var btn = dialog.set_primary_action(__("Attach")); | ||||
@@ -224,22 +224,22 @@ frappe.ui.get_upload_dialog = function(opts){ | |||||
var fd = dialog.fields_dict; | var fd = dialog.fields_dict; | ||||
$(fd.file.input).change(function() { | $(fd.file.input).change(function() { | ||||
frappe.call({ | |||||
frappe.call({ | |||||
'method': 'frappe.client.get_value', | 'method': 'frappe.client.get_value', | ||||
'args': { | 'args': { | ||||
'doctype': 'File', | |||||
'fieldname': ['file_url','file_name','is_private'], | |||||
'filters': { | |||||
'name': dialog.get_value("file") | |||||
} | |||||
'doctype': 'File', | |||||
'fieldname': ['file_url','file_name','is_private'], | |||||
'filters': { | |||||
'name': dialog.get_value("file") | |||||
} | |||||
}, | }, | ||||
callback: function(r){ | callback: function(r){ | ||||
if(!r.message) return; | if(!r.message) return; | ||||
dialog.$wrapper.find('[name="file_url"]').val(r.message.file_url); | |||||
dialog.$wrapper.find('[name="file_url"]').val(r.message.file_url); | |||||
dialog.$wrapper.find('.private-file input').prop('checked', r.message.is_private); | dialog.$wrapper.find('.private-file input').prop('checked', r.message.is_private); | ||||
opts.args.filename = r.message.file_name | opts.args.filename = r.message.file_name | ||||
} | } | ||||
}); | |||||
}); | |||||
}); | }); | ||||
frappe.upload.make({ | frappe.upload.make({ | ||||
parent: upload_area, | parent: upload_area, | ||||
@@ -76,10 +76,10 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
setup_email_button: function() { | setup_email_button: function() { | ||||
var me = this; | var me = this; | ||||
selector = this.frm.doctype === "Communication"? ".btn-reply-email": ".btn-new-email" | |||||
var selector = this.frm.doctype === "Communication"? ".btn-reply-email": ".btn-new-email" | |||||
this.email_button = this.wrapper.find(selector) | this.email_button = this.wrapper.find(selector) | ||||
.on("click", function() { | .on("click", function() { | ||||
args = { | |||||
var args = { | |||||
doc: me.frm.doc, | doc: me.frm.doc, | ||||
frm: me.frm, | frm: me.frm, | ||||
recipients: me.get_recipient() | recipients: me.get_recipient() | ||||
@@ -116,13 +116,13 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
var communications = this.get_communications(true); | var communications = this.get_communications(true); | ||||
$.each(communications.sort(function(a, b) { return a.creation > b.creation ? -1 : 1 }), | |||||
function(i, c) { | |||||
if(c.content) { | |||||
c.frm = me.frm; | |||||
me.render_timeline_item(c); | |||||
} | |||||
}); | |||||
communications | |||||
.sort((a, b) => a.creation > b.creation ? -1 : 1) | |||||
.filter(c => c.content) | |||||
.forEach(c => { | |||||
c.frm = me.frm; | |||||
me.render_timeline_item(c); | |||||
}); | |||||
// more btn | // more btn | ||||
if (this.more===undefined && communications.length===20) { | if (this.more===undefined && communications.length===20) { | ||||
@@ -309,7 +309,7 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
c._liked_by = JSON.parse(c._liked_by || "[]"); | c._liked_by = JSON.parse(c._liked_by || "[]"); | ||||
} | } | ||||
c.liked_by_user = c._liked_by.indexOf(user)!==-1; | |||||
c.liked_by_user = c._liked_by.indexOf(frappe.session.user)!==-1; | |||||
} | } | ||||
} | } | ||||
@@ -453,7 +453,7 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
p[0], me.frm.docname); | p[0], me.frm.docname); | ||||
if(df && !df.hidden) { | if(df && !df.hidden) { | ||||
field_display_status = frappe.perm.get_field_display_status(df, | |||||
var field_display_status = frappe.perm.get_field_display_status(df, | |||||
null, me.frm.perm); | null, me.frm.perm); | ||||
if(field_display_status === 'Read' || field_display_status === 'Write') { | if(field_display_status === 'Read' || field_display_status === 'Write') { | ||||
@@ -535,7 +535,7 @@ frappe.ui.form.Timeline = Class.extend({ | |||||
reference_doctype: this.frm.doctype, | reference_doctype: this.frm.doctype, | ||||
reference_name: this.frm.docname, | reference_name: this.frm.docname, | ||||
content: comment, | content: comment, | ||||
sender: user | |||||
sender: frappe.session.user | |||||
} | } | ||||
}, | }, | ||||
btn: btn, | btn: btn, | ||||
@@ -41,7 +41,7 @@ | |||||
</span> | </span> | ||||
<span class="text-muted" style="font-weight: normal;"> | <span class="text-muted" style="font-weight: normal;"> | ||||
– {%= data.comment_on %}</span> | – {%= data.comment_on %}</span> | ||||
{% if(inList(["Communication", "Feedback"], data.communication_type)) { %} | |||||
{% if(in_list(["Communication", "Feedback"], data.communication_type)) { %} | |||||
{% if (frappe.model.can_read(\'Communication\')) { %} | {% if (frappe.model.can_read(\'Communication\')) { %} | ||||
<a href="#Form/{%= data.doctype %}/{%= data.name %}" | <a href="#Form/{%= data.doctype %}/{%= data.name %}" | ||||
class="text-muted"> | class="text-muted"> | ||||
@@ -43,9 +43,9 @@ frappe.ui.form.Viewers = Class.extend({ | |||||
if (data_updated && new_users.length) { | if (data_updated && new_users.length) { | ||||
// new user viewing this document, who wasn't viewing in the past | // new user viewing this document, who wasn't viewing in the past | ||||
if (new_users.length===1) { | if (new_users.length===1) { | ||||
show_alert(__("{0} is currently viewing this document", [new_users[0]])); | |||||
frappe.show_alert(__("{0} is currently viewing this document", [new_users[0]])); | |||||
} else { | } else { | ||||
show_alert(__("{0} are currently viewing this document", [frappe.utils.comma_and(new_users)])); | |||||
frappe.show_alert(__("{0} are currently viewing this document", [frappe.utils.comma_and(new_users)])); | |||||
} | } | ||||
} | } | ||||
@@ -56,15 +56,9 @@ frappe.ui.form.set_viewers = function(data) { | |||||
var doctype = data.doctype; | var doctype = data.doctype; | ||||
var docname = data.docname; | var docname = data.docname; | ||||
var past_viewers = (frappe.model.get_docinfo(doctype, docname).viewers || {}).past || []; | var past_viewers = (frappe.model.get_docinfo(doctype, docname).viewers || {}).past || []; | ||||
var new_viewers = []; | |||||
var viewers = data.viewers || []; | var viewers = data.viewers || []; | ||||
for (i=0, l=viewers.length; i < l; i++) { | |||||
var username = viewers[i]; | |||||
if (past_viewers.indexOf(username)===-1) { | |||||
new_viewers.push(username); | |||||
} | |||||
} | |||||
var new_viewers = viewers.filter(viewer => !past_viewers.includes(viewer)); | |||||
frappe.model.set_docinfo(doctype, docname, "viewers", { | frappe.model.set_docinfo(doctype, docname, "viewers", { | ||||
past: past_viewers.concat(new_viewers), | past: past_viewers.concat(new_viewers), | ||||
@@ -99,7 +99,7 @@ frappe.form.formatters = { | |||||
}, | }, | ||||
Date: function(value) { | Date: function(value) { | ||||
if (value) { | if (value) { | ||||
value = dateutil.str_to_user(value); | |||||
value = frappe.datetime.str_to_user(value); | |||||
// handle invalid date | // handle invalid date | ||||
if (value==="Invalid date") { | if (value==="Invalid date") { | ||||
value = null; | value = null; | ||||
@@ -110,7 +110,7 @@ frappe.form.formatters = { | |||||
}, | }, | ||||
Datetime: function(value) { | Datetime: function(value) { | ||||
if(value) { | if(value) { | ||||
var m = moment(dateutil.convert_to_user_tz(value)); | |||||
var m = moment(frappe.datetime.convert_to_user_tz(value)); | |||||
if(frappe.boot.sysdefaults.time_zone) { | if(frappe.boot.sysdefaults.time_zone) { | ||||
m = m.tz(frappe.boot.sysdefaults.time_zone); | m = m.tz(frappe.boot.sysdefaults.time_zone); | ||||
} | } | ||||
@@ -182,7 +182,7 @@ frappe.form.formatters = { | |||||
return "<pre>" + (value==null ? "" : $("<div>").text(value).html()) + "</pre>" | return "<pre>" + (value==null ? "" : $("<div>").text(value).html()) + "</pre>" | ||||
}, | }, | ||||
WorkflowState: function(value) { | WorkflowState: function(value) { | ||||
workflow_state = frappe.get_doc("Workflow State", value); | |||||
var workflow_state = frappe.get_doc("Workflow State", value); | |||||
if(workflow_state) { | if(workflow_state) { | ||||
return repl("<span class='label label-%(style)s' \ | return repl("<span class='label label-%(style)s' \ | ||||
data-workflow-state='%(value)s'\ | data-workflow-state='%(value)s'\ | ||||
@@ -217,7 +217,7 @@ frappe.format = function(value, df, options, doc) { | |||||
df._options = doc ? doc[df.options] : null; | df._options = doc ? doc[df.options] : null; | ||||
} | } | ||||
formatter = df.formatter || frappe.form.get_formatter(fieldtype); | |||||
var formatter = df.formatter || frappe.form.get_formatter(fieldtype); | |||||
var formatted = formatter(value, df, options, doc); | var formatted = formatter(value, df, options, doc); | ||||
@@ -231,7 +231,7 @@ frappe.get_format_helper = function(doc) { | |||||
var helper = { | var helper = { | ||||
get_formatted: function(fieldname) { | get_formatted: function(fieldname) { | ||||
var df = frappe.meta.get_docfield(doc.doctype, fieldname); | var df = frappe.meta.get_docfield(doc.doctype, fieldname); | ||||
if(!df) { console.log("fieldname not found: " + fieldname); }; | |||||
if(!df) { console.log("fieldname not found: " + fieldname); } | |||||
return frappe.format(doc[fieldname], df, {inline:1}, doc); | return frappe.format(doc[fieldname], df, {inline:1}, doc); | ||||
} | } | ||||
}; | }; | ||||
@@ -31,7 +31,7 @@ frappe.ui.form.Grid = Class.extend({ | |||||
this.multiple_set = false; | this.multiple_set = false; | ||||
if(this.frm && this.frm.meta.__form_grid_templates | if(this.frm && this.frm.meta.__form_grid_templates | ||||
&& this.frm.meta.__form_grid_templates[this.df.fieldname]) { | && this.frm.meta.__form_grid_templates[this.df.fieldname]) { | ||||
this.template = this.frm.meta.__form_grid_templates[this.df.fieldname]; | |||||
this.template = this.frm.meta.__form_grid_templates[this.df.fieldname]; | |||||
} | } | ||||
this.is_grid = true; | this.is_grid = true; | ||||
@@ -72,7 +72,7 @@ frappe.ui.form.Grid = Class.extend({ | |||||
setup_check: function() { | setup_check: function() { | ||||
var me = this; | var me = this; | ||||
this.wrapper.on('click', '.grid-row-check', function(e) { | this.wrapper.on('click', '.grid-row-check', function(e) { | ||||
$check = $(this); | |||||
var $check = $(this); | |||||
if($check.parents('.grid-heading-row:first').length!==0) { | if($check.parents('.grid-heading-row:first').length!==0) { | ||||
// select all? | // select all? | ||||
var checked = $check.prop('checked'); | var checked = $check.prop('checked'); | ||||
@@ -102,7 +102,7 @@ frappe.ui.form.Grid = Class.extend({ | |||||
}); | }); | ||||
}, | }, | ||||
select_row: function(name) { | select_row: function(name) { | ||||
me.grid_rows_by_docname[name].select(); | |||||
this.grid_rows_by_docname[name].select(); | |||||
}, | }, | ||||
refresh_remove_rows_button: function() { | refresh_remove_rows_button: function() { | ||||
this.remove_rows_button.toggleClass('hide', | this.remove_rows_button.toggleClass('hide', | ||||
@@ -345,11 +345,11 @@ frappe.ui.form.Grid = Class.extend({ | |||||
this.refresh(); | this.refresh(); | ||||
}, | }, | ||||
toggle_enable: function(fieldname, enable) { | toggle_enable: function(fieldname, enable) { | ||||
this.get_docfield(fieldname).read_only = enable ? 0 : 1;; | |||||
this.get_docfield(fieldname).read_only = enable ? 0 : 1; | |||||
this.refresh(); | this.refresh(); | ||||
}, | }, | ||||
toggle_display: function(fieldname, show) { | toggle_display: function(fieldname, show) { | ||||
this.get_docfield(fieldname).hidden = show ? 0 : 1;; | |||||
this.get_docfield(fieldname).hidden = show ? 0 : 1; | |||||
this.refresh(); | this.refresh(); | ||||
}, | }, | ||||
get_docfield: function(fieldname) { | get_docfield: function(fieldname) { | ||||
@@ -428,27 +428,25 @@ frappe.ui.form.Grid = Class.extend({ | |||||
&& (this.editable_fields || df.in_list_view) | && (this.editable_fields || df.in_list_view) | ||||
&& (this.frm && this.frm.get_perm(df.permlevel, "read") || !this.frm) | && (this.frm && this.frm.get_perm(df.permlevel, "read") || !this.frm) | ||||
&& !in_list(frappe.model.layout_fields, df.fieldtype)) { | && !in_list(frappe.model.layout_fields, df.fieldtype)) { | ||||
if(df.columns) { | |||||
df.colsize=df.columns; | |||||
} | |||||
else { | |||||
var colsize=2; | |||||
switch(df.fieldtype){ | |||||
case"Text": | |||||
case"Small Text": | |||||
colsize=3; | |||||
break; | |||||
case"Check": | |||||
colsize=1 | |||||
} | |||||
df.colsize=colsize | |||||
} | |||||
total_colsize += df.colsize | |||||
if(total_colsize > 11) | |||||
return false; | |||||
this.visible_columns.push([df, df.colsize]); | |||||
if(df.columns) { | |||||
df.colsize=df.columns; | |||||
} | } | ||||
else { | |||||
var colsize = 2; | |||||
switch(df.fieldtype) { | |||||
case "Text": | |||||
case "Small Text": colsize = 3; break; | |||||
case"Check": colsize = 1; | |||||
} | |||||
df.colsize = colsize; | |||||
} | |||||
total_colsize += df.colsize; | |||||
if(total_colsize > 11) | |||||
return false; | |||||
this.visible_columns.push([df, df.colsize]); | |||||
} | |||||
} | } | ||||
// redistribute if total-col size is less than 12 | // redistribute if total-col size is less than 12 | ||||
@@ -586,7 +584,7 @@ frappe.ui.form.Grid = Class.extend({ | |||||
// add data | // add data | ||||
$.each(me.frm.doc[me.df.fieldname] || [], function(i, d) { | $.each(me.frm.doc[me.df.fieldname] || [], function(i, d) { | ||||
row = []; | |||||
var row = []; | |||||
$.each(data[2], function(i, fieldname) { | $.each(data[2], function(i, fieldname) { | ||||
var value = d[fieldname]; | var value = d[fieldname]; | ||||
@@ -759,9 +757,10 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
// index (1, 2, 3 etc) | // index (1, 2, 3 etc) | ||||
if(!this.row_index) { | if(!this.row_index) { | ||||
var txt = (this.doc ? this.doc.idx : " "); | var txt = (this.doc ? this.doc.idx : " "); | ||||
this.row_index = $('<div class="row-index sortable-handle col col-xs-1">' + | |||||
this.row_check_html + | |||||
' <span>' + txt + '</span></div>') | |||||
this.row_index = $( | |||||
`<div class="row-index sortable-handle col col-xs-1"> | |||||
${this.row_check_html} | |||||
<span>${txt}</span></div>`) | |||||
.appendTo(this.row) | .appendTo(this.row) | ||||
.on('click', function(e) { | .on('click', function(e) { | ||||
if(!$(e.target).hasClass('grid-row-check')) { | if(!$(e.target).hasClass('grid-row-check')) { | ||||
@@ -852,7 +851,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
add_class += (["Check"].indexOf(df.fieldtype)!==-1) ? | add_class += (["Check"].indexOf(df.fieldtype)!==-1) ? | ||||
" text-center": ""; | " text-center": ""; | ||||
$col = $('<div class="col grid-static-col col-xs-'+colsize+' '+add_class+'"></div>') | |||||
var $col = $('<div class="col grid-static-col col-xs-'+colsize+' '+add_class+'"></div>') | |||||
.attr("data-fieldname", df.fieldname) | .attr("data-fieldname", df.fieldname) | ||||
.attr("data-fieldtype", df.fieldtype) | .attr("data-fieldtype", df.fieldtype) | ||||
.data("df", df) | .data("df", df) | ||||
@@ -861,7 +860,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
if(frappe.ui.form.editable_row===me) { | if(frappe.ui.form.editable_row===me) { | ||||
return; | return; | ||||
} | } | ||||
out = me.toggle_editable_row(); | |||||
var out = me.toggle_editable_row(); | |||||
var col = this; | var col = this; | ||||
setTimeout(function() { | setTimeout(function() { | ||||
$(col).find('input[type="Text"]:first').focus(); | $(col).find('input[type="Text"]:first').focus(); | ||||
@@ -890,7 +889,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
if(frappe.ui.form.editable_row | if(frappe.ui.form.editable_row | ||||
&& frappe.ui.form.editable_row !== this) { | && frappe.ui.form.editable_row !== this) { | ||||
frappe.ui.form.editable_row.toggle_editable_row(false); | frappe.ui.form.editable_row.toggle_editable_row(false); | ||||
}; | |||||
} | |||||
this.row.toggleClass('editable-row', true); | this.row.toggleClass('editable-row', true); | ||||
@@ -942,15 +941,15 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
field.get_query = this.grid.get_field(df.fieldname).get_query; | field.get_query = this.grid.get_field(df.fieldname).get_query; | ||||
field.refresh(); | field.refresh(); | ||||
if(field.$input) { | if(field.$input) { | ||||
field.$input.addClass('input-sm'); | |||||
field.$input | field.$input | ||||
.addClass('input-sm') | |||||
.attr('data-col-idx', column.column_index) | .attr('data-col-idx', column.column_index) | ||||
.attr('placeholder', __(df.label)); | .attr('placeholder', __(df.label)); | ||||
// flag list input | |||||
if (this.columns_list && this.columns_list.slice(-1)[0]===column) { | |||||
field.$input.attr('data-last-input', 1); | |||||
} | |||||
// flag list input | |||||
if (this.columns_list && this.columns_list.slice(-1)[0]===column) { | |||||
field.$input.attr('data-last-input', 1); | |||||
} | |||||
} | } | ||||
this.set_arrow_keys(field); | this.set_arrow_keys(field); | ||||
@@ -964,6 +963,7 @@ frappe.ui.form.GridRow = Class.extend({ | |||||
var me = this; | var me = this; | ||||
if(field.$input) { | if(field.$input) { | ||||
field.$input.on('keydown', function(e) { | field.$input.on('keydown', function(e) { | ||||
var { TAB, UP_ARROW, DOWN_ARROW } = frappe.ui.keyCode; | |||||
if(!in_list([TAB, UP_ARROW, DOWN_ARROW], e.which)) { | if(!in_list([TAB, UP_ARROW, DOWN_ARROW], e.which)) { | ||||
return; | return; | ||||
} | } | ||||
@@ -54,18 +54,14 @@ frappe.ui.form.Layout = Class.extend({ | |||||
this.make_section(); | this.make_section(); | ||||
} | } | ||||
$.each(this.fields, function(i, df) { | $.each(this.fields, function(i, df) { | ||||
switch(df.fieldtype) { | |||||
case "Fold": | |||||
me.make_page(df); | |||||
break; | |||||
case "Section Break": | |||||
me.make_section(df); | |||||
break; | |||||
case "Column Break": | |||||
me.make_column(df); | |||||
break; | |||||
default: | |||||
me.make_field(df); | |||||
if(df.fieldtype === "Fold") { | |||||
me.make_page(df); | |||||
} else if (df.fieldtype === "Section Break") { | |||||
me.make_section(df); | |||||
} else if (df.fieldtype === "Column Break") { | |||||
me.make_column(df); | |||||
} else { | |||||
me.make_field(df); | |||||
} | } | ||||
}); | }); | ||||
@@ -225,7 +221,7 @@ frappe.ui.form.Layout = Class.extend({ | |||||
if(me.frm) { | if(me.frm) { | ||||
fieldobj.perm = me.frm.perm; | fieldobj.perm = me.frm.perm; | ||||
} | } | ||||
}; | |||||
} | |||||
refresh && fieldobj.refresh && fieldobj.refresh(); | refresh && fieldobj.refresh && fieldobj.refresh(); | ||||
} | } | ||||
}, | }, | ||||
@@ -249,7 +245,7 @@ frappe.ui.form.Layout = Class.extend({ | |||||
}, | }, | ||||
handle_tab: function(doctype, fieldname, shift) { | handle_tab: function(doctype, fieldname, shift) { | ||||
var me = this, | var me = this, | ||||
grid_row = null; | |||||
grid_row = null, | |||||
prev = null, | prev = null, | ||||
fields = me.fields_list, | fields = me.fields_list, | ||||
in_grid = false, | in_grid = false, | ||||
@@ -357,7 +353,7 @@ frappe.ui.form.Layout = Class.extend({ | |||||
// build dependants' dictionary | // build dependants' dictionary | ||||
var has_dep = false; | var has_dep = false; | ||||
for(fkey in this.fields_list) { | |||||
for(var fkey in this.fields_list) { | |||||
var f = this.fields_list[fkey]; | var f = this.fields_list[fkey]; | ||||
f.dependencies_clear = true; | f.dependencies_clear = true; | ||||
if(f.df.depends_on) { | if(f.df.depends_on) { | ||||
@@ -409,7 +405,7 @@ frappe.ui.form.Layout = Class.extend({ | |||||
if(expression.substr(0,5)=='eval:') { | if(expression.substr(0,5)=='eval:') { | ||||
out = eval(expression.substr(5)); | out = eval(expression.substr(5)); | ||||
} else if(expression.substr(0,3)=='fn:' && me.frm) { | |||||
} else if(expression.substr(0,3)=='fn:' && this.frm) { | |||||
out = this.frm.script_manager.trigger(expression.substr(3), this.doctype, this.docname); | out = this.frm.script_manager.trigger(expression.substr(3), this.doctype, this.docname); | ||||
} else { | } else { | ||||
var value = doc[expression]; | var value = doc[expression]; | ||||
@@ -2,22 +2,24 @@ | |||||
// MIT License. See license.txt | // MIT License. See license.txt | ||||
frappe.ui.form.LinkSelector = Class.extend({ | frappe.ui.form.LinkSelector = Class.extend({ | ||||
init: function(opts) { | |||||
init: function (opts) { | |||||
/* help: Options: doctype, get_query, target */ | /* help: Options: doctype, get_query, target */ | ||||
$.extend(this, opts); | $.extend(this, opts); | ||||
var me = this; | var me = this; | ||||
if(this.doctype!="[Select]") { | |||||
frappe.model.with_doctype(this.doctype, function(r) { | |||||
if (this.doctype != "[Select]") { | |||||
frappe.model.with_doctype(this.doctype, function (r) { | |||||
me.make(); | me.make(); | ||||
}); | }); | ||||
} else { | } else { | ||||
this.make(); | this.make(); | ||||
} | } | ||||
}, | }, | ||||
make: function() { | |||||
make: function () { | |||||
var me = this; | |||||
this.dialog = new frappe.ui.Dialog({ | this.dialog = new frappe.ui.Dialog({ | ||||
title: __("Select {0}", [(this.doctype=='[Select]') ? __("value") : __(this.doctype)]), | |||||
title: __("Select {0}", [(this.doctype == '[Select]') ? __("value") : __(this.doctype)]), | |||||
fields: [ | fields: [ | ||||
{ | { | ||||
fieldtype: "Data", fieldname: "txt", label: __("Beginning with"), | fieldtype: "Data", fieldname: "txt", label: __("Beginning with"), | ||||
@@ -28,46 +30,45 @@ frappe.ui.form.LinkSelector = Class.extend({ | |||||
} | } | ||||
], | ], | ||||
primary_action_label: __("Search"), | primary_action_label: __("Search"), | ||||
primary_action: function() { | |||||
primary_action: function () { | |||||
me.search(); | me.search(); | ||||
} | } | ||||
}); | }); | ||||
me = this; | |||||
if(this.txt) | |||||
if (this.txt) | |||||
this.dialog.fields_dict.txt.set_input(this.txt); | this.dialog.fields_dict.txt.set_input(this.txt); | ||||
this.dialog.get_input("txt").on("keypress", function(e) { | |||||
if(e.which===13) { | |||||
this.dialog.get_input("txt").on("keypress", function (e) { | |||||
if (e.which === 13) { | |||||
me.search(); | me.search(); | ||||
} | } | ||||
}); | }); | ||||
this.dialog.show(); | this.dialog.show(); | ||||
this.search(); | this.search(); | ||||
}, | }, | ||||
search: function() { | |||||
search: function () { | |||||
var args = { | var args = { | ||||
txt: this.dialog.fields_dict.txt.get_value(), | |||||
searchfield: "name" | |||||
}, | |||||
me = this; | |||||
txt: this.dialog.fields_dict.txt.get_value(), | |||||
searchfield: "name" | |||||
}; | |||||
var me = this; | |||||
if(this.target.set_custom_query) { | |||||
if (this.target.set_custom_query) { | |||||
this.target.set_custom_query(args); | this.target.set_custom_query(args); | ||||
} | } | ||||
// load custom query from grid | // load custom query from grid | ||||
if(this.target.is_grid && this.target.fieldinfo[this.fieldname] | |||||
if (this.target.is_grid && this.target.fieldinfo[this.fieldname] | |||||
&& this.target.fieldinfo[this.fieldname].get_query) { | && this.target.fieldinfo[this.fieldname].get_query) { | ||||
$.extend(args, | $.extend(args, | ||||
this.target.fieldinfo[this.fieldname].get_query(cur_frm.doc)); | |||||
this.target.fieldinfo[this.fieldname].get_query(cur_frm.doc)); | |||||
} | } | ||||
frappe.link_search(this.doctype, args, function(r) { | |||||
frappe.link_search(this.doctype, args, function (r) { | |||||
var parent = me.dialog.fields_dict.results.$wrapper; | var parent = me.dialog.fields_dict.results.$wrapper; | ||||
parent.empty(); | parent.empty(); | ||||
if(r.values.length) { | |||||
$.each(r.values, function(i, v) { | |||||
if (r.values.length) { | |||||
$.each(r.values, function (i, v) { | |||||
var row = $(repl('<div class="row link-select-row">\ | var row = $(repl('<div class="row link-select-row">\ | ||||
<div class="col-xs-4">\ | <div class="col-xs-4">\ | ||||
<b><a href="#">%(name)s</a></b></div>\ | <b><a href="#">%(name)s</a></b></div>\ | ||||
@@ -80,56 +81,58 @@ frappe.ui.form.LinkSelector = Class.extend({ | |||||
row.find("a") | row.find("a") | ||||
.attr('data-value', v[0]) | .attr('data-value', v[0]) | ||||
.click(function() { | |||||
var value = $(this).attr("data-value"); | |||||
var $link = this; | |||||
if(me.target.is_grid) { | |||||
// set in grid | |||||
me.set_in_grid(value); | |||||
} else { | |||||
if(me.target.doctype) | |||||
me.target.parse_validate_and_set_in_model(value); | |||||
else { | |||||
me.target.set_input(value); | |||||
me.target.$input.trigger("change"); | |||||
.click(function () { | |||||
var value = $(this).attr("data-value"); | |||||
var $link = this; | |||||
if (me.target.is_grid) { | |||||
// set in grid | |||||
me.set_in_grid(value); | |||||
} else { | |||||
if (me.target.doctype) | |||||
me.target.parse_validate_and_set_in_model(value); | |||||
else { | |||||
me.target.set_input(value); | |||||
me.target.$input.trigger("change"); | |||||
} | |||||
me.dialog.hide(); | |||||
} | } | ||||
me.dialog.hide(); | |||||
} | |||||
return false; | |||||
}) | |||||
return false; | |||||
}) | |||||
}) | }) | ||||
} else { | } else { | ||||
$('<p><br><span class="text-muted">' + __("No Results") + '</span>' | $('<p><br><span class="text-muted">' + __("No Results") + '</span>' | ||||
+ (frappe.model.can_create(me.doctype) ? | + (frappe.model.can_create(me.doctype) ? | ||||
('<br><br><a class="new-doc btn btn-default btn-sm">' | ('<br><br><a class="new-doc btn btn-default btn-sm">' | ||||
+ __("Make a new {0}", [__(me.doctype)]) + "</a>") : '') | |||||
+ '</p>').appendTo(parent).find(".new-doc").click(function() { | |||||
+ __("Make a new {0}", [__(me.doctype)]) + "</a>") : '') | |||||
+ '</p>').appendTo(parent).find(".new-doc").click(function () { | |||||
me.target.new_doc(); | me.target.new_doc(); | ||||
}); | }); | ||||
} | } | ||||
}, this.dialog.get_primary_btn()); | }, this.dialog.get_primary_btn()); | ||||
}, | }, | ||||
set_in_grid: function(value) { | |||||
set_in_grid: function (value) { | |||||
var me = this, updated = false; | var me = this, updated = false; | ||||
if(this.qty_fieldname) { | |||||
frappe.prompt({fieldname:"qty", fieldtype:"Float", label:"Qty", | |||||
"default": 1, reqd: 1}, function(data) { | |||||
$.each(me.target.frm.doc[me.target.df.fieldname] || [], function(i, d) { | |||||
if(d[me.fieldname]===value) { | |||||
if (this.qty_fieldname) { | |||||
frappe.prompt({ | |||||
fieldname: "qty", fieldtype: "Float", label: "Qty", | |||||
"default": 1, reqd: 1 | |||||
}, function (data) { | |||||
$.each(me.target.frm.doc[me.target.df.fieldname] || [], function (i, d) { | |||||
if (d[me.fieldname] === value) { | |||||
frappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty); | frappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty); | ||||
show_alert(__("Added {0} ({1})", [value, d[me.qty_fieldname]])); | |||||
frappe.show_alert(__("Added {0} ({1})", [value, d[me.qty_fieldname]])); | |||||
updated = true; | updated = true; | ||||
return false; | return false; | ||||
} | } | ||||
}); | }); | ||||
if(!updated) { | |||||
if (!updated) { | |||||
var d = me.target.add_new_row(); | var d = me.target.add_new_row(); | ||||
frappe.model.set_value(d.doctype, d.name, me.fieldname, value); | frappe.model.set_value(d.doctype, d.name, me.fieldname, value); | ||||
frappe.after_ajax(function() { | |||||
setTimeout(function() { | |||||
frappe.after_ajax(function () { | |||||
setTimeout(function () { | |||||
frappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty); | frappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty); | ||||
show_alert(__("Added {0} ({1})", [value, data.qty])); | |||||
frappe.show_alert(__("Added {0} ({1})", [value, data.qty])); | |||||
}, 100); | }, 100); | ||||
}); | }); | ||||
} | } | ||||
@@ -137,19 +140,19 @@ frappe.ui.form.LinkSelector = Class.extend({ | |||||
} else { | } else { | ||||
var d = me.target.add_new_row(); | var d = me.target.add_new_row(); | ||||
frappe.model.set_value(d.doctype, d.name, me.fieldname, value); | frappe.model.set_value(d.doctype, d.name, me.fieldname, value); | ||||
show_alert(__("{0} added", [value])); | |||||
frappe.show_alert(__("{0} added", [value])); | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
frappe.link_search = function(doctype, args, callback, btn) { | |||||
if(!args) { | |||||
frappe.link_search = function (doctype, args, callback, btn) { | |||||
if (!args) { | |||||
args = { | args = { | ||||
txt: '' | txt: '' | ||||
} | } | ||||
} | } | ||||
args.doctype = doctype; | args.doctype = doctype; | ||||
if(!args.searchfield) { | |||||
if (!args.searchfield) { | |||||
args.searchfield = 'name'; | args.searchfield = 'name'; | ||||
} | } | ||||
@@ -157,7 +160,7 @@ frappe.link_search = function(doctype, args, callback, btn) { | |||||
method: "frappe.desk.search.search_widget", | method: "frappe.desk.search.search_widget", | ||||
type: "GET", | type: "GET", | ||||
args: args, | args: args, | ||||
callback: function(r) { | |||||
callback: function (r) { | |||||
callback && callback(r); | callback && callback(r); | ||||
}, | }, | ||||
btn: btn | btn: btn | ||||
@@ -1,26 +1,26 @@ | |||||
frappe.provide("frappe.ui.form"); | frappe.provide("frappe.ui.form"); | ||||
frappe.ui.form.PrintPreview = Class.extend({ | frappe.ui.form.PrintPreview = Class.extend({ | ||||
init: function(opts) { | |||||
init: function (opts) { | |||||
$.extend(this, opts); | $.extend(this, opts); | ||||
this.make(); | this.make(); | ||||
this.bind_events(); | this.bind_events(); | ||||
}, | }, | ||||
make: function() { | |||||
make: function () { | |||||
this.wrapper = this.frm.page.add_view("print", frappe.render_template("print_layout", {})); | this.wrapper = this.frm.page.add_view("print", frappe.render_template("print_layout", {})); | ||||
// only system manager can edit | // only system manager can edit | ||||
this.wrapper.find(".btn-print-edit").toggle(frappe.user.has_role("System Manager")); | this.wrapper.find(".btn-print-edit").toggle(frappe.user.has_role("System Manager")); | ||||
}, | }, | ||||
bind_events: function() { | |||||
bind_events: function () { | |||||
var me = this; | var me = this; | ||||
this.wrapper.find(".btn-print-close").click(function() { | |||||
this.wrapper.find(".btn-print-close").click(function () { | |||||
me.frm.hide_print(); | me.frm.hide_print(); | ||||
}); | }); | ||||
// hide print view on pressing escape, only if there is no focus on any input | // hide print view on pressing escape, only if there is no focus on any input | ||||
$(document).on("keydown", function(e) { | |||||
if (e.which===27 && me.frm && e.target===document.body) { | |||||
$(document).on("keydown", function (e) { | |||||
if (e.which === 27 && me.frm && e.target === document.body) { | |||||
me.frm.hide_print(); | me.frm.hide_print(); | ||||
} | } | ||||
}); | }); | ||||
@@ -28,78 +28,81 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
this.print_formats = frappe.meta.get_print_formats(this.frm.meta.name); | this.print_formats = frappe.meta.get_print_formats(this.frm.meta.name); | ||||
this.print_letterhead = this.wrapper | this.print_letterhead = this.wrapper | ||||
.find(".print-letterhead") | .find(".print-letterhead") | ||||
.on("change", function() { me.print_sel.trigger("change"); }) | |||||
.on("change", function () { me.print_sel.trigger("change"); }) | |||||
.prop("checked", cint( | .prop("checked", cint( | ||||
(frappe.model.get_doc(":Print Settings", "Print Settings") | (frappe.model.get_doc(":Print Settings", "Print Settings") | ||||
|| {with_letterhead: 1}).with_letterhead) ? true : false); | |||||
|| { with_letterhead: 1 }).with_letterhead) ? true : false); | |||||
this.print_sel = this.wrapper | this.print_sel = this.wrapper | ||||
.find(".print-preview-select") | .find(".print-preview-select") | ||||
.on("change", function() { | |||||
.on("change", function () { | |||||
me.multilingual_preview() | me.multilingual_preview() | ||||
}); | }); | ||||
//On selection of language get code and pass it to preview method | //On selection of language get code and pass it to preview method | ||||
this.language_sel = this.wrapper | this.language_sel = this.wrapper | ||||
.find(".languages") | .find(".languages") | ||||
.on("change", function(){ | |||||
.on("change", function () { | |||||
me.lang_code = me.language_sel.val() | me.lang_code = me.language_sel.val() | ||||
me.multilingual_preview() | me.multilingual_preview() | ||||
}); | }); | ||||
this.wrapper.find(".btn-print-print").click(function() { | |||||
if(me.is_old_style()) { | |||||
this.wrapper.find(".btn-print-print").click(function () { | |||||
if (me.is_old_style()) { | |||||
me.print_old_style(); | me.print_old_style(); | ||||
} else { | } else { | ||||
me.printit(); | me.printit(); | ||||
} | } | ||||
}); | }); | ||||
this.wrapper.find(".btn-print-preview").click(function() { | |||||
if(me.is_old_style()) { | |||||
this.wrapper.find(".btn-print-preview").click(function () { | |||||
if (me.is_old_style()) { | |||||
me.new_page_preview_old_style(); | me.new_page_preview_old_style(); | ||||
} else { | } else { | ||||
me.new_page_preview(); | me.new_page_preview(); | ||||
} | } | ||||
}); | }); | ||||
this.wrapper.find(".btn-download-pdf").click(function() { | |||||
if(!me.is_old_style()) { | |||||
this.wrapper.find(".btn-download-pdf").click(function () { | |||||
if (!me.is_old_style()) { | |||||
var w = window.open( | var w = window.open( | ||||
frappe.urllib.get_full_url("/api/method/frappe.utils.print_format.download_pdf?" | frappe.urllib.get_full_url("/api/method/frappe.utils.print_format.download_pdf?" | ||||
+"doctype="+encodeURIComponent(me.frm.doc.doctype) | |||||
+"&name="+encodeURIComponent(me.frm.doc.name) | |||||
+"&format="+me.selected_format() | |||||
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1") | |||||
+(me.lang_code ? ("&_lang="+me.lang_code) : ""))); | |||||
if(!w) { | |||||
msgprint(__("Please enable pop-ups")); return; | |||||
+ "doctype=" + encodeURIComponent(me.frm.doc.doctype) | |||||
+ "&name=" + encodeURIComponent(me.frm.doc.name) | |||||
+ "&format=" + me.selected_format() | |||||
+ "&no_letterhead=" + (me.with_letterhead() ? "0" : "1") | |||||
+ (me.lang_code ? ("&_lang=" + me.lang_code) : "")) | |||||
); | |||||
if (!w) { | |||||
frappe.msgprint(__("Please enable pop-ups")); return; | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
this.wrapper.find(".btn-print-edit").on("click", function() { | |||||
this.wrapper.find(".btn-print-edit").on("click", function () { | |||||
var print_format = me.get_print_format(); | var print_format = me.get_print_format(); | ||||
if(print_format && print_format.name) { | |||||
if(print_format.print_format_builder) { | |||||
if (print_format && print_format.name) { | |||||
if (print_format.print_format_builder) { | |||||
frappe.set_route("print-format-builder", print_format.name); | frappe.set_route("print-format-builder", print_format.name); | ||||
} else { | } else { | ||||
frappe.set_route("Form", "Print Format", print_format.name); | frappe.set_route("Form", "Print Format", print_format.name); | ||||
} | } | ||||
} else { | } else { | ||||
// start a new print format | // start a new print format | ||||
frappe.prompt({fieldname:"print_format_name", fieldtype:"Data", reqd: 1, | |||||
label:"New Print Format Name"}, function(data) { | |||||
frappe.route_options = { | |||||
make_new: true, | |||||
doctype: me.frm.doctype, | |||||
name: data.print_format_name | |||||
}; | |||||
frappe.set_route("print-format-builder"); | |||||
frappe.prompt({ | |||||
fieldname: "print_format_name", fieldtype: "Data", reqd: 1, | |||||
label: "New Print Format Name" | |||||
}, function (data) { | |||||
frappe.route_options = { | |||||
make_new: true, | |||||
doctype: me.frm.doctype, | |||||
name: data.print_format_name | |||||
}; | |||||
frappe.set_route("print-format-builder"); | |||||
}, __("New Custom Print Format"), __("Start")); | }, __("New Custom Print Format"), __("Start")); | ||||
} | } | ||||
}); | }); | ||||
}, | }, | ||||
set_user_lang: function(){ | |||||
set_user_lang: function () { | |||||
this.lang_code = this.frm.doc.language; | this.lang_code = this.frm.doc.language; | ||||
// Load all languages in the field | // Load all languages in the field | ||||
this.language_sel.empty() | this.language_sel.empty() | ||||
@@ -107,9 +110,9 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
.val(this.lang_code); | .val(this.lang_code); | ||||
this.preview(); | this.preview(); | ||||
}, | }, | ||||
multilingual_preview: function(){ | |||||
multilingual_preview: function () { | |||||
var me = this; | var me = this; | ||||
if(this.is_old_style()) { | |||||
if (this.is_old_style()) { | |||||
me.wrapper.find(".btn-download-pdf").toggle(false); | me.wrapper.find(".btn-download-pdf").toggle(false); | ||||
me.set_style(); | me.set_style(); | ||||
me.preview_old_style(); | me.preview_old_style(); | ||||
@@ -118,30 +121,30 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
me.preview(); | me.preview(); | ||||
} | } | ||||
}, | }, | ||||
preview: function() { | |||||
preview: function () { | |||||
var me = this; | var me = this; | ||||
this.get_print_html(function(out) { | |||||
this.get_print_html(function (out) { | |||||
me.wrapper.find(".print-format").html(out.html); | me.wrapper.find(".print-format").html(out.html); | ||||
me.set_style(out.style); | me.set_style(out.style); | ||||
}); | }); | ||||
}, | }, | ||||
printit: function() { | |||||
printit: function () { | |||||
this.new_page_preview(true); | this.new_page_preview(true); | ||||
}, | }, | ||||
new_page_preview: function(printit) { | |||||
new_page_preview: function (printit) { | |||||
var me = this; | var me = this; | ||||
var w = window.open(frappe.urllib.get_full_url("/printview?" | var w = window.open(frappe.urllib.get_full_url("/printview?" | ||||
+"doctype="+encodeURIComponent(me.frm.doc.doctype) | |||||
+"&name="+encodeURIComponent(me.frm.doc.name) | |||||
+(printit ? "&trigger_print=1" : "") | |||||
+"&format="+me.selected_format() | |||||
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1") | |||||
+(me.lang_code ? ("&_lang="+me.lang_code) : ""))); | |||||
if(!w) { | |||||
msgprint(__("Please enable pop-ups")); return; | |||||
+ "doctype=" + encodeURIComponent(me.frm.doc.doctype) | |||||
+ "&name=" + encodeURIComponent(me.frm.doc.name) | |||||
+ (printit ? "&trigger_print=1" : "") | |||||
+ "&format=" + me.selected_format() | |||||
+ "&no_letterhead=" + (me.with_letterhead() ? "0" : "1") | |||||
+ (me.lang_code ? ("&_lang=" + me.lang_code) : ""))); | |||||
if (!w) { | |||||
frappe.msgprint(__("Please enable pop-ups")); return; | |||||
} | } | ||||
}, | }, | ||||
get_print_html: function(callback) { | |||||
get_print_html: function (callback) { | |||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.www.printview.get_html_and_style", | method: "frappe.www.printview.get_html_and_style", | ||||
args: { | args: { | ||||
@@ -150,21 +153,21 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
no_letterhead: !this.with_letterhead() ? 1 : 0, | no_letterhead: !this.with_letterhead() ? 1 : 0, | ||||
_lang: this.lang_code | _lang: this.lang_code | ||||
}, | }, | ||||
callback: function(r) { | |||||
if(!r.exc) { | |||||
callback: function (r) { | |||||
if (!r.exc) { | |||||
callback(r.message); | callback(r.message); | ||||
} | } | ||||
} | } | ||||
}); | }); | ||||
}, | }, | ||||
preview_old_style: function() { | |||||
preview_old_style: function () { | |||||
var me = this; | var me = this; | ||||
this.with_old_style({ | this.with_old_style({ | ||||
format: me.print_sel.val(), | format: me.print_sel.val(), | ||||
callback: function(html) { | |||||
callback: function (html) { | |||||
me.wrapper.find(".print-format").html('<div class="alert alert-warning">' | me.wrapper.find(".print-format").html('<div class="alert alert-warning">' | ||||
+__("Warning: This Print Format is in old style and cannot be generated via the API.") | |||||
+'</div>' | |||||
+ __("Warning: This Print Format is in old style and cannot be generated via the API.") | |||||
+ '</div>' | |||||
+ html); | + html); | ||||
}, | }, | ||||
no_letterhead: !this.with_letterhead(), | no_letterhead: !this.with_letterhead(), | ||||
@@ -172,75 +175,75 @@ frappe.ui.form.PrintPreview = Class.extend({ | |||||
no_heading: true | no_heading: true | ||||
}); | }); | ||||
}, | }, | ||||
refresh_print_options: function() { | |||||
refresh_print_options: function () { | |||||
this.print_formats = frappe.meta.get_print_formats(this.frm.doctype); | this.print_formats = frappe.meta.get_print_formats(this.frm.doctype); | ||||
return this.print_sel | return this.print_sel | ||||
.empty().add_options(this.print_formats); | .empty().add_options(this.print_formats); | ||||
}, | }, | ||||
with_old_style: function(opts) { | |||||
frappe.require("/assets/js/print_format_v3.min.js", function() { | |||||
with_old_style: function (opts) { | |||||
frappe.require("/assets/js/print_format_v3.min.js", function () { | |||||
_p.build(opts.format, opts.callback, opts.no_letterhead, opts.only_body, opts.no_heading); | _p.build(opts.format, opts.callback, opts.no_letterhead, opts.only_body, opts.no_heading); | ||||
}); | }); | ||||
}, | }, | ||||
print_old_style: function() { | |||||
print_old_style: function () { | |||||
var me = this; | var me = this; | ||||
frappe.require("/assets/js/print_format_v3.min.js", function() { | |||||
frappe.require("/assets/js/print_format_v3.min.js", function () { | |||||
_p.build(me.print_sel.val(), _p.go, | _p.build(me.print_sel.val(), _p.go, | ||||
!me.with_letterhead()); | !me.with_letterhead()); | ||||
}); | }); | ||||
}, | }, | ||||
new_page_preview_old_style: function() { | |||||
new_page_preview_old_style: function () { | |||||
var me = this; | var me = this; | ||||
frappe.require("/assets/js/print_format_v3.min.js", function() { | |||||
frappe.require("/assets/js/print_format_v3.min.js", function () { | |||||
_p.build(me.print_sel.val(), _p.preview, !me.with_letterhead()); | _p.build(me.print_sel.val(), _p.preview, !me.with_letterhead()); | ||||
}); | }); | ||||
}, | }, | ||||
selected_format: function() { | |||||
selected_format: function () { | |||||
return this.print_sel.val() || this.frm.meta.default_print_format || "Standard"; | return this.print_sel.val() || this.frm.meta.default_print_format || "Standard"; | ||||
}, | }, | ||||
is_old_style: function(format) { | |||||
return this.get_print_format(format).print_format_type==="Client"; | |||||
is_old_style: function (format) { | |||||
return this.get_print_format(format).print_format_type === "Client"; | |||||
}, | }, | ||||
get_print_format: function(format) { | |||||
get_print_format: function (format) { | |||||
if (!format) { | if (!format) { | ||||
format = this.selected_format(); | format = this.selected_format(); | ||||
} | } | ||||
if(locals["Print Format"] && locals["Print Format"][format]) { | |||||
if (locals["Print Format"] && locals["Print Format"][format]) { | |||||
return locals["Print Format"][format] | return locals["Print Format"][format] | ||||
} else { | } else { | ||||
return {} | return {} | ||||
} | } | ||||
}, | }, | ||||
with_letterhead: function() { | |||||
with_letterhead: function () { | |||||
return this.print_letterhead.is(":checked") ? 1 : 0; | return this.print_letterhead.is(":checked") ? 1 : 0; | ||||
}, | }, | ||||
set_style: function(style) { | |||||
set_style: function (style) { | |||||
frappe.dom.set_style(style || frappe.boot.print_css, "print-style"); | frappe.dom.set_style(style || frappe.boot.print_css, "print-style"); | ||||
} | } | ||||
}); | }); | ||||
frappe.ui.get_print_settings = function(pdf, callback, letter_head) { | |||||
frappe.ui.get_print_settings = function (pdf, callback, letter_head) { | |||||
var print_settings = locals[":Print Settings"]["Print Settings"]; | var print_settings = locals[":Print Settings"]["Print Settings"]; | ||||
var default_letter_head = locals[":Company"] && frappe.defaults.get_default('company') | var default_letter_head = locals[":Company"] && frappe.defaults.get_default('company') | ||||
? locals[":Company"][frappe.defaults.get_default('company')]["default_letter_head"] | ? locals[":Company"][frappe.defaults.get_default('company')]["default_letter_head"] | ||||
: ''; | : ''; | ||||
columns = [{ | |||||
var columns = [{ | |||||
fieldtype: "Check", | fieldtype: "Check", | ||||
fieldname: "with_letter_head", | fieldname: "with_letter_head", | ||||
label: __("With Letter head") | label: __("With Letter head") | ||||
},{ | |||||
}, { | |||||
fieldtype: "Select", | fieldtype: "Select", | ||||
fieldname: "letter_head", | fieldname: "letter_head", | ||||
label: __("Letter Head"), | label: __("Letter Head"), | ||||
depends_on: "with_letter_head", | depends_on: "with_letter_head", | ||||
options: $.map(frappe.boot.letter_heads, function(i,d){ return d }), | |||||
options: $.map(frappe.boot.letter_heads, function (i, d) { return d }), | |||||
default: letter_head || default_letter_head | default: letter_head || default_letter_head | ||||
}]; | }]; | ||||
if(pdf) { | |||||
if (pdf) { | |||||
columns.push({ | columns.push({ | ||||
fieldtype: "Select", | fieldtype: "Select", | ||||
fieldname: "orientation", | fieldname: "orientation", | ||||
@@ -250,12 +253,12 @@ frappe.ui.get_print_settings = function(pdf, callback, letter_head) { | |||||
}) | }) | ||||
} | } | ||||
frappe.prompt(columns, function(data) { | |||||
frappe.prompt(columns, function (data) { | |||||
var data = $.extend(print_settings, data); | var data = $.extend(print_settings, data); | ||||
if(!data.with_letter_head) { | |||||
if (!data.with_letter_head) { | |||||
data.letter_head = null; | data.letter_head = null; | ||||
} | } | ||||
if(data.letter_head) { | |||||
if (data.letter_head) { | |||||
data.letter_head = frappe.boot.letter_heads[print_settings.letter_head]; | data.letter_head = frappe.boot.letter_heads[print_settings.letter_head]; | ||||
} | } | ||||
callback(data); | callback(data); | ||||
@@ -66,7 +66,7 @@ frappe.ui.form.quick_entry = function(doctype, success) { | |||||
if(data) { | if(data) { | ||||
dialog.working = true; | dialog.working = true; | ||||
values = update_doc(); | |||||
var values = update_doc(); | |||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.client.insert", | method: "frappe.client.insert", | ||||
args: { | args: { | ||||
@@ -3,7 +3,7 @@ | |||||
frappe.provide("frappe.ui.form"); | frappe.provide("frappe.ui.form"); | ||||
frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
frappe.ui.form.save = function (frm, action, callback, btn) { | |||||
$(btn).prop("disabled", true); | $(btn).prop("disabled", true); | ||||
// specified here because there are keyboard shortcuts to save | // specified here because there are keyboard shortcuts to save | ||||
@@ -17,14 +17,14 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
var freeze_message = working_label ? __(working_label) : ""; | var freeze_message = working_label ? __(working_label) : ""; | ||||
var save = function() { | |||||
check_name(function() { | |||||
var save = function () { | |||||
check_name(function () { | |||||
$(frm.wrapper).addClass('validated-form'); | $(frm.wrapper).addClass('validated-form'); | ||||
if(check_mandatory()) { | |||||
if (check_mandatory()) { | |||||
_call({ | _call({ | ||||
method: "frappe.desk.form.save.savedocs", | method: "frappe.desk.form.save.savedocs", | ||||
args: { doc: frm.doc, action:action}, | |||||
callback: function(r) { | |||||
args: { doc: frm.doc, action: action }, | |||||
callback: function (r) { | |||||
$(document).trigger("save", [frm.doc]); | $(document).trigger("save", [frm.doc]); | ||||
callback(r); | callback(r); | ||||
}, | }, | ||||
@@ -38,7 +38,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
}; | }; | ||||
var cancel = function() { | |||||
var cancel = function () { | |||||
var args = { | var args = { | ||||
doctype: frm.doc.doctype, | doctype: frm.doc.doctype, | ||||
name: frm.doc.name | name: frm.doc.name | ||||
@@ -46,7 +46,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
// update workflow state value if workflow exists | // update workflow state value if workflow exists | ||||
var workflow_state_fieldname = frappe.workflow.get_state_fieldname(frm.doctype); | var workflow_state_fieldname = frappe.workflow.get_state_fieldname(frm.doctype); | ||||
if(workflow_state_fieldname) { | |||||
if (workflow_state_fieldname) { | |||||
$.extend(args, { | $.extend(args, { | ||||
workflow_state_fieldname: workflow_state_fieldname, | workflow_state_fieldname: workflow_state_fieldname, | ||||
workflow_state: frm.doc[workflow_state_fieldname] | workflow_state: frm.doc[workflow_state_fieldname] | ||||
@@ -57,7 +57,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
_call({ | _call({ | ||||
method: "frappe.desk.form.save.cancel", | method: "frappe.desk.form.save.cancel", | ||||
args: args, | args: args, | ||||
callback: function(r) { | |||||
callback: function (r) { | |||||
$(document).trigger("save", [frm.doc]); | $(document).trigger("save", [frm.doc]); | ||||
callback(r); | callback(r); | ||||
}, | }, | ||||
@@ -66,17 +66,17 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
}); | }); | ||||
}; | }; | ||||
var check_name = function(callback) { | |||||
var check_name = function (callback) { | |||||
var doc = frm.doc; | var doc = frm.doc; | ||||
var meta = locals.DocType[doc.doctype]; | var meta = locals.DocType[doc.doctype]; | ||||
if(doc.__islocal && (meta && meta.autoname | |||||
&& meta.autoname.toLowerCase()=='prompt')) { | |||||
var d = frappe.prompt(__("Name"), function(values) { | |||||
if (doc.__islocal && (meta && meta.autoname | |||||
&& meta.autoname.toLowerCase() == 'prompt')) { | |||||
var d = frappe.prompt(__("Name"), function (values) { | |||||
var newname = values.value; | var newname = values.value; | ||||
if(newname) { | |||||
if (newname) { | |||||
doc.__newname = strip(newname); | doc.__newname = strip(newname); | ||||
} else { | } else { | ||||
msgprint(__("Name is required")); | |||||
frappe.msgprint(__("Name is required")); | |||||
throw "name required"; | throw "name required"; | ||||
} | } | ||||
@@ -84,11 +84,11 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
}, __('Enter the name of the new {0}', [doc.doctype]), __("Create")); | }, __('Enter the name of the new {0}', [doc.doctype]), __("Create")); | ||||
if(doc.__newname) { | |||||
if (doc.__newname) { | |||||
d.set_value("value", doc.__newname); | d.set_value("value", doc.__newname); | ||||
} | } | ||||
d.onhide = function() { | |||||
d.onhide = function () { | |||||
$(btn).prop("disabled", false); | $(btn).prop("disabled", false); | ||||
} | } | ||||
} else { | } else { | ||||
@@ -96,36 +96,36 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
} | } | ||||
}; | }; | ||||
var check_mandatory = function() { | |||||
var check_mandatory = function () { | |||||
var me = this; | var me = this; | ||||
var has_errors = false; | var has_errors = false; | ||||
frm.scroll_set = false; | frm.scroll_set = false; | ||||
if(frm.doc.docstatus==2) return true; // don't check for cancel | |||||
if (frm.doc.docstatus == 2) return true; // don't check for cancel | |||||
$.each(frappe.model.get_all_docs(frm.doc), function(i, doc) { | |||||
$.each(frappe.model.get_all_docs(frm.doc), function (i, doc) { | |||||
var error_fields = []; | var error_fields = []; | ||||
var folded = false; | var folded = false; | ||||
$.each(frappe.meta.docfield_list[doc.doctype] || [], function(i, docfield) { | |||||
if(docfield.fieldname) { | |||||
$.each(frappe.meta.docfield_list[doc.doctype] || [], function (i, docfield) { | |||||
if (docfield.fieldname) { | |||||
var df = frappe.meta.get_docfield(doc.doctype, | var df = frappe.meta.get_docfield(doc.doctype, | ||||
docfield.fieldname, frm.doc.name); | docfield.fieldname, frm.doc.name); | ||||
if(df.fieldtype==="Fold") { | |||||
if (df.fieldtype === "Fold") { | |||||
folded = frm.layout.folded; | folded = frm.layout.folded; | ||||
} | } | ||||
if(df.reqd && !frappe.model.has_value(doc.doctype, doc.name, df.fieldname)) { | |||||
if (df.reqd && !frappe.model.has_value(doc.doctype, doc.name, df.fieldname)) { | |||||
has_errors = true; | has_errors = true; | ||||
error_fields[error_fields.length] = __(df.label); | error_fields[error_fields.length] = __(df.label); | ||||
// scroll to field | // scroll to field | ||||
if(!me.scroll_set) { | |||||
if (!me.scroll_set) { | |||||
scroll_to(doc.parentfield || df.fieldname); | scroll_to(doc.parentfield || df.fieldname); | ||||
} | } | ||||
if(folded) { | |||||
if (folded) { | |||||
frm.layout.unfold(); | frm.layout.unfold(); | ||||
folded = false; | folded = false; | ||||
} | } | ||||
@@ -133,8 +133,8 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
} | } | ||||
}); | }); | ||||
if(error_fields.length) { | |||||
if(doc.parenttype) { | |||||
if (error_fields.length) { | |||||
if (doc.parenttype) { | |||||
var message = __('Mandatory fields required in table {0}, Row {1}', | var message = __('Mandatory fields required in table {0}, Row {1}', | ||||
[__(frappe.meta.docfield_map[doc.parenttype][doc.parentfield].label).bold(), doc.idx]); | [__(frappe.meta.docfield_map[doc.parenttype][doc.parentfield].label).bold(), doc.idx]); | ||||
} else { | } else { | ||||
@@ -142,7 +142,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
} | } | ||||
message = message + '<br><br><ul><li>' + error_fields.join('</li><li>') + "</ul>"; | message = message + '<br><br><ul><li>' + error_fields.join('</li><li>') + "</ul>"; | ||||
msgprint({ | |||||
frappe.msgprint({ | |||||
message: message, | message: message, | ||||
indicator: 'red', | indicator: 'red', | ||||
title: __('Missing Fields') | title: __('Missing Fields') | ||||
@@ -153,15 +153,15 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
return !has_errors; | return !has_errors; | ||||
}; | }; | ||||
var scroll_to = function(fieldname) { | |||||
var scroll_to = function (fieldname) { | |||||
var f = cur_frm.fields_dict[fieldname]; | var f = cur_frm.fields_dict[fieldname]; | ||||
if(f) { | |||||
if (f) { | |||||
$(document).scrollTop($(f.wrapper).offset().top - 60); | $(document).scrollTop($(f.wrapper).offset().top - 60); | ||||
} | } | ||||
frm.scroll_set = true; | frm.scroll_set = true; | ||||
}; | }; | ||||
var _call = function(opts) { | |||||
var _call = function (opts) { | |||||
// opts = { | // opts = { | ||||
// method: "some server method", | // method: "some server method", | ||||
// args: {args to be passed}, | // args: {args to be passed}, | ||||
@@ -170,7 +170,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
// } | // } | ||||
$(opts.btn).prop("disabled", true); | $(opts.btn).prop("disabled", true); | ||||
if(frappe.ui.form.is_saving) { | |||||
if (frappe.ui.form.is_saving) { | |||||
// this is likely to happen if the user presses the shortcut cmd+s for a longer duration or uses double click | // this is likely to happen if the user presses the shortcut cmd+s for a longer duration or uses double click | ||||
// no need to show this to user, as they can see "Saving" in freeze message | // no need to show this to user, as they can see "Saving" in freeze message | ||||
console.log("Already saving. Please wait a few moments.") | console.log("Already saving. Please wait a few moments.") | ||||
@@ -184,49 +184,50 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
method: opts.method, | method: opts.method, | ||||
args: opts.args, | args: opts.args, | ||||
btn: opts.btn, | btn: opts.btn, | ||||
callback: function(r) { | |||||
callback: function (r) { | |||||
opts.callback && opts.callback(r); | opts.callback && opts.callback(r); | ||||
}, | }, | ||||
always: function(r) { | |||||
always: function (r) { | |||||
frappe.ui.form.is_saving = false; | frappe.ui.form.is_saving = false; | ||||
if(r) { | |||||
if (r) { | |||||
var doc = r.docs && r.docs[0]; | var doc = r.docs && r.docs[0]; | ||||
if(doc) { | |||||
if (doc) { | |||||
frappe.ui.form.update_calling_link(doc); | frappe.ui.form.update_calling_link(doc); | ||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
}) | }) | ||||
}; | }; | ||||
if(action==="cancel") { | |||||
if (action === "cancel") { | |||||
cancel(); | cancel(); | ||||
} else { | } else { | ||||
save(); | save(); | ||||
} | } | ||||
} | } | ||||
frappe.ui.form.update_calling_link = function(newdoc) { | |||||
if(frappe._from_link && newdoc.doctype===frappe._from_link.df.options) { | |||||
frappe.ui.form.update_calling_link = function (newdoc) { | |||||
if (frappe._from_link && newdoc.doctype === frappe._from_link.df.options) { | |||||
var doc = frappe.get_doc(frappe._from_link.doctype, frappe._from_link.docname); | var doc = frappe.get_doc(frappe._from_link.doctype, frappe._from_link.docname); | ||||
// set value | // set value | ||||
if (doc && doc.parentfield){ | |||||
if (doc && doc.parentfield) { | |||||
//update values for child table | //update values for child table | ||||
$.each(frappe._from_link.frm.fields_dict[doc.parentfield].grid.grid_rows, function(index, field) { | |||||
if(field.doc && field.doc.name===frappe._from_link.docname){ | |||||
$.each(frappe._from_link.frm.fields_dict[doc.parentfield].grid.grid_rows, function (index, field) { | |||||
if (field.doc && field.doc.name === frappe._from_link.docname) { | |||||
frappe._from_link.set_value(newdoc.name); | frappe._from_link.set_value(newdoc.name); | ||||
}}); | |||||
} | |||||
}); | |||||
} else { | } else { | ||||
frappe._from_link.set_value(newdoc.name); | frappe._from_link.set_value(newdoc.name); | ||||
} | |||||
} | |||||
// refresh field | // refresh field | ||||
frappe._from_link.refresh(); | frappe._from_link.refresh(); | ||||
// if from form, switch | // if from form, switch | ||||
if(frappe._from_link.frm) { | |||||
if (frappe._from_link.frm) { | |||||
frappe.set_route("Form", frappe._from_link.frm.doctype, frappe._from_link.frm.docname); | frappe.set_route("Form", frappe._from_link.frm.doctype, frappe._from_link.frm.docname); | ||||
setTimeout(function() { frappe.utils.scroll_to(frappe._from_link_scrollY); }, 100); | |||||
setTimeout(function () { frappe.utils.scroll_to(frappe._from_link_scrollY); }, 100); | |||||
} | } | ||||
frappe._from_link = null; | frappe._from_link = null; | ||||
@@ -70,7 +70,7 @@ frappe.ui.form.ScriptManager = Class.extend({ | |||||
var me = this; | var me = this; | ||||
doctype = doctype || this.frm.doctype; | doctype = doctype || this.frm.doctype; | ||||
name = name || this.frm.docname; | name = name || this.frm.docname; | ||||
handlers = this.get_handlers(event_name, doctype, name, callback); | |||||
var handlers = this.get_handlers(event_name, doctype, name, callback); | |||||
if(callback) handlers.push(callback); | if(callback) handlers.push(callback); | ||||
return $.when.apply($, $.map(handlers, function(fn) { return fn(); })); | return $.when.apply($, $.map(handlers, function(fn) { return fn(); })); | ||||
@@ -114,8 +114,8 @@ frappe.ui.form.ScriptManager = Class.extend({ | |||||
} | } | ||||
function setup_add_fetch(df) { | function setup_add_fetch(df) { | ||||
if((in_list(['Data', 'Read Only', 'Text', 'Small Text', | |||||
'Text Editor', 'Code'], df.fieldtype) || df.read_only==1) | |||||
if((['Data', 'Read Only', 'Text', 'Small Text', | |||||
'Text Editor', 'Code'].includes(df.fieldtype) || df.read_only==1) | |||||
&& df.options && df.options.indexOf(".")!=-1) { | && df.options && df.options.indexOf(".")!=-1) { | ||||
var parts = df.options.split("."); | var parts = df.options.split("."); | ||||
me.frm.add_fetch(parts[0], parts[1], df.fieldname); | me.frm.add_fetch(parts[0], parts[1], df.fieldname); | ||||
@@ -138,7 +138,7 @@ frappe.ui.form.ScriptManager = Class.extend({ | |||||
this.trigger('setup'); | this.trigger('setup'); | ||||
}, | }, | ||||
log_error: function(caller, e) { | log_error: function(caller, e) { | ||||
show_alert("Error in Client Script."); | |||||
frappe.show_alert("Error in Client Script."); | |||||
console.group && console.group(); | console.group && console.group(); | ||||
console.log("----- error in client script -----"); | console.log("----- error in client script -----"); | ||||
console.log("method: " + caller); | console.log("method: " + caller); | ||||
@@ -117,7 +117,7 @@ frappe.ui.form.Share = Class.extend({ | |||||
options: "User", | options: "User", | ||||
filters: { | filters: { | ||||
"user_type": "System User", | "user_type": "System User", | ||||
"name": ["!=", user] | |||||
"name": ["!=", frappe.session.user] | |||||
} | } | ||||
}, | }, | ||||
only_input: true, | only_input: true, | ||||
@@ -163,7 +163,7 @@ frappe.ui.form.Share = Class.extend({ | |||||
$(d.body).find(".edit-share").on("click", function() { | $(d.body).find(".edit-share").on("click", function() { | ||||
var user = $(this).parents(".shared-user:first").attr("data-user") || "", | var user = $(this).parents(".shared-user:first").attr("data-user") || "", | ||||
value = $(this).prop("checked") ? 1 : 0, | value = $(this).prop("checked") ? 1 : 0, | ||||
property = $(this).attr("name") | |||||
property = $(this).attr("name"), | |||||
everyone = cint($(this).parents(".shared-user:first").attr("data-everyone")); | everyone = cint($(this).parents(".shared-user:first").attr("data-everyone")); | ||||
frappe.call({ | frappe.call({ | ||||
@@ -58,10 +58,10 @@ frappe.ui.form.Sidebar = Class.extend({ | |||||
this.frm.tags && this.frm.tags.refresh(this.frm.doc._user_tags); | this.frm.tags && this.frm.tags.refresh(this.frm.doc._user_tags); | ||||
this.sidebar.find(".modified-by").html(__("{0} edited this {1}", | this.sidebar.find(".modified-by").html(__("{0} edited this {1}", | ||||
["<strong>" + frappe.user.full_name(this.frm.doc.modified_by) + "</strong>", | ["<strong>" + frappe.user.full_name(this.frm.doc.modified_by) + "</strong>", | ||||
"<br>" + comment_when(this.frm.doc.modified)])); | |||||
"<br>" + comment_when(this.frm.doc.modified)])); | |||||
this.sidebar.find(".created-by").html(__("{0} created this {1}", | this.sidebar.find(".created-by").html(__("{0} created this {1}", | ||||
["<strong>" + frappe.user.full_name(this.frm.doc.owner) + "</strong>", | ["<strong>" + frappe.user.full_name(this.frm.doc.owner) + "</strong>", | ||||
"<br>" + comment_when(this.frm.doc.creation)])); | |||||
"<br>" + comment_when(this.frm.doc.creation)])); | |||||
this.refresh_like(); | this.refresh_like(); | ||||
this.setup_ratings(); | this.setup_ratings(); | ||||
@@ -151,11 +151,11 @@ frappe.ui.form.Sidebar = Class.extend({ | |||||
}, | }, | ||||
setup_ratings: function() { | setup_ratings: function() { | ||||
_ratings = this.frm.get_docinfo().rating || 0; | |||||
var _ratings = this.frm.get_docinfo().rating || 0; | |||||
if(_ratings) { | if(_ratings) { | ||||
this.ratings.removeClass("hide"); | this.ratings.removeClass("hide"); | ||||
rating_icons = frappe.render_template("rating_icons", {rating: _ratings, show_label: false}); | |||||
var rating_icons = frappe.render_template("rating_icons", {rating: _ratings, show_label: false}); | |||||
this.ratings.find(".rating-icons").html(rating_icons); | this.ratings.find(".rating-icons").html(rating_icons); | ||||
} | } | ||||
} | } | ||||
@@ -114,7 +114,7 @@ frappe.ui.form.Toolbar = Class.extend({ | |||||
if(!is_submittable || docstatus == 1 || | if(!is_submittable || docstatus == 1 || | ||||
(allow_print_for_cancelled && docstatus == 2)|| | (allow_print_for_cancelled && docstatus == 2)|| | ||||
(allow_print_for_draft && docstatus == 0)) { | |||||
(allow_print_for_draft && docstatus == 0)) { | |||||
if(frappe.model.can_print(null, me.frm)) { | if(frappe.model.can_print(null, me.frm)) { | ||||
this.page.add_menu_item(__("Print"), function() { | this.page.add_menu_item(__("Print"), function() { | ||||
me.frm.print_doc();}, true); | me.frm.print_doc();}, true); | ||||
@@ -159,7 +159,7 @@ frappe.ui.form.Toolbar = Class.extend({ | |||||
me.frm.savetrash();}, true); | me.frm.savetrash();}, true); | ||||
} | } | ||||
if(in_list(roles, "System Manager")) { | |||||
if(frappe.user_roles.includes("System Manager")) { | |||||
this.page.add_menu_item(__("Customize"), function() { | this.page.add_menu_item(__("Customize"), function() { | ||||
frappe.set_route("Form", "Customize Form", { | frappe.set_route("Form", "Customize Form", { | ||||
doc_type: me.frm.doctype | doc_type: me.frm.doctype | ||||
@@ -178,7 +178,7 @@ frappe.ui.form.Toolbar = Class.extend({ | |||||
if(!this.frm.doc.__unsaved) { | if(!this.frm.doc.__unsaved) { | ||||
if(is_submittable && docstatus == 1) { | if(is_submittable && docstatus == 1) { | ||||
this.page.add_menu_item(__("Request Feedback"), function() { | this.page.add_menu_item(__("Request Feedback"), function() { | ||||
feedback = new frappe.utils.Feedback(); | |||||
var feedback = new frappe.utils.Feedback(); | |||||
feedback.manual_feedback_request(me.frm.doc); | feedback.manual_feedback_request(me.frm.doc); | ||||
}, true) | }, true) | ||||
} | } | ||||
@@ -73,7 +73,7 @@ frappe.ui.form.States = Class.extend({ | |||||
} | } | ||||
$.each(frappe.workflow.get_transitions(this.frm.doctype, state), function(i, d) { | $.each(frappe.workflow.get_transitions(this.frm.doctype, state), function(i, d) { | ||||
if(in_list(roles, d.allowed)) { | |||||
if(frappe.user_roles.includes(d.allowed)) { | |||||
added = true; | added = true; | ||||
me.frm.page.add_action_item(__(d.action), function() { | me.frm.page.add_action_item(__(d.action), function() { | ||||
var action = d.action; | var action = d.action; | ||||
@@ -112,10 +112,10 @@ frappe.ui.form.States = Class.extend({ | |||||
} else if(new_docstatus==2 && me.frm.doc.docstatus==1) { | } else if(new_docstatus==2 && me.frm.doc.docstatus==1) { | ||||
me.frm.savecancel(null, success, on_error); | me.frm.savecancel(null, success, on_error); | ||||
} else { | } else { | ||||
msgprint(__("Document Status transition from ") + me.frm.doc.docstatus + " " | |||||
frappe.msgprint(__("Document Status transition from ") + me.frm.doc.docstatus + " " | |||||
+ __("to") + | + __("to") + | ||||
new_docstatus + " " + __("is not allowed.")); | new_docstatus + " " + __("is not allowed.")); | ||||
msgprint(__("Document Status transition from {0} to {1} is not allowed", [me.frm.doc.docstatus, new_docstatus])); | |||||
frappe.msgprint(__("Document Status transition from {0} to {1} is not allowed", [me.frm.doc.docstatus, new_docstatus])); | |||||
return false; | return false; | ||||
} | } | ||||
@@ -108,8 +108,8 @@ frappe.views.ListRenderer = Class.extend({ | |||||
} | } | ||||
// enabled / disabled | // enabled / disabled | ||||
if (frappe.meta.has_field(this.doctype, 'enabled')) { add_field('enabled'); }; | |||||
if (frappe.meta.has_field(this.doctype, 'disabled')) { add_field('disabled'); }; | |||||
if (frappe.meta.has_field(this.doctype, 'enabled')) { add_field('enabled'); } | |||||
if (frappe.meta.has_field(this.doctype, 'disabled')) { add_field('disabled'); } | |||||
// add workflow field (as priority) | // add workflow field (as priority) | ||||
this.workflow_state_fieldname = frappe.workflow.get_state_fieldname(this.doctype); | this.workflow_state_fieldname = frappe.workflow.get_state_fieldname(this.doctype); | ||||
@@ -133,7 +133,7 @@ frappe.views.ListRenderer = Class.extend({ | |||||
add_field(df.options.split(':')[1]); | add_field(df.options.split(':')[1]); | ||||
} else { | } else { | ||||
add_field(df.options); | add_field(df.options); | ||||
}; | |||||
} | |||||
} | } | ||||
} | } | ||||
}); | }); | ||||
@@ -424,7 +424,7 @@ frappe.views.ListRenderer = Class.extend({ | |||||
this.prepare_when(data, data.modified); | this.prepare_when(data, data.modified); | ||||
// nulls as strings | // nulls as strings | ||||
for (key in data) { | |||||
for (var key in data) { | |||||
if (data[key] == null) { | if (data[key] == null) { | ||||
data[key] = ''; | data[key] = ''; | ||||
} | } | ||||
@@ -485,8 +485,8 @@ frappe.views.ListRenderer = Class.extend({ | |||||
prepare_when: function (data, date_str) { | prepare_when: function (data, date_str) { | ||||
if (!date_str) date_str = data.modified; | if (!date_str) date_str = data.modified; | ||||
// when | // when | ||||
data.when = (dateutil.str_to_user(date_str)).split(' ')[0]; | |||||
var diff = dateutil.get_diff(dateutil.get_today(), date_str.split(' ')[0]); | |||||
data.when = (frappe.datetime.str_to_user(date_str)).split(' ')[0]; | |||||
var diff = frappe.datetime.get_diff(frappe.datetime.get_today(), date_str.split(' ')[0]); | |||||
if (diff === 0) { | if (diff === 0) { | ||||
data.when = comment_when(date_str); | data.when = comment_when(date_str); | ||||
} | } | ||||
@@ -212,7 +212,7 @@ frappe.views.ListSidebar = Class.extend({ | |||||
.then(function() { | .then(function() { | ||||
d.hide(); | d.hide(); | ||||
}, function(err) { | }, function(err) { | ||||
msgprint(err); | |||||
frappe.msgprint(err); | |||||
}); | }); | ||||
} | } | ||||
}); | }); | ||||
@@ -273,15 +273,15 @@ frappe.views.ListSidebar = Class.extend({ | |||||
var $dropdown = this.page.sidebar.find('.email-account-dropdown'); | var $dropdown = this.page.sidebar.find('.email-account-dropdown'); | ||||
var divider = false; | var divider = false; | ||||
if(has_common(roles, ["System Manager", "Administrator"])) { | |||||
if(has_common(frappe.user_roles, ["System Manager", "Administrator"])) { | |||||
$('<li class="new-email-account"><a>'+ __("New Email Account") +'</a></li>') | $('<li class="new-email-account"><a>'+ __("New Email Account") +'</a></li>') | ||||
.appendTo($dropdown) | .appendTo($dropdown) | ||||
} | } | ||||
accounts = frappe.boot.email_accounts; | |||||
var accounts = frappe.boot.email_accounts; | |||||
accounts.forEach(function(account) { | accounts.forEach(function(account) { | ||||
email_account = (account.email_id == "All Accounts")? "All Accounts": account.email_account; | |||||
var email_account = (account.email_id == "All Accounts")? "All Accounts": account.email_account; | |||||
var route = ["List", "Communication", "Inbox", email_account].join('/'); | var route = ["List", "Communication", "Inbox", email_account].join('/'); | ||||
if(!divider) { | if(!divider) { | ||||
$('<li role="separator" class="divider"></li>').appendTo($dropdown); | $('<li role="separator" class="divider"></li>').appendTo($dropdown); | ||||
@@ -318,9 +318,9 @@ frappe.views.ListSidebar = Class.extend({ | |||||
me.defined_category = r.message; | me.defined_category = r.message; | ||||
if (r.message.defined_cat ){ | if (r.message.defined_cat ){ | ||||
me.defined_category = r.message.defined_cat | me.defined_category = r.message.defined_cat | ||||
me.cats = {}; | |||||
me.cats = {}; | |||||
//structure the tag categories | //structure the tag categories | ||||
for (i in me.defined_category){ | |||||
for (var i in me.defined_category){ | |||||
if (me.cats[me.defined_category[i].category]===undefined){ | if (me.cats[me.defined_category[i].category]===undefined){ | ||||
me.cats[me.defined_category[i].category]=[me.defined_category[i].tag]; | me.cats[me.defined_category[i].category]=[me.defined_category[i].tag]; | ||||
}else{ | }else{ | ||||
@@ -302,7 +302,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
set_filters: function (filters) { | set_filters: function (filters) { | ||||
var me = this; | var me = this; | ||||
$.each(filters, function (i, f) { | $.each(filters, function (i, f) { | ||||
hidden = false | |||||
var hidden = false | |||||
if (f.length === 3) { | if (f.length === 3) { | ||||
f = [me.doctype, f[0], f[1], f[2]] | f = [me.doctype, f[0], f[1], f[2]] | ||||
} else if (f.length === 5) { | } else if (f.length === 5) { | ||||
@@ -377,7 +377,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
if (this.list_renderer.settings.list_view_doc) { | if (this.list_renderer.settings.list_view_doc) { | ||||
this.list_renderer.settings.list_view_doc(this); | this.list_renderer.settings.list_view_doc(this); | ||||
} else { | } else { | ||||
doctype = this.list_renderer.no_result_doctype? this.list_renderer.no_result_doctype: this.doctype | |||||
var doctype = this.list_renderer.no_result_doctype? this.list_renderer.no_result_doctype: this.doctype | |||||
$(this.wrapper).on('click', `button[list_view_doc='${doctype}']`, function () { | $(this.wrapper).on('click', `button[list_view_doc='${doctype}']`, function () { | ||||
if (me.list_renderer.make_new_doc) | if (me.list_renderer.make_new_doc) | ||||
me.list_renderer.make_new_doc() | me.list_renderer.make_new_doc() | ||||
@@ -563,18 +563,18 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
return order_by; | return order_by; | ||||
}, | }, | ||||
assigned_to_me: function () { | assigned_to_me: function () { | ||||
this.filter_list.add_filter(this.doctype, '_assign', 'like', '%' + user + '%'); | |||||
this.filter_list.add_filter(this.doctype, '_assign', 'like', '%' + frappe.session.user + '%'); | |||||
this.run(); | this.run(); | ||||
}, | }, | ||||
liked_by_me: function () { | liked_by_me: function () { | ||||
this.filter_list.add_filter(this.doctype, '_liked_by', 'like', '%' + user + '%'); | |||||
this.filter_list.add_filter(this.doctype, '_liked_by', 'like', '%' + frappe.session.user + '%'); | |||||
this.run(); | this.run(); | ||||
}, | }, | ||||
remove_liked_by_me: function () { | remove_liked_by_me: function () { | ||||
this.filter_list.get_filter('_liked_by').remove(); | this.filter_list.get_filter('_liked_by').remove(); | ||||
}, | }, | ||||
is_star_filtered: function () { | is_star_filtered: function () { | ||||
return this.filter_list.filter_exists(this.doctype, '_liked_by', 'like', '%' + user + '%'); | |||||
return this.filter_list.filter_exists(this.doctype, '_liked_by', 'like', '%' + frappe.session.user + '%'); | |||||
}, | }, | ||||
init_menu: function () { | init_menu: function () { | ||||
var me = this; | var me = this; | ||||
@@ -606,7 +606,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
}); | }); | ||||
}, true); | }, true); | ||||
} | } | ||||
if (roles.includes('System Manager')) { | |||||
if (frappe.user_roles.includes('System Manager')) { | |||||
this.page.add_menu_item(__('Role Permissions Manager'), function () { | this.page.add_menu_item(__('Role Permissions Manager'), function () { | ||||
frappe.set_route('permission-manager', { | frappe.set_route('permission-manager', { | ||||
doctype: me.doctype | doctype: me.doctype | ||||
@@ -627,7 +627,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
frappe.add_to_desktop(me.doctype, me.doctype); | frappe.add_to_desktop(me.doctype, me.doctype); | ||||
}, true); | }, true); | ||||
if (roles.includes('System Manager') && frappe.boot.developer_mode === 1) { | |||||
if (frappe.user_roles.includes('System Manager') && frappe.boot.developer_mode === 1) { | |||||
// edit doctype | // edit doctype | ||||
this.page.add_menu_item(__('Edit DocType'), function () { | this.page.add_menu_item(__('Edit DocType'), function () { | ||||
frappe.set_route('Form', 'DocType', me.doctype); | frappe.set_route('Form', 'DocType', me.doctype); | ||||
@@ -683,7 +683,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
return !is_submittable || doc.docstatus === 1 || | return !is_submittable || doc.docstatus === 1 || | ||||
(allow_print_for_cancelled && doc.docstatus == 2) || | (allow_print_for_cancelled && doc.docstatus == 2) || | ||||
(allow_print_for_draft && doc.docstatus == 0) || | (allow_print_for_draft && doc.docstatus == 0) || | ||||
roles.includes('Administrator') | |||||
frappe.user_roles.includes('Administrator') | |||||
}).map(function (doc) { | }).map(function (doc) { | ||||
return doc.name | return doc.name | ||||
}); | }); | ||||
@@ -708,11 +708,11 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
}); | }); | ||||
dialog.set_primary_action(__('Print'), function () { | dialog.set_primary_action(__('Print'), function () { | ||||
args = dialog.get_values(); | |||||
var args = dialog.get_values(); | |||||
if (!args) return; | if (!args) return; | ||||
var default_print_format = locals.DocType[me.doctype].default_print_format; | var default_print_format = locals.DocType[me.doctype].default_print_format; | ||||
with_letterhead = args.with_letterhead ? 1 : 0; | |||||
print_format = args.print_sel ? args.print_sel : default_print_format; | |||||
var with_letterhead = args.with_letterhead ? 1 : 0; | |||||
var print_format = args.print_sel ? args.print_sel : default_print_format; | |||||
var json_string = JSON.stringify(valid_docs); | var json_string = JSON.stringify(valid_docs); | ||||
var w = window.open('/api/method/frappe.utils.print_format.download_multi_pdf?' | var w = window.open('/api/method/frappe.utils.print_format.download_multi_pdf?' | ||||
@@ -725,7 +725,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({ | |||||
} | } | ||||
}); | }); | ||||
print_formats = frappe.meta.get_print_formats(me.doctype); | |||||
var print_formats = frappe.meta.get_print_formats(me.doctype); | |||||
dialog.fields_dict.print_sel.$input.empty().add_options(print_formats); | dialog.fields_dict.print_sel.$input.empty().add_options(print_formats); | ||||
dialog.show(); | dialog.show(); | ||||
@@ -30,7 +30,7 @@ frappe.avatar = function(user, css_class, title) { | |||||
return repl('<span class="avatar %(css_class)s" title="%(title)s">\ | return repl('<span class="avatar %(css_class)s" title="%(title)s">\ | ||||
<span class="avatar-frame" style="background-image: url(%(image)s)"\ | <span class="avatar-frame" style="background-image: url(%(image)s)"\ | ||||
title="%(title)s"></span></span>', { | |||||
title="%(title)s"></span></span>', { | |||||
image: image, | image: image, | ||||
title: title, | title: title, | ||||
abbr: user_info.abbr, | abbr: user_info.abbr, | ||||
@@ -93,7 +93,7 @@ frappe.get_gravatar = function(email_id) { | |||||
function repl(s, dict) { | function repl(s, dict) { | ||||
if(s==null)return ''; | if(s==null)return ''; | ||||
for(key in dict) { | |||||
for(var key in dict) { | |||||
s = s.split("%("+key+")s").join(dict[key]); | s = s.split("%("+key+")s").join(dict[key]); | ||||
} | } | ||||
return s; | return s; | ||||
@@ -162,8 +162,8 @@ function getCookies() { | |||||
c.match(/(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g).map(function($0, $1) { | c.match(/(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g).map(function($0, $1) { | ||||
var name = $0, | var name = $0, | ||||
value = $1.charAt(0) === '"' | value = $1.charAt(0) === '"' | ||||
? $1.substr(1, -1).replace(/\\(.)/g, "$1") | |||||
: $1; | |||||
? $1.substr(1, -1).replace(/\\(.)/g, "$1") | |||||
: $1; | |||||
cookies[name] = value; | cookies[name] = value; | ||||
}); | }); | ||||
} | } | ||||
@@ -10,8 +10,8 @@ frappe.provide("frappe.datetime"); | |||||
$.extend(frappe.datetime, { | $.extend(frappe.datetime, { | ||||
convert_to_user_tz: function(date, format) { | convert_to_user_tz: function(date, format) { | ||||
// format defaults to true | // format defaults to true | ||||
if(sys_defaults.time_zone) { | |||||
var date_obj = moment.tz(date, sys_defaults.time_zone).local(); | |||||
if(frappe.sys_defaults.time_zone) { | |||||
var date_obj = moment.tz(date, frappe.sys_defaults.time_zone).local(); | |||||
} else { | } else { | ||||
var date_obj = moment(date); | var date_obj = moment(date); | ||||
} | } | ||||
@@ -22,8 +22,8 @@ $.extend(frappe.datetime, { | |||||
convert_to_system_tz: function(date, format) { | convert_to_system_tz: function(date, format) { | ||||
// format defaults to true | // format defaults to true | ||||
if(sys_defaults.time_zone) { | |||||
var date_obj = moment(date).tz(sys_defaults.time_zone); | |||||
if(frappe.sys_defaults.time_zone) { | |||||
var date_obj = moment(date).tz(frappe.sys_defaults.time_zone); | |||||
} else { | } else { | ||||
var date_obj = moment(date); | var date_obj = moment(date); | ||||
} | } | ||||
@@ -32,8 +32,8 @@ $.extend(frappe.datetime, { | |||||
}, | }, | ||||
is_timezone_same: function() { | is_timezone_same: function() { | ||||
if(sys_defaults.time_zone) { | |||||
return moment().tz(sys_defaults.time_zone).utcOffset() === moment().utcOffset(); | |||||
if(frappe.sys_defaults.time_zone) { | |||||
return moment().tz(frappe.sys_defaults.time_zone).utcOffset() === moment().utcOffset(); | |||||
} else { | } else { | ||||
return true; | return true; | ||||
} | } | ||||
@@ -48,7 +48,7 @@ $.extend(frappe.datetime, { | |||||
}, | }, | ||||
obj_to_user: function(d) { | obj_to_user: function(d) { | ||||
return moment(d).format(dateutil.get_user_fmt().toUpperCase()); | |||||
return moment(d).format(frappe.datetime.get_user_fmt().toUpperCase()); | |||||
}, | }, | ||||
get_diff: function(d1, d2) { | get_diff: function(d1, d2) { | ||||
@@ -88,12 +88,12 @@ $.extend(frappe.datetime, { | |||||
}, | }, | ||||
get_user_fmt: function() { | get_user_fmt: function() { | ||||
return sys_defaults.date_format || "yyyy-mm-dd"; | |||||
return frappe.sys_defaults.date_format || "yyyy-mm-dd"; | |||||
}, | }, | ||||
str_to_user: function(val, no_time_str) { | str_to_user: function(val, no_time_str) { | ||||
if(!val) return ""; | if(!val) return ""; | ||||
var user_fmt = dateutil.get_user_fmt().toUpperCase(); | |||||
var user_fmt = frappe.datetime.get_user_fmt().toUpperCase(); | |||||
if(typeof val !== "string" || val.indexOf(" ")===-1) { | if(typeof val !== "string" || val.indexOf(" ")===-1) { | ||||
return moment(val).format(user_fmt); | return moment(val).format(user_fmt); | ||||
} else { | } else { | ||||
@@ -110,7 +110,7 @@ $.extend(frappe.datetime, { | |||||
}, | }, | ||||
user_to_str: function(val, no_time_str) { | user_to_str: function(val, no_time_str) { | ||||
var user_fmt = dateutil.get_user_fmt().toUpperCase(); | |||||
var user_fmt = frappe.datetime.get_user_fmt().toUpperCase(); | |||||
var system_fmt = "YYYY-MM-DD"; | var system_fmt = "YYYY-MM-DD"; | ||||
if(val.indexOf(" ")!==-1) { | if(val.indexOf(" ")!==-1) { | ||||
@@ -124,7 +124,7 @@ $.extend(frappe.datetime, { | |||||
}, | }, | ||||
user_to_obj: function(d) { | user_to_obj: function(d) { | ||||
return dateutil.str_to_obj(dateutil.user_to_str(d)); | |||||
return frappe.datetime.str_to_obj(frappe.datetime.user_to_str(d)); | |||||
}, | }, | ||||
global_date_format: function(d) { | global_date_format: function(d) { | ||||
@@ -155,6 +155,4 @@ $.extend(frappe.datetime, { | |||||
}); | }); | ||||
// globals (deprecate) | |||||
var date = dateutil = frappe.datetime; | |||||
var get_today = frappe.datetime.get_today; | |||||
console.warn('The globals `dateutil` and `get_today` are deprecated. Please use `frappe.datetime` instead.') |
@@ -1,55 +1,55 @@ | |||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | ||||
// MIT License. See license.txt | // MIT License. See license.txt | ||||
if(!window.frappe) window.frappe = {}; | |||||
if (!window.frappe) window.frappe = {}; | |||||
function flt(v, decimals, number_format) { | function flt(v, decimals, number_format) { | ||||
if(v==null || v=='')return 0; | |||||
if (v == null || v == '') return 0; | |||||
if(typeof v!=="number") { | |||||
if (typeof v !== "number") { | |||||
v = v + ""; | v = v + ""; | ||||
// strip currency symbol if exists | // strip currency symbol if exists | ||||
if(v.indexOf(" ")!=-1) { | |||||
if (v.indexOf(" ") != -1) { | |||||
// using slice(1).join(" ") because space could also be a group separator | // using slice(1).join(" ") because space could also be a group separator | ||||
parts = v.split(" "); | |||||
var parts = v.split(" "); | |||||
v = isNaN(parseFloat(parts[0])) ? parts.slice(parts.length - 1).join(" ") : v; | v = isNaN(parseFloat(parts[0])) ? parts.slice(parts.length - 1).join(" ") : v; | ||||
} | } | ||||
v = strip_number_groups(v, number_format); | v = strip_number_groups(v, number_format); | ||||
v=parseFloat(v); | |||||
if(isNaN(v)) | |||||
v=0; | |||||
v = parseFloat(v); | |||||
if (isNaN(v)) | |||||
v = 0; | |||||
} | } | ||||
if(decimals!=null) | |||||
if (decimals != null) | |||||
return _round(v, decimals); | return _round(v, decimals); | ||||
return v; | return v; | ||||
} | } | ||||
function cint(v, def) { | function cint(v, def) { | ||||
if(v===true) | |||||
if (v === true) | |||||
return 1; | return 1; | ||||
if(v===false) | |||||
if (v === false) | |||||
return 0; | return 0; | ||||
v=v+''; | |||||
if(v!=="0")v=lstrip(v, ['0']); | |||||
v=parseInt(v); | |||||
if(isNaN(v))v=def===undefined?0:def; | |||||
v = v + ''; | |||||
if (v !== "0") v = lstrip(v, ['0']); | |||||
v = parseInt(v); | |||||
if (isNaN(v)) v = def === undefined ? 0 : def; | |||||
return v; | return v; | ||||
} | } | ||||
function strip_number_groups(v, number_format) { | function strip_number_groups(v, number_format) { | ||||
if(!number_format) number_format = get_number_format(); | |||||
if (!number_format) number_format = get_number_format(); | |||||
var info = get_number_format_info(number_format); | var info = get_number_format_info(number_format); | ||||
// strip groups (,) | // strip groups (,) | ||||
var group_regex = new RegExp(info.group_sep==="." ? "\\." : info.group_sep, "g"); | |||||
var group_regex = new RegExp(info.group_sep === "." ? "\\." : info.group_sep, "g"); | |||||
v = v.replace(group_regex, ""); | v = v.replace(group_regex, ""); | ||||
// replace decimal separator with (.) | // replace decimal separator with (.) | ||||
if (info.decimal_str!=="." && info.decimal_str!=="") { | |||||
if (info.decimal_str !== "." && info.decimal_str !== "") { | |||||
var decimal_regex = new RegExp(info.decimal_str, "g"); | var decimal_regex = new RegExp(info.decimal_str, "g"); | ||||
v = v.replace(decimal_regex, "."); | v = v.replace(decimal_regex, "."); | ||||
} | } | ||||
@@ -59,32 +59,32 @@ function strip_number_groups(v, number_format) { | |||||
frappe.number_format_info = { | frappe.number_format_info = { | ||||
"#,###.##": {decimal_str:".", group_sep:","}, | |||||
"#.###,##": {decimal_str:",", group_sep:"."}, | |||||
"# ###.##": {decimal_str:".", group_sep:" "}, | |||||
"# ###,##": {decimal_str:",", group_sep:" "}, | |||||
"#'###.##": {decimal_str:".", group_sep:"'"}, | |||||
"#, ###.##": {decimal_str:".", group_sep:", "}, | |||||
"#,##,###.##": {decimal_str:".", group_sep:","}, | |||||
"#,###.###": {decimal_str:".", group_sep:","}, | |||||
"#.###": {decimal_str:"", group_sep:"."}, | |||||
"#,###": {decimal_str:"", group_sep:","}, | |||||
"#,###.##": { decimal_str: ".", group_sep: "," }, | |||||
"#.###,##": { decimal_str: ",", group_sep: "." }, | |||||
"# ###.##": { decimal_str: ".", group_sep: " " }, | |||||
"# ###,##": { decimal_str: ",", group_sep: " " }, | |||||
"#'###.##": { decimal_str: ".", group_sep: "'" }, | |||||
"#, ###.##": { decimal_str: ".", group_sep: ", " }, | |||||
"#,##,###.##": { decimal_str: ".", group_sep: "," }, | |||||
"#,###.###": { decimal_str: ".", group_sep: "," }, | |||||
"#.###": { decimal_str: "", group_sep: "." }, | |||||
"#,###": { decimal_str: "", group_sep: "," }, | |||||
} | } | ||||
window.format_number = function(v, format, decimals){ | |||||
window.format_number = function (v, format, decimals) { | |||||
if (!format) { | if (!format) { | ||||
format = get_number_format(); | format = get_number_format(); | ||||
if(decimals == null) decimals = cint(frappe.defaults.get_default("float_precision")) || 3; | |||||
if (decimals == null) decimals = cint(frappe.defaults.get_default("float_precision")) || 3; | |||||
} | } | ||||
info = get_number_format_info(format); | |||||
var info = get_number_format_info(format); | |||||
// Fix the decimal first, toFixed will auto fill trailing zero. | // Fix the decimal first, toFixed will auto fill trailing zero. | ||||
if (decimals == null) decimals = info.precision; | if (decimals == null) decimals = info.precision; | ||||
v = flt(v, decimals, format); | v = flt(v, decimals, format); | ||||
if(v<0) var is_negative = true; | |||||
if (v < 0) var is_negative = true; | |||||
v = Math.abs(v); | v = Math.abs(v); | ||||
v = v.toFixed(decimals); | v = v.toFixed(decimals); | ||||
@@ -98,23 +98,23 @@ window.format_number = function(v, format, decimals){ | |||||
var integer = part[0]; | var integer = part[0]; | ||||
var str = ''; | var str = ''; | ||||
var offset = integer.length % group_position; | var offset = integer.length % group_position; | ||||
for (var i=integer.length; i>=0; i--) { | |||||
for (var i = integer.length; i >= 0; i--) { | |||||
var l = replace_all(str, info.group_sep, "").length; | var l = replace_all(str, info.group_sep, "").length; | ||||
if(format=="#,##,###.##" && str.indexOf(",")!=-1) { // INR | |||||
if (format == "#,##,###.##" && str.indexOf(",") != -1) { // INR | |||||
group_position = 2; | group_position = 2; | ||||
l += 1; | l += 1; | ||||
} | } | ||||
str += integer.charAt(i); | str += integer.charAt(i); | ||||
if (l && !((l+1) % group_position) && i!=0 ) { | |||||
if (l && !((l + 1) % group_position) && i != 0) { | |||||
str += info.group_sep; | str += info.group_sep; | ||||
} | } | ||||
} | } | ||||
part[0] = str.split("").reverse().join(""); | part[0] = str.split("").reverse().join(""); | ||||
} | } | ||||
if(part[0]+""=="") { | |||||
part[0]="0"; | |||||
if (part[0] + "" == "") { | |||||
part[0] = "0"; | |||||
} | } | ||||
// join decimal | // join decimal | ||||
@@ -131,18 +131,18 @@ function format_currency(v, currency, decimals) { | |||||
decimals = frappe.boot.sysdefaults.currency_precision || null; | decimals = frappe.boot.sysdefaults.currency_precision || null; | ||||
} | } | ||||
if(symbol) | |||||
if (symbol) | |||||
return symbol + " " + format_number(v, format, decimals); | return symbol + " " + format_number(v, format, decimals); | ||||
else | else | ||||
return format_number(v, format, decimals); | return format_number(v, format, decimals); | ||||
} | } | ||||
function get_currency_symbol(currency) { | function get_currency_symbol(currency) { | ||||
if(frappe.boot) { | |||||
if(frappe.boot.sysdefaults.hide_currency_symbol=="Yes") | |||||
if (frappe.boot) { | |||||
if (frappe.boot.sysdefaults.hide_currency_symbol == "Yes") | |||||
return null; | return null; | ||||
if(!currency) | |||||
if (!currency) | |||||
currency = frappe.boot.sysdefaults.currency; | currency = frappe.boot.sysdefaults.currency; | ||||
return frappe.model.get_value(":Currency", currency, "symbol") || currency; | return frappe.model.get_value(":Currency", currency, "symbol") || currency; | ||||
@@ -159,8 +159,8 @@ function get_number_format(currency) { | |||||
function get_number_format_info(format) { | function get_number_format_info(format) { | ||||
var info = frappe.number_format_info[format]; | var info = frappe.number_format_info[format]; | ||||
if(!info) { | |||||
info = {decimal_str:".", group_sep:","}; | |||||
if (!info) { | |||||
info = { decimal_str: ".", group_sep: "," }; | |||||
} | } | ||||
// get the precision from the number format | // get the precision from the number format | ||||
@@ -171,13 +171,13 @@ function get_number_format_info(format) { | |||||
function _round(num, precision) { | function _round(num, precision) { | ||||
var is_negative = num < 0 ? true : false; | var is_negative = num < 0 ? true : false; | ||||
var d = cint(precision); | |||||
var m = Math.pow(10, d); | |||||
var n = +(d ? Math.abs(num) * m : Math.abs(num)).toFixed(8); // Avoid rounding errors | |||||
var i = Math.floor(n), f = n - i; | |||||
var r = ((!precision && f == 0.5) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n)); | |||||
r = d ? r / m : r; | |||||
return is_negative ? -r : r; | |||||
var d = cint(precision); | |||||
var m = Math.pow(10, d); | |||||
var n = +(d ? Math.abs(num) * m : Math.abs(num)).toFixed(8); // Avoid rounding errors | |||||
var i = Math.floor(n), f = n - i; | |||||
var r = ((!precision && f == 0.5) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n)); | |||||
r = d ? r / m : r; | |||||
return is_negative ? -r : r; | |||||
} | } | ||||
@@ -187,20 +187,20 @@ function roundNumber(num, precision) { | |||||
} | } | ||||
function precision(fieldname, doc) { | function precision(fieldname, doc) { | ||||
if(cur_frm){ | |||||
if(!doc) doc = cur_frm.doc; | |||||
if (cur_frm) { | |||||
if (!doc) doc = cur_frm.doc; | |||||
var df = frappe.meta.get_docfield(doc.doctype, fieldname, doc.parent || doc.name); | var df = frappe.meta.get_docfield(doc.doctype, fieldname, doc.parent || doc.name); | ||||
if(!df) console.log(fieldname + ": could not find docfield in method precision()"); | |||||
if (!df) console.log(fieldname + ": could not find docfield in method precision()"); | |||||
return frappe.meta.get_field_precision(df, doc); | return frappe.meta.get_field_precision(df, doc); | ||||
}else{ | |||||
} else { | |||||
return frappe.boot.sysdefaults.float_precision | return frappe.boot.sysdefaults.float_precision | ||||
} | } | ||||
} | } | ||||
function in_list(list, item) { | function in_list(list, item) { | ||||
if(!list) return false; | |||||
for(var i=0, j=list.length; i<j; i++) | |||||
if(list[i]==item) return true; | |||||
if (!list) return false; | |||||
for (var i = 0, j = list.length; i < j; i++) | |||||
if (list[i] == item) return true; | |||||
return false; | return false; | ||||
} | } | ||||
@@ -214,15 +214,15 @@ function remainder(numerator, denominator, precision) { | |||||
} | } | ||||
return flt(_remainder, precision); | return flt(_remainder, precision); | ||||
}; | |||||
} | |||||
function round_based_on_smallest_currency_fraction(value, currency, precision) { | function round_based_on_smallest_currency_fraction(value, currency, precision) { | ||||
var smallest_currency_fraction_value = flt(frappe.model.get_value(":Currency", | var smallest_currency_fraction_value = flt(frappe.model.get_value(":Currency", | ||||
currency, "smallest_currency_fraction_value")) | currency, "smallest_currency_fraction_value")) | ||||
if(smallest_currency_fraction_value) { | |||||
if (smallest_currency_fraction_value) { | |||||
var remainder_val = remainder(value, smallest_currency_fraction_value, precision); | var remainder_val = remainder(value, smallest_currency_fraction_value, precision); | ||||
if(remainder_val > (smallest_currency_fraction_value / 2)) { | |||||
if (remainder_val > (smallest_currency_fraction_value / 2)) { | |||||
value += (smallest_currency_fraction_value - remainder_val); | value += (smallest_currency_fraction_value - remainder_val); | ||||
} else { | } else { | ||||
value -= remainder_val; | value -= remainder_val; | ||||
@@ -231,4 +231,4 @@ function round_based_on_smallest_currency_fraction(value, currency, precision) { | |||||
value = Math.round(value); | value = Math.round(value); | ||||
} | } | ||||
return value; | return value; | ||||
}; | |||||
} |
@@ -1,28 +1,28 @@ | |||||
// moment strings for translation | // moment strings for translation | ||||
function prettyDate(time, mini){ | |||||
if(!time) { | |||||
function prettyDate(time, mini) { | |||||
if (!time) { | |||||
time = new Date(); | time = new Date(); | ||||
} | } | ||||
if(moment) { | |||||
if(window.sys_defaults && sys_defaults.time_zone) { | |||||
var ret = moment.tz(time, sys_defaults.time_zone).locale(frappe.boot.lang).fromNow(mini); | |||||
if (moment) { | |||||
if (frappe.sys_defaults && frappe.sys_defaults.time_zone) { | |||||
var ret = moment.tz(time, frappe.sys_defaults.time_zone).locale(frappe.boot.lang).fromNow(mini); | |||||
} else { | } else { | ||||
var ret = moment(time).locale(frappe.boot.lang).fromNow(mini); | var ret = moment(time).locale(frappe.boot.lang).fromNow(mini); | ||||
} | } | ||||
if(mini) { | |||||
if(ret === moment().locale(frappe.boot.lang).fromNow(mini)) { | |||||
if (mini) { | |||||
if (ret === moment().locale(frappe.boot.lang).fromNow(mini)) { | |||||
ret = __("now"); | ret = __("now"); | ||||
} else { | } else { | ||||
var parts = ret.split(" "); | var parts = ret.split(" "); | ||||
if(parts.length > 1) { | |||||
if(parts[0]==="a" || parts[0]==="an") { | |||||
if (parts.length > 1) { | |||||
if (parts[0] === "a" || parts[0] === "an") { | |||||
parts[0] = 1; | parts[0] = 1; | ||||
} | } | ||||
if(parts[1].substr(0, 2)==="mo"){ | |||||
if (parts[1].substr(0, 2) === "mo") { | |||||
ret = parts[0] + " M"; | ret = parts[0] + " M"; | ||||
} else { | } else { | ||||
ret = parts[0] + " " + parts[1].substr(0, 1); | |||||
ret = parts[0] + " " + parts[1].substr(0, 1); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -30,48 +30,50 @@ function prettyDate(time, mini){ | |||||
} | } | ||||
return ret; | return ret; | ||||
} else { | } else { | ||||
if(!time) return '' | |||||
if (!time) return '' | |||||
var date = time; | var date = time; | ||||
if(typeof(time)=="string") | |||||
date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ").replace(/\.[0-9]*/, "")); | |||||
if (typeof (time) == "string") | |||||
date = new Date((time || "").replace(/-/g, "/").replace(/[TZ]/g, " ").replace(/\.[0-9]*/, "")); | |||||
var diff = (((new Date()).getTime() - date.getTime()) / 1000), | var diff = (((new Date()).getTime() - date.getTime()) / 1000), | ||||
day_diff = Math.floor(diff / 86400); | |||||
day_diff = Math.floor(diff / 86400); | |||||
if ( isNaN(day_diff) || day_diff < 0 ) | |||||
if (isNaN(day_diff) || day_diff < 0) | |||||
return ''; | return ''; | ||||
return when = day_diff == 0 && ( | |||||
diff < 60 && __("just now") || | |||||
diff < 120 && __("1 minute ago") || | |||||
diff < 3600 && __("{0} minutes ago", [Math.floor( diff / 60 )]) || | |||||
diff < 7200 && __("1 hour ago") || | |||||
diff < 86400 && ("{0} hours ago", [Math.floor( diff / 3600 )])) || | |||||
var when = day_diff == 0 && ( | |||||
diff < 60 && __("just now") || | |||||
diff < 120 && __("1 minute ago") || | |||||
diff < 3600 && __("{0} minutes ago", [Math.floor(diff / 60)]) || | |||||
diff < 7200 && __("1 hour ago") || | |||||
diff < 86400 && ("{0} hours ago", [Math.floor(diff / 3600)])) || | |||||
day_diff == 1 && __("Yesterday") || | day_diff == 1 && __("Yesterday") || | ||||
day_diff < 7 && __("{0} days ago", day_diff) || | day_diff < 7 && __("{0} days ago", day_diff) || | ||||
day_diff < 31 && __("{0} weeks ago", [Math.ceil( day_diff / 7 )]) || | |||||
day_diff < 365 && __("{0} months ago", [Math.ceil( day_diff / 30)]) || | |||||
__("> {0} year(s) ago", [Math.floor( day_diff / 365 )]); | |||||
day_diff < 31 && __("{0} weeks ago", [Math.ceil(day_diff / 7)]) || | |||||
day_diff < 365 && __("{0} months ago", [Math.ceil(day_diff / 30)]) || | |||||
__("> {0} year(s) ago", [Math.floor(day_diff / 365)]); | |||||
return when; | |||||
} | } | ||||
} | } | ||||
var comment_when = function(datetime, mini) { | |||||
var comment_when = function (datetime, mini) { | |||||
var timestamp = frappe.datetime.str_to_user ? | var timestamp = frappe.datetime.str_to_user ? | ||||
frappe.datetime.str_to_user(datetime) : datetime; | frappe.datetime.str_to_user(datetime) : datetime; | ||||
return '<span class="frappe-timestamp ' | return '<span class="frappe-timestamp ' | ||||
+(mini ? " mini" : "" ) + '" data-timestamp="'+datetime | |||||
+'" title="'+timestamp+'">' | |||||
+ (mini ? " mini" : "") + '" data-timestamp="' + datetime | |||||
+ '" title="' + timestamp + '">' | |||||
+ prettyDate(datetime, mini) + '</span>'; | + prettyDate(datetime, mini) + '</span>'; | ||||
}; | }; | ||||
frappe.provide("frappe.datetime"); | frappe.provide("frappe.datetime"); | ||||
frappe.datetime.refresh_when = function() { | |||||
if(jQuery) { | |||||
$(".frappe-timestamp").each(function() { | |||||
frappe.datetime.refresh_when = function () { | |||||
if (jQuery) { | |||||
$(".frappe-timestamp").each(function () { | |||||
$(this).html(prettyDate($(this).attr("data-timestamp"), $(this).hasClass("mini"))); | $(this).html(prettyDate($(this).attr("data-timestamp"), $(this).hasClass("mini"))); | ||||
}); | }); | ||||
} | } | ||||
} | } | ||||
setInterval(function() { frappe.datetime.refresh_when() }, 60000); // refresh every minute | |||||
setInterval(function () { frappe.datetime.refresh_when() }, 60000); // refresh every minute |
@@ -5,7 +5,7 @@ frappe.provide("frappe.tools"); | |||||
frappe.tools.downloadify = function(data, roles, title) { | frappe.tools.downloadify = function(data, roles, title) { | ||||
if(roles && roles.length && !has_common(roles, roles)) { | if(roles && roles.length && !has_common(roles, roles)) { | ||||
msgprint(__("Export not allowed. You need {0} role to export.", [frappe.utils.comma_or(roles)])); | |||||
frappe.msgprint(__("Export not allowed. You need {0} role to export.", [frappe.utils.comma_or(roles)])); | |||||
return; | return; | ||||
} | } | ||||
@@ -5,7 +5,7 @@ | |||||
frappe.user_info = function(uid) { | frappe.user_info = function(uid) { | ||||
if(!uid) | if(!uid) | ||||
uid = user; | |||||
uid = frappe.session.user; | |||||
if(uid.toLowerCase()==="bot") { | if(uid.toLowerCase()==="bot") { | ||||
return { | return { | ||||
@@ -57,7 +57,7 @@ frappe.provide('frappe.user'); | |||||
$.extend(frappe.user, { | $.extend(frappe.user, { | ||||
name: 'Guest', | name: 'Guest', | ||||
full_name: function(uid) { | full_name: function(uid) { | ||||
return uid===user ? | |||||
return uid === frappe.session.user ? | |||||
__("You") : | __("You") : | ||||
frappe.user_info(uid).fullname; | frappe.user_info(uid).fullname; | ||||
}, | }, | ||||
@@ -77,35 +77,29 @@ $.extend(frappe.user, { | |||||
}, | }, | ||||
get_desktop_items: function() { | get_desktop_items: function() { | ||||
// hide based on permission | // hide based on permission | ||||
modules_list = $.map(frappe.boot.desktop_icons, function(icon) { | |||||
var modules_list = $.map(frappe.boot.desktop_icons, function(icon) { | |||||
var m = icon.module_name; | var m = icon.module_name; | ||||
var type = frappe.modules[m] && frappe.modules[m].type; | var type = frappe.modules[m] && frappe.modules[m].type; | ||||
if(frappe.boot.user.allow_modules.indexOf(m) === -1) return null; | if(frappe.boot.user.allow_modules.indexOf(m) === -1) return null; | ||||
var ret = null; | var ret = null; | ||||
switch(type) { | |||||
case "module": | |||||
if(frappe.boot.user.allow_modules.indexOf(m)!=-1 || frappe.modules[m].is_help) | |||||
ret = m; | |||||
break; | |||||
case "page": | |||||
if(frappe.boot.allowed_pages.indexOf(frappe.modules[m].link)!=-1) | |||||
ret = m; | |||||
break; | |||||
case "list": | |||||
if(frappe.model.can_read(frappe.modules[m]._doctype)) | |||||
ret = m; | |||||
break; | |||||
case "view": | |||||
if (type === "module") { | |||||
if(frappe.boot.user.allow_modules.indexOf(m)!=-1 || frappe.modules[m].is_help) | |||||
ret = m; | ret = m; | ||||
break; | |||||
case "setup": | |||||
if(frappe.user.has_role("System Manager") || frappe.user.has_role("Administrator")) | |||||
ret = m; | |||||
break; | |||||
default: | |||||
} else if (type === "page") { | |||||
if(frappe.boot.allowed_pages.indexOf(frappe.modules[m].link)!=-1) | |||||
ret = m; | ret = m; | ||||
} else if (type === "list") { | |||||
if(frappe.model.can_read(frappe.modules[m]._doctype)) | |||||
ret = m; | |||||
} else if (type === "view") { | |||||
ret = m; | |||||
} else if (type === "setup") { | |||||
if(frappe.user.has_role("System Manager") || frappe.user.has_role("Administrator")) | |||||
ret = m; | |||||
} else { | |||||
ret = m; | |||||
} | } | ||||
return ret; | return ret; | ||||
@@ -147,6 +141,19 @@ $.extend(frappe.user, { | |||||
quote: quote | quote: quote | ||||
}); | }); | ||||
} | } | ||||
}, | |||||
/* Normally frappe.user is an object | |||||
* having properties and methods. | |||||
* But in the following case | |||||
* | |||||
* if (frappe.user === 'Administrator') | |||||
* | |||||
* frappe.user will cast to a string | |||||
* returning frappe.user.name | |||||
*/ | |||||
toString: function() { | |||||
return this.name; | |||||
} | } | ||||
}); | }); | ||||
@@ -5,13 +5,13 @@ frappe.provide('frappe.utils'); | |||||
frappe.utils = { | frappe.utils = { | ||||
get_random: function(len) { | get_random: function(len) { | ||||
var text = ""; | |||||
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; | |||||
var text = ""; | |||||
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; | |||||
for( var i=0; i < len; i++ ) | |||||
text += possible.charAt(Math.floor(Math.random() * possible.length)); | |||||
for( var i=0; i < len; i++ ) | |||||
text += possible.charAt(Math.floor(Math.random() * possible.length)); | |||||
return text; | |||||
return text; | |||||
}, | }, | ||||
get_file_link: function(filename) { | get_file_link: function(filename) { | ||||
filename = cstr(filename); | filename = cstr(filename); | ||||
@@ -122,7 +122,7 @@ frappe.utils = { | |||||
return [dict[filters]] | return [dict[filters]] | ||||
} | } | ||||
$.each(dict, function(i, d) { | $.each(dict, function(i, d) { | ||||
for(key in filters) { | |||||
for(var key in filters) { | |||||
if($.isArray(filters[key])) { | if($.isArray(filters[key])) { | ||||
if(filters[key][0]=="in") { | if(filters[key][0]=="in") { | ||||
if(filters[key][1].indexOf(d[key])==-1) | if(filters[key][1].indexOf(d[key])==-1) | ||||
@@ -242,7 +242,6 @@ frappe.utils = { | |||||
break; | break; | ||||
default: | default: | ||||
return false; | return false; | ||||
break; | |||||
} | } | ||||
// test regExp if not null | // test regExp if not null | ||||
@@ -288,7 +287,7 @@ frappe.utils = { | |||||
}; | }; | ||||
if(!compare_type) | if(!compare_type) | ||||
compare_type = typeof list[0][key]==="string" ? "string" : "number"; | |||||
compare_type = typeof list[0][key]==="string" ? "string" : "number"; | |||||
list.sort(sort_fn[compare_type]); | list.sort(sort_fn[compare_type]); | ||||
@@ -349,20 +348,20 @@ frappe.utils = { | |||||
if (!arr1 || !arr2) { | if (!arr1 || !arr2) { | ||||
return false; | return false; | ||||
} | } | ||||
if (arr1.length != arr2.length) { | |||||
if (arr1.length != arr2.length) { | |||||
return false; | return false; | ||||
} | } | ||||
for (var i = 0; i < arr1.length; i++) { | |||||
if ($.isArray(arr1[i])) { | |||||
if (!frappe.utils.arrays_equal(arr1[i], arr2[i])) { | |||||
for (var i = 0; i < arr1.length; i++) { | |||||
if ($.isArray(arr1[i])) { | |||||
if (!frappe.utils.arrays_equal(arr1[i], arr2[i])) { | |||||
return false; | return false; | ||||
} | } | ||||
} | |||||
else if (arr1[i] !== arr2[i]) { | |||||
} | |||||
else if (arr1[i] !== arr2[i]) { | |||||
return false; | return false; | ||||
} | } | ||||
} | |||||
return true; | |||||
} | |||||
return true; | |||||
}, | }, | ||||
intersection: function(a, b) { | intersection: function(a, b) { | ||||
@@ -411,13 +410,13 @@ frappe.utils = { | |||||
var tempH = tempImg.height; | var tempH = tempImg.height; | ||||
if (tempW > tempH) { | if (tempW > tempH) { | ||||
if (tempW > max_width) { | if (tempW > max_width) { | ||||
tempH *= max_width / tempW; | |||||
tempW = max_width; | |||||
tempH *= max_width / tempW; | |||||
tempW = max_width; | |||||
} | } | ||||
} else { | } else { | ||||
if (tempH > max_height) { | if (tempH > max_height) { | ||||
tempW *= max_height / tempH; | |||||
tempH = max_height; | |||||
tempW *= max_height / tempH; | |||||
tempH = max_height; | |||||
} | } | ||||
} | } | ||||
@@ -431,88 +430,88 @@ frappe.utils = { | |||||
} | } | ||||
}, | }, | ||||
csv_to_array: function (strData, strDelimiter) { | |||||
// Check to see if the delimiter is defined. If not, | |||||
// then default to comma. | |||||
strDelimiter = (strDelimiter || ","); | |||||
csv_to_array: function (strData, strDelimiter) { | |||||
// Check to see if the delimiter is defined. If not, | |||||
// then default to comma. | |||||
strDelimiter = (strDelimiter || ","); | |||||
// Create a regular expression to parse the CSV values. | |||||
var objPattern = new RegExp( | |||||
( | |||||
// Delimiters. | |||||
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" + | |||||
// Create a regular expression to parse the CSV values. | |||||
var objPattern = new RegExp( | |||||
( | |||||
// Delimiters. | |||||
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" + | |||||
// Quoted fields. | |||||
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + | |||||
// Quoted fields. | |||||
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + | |||||
// Standard fields. | |||||
"([^\"\\" + strDelimiter + "\\r\\n]*))" | |||||
), | |||||
"gi" | |||||
); | |||||
// Standard fields. | |||||
"([^\"\\" + strDelimiter + "\\r\\n]*))" | |||||
), | |||||
"gi" | |||||
); | |||||
// Create an array to hold our data. Give the array | |||||
// a default empty first row. | |||||
var arrData = [[]]; | |||||
// Create an array to hold our data. Give the array | |||||
// a default empty first row. | |||||
var arrData = [[]]; | |||||
// Create an array to hold our individual pattern | |||||
// matching groups. | |||||
var arrMatches = null; | |||||
// Create an array to hold our individual pattern | |||||
// matching groups. | |||||
var arrMatches = null; | |||||
// Keep looping over the regular expression matches | |||||
// until we can no longer find a match. | |||||
while (arrMatches = objPattern.exec( strData )){ | |||||
// Keep looping over the regular expression matches | |||||
// until we can no longer find a match. | |||||
while ((arrMatches = objPattern.exec( strData ))){ | |||||
// Get the delimiter that was found. | |||||
var strMatchedDelimiter = arrMatches[ 1 ]; | |||||
// Get the delimiter that was found. | |||||
var strMatchedDelimiter = arrMatches[ 1 ]; | |||||
// Check to see if the given delimiter has a length | |||||
// (is not the start of string) and if it matches | |||||
// field delimiter. If id does not, then we know | |||||
// that this delimiter is a row delimiter. | |||||
if ( | |||||
strMatchedDelimiter.length && | |||||
strMatchedDelimiter !== strDelimiter | |||||
){ | |||||
// Check to see if the given delimiter has a length | |||||
// (is not the start of string) and if it matches | |||||
// field delimiter. If id does not, then we know | |||||
// that this delimiter is a row delimiter. | |||||
if ( | |||||
strMatchedDelimiter.length && | |||||
strMatchedDelimiter !== strDelimiter | |||||
){ | |||||
// Since we have reached a new row of data, | |||||
// add an empty row to our data array. | |||||
arrData.push( [] ); | |||||
// Since we have reached a new row of data, | |||||
// add an empty row to our data array. | |||||
arrData.push( [] ); | |||||
} | |||||
} | |||||
var strMatchedValue; | |||||
var strMatchedValue; | |||||
// Now that we have our delimiter out of the way, | |||||
// let's check to see which kind of value we | |||||
// captured (quoted or unquoted). | |||||
if (arrMatches[ 2 ]){ | |||||
// Now that we have our delimiter out of the way, | |||||
// let's check to see which kind of value we | |||||
// captured (quoted or unquoted). | |||||
if (arrMatches[ 2 ]){ | |||||
// We found a quoted value. When we capture | |||||
// this value, unescape any double quotes. | |||||
strMatchedValue = arrMatches[ 2 ].replace( | |||||
new RegExp( "\"\"", "g" ), | |||||
"\"" | |||||
); | |||||
// We found a quoted value. When we capture | |||||
// this value, unescape any double quotes. | |||||
strMatchedValue = arrMatches[ 2 ].replace( | |||||
new RegExp( "\"\"", "g" ), | |||||
"\"" | |||||
); | |||||
} else { | |||||
} else { | |||||
// We found a non-quoted value. | |||||
strMatchedValue = arrMatches[ 3 ]; | |||||
// We found a non-quoted value. | |||||
strMatchedValue = arrMatches[ 3 ]; | |||||
} | |||||
} | |||||
// Now that we have our value string, let's add | |||||
// it to the data array. | |||||
arrData[ arrData.length - 1 ].push( strMatchedValue ); | |||||
} | |||||
// Now that we have our value string, let's add | |||||
// it to the data array. | |||||
arrData[ arrData.length - 1 ].push( strMatchedValue ); | |||||
} | |||||
// Return the parsed data. | |||||
return( arrData ); | |||||
}, | |||||
// Return the parsed data. | |||||
return( arrData ); | |||||
}, | |||||
warn_page_name_change: function(frm) { | warn_page_name_change: function(frm) { | ||||
frappe.msgprint("Note: Changing the Page Name will break previous URL to this page."); | frappe.msgprint("Note: Changing the Page Name will break previous URL to this page."); | ||||
@@ -588,42 +587,42 @@ frappe.utils = { | |||||
// String.prototype.includes polyfill | // String.prototype.includes polyfill | ||||
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes | // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes | ||||
if (!String.prototype.includes) { | if (!String.prototype.includes) { | ||||
String.prototype.includes = function(search, start) { | |||||
'use strict'; | |||||
if (typeof start !== 'number') { | |||||
start = 0; | |||||
} | |||||
if (start + search.length > this.length) { | |||||
return false; | |||||
} else { | |||||
return this.indexOf(search, start) !== -1; | |||||
} | |||||
}; | |||||
String.prototype.includes = function (search, start) { | |||||
'use strict'; | |||||
if (typeof start !== 'number') { | |||||
start = 0; | |||||
} | |||||
if (start + search.length > this.length) { | |||||
return false; | |||||
} else { | |||||
return this.indexOf(search, start) !== -1; | |||||
} | |||||
}; | |||||
} | } | ||||
// Array.prototype.includes polyfill | // Array.prototype.includes polyfill | ||||
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes | // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes | ||||
if (!Array.prototype.includes) { | if (!Array.prototype.includes) { | ||||
Object.defineProperty(Array.prototype, 'includes', { | |||||
value: function(searchElement, fromIndex) { | |||||
if (this == null) { | |||||
throw new TypeError('"this" is null or not defined'); | |||||
} | |||||
var o = Object(this); | |||||
var len = o.length >>> 0; | |||||
if (len === 0) { | |||||
return false; | |||||
} | |||||
var n = fromIndex | 0; | |||||
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); | |||||
while (k < len) { | |||||
if (o[k] === searchElement) { | |||||
return true; | |||||
} | |||||
k++; | |||||
} | |||||
return false; | |||||
} | |||||
}); | |||||
Object.defineProperty(Array.prototype, 'includes', { | |||||
value: function(searchElement, fromIndex) { | |||||
if (this == null) { | |||||
throw new TypeError('"this" is null or not defined'); | |||||
} | |||||
var o = Object(this); | |||||
var len = o.length >>> 0; | |||||
if (len === 0) { | |||||
return false; | |||||
} | |||||
var n = fromIndex | 0; | |||||
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); | |||||
while (k < len) { | |||||
if (o[k] === searchElement) { | |||||
return true; | |||||
} | |||||
k++; | |||||
} | |||||
return false; | |||||
} | |||||
}); | |||||
} | } | ||||
// Array de duplicate | // Array de duplicate | ||||
if (!Array.prototype.uniqBy) { | if (!Array.prototype.uniqBy) { | ||||
@@ -15,7 +15,7 @@ $.extend(frappe.model, { | |||||
name: frappe.model.get_new_name(doctype), | name: frappe.model.get_new_name(doctype), | ||||
__islocal: 1, | __islocal: 1, | ||||
__unsaved: 1, | __unsaved: 1, | ||||
owner: user | |||||
owner: frappe.session.user | |||||
}; | }; | ||||
frappe.model.set_default_values(doc, parent_doc); | frappe.model.set_default_values(doc, parent_doc); | ||||
@@ -103,7 +103,8 @@ $.extend(frappe.model, { | |||||
updated.push(f.fieldname); | updated.push(f.fieldname); | ||||
} else if(f.fieldtype == "Select" && f.options && typeof f.options === 'string' | } else if(f.fieldtype == "Select" && f.options && typeof f.options === 'string' | ||||
&& !in_list(["[Select]", "Loading..."], f.options)) { | && !in_list(["[Select]", "Loading..."], f.options)) { | ||||
doc[f.fieldname] = f.options.split("\n")[0]; | |||||
doc[f.fieldname] = f.options.split("\n")[0]; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -140,7 +141,7 @@ $.extend(frappe.model, { | |||||
if(!df.ignore_user_permissions) { | if(!df.ignore_user_permissions) { | ||||
// 2 - look in user defaults | // 2 - look in user defaults | ||||
user_defaults = frappe.defaults.get_user_defaults(df.options); | |||||
var user_defaults = frappe.defaults.get_user_defaults(df.options); | |||||
if (user_defaults && user_defaults.length===1) { | if (user_defaults && user_defaults.length===1) { | ||||
// Use User Permission value when only when it has a single value | // Use User Permission value when only when it has a single value | ||||
user_default = user_defaults[0]; | user_default = user_defaults[0]; | ||||
@@ -171,13 +172,13 @@ $.extend(frappe.model, { | |||||
return frappe.session.user; | return frappe.session.user; | ||||
} else if (df["default"] == "user_fullname") { | } else if (df["default"] == "user_fullname") { | ||||
return user_fullname; | |||||
return frappe.session.user_fullname; | |||||
} else if (df["default"] == "Today") { | } else if (df["default"] == "Today") { | ||||
return dateutil.get_today(); | |||||
return frappe.datetime.get_today(); | |||||
} else if ((df["default"] || "").toLowerCase() === "now") { | } else if ((df["default"] || "").toLowerCase() === "now") { | ||||
return dateutil.now_datetime(); | |||||
return frappe.datetime.now_datetime(); | |||||
} else if (df["default"][0]===":") { | } else if (df["default"][0]===":") { | ||||
var boot_doc = frappe.model.get_default_from_boot_docs(df, doc, parent_doc); | var boot_doc = frappe.model.get_default_from_boot_docs(df, doc, parent_doc); | ||||
@@ -198,7 +199,7 @@ $.extend(frappe.model, { | |||||
} | } | ||||
} else if (df.fieldtype=="Time") { | } else if (df.fieldtype=="Time") { | ||||
return dateutil.now_time(); | |||||
return frappe.datetime.now_time(); | |||||
} | } | ||||
}, | }, | ||||
@@ -252,21 +253,24 @@ $.extend(frappe.model, { | |||||
// dont copy name and blank fields | // dont copy name and blank fields | ||||
var df = frappe.meta.get_docfield(doc.doctype, key); | var df = frappe.meta.get_docfield(doc.doctype, key); | ||||
if(df && key.substr(0,2)!='__' | |||||
if (df && key.substr(0, 2) != '__' | |||||
&& !in_list(no_copy_list, key) | && !in_list(no_copy_list, key) | ||||
&& !(df && (!from_amend && cint(df.no_copy)==1))) { | |||||
var value = doc[key] || []; | |||||
if(df.fieldtype==="Table") { | |||||
for(var i=0, j=value.length; i<j; i++) { | |||||
var d = value[i]; | |||||
frappe.model.copy_doc(d, from_amend, newdoc, df.fieldname); | |||||
} | |||||
} else { | |||||
newdoc[key] = doc[key]; | |||||
&& !(df && (!from_amend && cint(df.no_copy) == 1))) { | |||||
var value = doc[key] || []; | |||||
if (df.fieldtype === "Table") { | |||||
for (var i = 0, j = value.length; i < j; i++) { | |||||
var d = value[i]; | |||||
frappe.model.copy_doc(d, from_amend, newdoc, df.fieldname); | |||||
} | } | ||||
} else { | |||||
newdoc[key] = doc[key]; | |||||
} | |||||
} | } | ||||
} | } | ||||
var user = frappe.session.user; | |||||
newdoc.__islocal = 1; | newdoc.__islocal = 1; | ||||
newdoc.docstatus = 0; | newdoc.docstatus = 0; | ||||
newdoc.owner = user; | newdoc.owner = user; | ||||
@@ -309,7 +313,7 @@ $.extend(frappe.model, { | |||||
frappe.create_routes = {}; | frappe.create_routes = {}; | ||||
frappe.new_doc = function (doctype, opts) { | frappe.new_doc = function (doctype, opts) { | ||||
if(opts && $.isPlainObject(opts)) { frappe.route_options = opts; }; | |||||
if(opts && $.isPlainObject(opts)) { frappe.route_options = opts; } | |||||
frappe.model.with_doctype(doctype, function() { | frappe.model.with_doctype(doctype, function() { | ||||
if(frappe.create_routes[doctype]) { | if(frappe.create_routes[doctype]) { | ||||
frappe.set_route(frappe.create_routes[doctype]); | frappe.set_route(frappe.create_routes[doctype]); | ||||
@@ -331,7 +335,4 @@ frappe.new_doc = function (doctype, opts) { | |||||
}); | }); | ||||
} | } | ||||
// globals for backward compatibility | |||||
window.new_doc = frappe.new_doc; | |||||
@@ -173,7 +173,7 @@ $.extend(frappe.meta, { | |||||
get_parentfield: function(parent_dt, child_dt) { | get_parentfield: function(parent_dt, child_dt) { | ||||
var df = (frappe.get_doc("DocType", parent_dt).fields || []).filter(function(d) | var df = (frappe.get_doc("DocType", parent_dt).fields || []).filter(function(d) | ||||
{ return d.fieldtype==="Table" && options===child_dt }) | |||||
{ return d.fieldtype==="Table" && d.options===child_dt }) | |||||
if(!df.length) | if(!df.length) | ||||
throw "parentfield not found for " + parent_dt + ", " + child_dt; | throw "parentfield not found for " + parent_dt + ", " + child_dt; | ||||
return df[0].fieldname; | return df[0].fieldname; | ||||
@@ -5,7 +5,7 @@ frappe.provide('frappe.model'); | |||||
$.extend(frappe.model, { | $.extend(frappe.model, { | ||||
no_value_type: ['Section Break', 'Column Break', 'HTML', 'Table', | no_value_type: ['Section Break', 'Column Break', 'HTML', 'Table', | ||||
'Button', 'Image', 'Fold', 'Heading'], | |||||
'Button', 'Image', 'Fold', 'Heading'], | |||||
layout_fields: ['Section Break', 'Column Break', 'Fold'], | layout_fields: ['Section Break', 'Column Break', 'Fold'], | ||||
@@ -77,7 +77,7 @@ $.extend(frappe.model, { | |||||
if(d.fieldname==fieldname) return d; | if(d.fieldname==fieldname) return d; | ||||
}); | }); | ||||
if(!docfield.length) { | if(!docfield.length) { | ||||
msgprint(__("Unknown Column: {0}", [fieldname])); | |||||
frappe.msgprint(__("Unknown Column: {0}", [fieldname])); | |||||
} | } | ||||
return docfield[0]; | return docfield[0]; | ||||
}, | }, | ||||
@@ -103,7 +103,7 @@ $.extend(frappe.model, { | |||||
freeze: true, | freeze: true, | ||||
callback: function(r) { | callback: function(r) { | ||||
if(r.exc) { | if(r.exc) { | ||||
msgprint(__("Unable to load: {0}", [__(doctype)])); | |||||
frappe.msgprint(__("Unable to load: {0}", [__(doctype)])); | |||||
throw "No doctype"; | throw "No doctype"; | ||||
} | } | ||||
if(r.message=="use_cache") { | if(r.message=="use_cache") { | ||||
@@ -235,7 +235,7 @@ $.extend(frappe.model, { | |||||
can_import: function(doctype, frm) { | can_import: function(doctype, frm) { | ||||
// system manager can always import | // system manager can always import | ||||
if(roles.indexOf("System Manager")!==-1) return true; | |||||
if(frappe.user_roles.includes("System Manager")) return true; | |||||
if(frm) return frm.perm[0].import===1; | if(frm) return frm.perm[0].import===1; | ||||
return frappe.boot.user.can_import.indexOf(doctype)!==-1; | return frappe.boot.user.can_import.indexOf(doctype)!==-1; | ||||
@@ -243,7 +243,7 @@ $.extend(frappe.model, { | |||||
can_export: function(doctype, frm) { | can_export: function(doctype, frm) { | ||||
// system manager can always export | // system manager can always export | ||||
if(roles.indexOf("System Manager")!==-1) return true; | |||||
if(frappe.user_roles.includes("System Manager")) return true; | |||||
if(frm) return frm.perm[0].export===1; | if(frm) return frm.perm[0].export===1; | ||||
return frappe.boot.user.can_export.indexOf(doctype)!==-1; | return frappe.boot.user.can_export.indexOf(doctype)!==-1; | ||||
@@ -268,7 +268,7 @@ $.extend(frappe.model, { | |||||
can_set_user_permissions: function(doctype, frm) { | can_set_user_permissions: function(doctype, frm) { | ||||
// system manager can always set user permissions | // system manager can always set user permissions | ||||
if(roles.indexOf("System Manager")!==-1) return true; | |||||
if(frappe.user_roles.includes("System Manager")) return true; | |||||
if(frm) return frm.perm[0].set_user_permissions===1; | if(frm) return frm.perm[0].set_user_permissions===1; | ||||
return frappe.boot.user.can_set_user_permissions.indexOf(doctype)!==-1; | return frappe.boot.user.can_set_user_permissions.indexOf(doctype)!==-1; | ||||
@@ -359,7 +359,7 @@ $.extend(frappe.model, { | |||||
*/ | */ | ||||
/* example: frappe.model.on("Customer", "age", function(fieldname, value, doc) { | /* example: frappe.model.on("Customer", "age", function(fieldname, value, doc) { | ||||
if(doc.age < 16) { | if(doc.age < 16) { | ||||
msgprint("Warning, Customer must atleast be 16 years old."); | |||||
frappe.msgprint("Warning, Customer must atleast be 16 years old."); | |||||
raise "CustomerAgeError"; | raise "CustomerAgeError"; | ||||
} | } | ||||
}) */ | }) */ | ||||
@@ -385,7 +385,7 @@ $.extend(frappe.model, { | |||||
// doctype-level | // doctype-level | ||||
run(frappe.model.events[doc.doctype]['*']); | run(frappe.model.events[doc.doctype]['*']); | ||||
}; | |||||
} | |||||
}, | }, | ||||
get_doc: function(doctype, name) { | get_doc: function(doctype, name) { | ||||
@@ -541,7 +541,7 @@ $.extend(frappe.model, { | |||||
get_all_docs: function(doc) { | get_all_docs: function(doc) { | ||||
var all = [doc]; | var all = [doc]; | ||||
for(key in doc) { | |||||
for(var key in doc) { | |||||
if($.isArray(doc[key])) { | if($.isArray(doc[key])) { | ||||
var children = doc[key]; | var children = doc[key]; | ||||
for (var i=0, l=children.length; i < l; i++) { | for (var i=0, l=children.length; i < l; i++) { | ||||
@@ -45,7 +45,7 @@ $.extend(frappe.perm, { | |||||
return perm; | return perm; | ||||
} | } | ||||
if (user==="Administrator" || roles.indexOf("Administrator")!==-1) { | |||||
if (frappe.session.user === "Administrator" || frappe.user_roles.includes("Administrator")) { | |||||
perm[0].read = 1; | perm[0].read = 1; | ||||
} | } | ||||
@@ -62,7 +62,7 @@ $.extend(frappe.perm, { | |||||
// if owner | // if owner | ||||
if(!$.isEmptyObject(perm[0].if_owner)) { | if(!$.isEmptyObject(perm[0].if_owner)) { | ||||
if(doc.owner===user) { | |||||
if(doc.owner === frappe.session.user) { | |||||
$.extend(perm[0], perm[0].if_owner); | $.extend(perm[0], perm[0].if_owner); | ||||
} else { | } else { | ||||
// not owner, remove permissions | // not owner, remove permissions | ||||
@@ -78,7 +78,7 @@ $.extend(frappe.perm, { | |||||
if(docinfo && docinfo.shared) { | if(docinfo && docinfo.shared) { | ||||
for(var i=0; i<docinfo.shared.length; i++) { | for(var i=0; i<docinfo.shared.length; i++) { | ||||
var s = docinfo.shared[i]; | var s = docinfo.shared[i]; | ||||
if(s.user===user) { | |||||
if(s.user === frappe.session.user) { | |||||
perm[0]["read"] = perm[0]["read"] || s.read; | perm[0]["read"] = perm[0]["read"] || s.read; | ||||
perm[0]["write"] = perm[0]["write"] || s.write; | perm[0]["write"] = perm[0]["write"] || s.write; | ||||
perm[0]["share"] = perm[0]["share"] || s.share; | perm[0]["share"] = perm[0]["share"] || s.share; | ||||
@@ -109,7 +109,7 @@ $.extend(frappe.perm, { | |||||
$.each(meta.permissions || [], function(i, p) { | $.each(meta.permissions || [], function(i, p) { | ||||
// if user has this role | // if user has this role | ||||
if(roles.indexOf(p.role)!==-1) { | |||||
if(frappe.user_roles.includes(p.role)) { | |||||
var permlevel = cint(p.permlevel); | var permlevel = cint(p.permlevel); | ||||
if(!perm[permlevel]) { | if(!perm[permlevel]) { | ||||
perm[permlevel] = {}; | perm[permlevel] = {}; | ||||
@@ -198,7 +198,7 @@ $.extend(frappe.perm, { | |||||
} | } | ||||
if (perm[0].if_owner && perm[0].read) { | if (perm[0].if_owner && perm[0].read) { | ||||
match_rules.push({"Owner": user}); | |||||
match_rules.push({"Owner": frappe.session.user}); | |||||
} | } | ||||
return match_rules; | return match_rules; | ||||
@@ -44,7 +44,7 @@ frappe.workflow = { | |||||
return frappe.get_children(frappe.workflow.workflows[doctype], "transitions", { | return frappe.get_children(frappe.workflow.workflows[doctype], "transitions", { | ||||
state:state, action:action})[0].next_state; | state:state, action:action})[0].next_state; | ||||
}, | }, | ||||
is_read_only: function(doctype, name) { | |||||
is_read_only: function(doctype, name) { | |||||
var state_fieldname = frappe.workflow.get_state_fieldname(doctype); | var state_fieldname = frappe.workflow.get_state_fieldname(doctype); | ||||
if(state_fieldname) { | if(state_fieldname) { | ||||
var doc = locals[doctype][name]; | var doc = locals[doctype][name]; | ||||
@@ -58,7 +58,7 @@ frappe.workflow = { | |||||
var allow_edit = state ? frappe.workflow.get_document_state(doctype, state).allow_edit : null; | var allow_edit = state ? frappe.workflow.get_document_state(doctype, state).allow_edit : null; | ||||
if(roles.indexOf(allow_edit)==-1) { | |||||
if(!frappe.user_roles.includes(allow_edit)) { | |||||
return true; | return true; | ||||
} | } | ||||
} | } | ||||
@@ -71,10 +71,10 @@ frappe.request.call = function(opts) { | |||||
frappe.app.redirect_to_login(); | frappe.app.redirect_to_login(); | ||||
} else { | } else { | ||||
frappe.app.handle_session_expired(); | frappe.app.handle_session_expired(); | ||||
}; | |||||
} | |||||
}, | }, | ||||
404: function(xhr) { | 404: function(xhr) { | ||||
msgprint({title:__("Not found"), indicator:'red', | |||||
frappe.msgprint({title:__("Not found"), indicator:'red', | |||||
message: __('The resource you are looking for is not available')}); | message: __('The resource you are looking for is not available')}); | ||||
}, | }, | ||||
403: function(xhr) { | 403: function(xhr) { | ||||
@@ -108,11 +108,11 @@ frappe.request.call = function(opts) { | |||||
}, | }, | ||||
508: function(xhr) { | 508: function(xhr) { | ||||
frappe.utils.play_sound("error"); | frappe.utils.play_sound("error"); | ||||
msgprint({title:__('Please try again'), indicator:'red', | |||||
frappe.msgprint({title:__('Please try again'), indicator:'red', | |||||
message:__("Another transaction is blocking this one. Please try again in a few seconds.")}); | message:__("Another transaction is blocking this one. Please try again in a few seconds.")}); | ||||
}, | }, | ||||
413: function(data, xhr) { | 413: function(data, xhr) { | ||||
msgprint({indicator:'red', title:__('File too big'), message:__("File size exceeded the maximum allowed size of {0} MB", | |||||
frappe.msgprint({indicator:'red', title:__('File too big'), message:__("File size exceeded the maximum allowed size of {0} MB", | |||||
[(frappe.boot.max_file_size || 5242880) / 1048576])}); | [(frappe.boot.max_file_size || 5242880) / 1048576])}); | ||||
}, | }, | ||||
417: function(xhr) { | 417: function(xhr) { | ||||
@@ -133,12 +133,12 @@ frappe.request.call = function(opts) { | |||||
}, | }, | ||||
500: function(xhr) { | 500: function(xhr) { | ||||
frappe.utils.play_sound("error"); | frappe.utils.play_sound("error"); | ||||
msgprint({message:__("Server Error: Please check your server logs or contact tech support."), title:__('Something went wrong'), indicator: 'red'}); | |||||
frappe.msgprint({message:__("Server Error: Please check your server logs or contact tech support."), title:__('Something went wrong'), indicator: 'red'}); | |||||
opts.error_callback && opts.error_callback(); | opts.error_callback && opts.error_callback(); | ||||
frappe.request.report_error(xhr, opts); | frappe.request.report_error(xhr, opts); | ||||
}, | }, | ||||
504: function(xhr) { | 504: function(xhr) { | ||||
msgprint(__("Request Timed Out")) | |||||
frappe.msgprint(__("Request Timed Out")) | |||||
opts.error_callback && opts.error_callback(); | opts.error_callback && opts.error_callback(); | ||||
} | } | ||||
}; | }; | ||||
@@ -217,7 +217,7 @@ frappe.request.prepare = function(opts) { | |||||
if(opts.freeze) frappe.dom.freeze(opts.freeze_message); | if(opts.freeze) frappe.dom.freeze(opts.freeze_message); | ||||
// stringify args if required | // stringify args if required | ||||
for(key in opts.args) { | |||||
for(var key in opts.args) { | |||||
if(opts.args[key] && ($.isPlainObject(opts.args[key]) || $.isArray(opts.args[key]))) { | if(opts.args[key] && ($.isPlainObject(opts.args[key]) || $.isArray(opts.args[key]))) { | ||||
opts.args[key] = JSON.stringify(opts.args[key]); | opts.args[key] = JSON.stringify(opts.args[key]); | ||||
} | } | ||||
@@ -274,7 +274,7 @@ frappe.request.cleanup = function(opts, r) { | |||||
} else { | } else { | ||||
console.log(r.exc); | console.log(r.exc); | ||||
} | } | ||||
}; | |||||
} | |||||
// debug messages | // debug messages | ||||
if(r._debug_messages) { | if(r._debug_messages) { | ||||
@@ -330,7 +330,7 @@ frappe.request.report_error = function(xhr, request_opts) { | |||||
request_opts = frappe.request.cleanup_request_opts(request_opts); | request_opts = frappe.request.cleanup_request_opts(request_opts); | ||||
var msg_dialog = msgprint({message:error_message, indicator:'red'}); | |||||
msg_dialog = frappe.msgprint({message:error_message, indicator:'red'}); | |||||
msg_dialog.msg_area.find(".report-btn") | msg_dialog.msg_area.find(".report-btn") | ||||
.toggle(error_report_email ? true : false) | .toggle(error_report_email ? true : false) | ||||
@@ -361,7 +361,7 @@ frappe.request.report_error = function(xhr, request_opts) { | |||||
message: error_report_message, | message: error_report_message, | ||||
doc: { | doc: { | ||||
doctype: "User", | doctype: "User", | ||||
name: user | |||||
name: frappe.session.user | |||||
} | } | ||||
}); | }); | ||||
communication_composer.dialog.$wrapper.css("z-index", cint(msg_dialog.$wrapper.css("z-index")) + 1); | communication_composer.dialog.$wrapper.css("z-index", cint(msg_dialog.$wrapper.css("z-index")) + 1); | ||||
@@ -26,23 +26,23 @@ frappe.RoleEditor = Class.extend({ | |||||
role_toolbar.find(".btn-add") | role_toolbar.find(".btn-add") | ||||
.html(__('Add all roles')) | .html(__('Add all roles')) | ||||
.on("click", function() { | |||||
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { | |||||
if(!$(check).is(":checked")) { | |||||
check.checked = true; | |||||
} | |||||
.on("click", function () { | |||||
$(me.wrapper).find('input[type="checkbox"]').each(function (i, check) { | |||||
if (!$(check).is(":checked")) { | |||||
check.checked = true; | |||||
} | |||||
}); | |||||
}); | }); | ||||
}); | |||||
role_toolbar.find(".btn-remove") | role_toolbar.find(".btn-remove") | ||||
.html(__('Clear all roles')) | .html(__('Clear all roles')) | ||||
.on("click", function() { | .on("click", function() { | ||||
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { | |||||
if($(check).is(":checked")) { | |||||
check.checked = false; | |||||
} | |||||
$(me.wrapper).find('input[type="checkbox"]').each(function(i, check) { | |||||
if($(check).is(":checked")) { | |||||
check.checked = false; | |||||
} | |||||
}); | |||||
}); | }); | ||||
}); | |||||
$.each(this.roles, function(i, role) { | $.each(this.roles, function(i, role) { | ||||
$(me.wrapper).append(repl('<div class="user-role" \ | $(me.wrapper).append(repl('<div class="user-role" \ | ||||
@@ -70,10 +70,10 @@ frappe.RoleEditor = Class.extend({ | |||||
// set user roles as checked | // set user roles as checked | ||||
$.each((me.frm.doc.roles || []), function(i, user_role) { | $.each((me.frm.doc.roles || []), function(i, user_role) { | ||||
var checkbox = $(me.wrapper) | |||||
.find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0); | |||||
if(checkbox) checkbox.checked = true; | |||||
}); | |||||
var checkbox = $(me.wrapper) | |||||
.find('[data-user-role="'+user_role.role+'"] input[type="checkbox"]').get(0); | |||||
if(checkbox) checkbox.checked = true; | |||||
}); | |||||
}, | }, | ||||
set_roles_in_table: function() { | set_roles_in_table: function() { | ||||
var opts = this.get_roles(); | var opts = this.get_roles(); | ||||
@@ -82,9 +82,9 @@ frappe.RoleEditor = Class.extend({ | |||||
var me = this; | var me = this; | ||||
$.each((me.frm.doc.roles || []), function(i, user_role) { | $.each((me.frm.doc.roles || []), function(i, user_role) { | ||||
existing_roles_map[user_role.role] = user_role.name; | |||||
existing_roles_list.push(user_role.role); | |||||
}); | |||||
existing_roles_map[user_role.role] = user_role.name; | |||||
existing_roles_list.push(user_role.role); | |||||
}); | |||||
// remove unchecked roles | // remove unchecked roles | ||||
$.each(opts.unchecked_roles, function(i, role) { | $.each(opts.unchecked_roles, function(i, role) { | ||||
@@ -155,7 +155,7 @@ frappe.RoleEditor = Class.extend({ | |||||
var perm = r.message[i]; | var perm = r.message[i]; | ||||
// if permission -> icon | // if permission -> icon | ||||
for(key in perm) { | |||||
for(var key in perm) { | |||||
if(key!='parent' && key!='permlevel') { | if(key!='parent' && key!='permlevel') { | ||||
if(perm[key]) { | if(perm[key]) { | ||||
perm[key] = '<i class="fa fa-check"></i>'; | perm[key] = '<i class="fa fa-check"></i>'; | ||||
@@ -120,7 +120,7 @@ frappe.set_route = function() { | |||||
if(params.length===1 && $.isArray(params[0])) { | if(params.length===1 && $.isArray(params[0])) { | ||||
params = params[0]; | params = params[0]; | ||||
} | } | ||||
route = $.map(params, function(a) { | |||||
var route = $.map(params, function(a) { | |||||
if($.isPlainObject(a)) { | if($.isPlainObject(a)) { | ||||
frappe.route_options = a; | frappe.route_options = a; | ||||
return null; | return null; | ||||
@@ -18,7 +18,7 @@ frappe.socket = { | |||||
//Enable secure option when using HTTPS | //Enable secure option when using HTTPS | ||||
if (window.location.protocol == "https:") { | if (window.location.protocol == "https:") { | ||||
frappe.socket.socket = io.connect(frappe.socket.get_host(), {secure: true}); | |||||
frappe.socket.socket = io.connect(frappe.socket.get_host(), {secure: true}); | |||||
} | } | ||||
else if (window.location.protocol == "http:") { | else if (window.location.protocol == "http:") { | ||||
frappe.socket.socket = io.connect(frappe.socket.get_host()); | frappe.socket.socket = io.connect(frappe.socket.get_host()); | ||||
@@ -56,8 +56,8 @@ frappe.get_form_sidebar_extension = function() { | |||||
var template = '<ul class="list-unstyled sidebar-menu">\ | var template = '<ul class="list-unstyled sidebar-menu">\ | ||||
<li class="usage-stats">\ | <li class="usage-stats">\ | ||||
<a href="#usage-info" class="text-muted">{{ usage.total }}MB ({{ usage.total_used_percent }}%) used</a></li>\ | |||||
</ul>'; | |||||
<a href="#usage-info" class="text-muted">{{ usage.total }}MB ({{ usage.total_used_percent }}%) used</a></li>\ | |||||
</ul>'; | |||||
usage.sidebar_usage_html = frappe.render(template, { 'usage': usage }, "form_sidebar_usage"); | usage.sidebar_usage_html = frappe.render(template, { 'usage': usage }, "form_sidebar_usage"); | ||||
} else { | } else { | ||||
@@ -8,7 +8,7 @@ frappe._ = function(txt, replace) { | |||||
return txt; | return txt; | ||||
if(typeof(txt) != "string") | if(typeof(txt) != "string") | ||||
return txt; | return txt; | ||||
ret = frappe._messages[txt.replace(/\n/g, "")] || txt; | |||||
var ret = frappe._messages[txt.replace(/\n/g, "")] || txt; | |||||
if(replace && typeof(replace) === "object") { | if(replace && typeof(replace) === "object") { | ||||
ret = $.format(ret, replace); | ret = $.format(ret, replace); | ||||
} | } | ||||
@@ -173,7 +173,7 @@ frappe.ui.BaseList = Class.extend({ | |||||
// default filter for submittable doctype | // default filter for submittable doctype | ||||
if (frappe.model.is_submittable(this.doctype)) { | if (frappe.model.is_submittable(this.doctype)) { | ||||
this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2); | this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2); | ||||
}; | |||||
} | |||||
}, | }, | ||||
clear: function () { | clear: function () { | ||||
@@ -18,8 +18,8 @@ frappe.ui.Chart = Class.extend({ | |||||
if(this.opts.data && ((this.opts.data.columns && this.opts.data.columns.length >= 1) | if(this.opts.data && ((this.opts.data.columns && this.opts.data.columns.length >= 1) | ||||
|| (this.opts.data.rows && this.opts.data.rows.length >= 1))) { | || (this.opts.data.rows && this.opts.data.rows.length >= 1))) { | ||||
this.chart = this.render_chart(); | |||||
this.show_chart(true); | |||||
this.chart = this.render_chart(); | |||||
this.show_chart(true); | |||||
} | } | ||||
return this.chart; | return this.chart; | ||||
@@ -28,11 +28,11 @@ frappe.ui.Chart = Class.extend({ | |||||
render_chart: function() { | render_chart: function() { | ||||
var chart_dict = { | var chart_dict = { | ||||
bindto: '#' + this.opts.bind_to, | bindto: '#' + this.opts.bind_to, | ||||
data: {}, | |||||
data: {}, | |||||
axis: { | axis: { | ||||
x: { | |||||
type: this.opts.x_type || 'category' // this needed to load string x value | |||||
}, | |||||
x: { | |||||
type: this.opts.x_type || 'category' // this needed to load string x value | |||||
}, | |||||
y: { | y: { | ||||
padding: { bottom: 10 } | padding: { bottom: 10 } | ||||
} | } | ||||
@@ -62,11 +62,11 @@ frappe.ui.Chart = Class.extend({ | |||||
chart_dict.axis.x.tick.culling = {max: 15}; | chart_dict.axis.x.tick.culling = {max: 15}; | ||||
chart_dict.axis.x.tick.format = frappe.boot.sysdefaults.date_format | chart_dict.axis.x.tick.format = frappe.boot.sysdefaults.date_format | ||||
.replace('yyyy', '%Y').replace('mm', '%m').replace('dd', '%d'); | .replace('yyyy', '%Y').replace('mm', '%m').replace('dd', '%d'); | ||||
}; | |||||
} | |||||
// set color | // set color | ||||
if(!chart_dict.data.colors && chart_dict.data.columns) { | if(!chart_dict.data.colors && chart_dict.data.columns) { | ||||
colors = ['#4E50A6', '#7679FB', '#A3A5FC', '#925191', '#5D3EA4', '#8D5FFA', | |||||
var colors = ['#4E50A6', '#7679FB', '#A3A5FC', '#925191', '#5D3EA4', '#8D5FFA', | |||||
'#5E3AA8', '#7B933D', '#4F8EA8']; | '#5E3AA8', '#7B933D', '#4F8EA8']; | ||||
chart_dict.data.colors = {}; | chart_dict.data.colors = {}; | ||||
chart_dict.data.columns.forEach(function(d, i) { | chart_dict.data.columns.forEach(function(d, i) { | ||||
@@ -74,7 +74,7 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({ | |||||
} | } | ||||
} | } | ||||
if(errors.length && !ignore_errors) { | if(errors.length && !ignore_errors) { | ||||
msgprint({ | |||||
frappe.msgprint({ | |||||
title: __('Missing Values Required'), | title: __('Missing Values Required'), | ||||
message: __('Following fields have missing values:') + | message: __('Following fields have missing values:') + | ||||
'<br><br><ul><li>' + errors.join('<li>') + '</ul>', | '<br><br><ul><li>' + errors.join('<li>') + '</ul>', | ||||
@@ -106,7 +106,7 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({ | |||||
} | } | ||||
}, | }, | ||||
clear: function() { | clear: function() { | ||||
for(key in this.fields_dict) { | |||||
for(var key in this.fields_dict) { | |||||
var f = this.fields_dict[key]; | var f = this.fields_dict[key]; | ||||
if(f && f.set_input) { | if(f && f.set_input) { | ||||
f.set_input(f.df['default'] || ''); | f.set_input(f.df['default'] || ''); | ||||
@@ -105,7 +105,7 @@ frappe.ui.FilterList = Class.extend({ | |||||
// This gives a predictable stats order | // This gives a predictable stats order | ||||
me.wrapper.find(".filter-stat").empty(); | me.wrapper.find(".filter-stat").empty(); | ||||
$.each(me.stats, function (i, v) { | $.each(me.stats, function (i, v) { | ||||
me.render_filters(v, (r.message|| {})[v.name]); | |||||
me.render_filters(v, (r.message|| {})[v.name]); | |||||
}); | }); | ||||
} | } | ||||
}); | }); | ||||
@@ -149,8 +149,8 @@ frappe.ui.FilterList = Class.extend({ | |||||
} | } | ||||
if(options.length>0) { | if(options.length>0) { | ||||
for (i in stat) { | |||||
for (o in options) { | |||||
for (var i in stat) { | |||||
for (var o in options) { | |||||
if (stat[i][0] == options[o].value) { | if (stat[i][0] == options[o].value) { | ||||
if (field.name=="docstatus") { | if (field.name=="docstatus") { | ||||
labels[i] = options[o].label | labels[i] = options[o].label | ||||
@@ -353,7 +353,7 @@ frappe.ui.FilterList = Class.extend({ | |||||
fieldname: fieldname, | fieldname: fieldname, | ||||
condition: condition, | condition: condition, | ||||
value: value | value: value | ||||
}); | |||||
}); | |||||
this.filters.push(filter); | this.filters.push(filter); | ||||
@@ -460,8 +460,7 @@ frappe.ui.Filter = Class.extend({ | |||||
? __("values separated by commas") | ? __("values separated by commas") | ||||
: __("use % as wildcard"))+'</div>'); | : __("use % as wildcard"))+'</div>'); | ||||
} else { | } else { | ||||
me.set_field(me.field.df.parent, me.field.df.fieldname, null, | |||||
condition); | |||||
me.set_field(me.field.df.parent, me.field.df.fieldname, null, condition); | |||||
} | } | ||||
}); | }); | ||||
@@ -512,7 +511,7 @@ frappe.ui.Filter = Class.extend({ | |||||
var original_docfield = me.fieldselect.fields_by_name[doctype][fieldname]; | var original_docfield = me.fieldselect.fields_by_name[doctype][fieldname]; | ||||
if(!original_docfield) { | if(!original_docfield) { | ||||
msgprint(__("Field {0} is not selectable.", [fieldname])); | |||||
frappe.msgprint(__("Field {0} is not selectable.", [fieldname])); | |||||
return; | return; | ||||
} | } | ||||
@@ -784,7 +783,7 @@ frappe.ui.FieldSelect = Class.extend({ | |||||
// old style | // old style | ||||
if(doctype.indexOf(".")!==-1) { | if(doctype.indexOf(".")!==-1) { | ||||
parts = doctype.split("."); | |||||
var parts = doctype.split("."); | |||||
doctype = parts[0]; | doctype = parts[0]; | ||||
fieldname = parts[1]; | fieldname = parts[1]; | ||||
} | } | ||||
@@ -857,14 +856,14 @@ frappe.ui.FieldSelect = Class.extend({ | |||||
var label = __(df.label) + ' (' + __(df.parent) + ')'; | var label = __(df.label) + ' (' + __(df.parent) + ')'; | ||||
var table = df.parent; | var table = df.parent; | ||||
} | } | ||||
if(frappe.model.no_value_type.indexOf(df.fieldtype)==-1 && | |||||
if(frappe.model.no_value_type.indexOf(df.fieldtype) == -1 && | |||||
!(me.fields_by_name[df.parent] && me.fields_by_name[df.parent][df.fieldname])) { | !(me.fields_by_name[df.parent] && me.fields_by_name[df.parent][df.fieldname])) { | ||||
this.options.push({ | |||||
label: label, | |||||
value: table + "." + df.fieldname, | |||||
fieldname: df.fieldname, | |||||
doctype: df.parent | |||||
}) | |||||
this.options.push({ | |||||
label: label, | |||||
value: table + "." + df.fieldname, | |||||
fieldname: df.fieldname, | |||||
doctype: df.parent | |||||
}); | |||||
if(!me.fields_by_name[df.parent]) me.fields_by_name[df.parent] = {}; | if(!me.fields_by_name[df.parent]) me.fields_by_name[df.parent] = {}; | ||||
me.fields_by_name[df.parent][df.fieldname] = df; | me.fields_by_name[df.parent][df.fieldname] = df; | ||||
} | } | ||||
@@ -3,7 +3,7 @@ | |||||
frappe.ui.is_liked = function(doc) { | frappe.ui.is_liked = function(doc) { | ||||
var liked = frappe.ui.get_liked_by(doc); | var liked = frappe.ui.get_liked_by(doc); | ||||
return liked.indexOf(user)===-1 ? false : true; | |||||
return liked.indexOf(frappe.session.user)===-1 ? false : true; | |||||
} | } | ||||
frappe.ui.get_liked_by = function(doc) { | frappe.ui.get_liked_by = function(doc) { | ||||
@@ -47,10 +47,10 @@ frappe.ui.toggle_like = function($btn, doctype, name, callback) { | |||||
var doc = locals[doctype] && locals[doctype][name]; | var doc = locals[doctype] && locals[doctype][name]; | ||||
if(doc) { | if(doc) { | ||||
var liked_by = JSON.parse(doc._liked_by || "[]"), | var liked_by = JSON.parse(doc._liked_by || "[]"), | ||||
idx = liked_by.indexOf(user); | |||||
idx = liked_by.indexOf(frappe.session.user); | |||||
if(add==="Yes") { | if(add==="Yes") { | ||||
if(idx===-1) | if(idx===-1) | ||||
liked_by.push(user); | |||||
liked_by.push(frappe.session.user); | |||||
} else { | } else { | ||||
if(idx!==-1) { | if(idx!==-1) { | ||||
liked_by = liked_by.slice(0,idx).concat(liked_by.slice(idx+1)) | liked_by = liked_by.slice(0,idx).concat(liked_by.slice(idx+1)) | ||||
@@ -98,7 +98,7 @@ frappe.ui.setup_like_popover = function($parent, selector) { | |||||
placement: "right", | placement: "right", | ||||
content: function() { | content: function() { | ||||
var liked_by = JSON.parse($wrapper.attr('data-liked-by') || "[]"); | var liked_by = JSON.parse($wrapper.attr('data-liked-by') || "[]"); | ||||
var user = frappe.session.user; | |||||
// hack | // hack | ||||
if ($wrapper.find(".not-liked").length) { | if ($wrapper.find(".not-liked").length) { | ||||
if (liked_by.indexOf(user)!==-1) { | if (liked_by.indexOf(user)!==-1) { | ||||
@@ -80,7 +80,7 @@ frappe.ui.Listing = Class.extend({ | |||||
return this.page.add_menu_item(label, click, icon) | return this.page.add_menu_item(label, click, icon) | ||||
} else { | } else { | ||||
this.wrapper.find('.list-toolbar-wrapper').removeClass("hide"); | this.wrapper.find('.list-toolbar-wrapper').removeClass("hide"); | ||||
$button = $('<button class="btn btn-default"></button>') | |||||
var $button = $('<button class="btn btn-default"></button>') | |||||
.appendTo(this.wrapper.find('.list-toolbar')) | .appendTo(this.wrapper.find('.list-toolbar')) | ||||
.html((icon ? ("<i class='"+icon+"'></i> ") : "") + label) | .html((icon ? ("<i class='"+icon+"'></i> ") : "") + label) | ||||
.click(click); | .click(click); | ||||
@@ -166,7 +166,7 @@ frappe.ui.Listing = Class.extend({ | |||||
}); | }); | ||||
if(frappe.model.is_submittable(this.doctype)) { | if(frappe.model.is_submittable(this.doctype)) { | ||||
this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2); | this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2); | ||||
}; | |||||
} | |||||
}, | }, | ||||
clear: function() { | clear: function() { | ||||
@@ -246,7 +246,7 @@ frappe.ui.Listing = Class.extend({ | |||||
save_list_settings_locally: function(args) { | save_list_settings_locally: function(args) { | ||||
if(this.opts.save_list_settings && this.doctype && !this.docname) { | if(this.opts.save_list_settings && this.doctype && !this.docname) { | ||||
// save list settings locally | // save list settings locally | ||||
list_settings = frappe.model.list_settings[this.doctype]; | |||||
var list_settings = frappe.model.list_settings[this.doctype]; | |||||
if(!list_settings) { | if(!list_settings) { | ||||
return | return | ||||
@@ -409,7 +409,7 @@ frappe.ui.Listing = Class.extend({ | |||||
}, | }, | ||||
set_filter: function(fieldname, label, no_run, no_duplicate, parent) { | set_filter: function(fieldname, label, no_run, no_duplicate, parent) { | ||||
var filter = this.filter_list.get_filter(fieldname); | var filter = this.filter_list.get_filter(fieldname); | ||||
doctype = parent && this.doctype != parent? parent: this.doctype | |||||
var doctype = parent && this.doctype != parent? parent: this.doctype | |||||
if(filter) { | if(filter) { | ||||
var v = cstr(filter.field.get_parsed_value()); | var v = cstr(filter.field.get_parsed_value()); | ||||
@@ -18,7 +18,7 @@ frappe.throw = function(msg) { | |||||
msg = {message: msg, title: __('Error')}; | msg = {message: msg, title: __('Error')}; | ||||
} | } | ||||
if(!msg.indicator) msg.indicator = 'red'; | if(!msg.indicator) msg.indicator = 'red'; | ||||
msgprint(msg); | |||||
frappe.msgprint(msg); | |||||
throw new Error(msg.message); | throw new Error(msg.message); | ||||
} | } | ||||
@@ -77,6 +77,7 @@ frappe.prompt = function(fields, callback, title, primary_label) { | |||||
return d; | return d; | ||||
} | } | ||||
console.warn('The globals `msgprint` and `show_alert` has been deprecated. Please use `frappe.msgprint` and `frappe.show_alert` instead.'); | |||||
var msg_dialog=null; | var msg_dialog=null; | ||||
frappe.msgprint = function(msg, title) { | frappe.msgprint = function(msg, title) { | ||||
if(!msg) return; | if(!msg) return; | ||||
@@ -221,8 +222,6 @@ frappe.verify_password = function(callback) { | |||||
}, __("Verify Password"), __("Verify")) | }, __("Verify Password"), __("Verify")) | ||||
} | } | ||||
var msgprint = frappe.msgprint; | |||||
frappe.show_progress = function(title, count, total) { | frappe.show_progress = function(title, count, total) { | ||||
if(frappe.cur_progress && frappe.cur_progress.title === title | if(frappe.cur_progress && frappe.cur_progress.title === title | ||||
&& frappe.cur_progress.$wrapper.is(":visible")) { | && frappe.cur_progress.$wrapper.is(":visible")) { | ||||
@@ -233,8 +232,8 @@ frappe.show_progress = function(title, count, total) { | |||||
}); | }); | ||||
dialog.progress = $('<div class="progress"><div class="progress-bar"></div></div>') | dialog.progress = $('<div class="progress"><div class="progress-bar"></div></div>') | ||||
.appendTo(dialog.body); | .appendTo(dialog.body); | ||||
dialog.progress_bar = dialog.progress.css({"margin-top": "10px"}) | |||||
.find(".progress-bar"); | |||||
dialog.progress_bar = dialog.progress.css({"margin-top": "10px"}) | |||||
.find(".progress-bar"); | |||||
dialog.$wrapper.removeClass("fade"); | dialog.$wrapper.removeClass("fade"); | ||||
dialog.show(); | dialog.show(); | ||||
frappe.cur_progress = dialog; | frappe.cur_progress = dialog; | ||||
@@ -260,6 +259,7 @@ frappe.show_alert = function(message, seconds=7) { | |||||
$('<div id="dialog-container"><div id="alert-container"></div></div>').appendTo('body'); | $('<div id="dialog-container"><div id="alert-container"></div></div>').appendTo('body'); | ||||
} | } | ||||
var message_html; | |||||
if(message.indicator) { | if(message.indicator) { | ||||
message_html = $('<span class="indicator ' + message.indicator + '"></span>').append(message.message); | message_html = $('<span class="indicator ' + message.indicator + '"></span>').append(message.message); | ||||
} else { | } else { | ||||
@@ -286,5 +286,3 @@ frappe.show_alert = function(message, seconds=7) { | |||||
return div; | return div; | ||||
} | } | ||||
// for backward compatibility | |||||
var show_alert = frappe.show_alert; |
@@ -317,7 +317,7 @@ frappe.ui.Page = Class.extend({ | |||||
return this.$title_area.find(".title-icon") | return this.$title_area.find(".title-icon") | ||||
.html('<i class="'+icon+' fa-fw"></i> ') | .html('<i class="'+icon+' fa-fw"></i> ') | ||||
.toggle(true); | .toggle(true); | ||||
}, | |||||
}, | |||||
add_help_button: function(txt) { | add_help_button: function(txt) { | ||||
// | // | ||||