Przeglądaj źródła

Remove all implicit global variables

version-14
Faris Ansari 8 lat temu
rodzic
commit
2a3b34822b
99 zmienionych plików z 1076 dodań i 1062 usunięć
  1. +13
    -13
      frappe/core/doctype/communication/communication.js
  2. +1
    -1
      frappe/core/doctype/feedback_trigger/feedback_trigger.js
  3. +1
    -1
      frappe/core/doctype/system_settings/system_settings.js
  4. +9
    -8
      frappe/core/doctype/user/user.js
  5. +2
    -2
      frappe/core/page/data_import_tool/data_import_tool.js
  6. +1
    -1
      frappe/core/page/modules_setup/modules_setup.js
  7. +5
    -5
      frappe/core/page/permission_manager/permission_manager.js
  8. +5
    -5
      frappe/core/page/user_permissions/user_permissions.js
  9. +2
    -2
      frappe/custom/doctype/customize_form/customize_form.js
  10. +1
    -1
      frappe/custom/doctype/property_setter/property_setter.js
  11. +3
    -3
      frappe/desk/doctype/todo/todo_list.js
  12. +7
    -6
      frappe/desk/page/activity/activity.js
  13. +2
    -2
      frappe/desk/page/chat/chat.js
  14. +3
    -3
      frappe/email/doctype/auto_email_report/auto_email_report.js
  15. +2
    -2
      frappe/email/doctype/email_alert/email_alert.js
  16. +1
    -1
      frappe/email/doctype/newsletter/newsletter.js
  17. +4
    -4
      frappe/printing/doctype/print_format/print_format.js
  18. +6
    -6
      frappe/printing/page/print_format_builder/print_format_builder.js
  19. +1
    -1
      frappe/public/js/frappe/assets.js
  20. +2
    -2
      frappe/public/js/frappe/defaults.js
  21. +21
    -24
      frappe/public/js/frappe/desk.js
  22. +55
    -55
      frappe/public/js/frappe/dom.js
  23. +4
    -4
      frappe/public/js/frappe/feedback.js
  24. +21
    -21
      frappe/public/js/frappe/form/control.js
  25. +3
    -2
      frappe/public/js/frappe/form/dashboard.js
  26. +4
    -4
      frappe/public/js/frappe/form/footer/assign_to.js
  27. +14
    -14
      frappe/public/js/frappe/form/footer/attachments.js
  28. +5
    -5
      frappe/public/js/frappe/form/footer/timeline.js
  29. +3
    -9
      frappe/public/js/frappe/form/form_viewers.js
  30. +5
    -5
      frappe/public/js/frappe/form/formatters.js
  31. +13
    -11
      frappe/public/js/frappe/form/grid.js
  32. +4
    -4
      frappe/public/js/frappe/form/layout.js
  33. +5
    -4
      frappe/public/js/frappe/form/link_selector.js
  34. +5
    -4
      frappe/public/js/frappe/form/print.js
  35. +1
    -1
      frappe/public/js/frappe/form/quick_entry.js
  36. +3
    -3
      frappe/public/js/frappe/form/save.js
  37. +2
    -2
      frappe/public/js/frappe/form/script_manager.js
  38. +2
    -2
      frappe/public/js/frappe/form/share.js
  39. +2
    -2
      frappe/public/js/frappe/form/sidebar.js
  40. +3
    -3
      frappe/public/js/frappe/form/toolbar.js
  41. +3
    -3
      frappe/public/js/frappe/form/workflow.js
  42. +6
    -6
      frappe/public/js/frappe/list/list_renderer.js
  43. +6
    -6
      frappe/public/js/frappe/list/list_sidebar.js
  44. +12
    -12
      frappe/public/js/frappe/list/list_view.js
  45. +4
    -4
      frappe/public/js/frappe/misc/common.js
  46. +13
    -13
      frappe/public/js/frappe/misc/datetime.js
  47. +61
    -61
      frappe/public/js/frappe/misc/number_format.js
  48. +5
    -3
      frappe/public/js/frappe/misc/pretty_date.js
  49. +1
    -1
      frappe/public/js/frappe/misc/tools.js
  50. +3
    -3
      frappe/public/js/frappe/misc/user.js
  51. +108
    -109
      frappe/public/js/frappe/misc/utils.js
  52. +9
    -7
      frappe/public/js/frappe/model/create_new.js
  53. +1
    -1
      frappe/public/js/frappe/model/meta.js
  54. +9
    -9
      frappe/public/js/frappe/model/model.js
  55. +5
    -5
      frappe/public/js/frappe/model/perm.js
  56. +2
    -2
      frappe/public/js/frappe/model/workflow.js
  57. +10
    -10
      frappe/public/js/frappe/request.js
  58. +1
    -1
      frappe/public/js/frappe/roles_editor.js
  59. +1
    -1
      frappe/public/js/frappe/router.js
  60. +1
    -1
      frappe/public/js/frappe/socketio_client.js
  61. +2
    -2
      frappe/public/js/frappe/toolbar.js
  62. +1
    -1
      frappe/public/js/frappe/translate.js
  63. +1
    -1
      frappe/public/js/frappe/ui/base_list.js
  64. +6
    -6
      frappe/public/js/frappe/ui/charts.js
  65. +2
    -2
      frappe/public/js/frappe/ui/field_group.js
  66. +5
    -6
      frappe/public/js/frappe/ui/filters/filters.js
  67. +4
    -4
      frappe/public/js/frappe/ui/like.js
  68. +4
    -4
      frappe/public/js/frappe/ui/listing.js
  69. +2
    -3
      frappe/public/js/frappe/ui/messages.js
  70. +5
    -5
      frappe/public/js/frappe/ui/toolbar/about.js
  71. +2
    -2
      frappe/public/js/frappe/ui/toolbar/awesome_bar.js
  72. +3
    -3
      frappe/public/js/frappe/ui/toolbar/notifications.js
  73. +5
    -4
      frappe/public/js/frappe/ui/toolbar/search.js
  74. +390
    -347
      frappe/public/js/frappe/ui/toolbar/search_utils.js
  75. +3
    -3
      frappe/public/js/frappe/ui/toolbar/toolbar.js
  76. +1
    -1
      frappe/public/js/frappe/ui/tree.js
  77. +6
    -6
      frappe/public/js/frappe/upload.js
  78. +2
    -2
      frappe/public/js/frappe/views/calendar/calendar.js
  79. +14
    -14
      frappe/public/js/frappe/views/communication.js
  80. +2
    -2
      frappe/public/js/frappe/views/gantt/gantt_view.js
  81. +1
    -1
      frappe/public/js/frappe/views/image/image_view.js
  82. +7
    -5
      frappe/public/js/frappe/views/inbox/inbox_view.js
  83. +2
    -33
      frappe/public/js/frappe/views/kanban/kanban_board.js
  84. +1
    -1
      frappe/public/js/frappe/views/pageview.js
  85. +25
    -25
      frappe/public/js/frappe/views/reports/grid_report.js
  86. +20
    -20
      frappe/public/js/frappe/views/reports/query_report.js
  87. +5
    -5
      frappe/public/js/frappe/views/reports/reportview.js
  88. +1
    -1
      frappe/public/js/frappe/views/test_runner.js
  89. +1
    -1
      frappe/public/js/frappe/views/treeview.js
  90. +7
    -6
      frappe/public/js/legacy/clientscriptAPI.js
  91. +1
    -2
      frappe/public/js/legacy/datatype.js
  92. +2
    -2
      frappe/public/js/legacy/dom.js
  93. +13
    -13
      frappe/public/js/legacy/form.js
  94. +1
    -1
      frappe/public/js/legacy/handler.js
  95. +1
    -1
      frappe/public/js/legacy/layout.js
  96. +13
    -13
      frappe/public/js/legacy/print_format.js
  97. +1
    -1
      frappe/public/js/legacy/print_table.js
  98. +5
    -5
      frappe/templates/includes/contact.js
  99. +2
    -2
      frappe/website/doctype/website_settings/website_settings.js

+ 13
- 13
frappe/core/doctype/communication/communication.js Wyświetl plik

@@ -33,7 +33,7 @@ frappe.ui.form.on("Communication", {

if(frm.doc.communication_type == "Feedback") {
frm.add_custom_button(__("Resend"), function() {
feedback = new frappe.utils.Feedback();
var feedback = new frappe.utils.Feedback();
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_name", frm.doc.reference_name);
d.set_primary_action(__("Relink"), function () {
values = d.get_values();
var values = d.get_values();
if (values) {
frappe.confirm(
__('Are you sure you want to relink this communication to {0}?', [values["reference_name"]]),
@@ -130,7 +130,7 @@ frappe.ui.form.on("Communication", {
});
},
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) {
action = frm.doc.seen? "Unread": "Read";
flag = "(\\SEEN)";
var action = frm.doc.seen? "Unread": "Read";
var flag = "(\\SEEN)";

return frappe.call({
method: "frappe.email.inbox.create_email_flag_queue",
@@ -154,7 +154,7 @@ frappe.ui.form.on("Communication", {
},

reply: function(frm) {
args = frm.events.get_mail_args(frm);
var args = frm.events.get_mail_args(frm);
$.extend(args, {
subject: __("Re: {0}", [frm.doc.subject]),
recipients: frm.doc.sender
@@ -164,7 +164,7 @@ frappe.ui.form.on("Communication", {
},

reply_all: function(frm) {
args = frm.events.get_mail_args(frm)
var args = frm.events.get_mail_args(frm)
$.extend(args, {
subject: __("Re: {0}", [frm.doc.subject]),
recipients: frm.doc.sender,
@@ -174,7 +174,7 @@ frappe.ui.form.on("Communication", {
},

forward_mail: function(frm) {
args = frm.events.get_mail_args(frm)
var args = frm.events.get_mail_args(frm)
$.extend(args, {
forward: true,
subject: __("Fw: {0}", [frm.doc.subject]),
@@ -184,7 +184,7 @@ frappe.ui.form.on("Communication", {
},

get_mail_args: function(frm) {
sender_email_id = ""
var sender_email_id = ""
$.each(frappe.boot.email_accounts, function(idx, account) {
if(account.email_account == frm.doc.email_account) {
sender_email_id = account.email_id
@@ -202,11 +202,11 @@ frappe.ui.form.on("Communication", {

add_to_contact: function(frm) {
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 = {
"email_id": frm.doc.sender,


+ 1
- 1
frappe/core/doctype/feedback_trigger/feedback_trigger.js Wyświetl plik

@@ -37,7 +37,7 @@ frappe.ui.form.on('Feedback Trigger', {
frappe.model.with_doctype(frm.doc.document_type, function() {
var fields = frappe.get_doc("DocType", frm.doc.document_type).fields;
$.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.fieldname_mapper[field.label] = field.fieldname;
}


+ 1
- 1
frappe/core/doctype/system_settings/system_settings.js Wyświetl plik

@@ -7,7 +7,7 @@ frappe.ui.form.on("System Settings", "refresh", function(frm) {

$.each(data.message.defaults, function(key, val) {
frm.set_value(key, val);
sys_defaults[key] = val;
frappe.sys_defaults[key] = val;
})
}
});


+ 9
- 8
frappe/core/doctype/user/user.js Wyświetl plik

@@ -18,7 +18,7 @@ frappe.ui.form.on('User', {

},
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) {
var role_area = $('<div style="min-height: 300px">')
.appendTo(frm.fields_dict.roles_html.wrapper);
@@ -35,11 +35,11 @@ frappe.ui.form.on('User', {
refresh: function(frm) {
var doc = frm.doc;

if(doc.name===user && !doc.__unsaved
if(doc.name===frappe.session.user && !doc.__unsaved
&& frappe.all_timezones
&& (doc.language || frappe.boot.user.language)
&& doc.language !== frappe.boot.user.language) {
msgprint(__("Refreshing..."));
frappe.msgprint(__("Refreshing..."));
window.location.reload();
}

@@ -53,7 +53,7 @@ frappe.ui.form.on('User', {
frappe.set_route("modules_setup");
}, 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() {
frappe.route_options = {
@@ -79,10 +79,10 @@ frappe.ui.form.on('User', {
frm.roles_editor && frm.roles_editor.show();
frm.module_editor && frm.module_editor.refresh();

if(user==doc.name) {
if(frappe.session.user==doc.name) {
// update display settings
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);
}
}
}
@@ -116,12 +116,12 @@ frappe.ui.form.on('User', {
},
enabled: function(frm) {
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.set_df_property('enabled', 'read_only', 0);
}

if(user!="Administrator") {
if(frappe.session.user!=="Administrator") {
frm.toggle_enable('email', doc.__islocal);
}
},
@@ -177,6 +177,7 @@ frappe.ModuleEditor = Class.extend({
});
},
bind: function() {
var me = this;
this.wrapper.on("change", ".block-module-check", function() {
var module = $(this).attr('data-module');
if($(this).prop("checked")) {


+ 2
- 2
frappe/core/page/data_import_tool/data_import_tool.js Wyświetl plik

@@ -129,12 +129,12 @@ frappe.DataImportTool = Class.extend({
queued: function() {
// async, show queued
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() {
// update async status as running
msg_dialog.clear();
msgprint(__("Importing..."));
frappe.msgprint(__("Importing..."));
me.write_messages([__("Importing")]);
me.has_progress = false;
},


+ 1
- 1
frappe/core/page/modules_setup/modules_setup.js Wyświetl plik

@@ -59,7 +59,7 @@ frappe.pages['modules_setup'].on_page_load = function(wrapper) {
};

// 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() {
frappe.set_route('applications');
});


+ 5
- 5
frappe/core/page/permission_manager/permission_manager.js Wyświetl plik

@@ -298,7 +298,7 @@ frappe.PermissionEngine = Class.extend({
r.message = $.map(r.message, function(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>"));
}
})
@@ -324,7 +324,7 @@ frappe.PermissionEngine = Class.extend({
},
callback: function(r) {
if(r.exc) {
msgprint(__("Did not remove"));
frappe.msgprint(__("Did not remove"));
} else {
me.refresh();
}
@@ -404,7 +404,7 @@ frappe.PermissionEngine = Class.extend({
args: args,
callback: function(r) {
if(r.exc) {
msgprint(__("Did not add"));
frappe.msgprint(__("Did not add"));
} else {
me.refresh();
}
@@ -476,9 +476,9 @@ frappe.PermissionEngine = Class.extend({
},
callback: function(r) {
if(r.exc) {
msgprint(__("Did not set"));
frappe.msgprint(__("Did not set"));
} else {
var msg = msgprint(__("Saved!"));
var msg = frappe.msgprint(__("Saved!"));
setTimeout(function() { msg.hide(); }, 3000);
d.user_permission_doctypes = user_permission_doctypes;
dialog.hide();


+ 5
- 5
frappe/core/page/user_permissions/user_permissions.js Wyświetl plik

@@ -82,7 +82,7 @@ frappe.UserPermissions = Class.extend({
options: "[Select]"
});

if(roles.indexOf("System Manager")!==-1) {
if(frappe.user_roles.includes("System Manager")) {
me.download = me.wrapper.page.add_field({
fieldname: "download",
label: __("Download"),
@@ -141,7 +141,7 @@ frappe.UserPermissions = Class.extend({
primary_action: function() {
var filedata = d.fields_dict.attach.get_value();
if(!filedata) {
msgprint(_("Please attach a file"));
frappe.msgprint(_("Please attach a file"));
return;
}
frappe.call({
@@ -151,7 +151,7 @@ frappe.UserPermissions = Class.extend({
},
callback: function(r) {
if(!r.exc) {
msgprint(__("Permissions Updated"));
frappe.msgprint(__("Permissions Updated"));
d.hide();
}
}
@@ -288,7 +288,7 @@ frappe.UserPermissions = Class.extend({
},
callback: function(r) {
if(r.exc) {
msgprint(__("Did not remove"));
frappe.msgprint(__("Did not remove"));
} else {
me.refresh();
}
@@ -349,7 +349,7 @@ frappe.UserPermissions = Class.extend({
args: args,
callback: function(r) {
if(r.exc) {
msgprint(__("Did not add"));
frappe.msgprint(__("Did not add"));
} else {
me.refresh();
}


+ 2
- 2
frappe/custom/doctype/customize_form/customize_form.js Wyświetl plik

@@ -129,7 +129,7 @@ frappe.ui.form.on("Customize Form Field", {
before_fields_remove: function(frm, doctype, name) {
var row = frappe.get_doc(doctype, name);
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";
}
},
@@ -171,7 +171,7 @@ frappe.customize_form.confirm = function(msg, frm) {
method: "reset_to_defaults",
callback: function(r) {
if(r.exc) {
msgprint(r.exc);
frappe.msgprintr.exc);
} else {
d.hide();
frappe.customize_form.clear_locals_and_refresh(frm);


+ 1
- 1
frappe/custom/doctype/property_setter/property_setter.js Wyświetl plik

@@ -4,7 +4,7 @@
$.extend(cur_frm.cscript, {
validate: function(doc) {
if(doc.property_type=='Check' && !in_list(['0','1'], doc.value)) {
msgprint(__('Value for a check field can be either 0 or 1'));
frappe.msgprint(__('Value for a check field can be either 0 or 1'));
validated = false;
}
}


+ 3
- 3
frappe/desk/doctype/todo/todo_list.js Wyświetl plik

@@ -1,7 +1,7 @@
frappe.listview_settings['ToDo'] = {
onload: function(me) {
frappe.route_options = {
"owner": user,
"owner": frappe.session.user,
"status": "Open"
};
me.page.set_title(__("To Do"));
@@ -14,7 +14,7 @@ frappe.listview_settings['ToDo'] = {
var assign_filter = me.filter_list.get_filter("assigned_by");
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();
});

@@ -23,7 +23,7 @@ frappe.listview_settings['ToDo'] = {
var assign_filter = me.filter_list.get_filter("owner");
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();
}, ".assigned-to-me");
},


+ 7
- 6
frappe/desk/page/activity/activity.js Wyświetl plik

@@ -80,7 +80,7 @@ frappe.pages['activity'].on_page_load = function(wrapper) {

this.page.add_menu_item(__('Authentication Log'), function() {
frappe.route_options = {
"user": user
"user": frappe.session.user
}

frappe.set_route('Report', "Authentication Log");
@@ -147,17 +147,18 @@ frappe.activity.Feed = Class.extend({
data.feed_type = data.comment_type || data.communication_medium;
},
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;

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) {
pdate = 'Today';
} else if(diff < 2) {
pdate = 'Yesterday';
} else {
pdate = dateutil.global_date_format(date);
pdate = frappe.datetime.global_date_format(date);
}
data.date_sep = pdate;
data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator";
@@ -182,7 +183,7 @@ frappe.activity.render_heatmap = function(page) {
var legend = [];
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)];
heatmap = new CalHeatMap();
var heatmap = new CalHeatMap();
heatmap.init({
itemSelector: ".heatmap",
domain: "month",


+ 2
- 2
frappe/desk/page/chat/chat.js Wyświetl plik

@@ -40,10 +40,10 @@ frappe.Chat = Class.extend({
setup_realtime: function() {
var me = this;
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') {
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)
|| (on_broadcast_page && comment.broadcast)
|| current_contact === 'Bot' && comment.communication_type === 'Bot') {


+ 3
- 3
frappe/email/doctype/auto_email_report/auto_email_report.js Wyświetl plik

@@ -27,7 +27,7 @@ frappe.ui.form.on('Auto Email Report', {
"/api/method/frappe.email.doctype.auto_email_report.auto_email_report.download?"
+"name="+encodeURIComponent(frm.doc.name)));
if(!w) {
msgprint(__("Please enable pop-ups")); return;
frappe.msgprint(__("Please enable pop-ups")); return;
}
});
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',
args: {name: frm.doc.name},
callback: function() {
msgprint(__('Scheduled to send'));
frappe.msgprint(__('Scheduled to send'));
}
});
});
@@ -68,7 +68,7 @@ frappe.ui.form.on('Auto Email Report', {
var report_filters = frappe.query_reports[frm.doc.report].filters;
frm.set_value('filter_meta', JSON.stringify(report_filters));

report_filters_list = []
var report_filters_list = []
$.each(report_filters, function(key, val){
// Remove break fieldtype from the filters
if(val.fieldtype != 'Break') {


+ 2
- 2
frappe/email/doctype/email_alert/email_alert.js Wyświetl plik

@@ -70,9 +70,9 @@ frappe.ui.form.on("Email Alert", {
},
callback: function(r) {
if(r.message) {
msgprint(r.message);
frappe.msgprint(r.message);
} else {
msgprint(__('No alerts for today'));
frappe.msgprint(__('No alerts for today'));
}
}
});


+ 1
- 1
frappe/email/doctype/newsletter/newsletter.js Wyświetl plik

@@ -4,7 +4,7 @@
cur_frm.cscript.refresh = function(doc) {
if(window.erpnext) erpnext.toggle_naming_series();
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() {
return $c_obj(doc, 'send_emails', '', function(r) {
cur_frm.refresh();


+ 4
- 4
frappe/printing/doctype/print_format/print_format.js Wyświetl plik

@@ -9,12 +9,12 @@ frappe.ui.form.on("Print Format", {
refresh: function(frm) {
frm.set_intro("");
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.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.trigger('render_buttons');
@@ -25,7 +25,7 @@ frappe.ui.form.on("Print Format", {
if(!frm.doc.custom_format) {
frm.add_custom_button(__("Edit Format"), function() {
if(!frm.doc.doc_type) {
msgprint(__("Please select DocType first"));
frappe.msgprint(__("Please select DocType first"));
return;
}
frappe.set_route("print-format-builder", frm.doc.name);
@@ -42,7 +42,7 @@ frappe.ui.form.on("Print Format", {
}
},
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('show_section_headings', value);
frm.set_value('line_breaks', value);


+ 6
- 6
frappe/printing/page/print_format_builder/print_format_builder.js Wyświetl plik

@@ -123,7 +123,7 @@ frappe.PrintFormatBuilder = Class.extend({
var doctype = me.doctype_input.get_value(),
name = me.name_input.get_value();
if(!(doctype && name)) {
msgprint(__("Both DocType and Name required"));
frappe.msgprint(__("Both DocType and Name required"));
return;
}
me.setup_new_print_format(doctype, name);
@@ -272,7 +272,7 @@ frappe.PrintFormatBuilder = Class.extend({
set_column();

} else if(!in_list(["Section Break", "Column Break", "Fold"], f.fieldtype)
&& f.label) {
&& f.label) {
if(!column) set_column();

if(f.fieldtype==="Table") {
@@ -564,7 +564,7 @@ frappe.PrintFormatBuilder = Class.extend({
section.no_of_columns = 1;

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"))

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"),
doctype = parent.attr("data-doctype"),
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 = {};

$.each(columns, function(i, v) {
@@ -702,7 +702,7 @@ frappe.PrintFormatBuilder = Class.extend({
});

// set existing content in input
content = $content.data('content') || "";
var content = $content.data('content') || "";
if(content.indexOf(me.get_no_content())!==-1) content = "";
d.set_input("content", content);



+ 1
- 1
frappe/public/js/frappe/assets.js Wyświetl plik

@@ -45,7 +45,7 @@ frappe.assets = {
});

// clear assets
for(key in localStorage) {
for(var key in localStorage) {
if(key.indexOf("desk_assets:")===0 || key.indexOf("_page:")===0
|| key.indexOf("_doctype:")===0 || key.indexOf("preferred_breadcrumbs:")===0) {
localStorage.removeItem(key);


+ 2
- 2
frappe/public/js/frappe/defaults.js Wyświetl plik

@@ -26,12 +26,12 @@ frappe.defaults = {
return d;
},
get_global_default: function(key) {
var d = sys_defaults[key];
var d = frappe.sys_defaults[key];
if($.isArray(d)) d = d[0];
return d;
},
get_global_defaults: function(key) {
var d = sys_defaults[key];
var d = frappe.sys_defaults[key];
if(!$.isArray(d)) d = [d];
return d;
},


+ 21
- 24
frappe/public/js/frappe/desk.js Wyświetl plik

@@ -99,9 +99,9 @@ frappe.Application = Class.extend({
});
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){
this.set_password(email_list[u])
}
@@ -169,7 +169,7 @@ frappe.Application = Class.extend({
d.hide();//hide waiting indication
if (!passed["message"])
{
show_alert("Login Failed please try again", 5);
frappe.show_alert("Login Failed please try again", 5);
me.email_password_prompt(email_account, user, i)
}
else
@@ -269,15 +269,13 @@ frappe.Application = Class.extend({
},

set_globals: function() {
// for backward compatibility
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;

frappe.user_defaults = frappe.boot.user.defaults;
frappe.user_roles = frappe.boot.user.roles;
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.boot.user.last_selected_values = {};
},
@@ -285,7 +283,7 @@ frappe.Application = Class.extend({
// clear cached pages if timestamp is not found
if(localStorage["page_info"]) {
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) {
if(!page_info[name] || (page_info[name].modified != p.modified)) {
delete localStorage["_page:" + name];
@@ -293,19 +291,18 @@ frappe.Application = Class.extend({
frappe.boot.allowed_pages.push(name);
});
} 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);
},
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_fullname = 'Guest';
frappe.user_defaults = {};
frappe.user_roles = ['Guest'];
frappe.session.user_email = '';
frappe.sys_defaults = {};
},
make_page_container: function() {
if($("#body_div").length) {
@@ -564,12 +561,12 @@ frappe.get_desktop_icons = function(show_hidden, show_global) {
}
}

if(roles.indexOf('System Manager')!=-1) {
if(frappe.user_roles.includes('System Manager')) {
var m = frappe.get_module('Setup');
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');
if(show_module(m)) add_to_out(m)
}
@@ -589,7 +586,7 @@ frappe.add_to_desktop = function(label, doctype, report) {
},
callback: function(r) {
if(r.message) {
show_alert(__("Added"));
frappe.show_alert(__("Added"));
}
}
});


+ 55
- 55
frappe/public/js/frappe/dom.js Wyświetl plik

@@ -58,19 +58,19 @@ frappe.dom = {
},
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) {
@@ -115,7 +115,7 @@ frappe.dom = {
css: function(ele, s) {
if(ele && s) {
$.extend(ele.style, s);
};
}
return ele;
},
freeze: function(msg, css_class) {
@@ -155,7 +155,7 @@ frappe.dom = {
save_selection: function() {
// via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element
if (window.getSelection) {
sel = window.getSelection();
var sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
var ranges = [];
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
@@ -171,7 +171,7 @@ frappe.dom = {
restore_selection: function(savedSel) {
if (savedSel) {
if (window.getSelection) {
sel = window.getSelection();
var sel = window.getSelection();
sel.removeAllRanges();
for (var i = 0, len = savedSel.length; i < len; ++i) {
sel.addRange(savedSel[i]);
@@ -242,48 +242,48 @@ frappe._in = function(source, target) {
})(jQuery);

(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);

+ 4
- 4
frappe/public/js/frappe/feedback.js Wyświetl plik

@@ -3,7 +3,7 @@ frappe.provide("frappe.utils")
frappe.utils.Feedback = Class.extend({
resend_feedback_request: function(doc) {
/* resend the feedback request email */
args = {
var args = {
reference_name: doc.reference_name,
reference_doctype: doc.reference_doctype,
request: doc.feedback_request,
@@ -14,12 +14,12 @@ frappe.utils.Feedback = Class.extend({
manual_feedback_request: function(doc) {
var me = this;

args = {
var args = {
reference_doctype: doc.doctype,
reference_name: doc.name
}
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 })
me.get_feedback_request_details(args, false)
} else{
@@ -43,7 +43,7 @@ frappe.utils.Feedback = Class.extend({

make_feedback_request_dialog: function(args, is_resend) {
var me = this;
dialog = new frappe.ui.Dialog({
var dialog = new frappe.ui.Dialog({
title: __("{0} Feedback Request", [ is_resend? "Resend": "Send" ]),
fields: [
{


+ 21
- 21
frappe/public/js/frappe/form/control.js Wyświetl plik

@@ -476,7 +476,7 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({
callback("");
return;
}
v1 = ''
var v1 = ''
// phone may start with + and must only have numbers later, '-' and ' ' are stripped
v = v.replace(/ /g, '').replace(/-/g, '').replace(/\(/g, '').replace(/\)/g, '');

@@ -507,7 +507,7 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({
var invalid_email = false;
email_list.forEach(function(email) {
if (!validate_email(email)) {
msgprint(__("Invalid Email: {0}", [email]));
frappe.msgprint(__("Invalid Email: {0}", [email]));
invalid_email = true;
}
});
@@ -671,18 +671,18 @@ frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({
},
parse: function(value) {
if(value) {
return dateutil.user_to_str(value);
return frappe.datetime.user_to_str(value);
}
},
format_for_input: function(value) {
if(value) {
return dateutil.str_to_user(value);
return frappe.datetime.str_to_user(value);
}
return "";
},
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("");
return;
}
@@ -733,14 +733,14 @@ frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({
parse: function(value) {
if(value) {
// 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;
},
format_for_input: function(value) {
if(value) {
// 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 || "";
}
@@ -789,16 +789,16 @@ frappe.ui.form.ControlDateRange = frappe.ui.form.ControlData.extend({
},
parse: function(value) {
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];
}
},
format_for_input: function(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 "";
@@ -1025,7 +1025,7 @@ frappe.ui.form.ControlAttach = frappe.ui.form.ControlData.extend({
me.dialog.hide();
me.frm.save();
} else {
msgprint(__("Please attach a file or set a URL"));
frappe.msgprint(__("Please attach a file or set a URL"));
}
},
callback: function(attachment, r) {
@@ -1346,7 +1346,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
return true;
},
item: function (item, input) {
d = this.get_item(item.value);
var d = this.get_item(item.value);
if(!d.label) { d.label = d.value; }

var _label = (me.translate_values) ? __(d.label) : d.label;
@@ -1408,7 +1408,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
value: "create_new__link_option",
action: me.new_doc
})
};
}
// advanced search
r.results.push({
label: "<span class='text-primary link-option'>"
@@ -1591,7 +1591,7 @@ frappe.ui.form.ControlDynamicLink = frappe.ui.form.ControlLink.extend({
}
var options = frappe.model.get_value(this.df.parent, this.docname, this.df.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]));
// }
return options;
@@ -1797,7 +1797,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({
me.editor.summernote('insertImage', selected);
me.image_dialog.hide();
} else {
msgprint(__("Please attach a file or set a URL"));
frappe.msgprint(__("Please attach a file or set a URL"));
}
},
callback: function(attachment, r) {
@@ -1908,9 +1908,9 @@ frappe.ui.form.ControlSignature = frappe.ui.form.ControlData.extend({

// make jSignature field
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">
<div class="missing-image attach-missing-image">


+ 3
- 2
frappe/public/js/frappe/form/dashboard.js Wyświetl plik

@@ -259,7 +259,7 @@ frappe.ui.form.Dashboard = Class.extend({
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({
type: "GET",
@@ -359,7 +359,7 @@ frappe.ui.form.Dashboard = Class.extend({
} else {
heatmap_message.addClass('hidden');
}
}
}
},

add_indicator: function(label, color) {
@@ -370,6 +370,7 @@ frappe.ui.form.Dashboard = Class.extend({
// set colspan
var indicators = this.stats_area_row.find('.indicator-column');
var n_indicators = indicators.length + 1;
var colspan;
if(n_indicators > 4) { colspan = 3 }
else { colspan = 12 / n_indicators; }



+ 4
- 4
frappe/public/js/frappe/form/footer/assign_to.js Wyświetl plik

@@ -55,13 +55,13 @@ frappe.ui.form.AssignTo = Class.extend({
</li>', info))
.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.remove(user);
me.remove(frappe.session.user);
}, "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();
}
}
@@ -164,7 +164,7 @@ frappe.ui.form.AssignToDialog = Class.extend({
toggle_myself: function(myself) {
var me = this;
if($(myself).prop("checked")) {
me.set_value("assign_to", user);
me.set_value("assign_to", frappe.session.user);
me.set_value("notify", 0);
me.get_field("notify").$wrapper.toggle(false);
me.get_field("assign_to").$wrapper.toggle(false);


+ 14
- 14
frappe/public/js/frappe/form/footer/attachments.js Wyświetl plik

@@ -18,7 +18,7 @@ frappe.ui.form.Attachments = Class.extend({
},
max_reached: function() {
// 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
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) {
if(r.exc) {
if(!r._server_messages)
msgprint(__("There were errors"));
frappe.msgprint(__("There were errors"));
return;
}
me.remove_fileid(fileid);
@@ -207,13 +207,13 @@ frappe.ui.form.Attachments = Class.extend({
});

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,
fields: [
fields: [
{fieldtype: "Section Break"},
{"fieldtype": "Link" , "fieldname": "file" , "label": __("Select uploaded file"), "options": "File"},
],
],
});

var btn = dialog.set_primary_action(__("Attach"));
@@ -224,22 +224,22 @@ frappe.ui.get_upload_dialog = function(opts){

var fd = dialog.fields_dict;
$(fd.file.input).change(function() {
frappe.call({
frappe.call({
'method': 'frappe.client.get_value',
'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){
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);
opts.args.filename = r.message.file_name
}
});
});
});
frappe.upload.make({
parent: upload_area,


+ 5
- 5
frappe/public/js/frappe/form/footer/timeline.js Wyświetl plik

@@ -76,10 +76,10 @@ frappe.ui.form.Timeline = Class.extend({

setup_email_button: function() {
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)
.on("click", function() {
args = {
var args = {
doc: me.frm.doc,
frm: me.frm,
recipients: me.get_recipient()
@@ -309,7 +309,7 @@ frappe.ui.form.Timeline = Class.extend({
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);

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);

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_name: this.frm.docname,
content: comment,
sender: user
sender: frappe.session.user
}
},
btn: btn,


+ 3
- 9
frappe/public/js/frappe/form/form_viewers.js Wyświetl plik

@@ -43,9 +43,9 @@ frappe.ui.form.Viewers = Class.extend({
if (data_updated && new_users.length) {
// new user viewing this document, who wasn't viewing in the past
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 {
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 docname = data.docname;
var past_viewers = (frappe.model.get_docinfo(doctype, docname).viewers || {}).past || [];
var new_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", {
past: past_viewers.concat(new_viewers),


+ 5
- 5
frappe/public/js/frappe/form/formatters.js Wyświetl plik

@@ -99,7 +99,7 @@ frappe.form.formatters = {
},
Date: function(value) {
if (value) {
value = dateutil.str_to_user(value);
value = frappe.datetime.str_to_user(value);
// handle invalid date
if (value==="Invalid date") {
value = null;
@@ -110,7 +110,7 @@ frappe.form.formatters = {
},
Datetime: function(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) {
m = m.tz(frappe.boot.sysdefaults.time_zone);
}
@@ -182,7 +182,7 @@ frappe.form.formatters = {
return "<pre>" + (value==null ? "" : $("<div>").text(value).html()) + "</pre>"
},
WorkflowState: function(value) {
workflow_state = frappe.get_doc("Workflow State", value);
var workflow_state = frappe.get_doc("Workflow State", value);
if(workflow_state) {
return repl("<span class='label label-%(style)s' \
data-workflow-state='%(value)s'\
@@ -217,7 +217,7 @@ frappe.format = function(value, df, options, doc) {
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);

@@ -231,7 +231,7 @@ frappe.get_format_helper = function(doc) {
var helper = {
get_formatted: function(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);
}
};


+ 13
- 11
frappe/public/js/frappe/form/grid.js Wyświetl plik

@@ -72,7 +72,7 @@ frappe.ui.form.Grid = Class.extend({
setup_check: function() {
var me = this;
this.wrapper.on('click', '.grid-row-check', function(e) {
$check = $(this);
var $check = $(this);
if($check.parents('.grid-heading-row:first').length!==0) {
// select all?
var checked = $check.prop('checked');
@@ -102,7 +102,7 @@ frappe.ui.form.Grid = Class.extend({
});
},
select_row: function(name) {
me.grid_rows_by_docname[name].select();
this.grid_rows_by_docname[name].select();
},
refresh_remove_rows_button: function() {
this.remove_rows_button.toggleClass('hide',
@@ -345,11 +345,11 @@ frappe.ui.form.Grid = Class.extend({
this.refresh();
},
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();
},
toggle_display: function(fieldname, show) {
this.get_docfield(fieldname).hidden = show ? 0 : 1;;
this.get_docfield(fieldname).hidden = show ? 0 : 1;
this.refresh();
},
get_docfield: function(fieldname) {
@@ -586,7 +586,7 @@ frappe.ui.form.Grid = Class.extend({

// add data
$.each(me.frm.doc[me.df.fieldname] || [], function(i, d) {
row = [];
var row = [];
$.each(data[2], function(i, fieldname) {
var value = d[fieldname];

@@ -759,9 +759,10 @@ frappe.ui.form.GridRow = Class.extend({
// index (1, 2, 3 etc)
if(!this.row_index) {
var txt = (this.doc ? this.doc.idx : "&nbsp;");
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)
.on('click', function(e) {
if(!$(e.target).hasClass('grid-row-check')) {
@@ -852,7 +853,7 @@ frappe.ui.form.GridRow = Class.extend({
add_class += (["Check"].indexOf(df.fieldtype)!==-1) ?
" 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-fieldtype", df.fieldtype)
.data("df", df)
@@ -861,7 +862,7 @@ frappe.ui.form.GridRow = Class.extend({
if(frappe.ui.form.editable_row===me) {
return;
}
out = me.toggle_editable_row();
var out = me.toggle_editable_row();
var col = this;
setTimeout(function() {
$(col).find('input[type="Text"]:first').focus();
@@ -890,7 +891,7 @@ frappe.ui.form.GridRow = Class.extend({
if(frappe.ui.form.editable_row
&& frappe.ui.form.editable_row !== this) {
frappe.ui.form.editable_row.toggle_editable_row(false);
};
}

this.row.toggleClass('editable-row', true);

@@ -964,6 +965,7 @@ frappe.ui.form.GridRow = Class.extend({
var me = this;
if(field.$input) {
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)) {
return;
}


+ 4
- 4
frappe/public/js/frappe/form/layout.js Wyświetl plik

@@ -225,7 +225,7 @@ frappe.ui.form.Layout = Class.extend({
if(me.frm) {
fieldobj.perm = me.frm.perm;
}
};
}
refresh && fieldobj.refresh && fieldobj.refresh();
}
},
@@ -249,7 +249,7 @@ frappe.ui.form.Layout = Class.extend({
},
handle_tab: function(doctype, fieldname, shift) {
var me = this,
grid_row = null;
grid_row = null,
prev = null,
fields = me.fields_list,
in_grid = false,
@@ -357,7 +357,7 @@ frappe.ui.form.Layout = Class.extend({
// build dependants' dictionary
var has_dep = false;

for(fkey in this.fields_list) {
for(var fkey in this.fields_list) {
var f = this.fields_list[fkey];
f.dependencies_clear = true;
if(f.df.depends_on) {
@@ -409,7 +409,7 @@ frappe.ui.form.Layout = Class.extend({

if(expression.substr(0,5)=='eval:') {
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);
} else {
var value = doc[expression];


+ 5
- 4
frappe/public/js/frappe/form/link_selector.js Wyświetl plik

@@ -16,6 +16,8 @@ frappe.ui.form.LinkSelector = Class.extend({
}
},
make: function() {
var me = this;

this.dialog = new frappe.ui.Dialog({
title: __("Select {0}", [(this.doctype=='[Select]') ? __("value") : __(this.doctype)]),
fields: [
@@ -32,7 +34,6 @@ frappe.ui.form.LinkSelector = Class.extend({
me.search();
}
});
me = this;

if(this.txt)
this.dialog.fields_dict.txt.set_input(this.txt);
@@ -118,7 +119,7 @@ frappe.ui.form.LinkSelector = Class.extend({
$.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);
show_alert(__("Added {0} ({1})", [value, d[me.qty_fieldname]]));
frappe.show_alert(__("Added {0} ({1})", [value, d[me.qty_fieldname]]));
updated = true;
return false;
}
@@ -129,7 +130,7 @@ frappe.ui.form.LinkSelector = Class.extend({
frappe.after_ajax(function() {
setTimeout(function() {
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);
});
}
@@ -137,7 +138,7 @@ frappe.ui.form.LinkSelector = Class.extend({
} else {
var d = me.target.add_new_row();
frappe.model.set_value(d.doctype, d.name, me.fieldname, value);
show_alert(__("{0} added", [value]));
frappe.show_alert(__("{0} added", [value]));
}
}
});


+ 5
- 4
frappe/public/js/frappe/form/print.js Wyświetl plik

@@ -70,9 +70,10 @@ frappe.ui.form.PrintPreview = Class.extend({
+"&name="+encodeURIComponent(me.frm.doc.name)
+"&format="+me.selected_format()
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1")
+(me.lang_code ? ("&_lang="+me.lang_code) : "")));
+(me.lang_code ? ("&_lang="+me.lang_code) : ""))
);
if(!w) {
msgprint(__("Please enable pop-ups")); return;
frappe.msgprint(__("Please enable pop-ups")); return;
}
}
});
@@ -138,7 +139,7 @@ frappe.ui.form.PrintPreview = Class.extend({
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1")
+(me.lang_code ? ("&_lang="+me.lang_code) : "")));
if(!w) {
msgprint(__("Please enable pop-ups")); return;
frappe.msgprint(__("Please enable pop-ups")); return;
}
},
get_print_html: function(callback) {
@@ -227,7 +228,7 @@ frappe.ui.get_print_settings = function(pdf, callback, letter_head) {
? locals[":Company"][frappe.defaults.get_default('company')]["default_letter_head"]
: '';

columns = [{
var columns = [{
fieldtype: "Check",
fieldname: "with_letter_head",
label: __("With Letter head")


+ 1
- 1
frappe/public/js/frappe/form/quick_entry.js Wyświetl plik

@@ -66,7 +66,7 @@ frappe.ui.form.quick_entry = function(doctype, success) {

if(data) {
dialog.working = true;
values = update_doc();
var values = update_doc();
frappe.call({
method: "frappe.client.insert",
args: {


+ 3
- 3
frappe/public/js/frappe/form/save.js Wyświetl plik

@@ -76,7 +76,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) {
if(newname) {
doc.__newname = strip(newname);
} else {
msgprint(__("Name is required"));
frappe.msgprint(__("Name is required"));
throw "name required";
}

@@ -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>";
msgprint({
frappe.msgprint({
message: message,
indicator: 'red',
title: __('Missing Fields')
@@ -218,7 +218,7 @@ frappe.ui.form.update_calling_link = function(newdoc) {
}});
} else {
frappe._from_link.set_value(newdoc.name);
}
}

// refresh field
frappe._from_link.refresh();


+ 2
- 2
frappe/public/js/frappe/form/script_manager.js Wyświetl plik

@@ -70,7 +70,7 @@ frappe.ui.form.ScriptManager = Class.extend({
var me = this;
doctype = doctype || this.frm.doctype;
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);

return $.when.apply($, $.map(handlers, function(fn) { return fn(); }));
@@ -138,7 +138,7 @@ frappe.ui.form.ScriptManager = Class.extend({
this.trigger('setup');
},
log_error: function(caller, e) {
show_alert("Error in Client Script.");
frappe.show_alert("Error in Client Script.");
console.group && console.group();
console.log("----- error in client script -----");
console.log("method: " + caller);


+ 2
- 2
frappe/public/js/frappe/form/share.js Wyświetl plik

@@ -117,7 +117,7 @@ frappe.ui.form.Share = Class.extend({
options: "User",
filters: {
"user_type": "System User",
"name": ["!=", user]
"name": ["!=", frappe.session.user]
}
},
only_input: true,
@@ -164,7 +164,7 @@ frappe.ui.form.Share = Class.extend({
var user = $(this).parents(".shared-user:first").attr("data-user") || "",
value = $(this).prop("checked") ? 1 : 0,
property = $(this).attr("name")
everyone = cint($(this).parents(".shared-user:first").attr("data-everyone"));
var everyone = cint($(this).parents(".shared-user:first").attr("data-everyone"));

frappe.call({
method: "frappe.share.set_permission",


+ 2
- 2
frappe/public/js/frappe/form/sidebar.js Wyświetl plik

@@ -151,11 +151,11 @@ frappe.ui.form.Sidebar = Class.extend({
},

setup_ratings: function() {
_ratings = this.frm.get_docinfo().rating || 0;
var _ratings = this.frm.get_docinfo().rating || 0;

if(_ratings) {
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);
}
}


+ 3
- 3
frappe/public/js/frappe/form/toolbar.js Wyświetl plik

@@ -114,7 +114,7 @@ frappe.ui.form.Toolbar = Class.extend({
// Print
if(!is_submittable || docstatus == 1 ||
(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)) {
this.page.add_menu_item(__("Print"), function() {
me.frm.print_doc();}, true);
@@ -159,7 +159,7 @@ frappe.ui.form.Toolbar = Class.extend({
me.frm.savetrash();}, true);
}

if(in_list(roles, "System Manager")) {
if(frappe.user_roles.includes("System Manager")) {
this.page.add_menu_item(__("Customize"), function() {
frappe.set_route("Form", "Customize Form", {
doc_type: me.frm.doctype
@@ -178,7 +178,7 @@ frappe.ui.form.Toolbar = Class.extend({
if(!this.frm.doc.__unsaved) {
if(is_submittable && docstatus == 1) {
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);
}, true)
}


+ 3
- 3
frappe/public/js/frappe/form/workflow.js Wyświetl plik

@@ -73,7 +73,7 @@ frappe.ui.form.States = Class.extend({
}

$.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;
me.frm.page.add_action_item(__(d.action), function() {
var action = d.action;
@@ -112,10 +112,10 @@ frappe.ui.form.States = Class.extend({
} else if(new_docstatus==2 && me.frm.doc.docstatus==1) {
me.frm.savecancel(null, success, on_error);
} else {
msgprint(__("Document Status transition from ") + me.frm.doc.docstatus + " "
frappe.msgprint(__("Document Status transition from ") + me.frm.doc.docstatus + " "
+ __("to") +
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;
}



+ 6
- 6
frappe/public/js/frappe/list/list_renderer.js Wyświetl plik

@@ -108,8 +108,8 @@ frappe.views.ListRenderer = Class.extend({
}

// 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)
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]);
} else {
add_field(df.options);
};
}
}
}
});
@@ -424,7 +424,7 @@ frappe.views.ListRenderer = Class.extend({
this.prepare_when(data, data.modified);

// nulls as strings
for (key in data) {
for (var key in data) {
if (data[key] == null) {
data[key] = '';
}
@@ -485,8 +485,8 @@ frappe.views.ListRenderer = Class.extend({
prepare_when: function (data, date_str) {
if (!date_str) date_str = data.modified;
// 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) {
data.when = comment_when(date_str);
}


+ 6
- 6
frappe/public/js/frappe/list/list_sidebar.js Wyświetl plik

@@ -212,7 +212,7 @@ frappe.views.ListSidebar = Class.extend({
.then(function() {
d.hide();
}, 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 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>')
.appendTo($dropdown)
}

accounts = frappe.boot.email_accounts;
var accounts = frappe.boot.email_accounts;

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('/');
if(!divider) {
$('<li role="separator" class="divider"></li>').appendTo($dropdown);
@@ -318,9 +318,9 @@ frappe.views.ListSidebar = Class.extend({
me.defined_category = r.message;
if (r.message.defined_cat ){
me.defined_category = r.message.defined_cat
me.cats = {};
me.cats = {};
//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){
me.cats[me.defined_category[i].category]=[me.defined_category[i].tag];
}else{


+ 12
- 12
frappe/public/js/frappe/list/list_view.js Wyświetl plik

@@ -302,7 +302,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
set_filters: function (filters) {
var me = this;
$.each(filters, function (i, f) {
hidden = false
var hidden = false
if (f.length === 3) {
f = [me.doctype, f[0], f[1], f[2]]
} else if (f.length === 5) {
@@ -377,7 +377,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
if (this.list_renderer.settings.list_view_doc) {
this.list_renderer.settings.list_view_doc(this);
} 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 () {
if (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;
},
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();
},
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();
},
remove_liked_by_me: function () {
this.filter_list.get_filter('_liked_by').remove();
},
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 () {
var me = this;
@@ -606,7 +606,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
});
}, true);
}
if (roles.includes('System Manager')) {
if (frappe.user_roles.includes('System Manager')) {
this.page.add_menu_item(__('Role Permissions Manager'), function () {
frappe.set_route('permission-manager', {
doctype: me.doctype
@@ -627,7 +627,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
frappe.add_to_desktop(me.doctype, me.doctype);
}, 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
this.page.add_menu_item(__('Edit DocType'), function () {
frappe.set_route('Form', 'DocType', me.doctype);
@@ -683,7 +683,7 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
return !is_submittable || doc.docstatus === 1 ||
(allow_print_for_cancelled && doc.docstatus == 2) ||
(allow_print_for_draft && doc.docstatus == 0) ||
roles.includes('Administrator')
frappe.user_roles.includes('Administrator')
}).map(function (doc) {
return doc.name
});
@@ -708,11 +708,11 @@ frappe.views.ListView = frappe.ui.BaseList.extend({
});

dialog.set_primary_action(__('Print'), function () {
args = dialog.get_values();
var args = dialog.get_values();
if (!args) return;
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 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.show();


+ 4
- 4
frappe/public/js/frappe/misc/common.js Wyświetl plik

@@ -30,7 +30,7 @@ frappe.avatar = function(user, css_class, title) {

return repl('<span class="avatar %(css_class)s" title="%(title)s">\
<span class="avatar-frame" style="background-image: url(%(image)s)"\
title="%(title)s"></span></span>', {
title="%(title)s"></span></span>', {
image: image,
title: title,
abbr: user_info.abbr,
@@ -93,7 +93,7 @@ frappe.get_gravatar = function(email_id) {

function repl(s, dict) {
if(s==null)return '';
for(key in dict) {
for(var key in dict) {
s = s.split("%("+key+")s").join(dict[key]);
}
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) {
var name = $0,
value = $1.charAt(0) === '"'
? $1.substr(1, -1).replace(/\\(.)/g, "$1")
: $1;
? $1.substr(1, -1).replace(/\\(.)/g, "$1")
: $1;
cookies[name] = value;
});
}


+ 13
- 13
frappe/public/js/frappe/misc/datetime.js Wyświetl plik

@@ -10,8 +10,8 @@ frappe.provide("frappe.datetime");
$.extend(frappe.datetime, {
convert_to_user_tz: function(date, format) {
// 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 {
var date_obj = moment(date);
}
@@ -22,8 +22,8 @@ $.extend(frappe.datetime, {
convert_to_system_tz: function(date, format) {
// 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 {
var date_obj = moment(date);
}
@@ -32,8 +32,8 @@ $.extend(frappe.datetime, {
},

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 {
return true;
}
@@ -48,7 +48,7 @@ $.extend(frappe.datetime, {
},

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) {
@@ -88,12 +88,12 @@ $.extend(frappe.datetime, {
},

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) {
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) {
return moment(val).format(user_fmt);
} else {
@@ -110,7 +110,7 @@ $.extend(frappe.datetime, {
},

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";

if(val.indexOf(" ")!==-1) {
@@ -124,7 +124,7 @@ $.extend(frappe.datetime, {
},

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) {
@@ -156,5 +156,5 @@ $.extend(frappe.datetime, {
});

// globals (deprecate)
var date = dateutil = frappe.datetime;
var get_today = frappe.datetime.get_today;
// var date = dateutil = frappe.datetime;
// var get_today = frappe.datetime.get_today;

+ 61
- 61
frappe/public/js/frappe/misc/number_format.js Wyświetl plik

@@ -1,55 +1,55 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt

if(!window.frappe) window.frappe = {};
if (!window.frappe) window.frappe = {};

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 + "";

// 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
parts = v.split(" ");
var parts = v.split(" ");
v = isNaN(parseFloat(parts[0])) ? parts.slice(parts.length - 1).join(" ") : v;
}

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 v;
}

function cint(v, def) {
if(v===true)
if (v === true)
return 1;
if(v===false)
if (v === false)
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;
}

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);

// 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, "");

// 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");
v = v.replace(decimal_regex, ".");
}
@@ -59,32 +59,32 @@ function strip_number_groups(v, number_format) {


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) {
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.
if (decimals == null) decimals = info.precision;

v = flt(v, decimals, format);

if(v<0) var is_negative = true;
if (v < 0) var is_negative = true;
v = Math.abs(v);

v = v.toFixed(decimals);
@@ -98,23 +98,23 @@ window.format_number = function(v, format, decimals){
var integer = part[0];
var str = '';
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;
if(format=="#,##,###.##" && str.indexOf(",")!=-1) { // INR
if (format == "#,##,###.##" && str.indexOf(",") != -1) { // INR
group_position = 2;
l += 1;
}

str += integer.charAt(i);

if (l && !((l+1) % group_position) && i!=0 ) {
if (l && !((l + 1) % group_position) && i != 0) {
str += info.group_sep;
}
}
part[0] = str.split("").reverse().join("");
}
if(part[0]+""=="") {
part[0]="0";
if (part[0] + "" == "") {
part[0] = "0";
}

// join decimal
@@ -131,18 +131,18 @@ function format_currency(v, currency, decimals) {
decimals = frappe.boot.sysdefaults.currency_precision || null;
}

if(symbol)
if (symbol)
return symbol + " " + format_number(v, format, decimals);
else
return format_number(v, format, decimals);
}

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;

if(!currency)
if (!currency)
currency = frappe.boot.sysdefaults.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) {
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
@@ -171,13 +171,13 @@ function get_number_format_info(format) {

function _round(num, precision) {
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) {
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);
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);
}else{
} else {
return frappe.boot.sysdefaults.float_precision
}
}

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;
}

@@ -214,15 +214,15 @@ function remainder(numerator, denominator, precision) {
}

return flt(_remainder, precision);
};
}

function round_based_on_smallest_currency_fraction(value, currency, precision) {
var smallest_currency_fraction_value = flt(frappe.model.get_value(":Currency",
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);
if(remainder_val > (smallest_currency_fraction_value / 2)) {
if (remainder_val > (smallest_currency_fraction_value / 2)) {
value += (smallest_currency_fraction_value - remainder_val);
} else {
value -= remainder_val;
@@ -231,4 +231,4 @@ function round_based_on_smallest_currency_fraction(value, currency, precision) {
value = Math.round(value);
}
return value;
};
}

+ 5
- 3
frappe/public/js/frappe/misc/pretty_date.js Wyświetl plik

@@ -5,8 +5,8 @@ function prettyDate(time, mini){
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(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 {
var ret = moment(time).locale(frappe.boot.lang).fromNow(mini);
}
@@ -41,7 +41,7 @@ function prettyDate(time, mini){
if ( isNaN(day_diff) || day_diff < 0 )
return '';

return when = day_diff == 0 && (
var when = day_diff == 0 && (
diff < 60 && __("just now") ||
diff < 120 && __("1 minute ago") ||
diff < 3600 && __("{0} minutes ago", [Math.floor( diff / 60 )]) ||
@@ -52,6 +52,8 @@ function prettyDate(time, mini){
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;
}
}



+ 1
- 1
frappe/public/js/frappe/misc/tools.js Wyświetl plik

@@ -5,7 +5,7 @@ frappe.provide("frappe.tools");

frappe.tools.downloadify = function(data, roles, title) {
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;
}



+ 3
- 3
frappe/public/js/frappe/misc/user.js Wyświetl plik

@@ -5,7 +5,7 @@

frappe.user_info = function(uid) {
if(!uid)
uid = user;
uid = frappe.session.user;

if(uid.toLowerCase()==="bot") {
return {
@@ -57,7 +57,7 @@ frappe.provide('frappe.user');
$.extend(frappe.user, {
name: 'Guest',
full_name: function(uid) {
return uid===user ?
return uid === frappe.session.user ?
__("You") :
frappe.user_info(uid).fullname;
},
@@ -77,7 +77,7 @@ $.extend(frappe.user, {
},
get_desktop_items: function() {
// 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 type = frappe.modules[m] && frappe.modules[m].type;



+ 108
- 109
frappe/public/js/frappe/misc/utils.js Wyświetl plik

@@ -5,13 +5,13 @@ frappe.provide('frappe.utils');

frappe.utils = {
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) {
filename = cstr(filename);
@@ -122,7 +122,7 @@ frappe.utils = {
return [dict[filters]]
}
$.each(dict, function(i, d) {
for(key in filters) {
for(var key in filters) {
if($.isArray(filters[key])) {
if(filters[key][0]=="in") {
if(filters[key][1].indexOf(d[key])==-1)
@@ -242,7 +242,6 @@ frappe.utils = {
break;
default:
return false;
break;
}

// test regExp if not null
@@ -288,7 +287,7 @@ frappe.utils = {
};

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]);

@@ -349,20 +348,20 @@ frappe.utils = {
if (!arr1 || !arr2) {
return false;
}
if (arr1.length != arr2.length) {
if (arr1.length != arr2.length) {
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;
}
}
else if (arr1[i] !== arr2[i]) {
}
else if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
return true;
},

intersection: function(a, b) {
@@ -411,13 +410,13 @@ frappe.utils = {
var tempH = tempImg.height;
if (tempW > tempH) {
if (tempW > max_width) {
tempH *= max_width / tempW;
tempW = max_width;
tempH *= max_width / tempW;
tempW = max_width;
}
} else {
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) {
frappe.msgprint("Note: Changing the Page Name will break previous URL to this page.");
@@ -589,40 +588,40 @@ frappe.utils = {
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/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;
}
'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
// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/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;
}
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


+ 9
- 7
frappe/public/js/frappe/model/create_new.js Wyświetl plik

@@ -15,7 +15,7 @@ $.extend(frappe.model, {
name: frappe.model.get_new_name(doctype),
__islocal: 1,
__unsaved: 1,
owner: user
owner: frappe.session.user
};
frappe.model.set_default_values(doc, parent_doc);

@@ -140,7 +140,7 @@ $.extend(frappe.model, {

if(!df.ignore_user_permissions) {
// 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) {
// Use User Permission value when only when it has a single value
user_default = user_defaults[0];
@@ -171,13 +171,13 @@ $.extend(frappe.model, {
return frappe.session.user;

} else if (df["default"] == "user_fullname") {
return user_fullname;
return frappe.session.user_fullname;

} else if (df["default"] == "Today") {
return dateutil.get_today();
return frappe.datetime.get_today();

} else if ((df["default"] || "").toLowerCase() === "now") {
return dateutil.now_datetime();
return frappe.datetime.now_datetime();

} else if (df["default"][0]===":") {
var boot_doc = frappe.model.get_default_from_boot_docs(df, doc, parent_doc);
@@ -198,7 +198,7 @@ $.extend(frappe.model, {
}

} else if (df.fieldtype=="Time") {
return dateutil.now_time();
return frappe.datetime.now_time();
}
},

@@ -267,6 +267,8 @@ $.extend(frappe.model, {
}
}

var user = frappe.session.user;

newdoc.__islocal = 1;
newdoc.docstatus = 0;
newdoc.owner = user;
@@ -309,7 +311,7 @@ $.extend(frappe.model, {

frappe.create_routes = {};
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() {
if(frappe.create_routes[doctype]) {
frappe.set_route(frappe.create_routes[doctype]);


+ 1
- 1
frappe/public/js/frappe/model/meta.js Wyświetl plik

@@ -173,7 +173,7 @@ $.extend(frappe.meta, {

get_parentfield: function(parent_dt, child_dt) {
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)
throw "parentfield not found for " + parent_dt + ", " + child_dt;
return df[0].fieldname;


+ 9
- 9
frappe/public/js/frappe/model/model.js Wyświetl plik

@@ -5,7 +5,7 @@ frappe.provide('frappe.model');

$.extend(frappe.model, {
no_value_type: ['Section Break', 'Column Break', 'HTML', 'Table',
'Button', 'Image', 'Fold', 'Heading'],
'Button', 'Image', 'Fold', 'Heading'],

layout_fields: ['Section Break', 'Column Break', 'Fold'],

@@ -77,7 +77,7 @@ $.extend(frappe.model, {
if(d.fieldname==fieldname) return d;
});
if(!docfield.length) {
msgprint(__("Unknown Column: {0}", [fieldname]));
frappe.msgprint(__("Unknown Column: {0}", [fieldname]));
}
return docfield[0];
},
@@ -103,7 +103,7 @@ $.extend(frappe.model, {
freeze: true,
callback: function(r) {
if(r.exc) {
msgprint(__("Unable to load: {0}", [__(doctype)]));
frappe.msgprint(__("Unable to load: {0}", [__(doctype)]));
throw "No doctype";
}
if(r.message=="use_cache") {
@@ -235,7 +235,7 @@ $.extend(frappe.model, {

can_import: function(doctype, frm) {
// 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;
return frappe.boot.user.can_import.indexOf(doctype)!==-1;
@@ -243,7 +243,7 @@ $.extend(frappe.model, {

can_export: function(doctype, frm) {
// 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;
return frappe.boot.user.can_export.indexOf(doctype)!==-1;
@@ -268,7 +268,7 @@ $.extend(frappe.model, {

can_set_user_permissions: function(doctype, frm) {
// 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;
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) {
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";
}
}) */
@@ -385,7 +385,7 @@ $.extend(frappe.model, {

// doctype-level
run(frappe.model.events[doc.doctype]['*']);
};
}
},

get_doc: function(doctype, name) {
@@ -541,7 +541,7 @@ $.extend(frappe.model, {

get_all_docs: function(doc) {
var all = [doc];
for(key in doc) {
for(var key in doc) {
if($.isArray(doc[key])) {
var children = doc[key];
for (var i=0, l=children.length; i < l; i++) {


+ 5
- 5
frappe/public/js/frappe/model/perm.js Wyświetl plik

@@ -45,7 +45,7 @@ $.extend(frappe.perm, {
return perm;
}

if (user==="Administrator" || roles.indexOf("Administrator")!==-1) {
if (frappe.session.user === "Administrator" || frappe.user_roles.includes("Administrator")) {
perm[0].read = 1;
}

@@ -62,7 +62,7 @@ $.extend(frappe.perm, {

// 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);
} else {
// not owner, remove permissions
@@ -78,7 +78,7 @@ $.extend(frappe.perm, {
if(docinfo && docinfo.shared) {
for(var i=0; i<docinfo.shared.length; 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]["write"] = perm[0]["write"] || s.write;
perm[0]["share"] = perm[0]["share"] || s.share;
@@ -109,7 +109,7 @@ $.extend(frappe.perm, {

$.each(meta.permissions || [], function(i, p) {
// if user has this role
if(roles.indexOf(p.role)!==-1) {
if(frappe.user_roles.includes(p.role)) {
var permlevel = cint(p.permlevel);
if(!perm[permlevel]) {
perm[permlevel] = {};
@@ -198,7 +198,7 @@ $.extend(frappe.perm, {
}

if (perm[0].if_owner && perm[0].read) {
match_rules.push({"Owner": user});
match_rules.push({"Owner": frappe.session.user});
}

return match_rules;


+ 2
- 2
frappe/public/js/frappe/model/workflow.js Wyświetl plik

@@ -44,7 +44,7 @@ frappe.workflow = {
return frappe.get_children(frappe.workflow.workflows[doctype], "transitions", {
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);
if(state_fieldname) {
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;

if(roles.indexOf(allow_edit)==-1) {
if(!frappe.user_roles.includes(allow_edit)) {
return true;
}
}


+ 10
- 10
frappe/public/js/frappe/request.js Wyświetl plik

@@ -71,10 +71,10 @@ frappe.request.call = function(opts) {
frappe.app.redirect_to_login();
} else {
frappe.app.handle_session_expired();
};
}
},
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')});
},
403: function(xhr) {
@@ -108,11 +108,11 @@ frappe.request.call = function(opts) {
},
508: function(xhr) {
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.")});
},
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])});
},
417: function(xhr) {
@@ -133,12 +133,12 @@ frappe.request.call = function(opts) {
},
500: function(xhr) {
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();
frappe.request.report_error(xhr, opts);
},
504: function(xhr) {
msgprint(__("Request Timed Out"))
frappe.msgprint(__("Request Timed Out"))
opts.error_callback && opts.error_callback();
}
};
@@ -217,7 +217,7 @@ frappe.request.prepare = function(opts) {
if(opts.freeze) frappe.dom.freeze(opts.freeze_message);

// 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]))) {
opts.args[key] = JSON.stringify(opts.args[key]);
}
@@ -274,7 +274,7 @@ frappe.request.cleanup = function(opts, r) {
} else {
console.log(r.exc);
}
};
}

// 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);

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")
.toggle(error_report_email ? true : false)
@@ -361,7 +361,7 @@ frappe.request.report_error = function(xhr, request_opts) {
message: error_report_message,
doc: {
doctype: "User",
name: user
name: frappe.session.user
}
});
communication_composer.dialog.$wrapper.css("z-index", cint(msg_dialog.$wrapper.css("z-index")) + 1);


+ 1
- 1
frappe/public/js/frappe/roles_editor.js Wyświetl plik

@@ -155,7 +155,7 @@ frappe.RoleEditor = Class.extend({
var perm = r.message[i];

// if permission -> icon
for(key in perm) {
for(var key in perm) {
if(key!='parent' && key!='permlevel') {
if(perm[key]) {
perm[key] = '<i class="fa fa-check"></i>';


+ 1
- 1
frappe/public/js/frappe/router.js Wyświetl plik

@@ -120,7 +120,7 @@ frappe.set_route = function() {
if(params.length===1 && $.isArray(params[0])) {
params = params[0];
}
route = $.map(params, function(a) {
var route = $.map(params, function(a) {
if($.isPlainObject(a)) {
frappe.route_options = a;
return null;


+ 1
- 1
frappe/public/js/frappe/socketio_client.js Wyświetl plik

@@ -18,7 +18,7 @@ frappe.socket = {

//Enable secure option when using 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:") {
frappe.socket.socket = io.connect(frappe.socket.get_host());


+ 2
- 2
frappe/public/js/frappe/toolbar.js Wyświetl plik

@@ -56,8 +56,8 @@ frappe.get_form_sidebar_extension = function() {

var template = '<ul class="list-unstyled sidebar-menu">\
<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");

} else {


+ 1
- 1
frappe/public/js/frappe/translate.js Wyświetl plik

@@ -8,7 +8,7 @@ frappe._ = function(txt, replace) {
return txt;
if(typeof(txt) != "string")
return txt;
ret = frappe._messages[txt.replace(/\n/g, "")] || txt;
var ret = frappe._messages[txt.replace(/\n/g, "")] || txt;
if(replace && typeof(replace) === "object") {
ret = $.format(ret, replace);
}


+ 1
- 1
frappe/public/js/frappe/ui/base_list.js Wyświetl plik

@@ -173,7 +173,7 @@ frappe.ui.BaseList = Class.extend({
// default filter for submittable doctype
if (frappe.model.is_submittable(this.doctype)) {
this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2);
};
}
},

clear: function () {


+ 6
- 6
frappe/public/js/frappe/ui/charts.js Wyświetl plik

@@ -28,11 +28,11 @@ frappe.ui.Chart = Class.extend({
render_chart: function() {
var chart_dict = {
bindto: '#' + this.opts.bind_to,
data: {},
data: {},
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: {
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.format = frappe.boot.sysdefaults.date_format
.replace('yyyy', '%Y').replace('mm', '%m').replace('dd', '%d');
};
}

// set color
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'];
chart_dict.data.colors = {};
chart_dict.data.columns.forEach(function(d, i) {


+ 2
- 2
frappe/public/js/frappe/ui/field_group.js Wyświetl plik

@@ -74,7 +74,7 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({
}
}
if(errors.length && !ignore_errors) {
msgprint({
frappe.msgprint({
title: __('Missing Values Required'),
message: __('Following fields have missing values:') +
'<br><br><ul><li>' + errors.join('<li>') + '</ul>',
@@ -106,7 +106,7 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({
}
},
clear: function() {
for(key in this.fields_dict) {
for(var key in this.fields_dict) {
var f = this.fields_dict[key];
if(f && f.set_input) {
f.set_input(f.df['default'] || '');


+ 5
- 6
frappe/public/js/frappe/ui/filters/filters.js Wyświetl plik

@@ -149,8 +149,8 @@ frappe.ui.FilterList = Class.extend({
}

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 (field.name=="docstatus") {
labels[i] = options[o].label
@@ -460,8 +460,7 @@ frappe.ui.Filter = Class.extend({
? __("values separated by commas")
: __("use % as wildcard"))+'</div>');
} 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];
if(!original_docfield) {
msgprint(__("Field {0} is not selectable.", [fieldname]));
frappe.msgprint(__("Field {0} is not selectable.", [fieldname]));
return;
}

@@ -784,7 +783,7 @@ frappe.ui.FieldSelect = Class.extend({

// old style
if(doctype.indexOf(".")!==-1) {
parts = doctype.split(".");
var parts = doctype.split(".");
doctype = parts[0];
fieldname = parts[1];
}


+ 4
- 4
frappe/public/js/frappe/ui/like.js Wyświetl plik

@@ -3,7 +3,7 @@

frappe.ui.is_liked = function(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) {
@@ -47,10 +47,10 @@ frappe.ui.toggle_like = function($btn, doctype, name, callback) {
var doc = locals[doctype] && locals[doctype][name];
if(doc) {
var liked_by = JSON.parse(doc._liked_by || "[]"),
idx = liked_by.indexOf(user);
idx = liked_by.indexOf(frappe.session.user);
if(add==="Yes") {
if(idx===-1)
liked_by.push(user);
liked_by.push(frappe.session.user);
} else {
if(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",
content: function() {
var liked_by = JSON.parse($wrapper.attr('data-liked-by') || "[]");
var user = frappe.session.user;
// hack
if ($wrapper.find(".not-liked").length) {
if (liked_by.indexOf(user)!==-1) {


+ 4
- 4
frappe/public/js/frappe/ui/listing.js Wyświetl plik

@@ -80,7 +80,7 @@ frappe.ui.Listing = Class.extend({
return this.page.add_menu_item(label, click, icon)
} else {
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'))
.html((icon ? ("<i class='"+icon+"'></i> ") : "") + label)
.click(click);
@@ -166,7 +166,7 @@ frappe.ui.Listing = Class.extend({
});
if(frappe.model.is_submittable(this.doctype)) {
this.filter_list.add_filter(this.doctype, "docstatus", "!=", 2);
};
}
},

clear: function() {
@@ -246,7 +246,7 @@ frappe.ui.Listing = Class.extend({
save_list_settings_locally: function(args) {
if(this.opts.save_list_settings && this.doctype && !this.docname) {
// save list settings locally
list_settings = frappe.model.list_settings[this.doctype];
var list_settings = frappe.model.list_settings[this.doctype];

if(!list_settings) {
return
@@ -409,7 +409,7 @@ frappe.ui.Listing = Class.extend({
},
set_filter: function(fieldname, label, no_run, no_duplicate, parent) {
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) {
var v = cstr(filter.field.get_parsed_value());


+ 2
- 3
frappe/public/js/frappe/ui/messages.js Wyświetl plik

@@ -18,7 +18,7 @@ frappe.throw = function(msg) {
msg = {message: msg, title: __('Error')};
}
if(!msg.indicator) msg.indicator = 'red';
msgprint(msg);
frappe.msgprint(msg);
throw new Error(msg.message);
}

@@ -260,6 +260,7 @@ frappe.show_alert = function(message, seconds=7) {
$('<div id="dialog-container"><div id="alert-container"></div></div>').appendTo('body');
}

var message_html;
if(message.indicator) {
message_html = $('<span class="indicator ' + message.indicator + '"></span>').append(message.message);
} else {
@@ -286,5 +287,3 @@ frappe.show_alert = function(message, seconds=7) {
return div;
}

// for backward compatibility
var show_alert = frappe.show_alert;

+ 5
- 5
frappe/public/js/frappe/ui/toolbar/about.js Wyświetl plik

@@ -6,8 +6,8 @@ frappe.ui.misc.about = function() {
$(d.body).html(repl("<div>\
<p>"+__("Open Source Applications for the Web")+"</p> \
<p><i class='fa fa-globe fa-fw'></i>\
Website: <a href='https://frappe.io' target='_blank'>https://frappe.io</a></p>\
<p><i class='fa fa-github fa-fw'></i>\
Website: <a href='https://frappe.io' target='_blank'>https://frappe.io</a></p>\
<p><i class='fa fa-github fa-fw'></i>\
Source: <a href='https://github.com/frappe' target='_blank'>https://github.com/frappe</a></p>\
<hr>\
<h4>Installed Apps</h4>\
@@ -31,14 +31,14 @@ frappe.ui.misc.about = function() {

var show_versions = function(versions) {
var $wrap = $("#about-app-versions").empty();
$.each(keys(versions).sort(), function(i, key) {
$.each(Object.keys(versions).sort(), function(i, key) {
var v = versions[key];
if(v.branch) {
var text = $.format('<p><b>{0}:</b> v{1} ({2})<br></p>',
[v.title, v.branch_version || v.version, v.branch])
[v.title, v.branch_version || v.version, v.branch])
} else {
var text = $.format('<p><b>{0}:</b> v{1}<br></p>',
[v.title, v.version])
[v.title, v.version])
}
$(text).appendTo($wrap);
});


+ 2
- 2
frappe/public/js/frappe/ui/toolbar/awesome_bar.js Wyświetl plik

@@ -138,7 +138,7 @@ frappe.search.AwesomeBar = Class.extend({
<tr><td>'+__("Calculate")+'</td><td>'+
__("e.g. (55 + 434) / 4 or =Math.sin(Math.PI/2)...")+'</td></tr>\
</table>'
msgprint(txt, __("Search Help"));
frappe.msgprint(txt, __("Search Help"));
}
});
},
@@ -255,7 +255,7 @@ frappe.search.AwesomeBar = Class.extend({
index: 80,
default: "Calculator",
onclick: function() {
msgprint(formatted_value, "Result");
frappe.msgprint(formatted_value, "Result");
}
});
} catch(e) {


+ 3
- 3
frappe/public/js/frappe/ui/toolbar/notifications.js Wyświetl plik

@@ -2,9 +2,9 @@ frappe.provide("frappe.ui.notifications")

frappe.ui.notifications.update_notifications = function() {
frappe.ui.notifications.total = 0;
var doctypes = keys(frappe.boot.notification_info.open_count_doctype).sort();
var modules = keys(frappe.boot.notification_info.open_count_module).sort();
var other = keys(frappe.boot.notification_info.open_count_other).sort();
var doctypes = Object.keys(frappe.boot.notification_info.open_count_doctype).sort();
var modules = Object.keys(frappe.boot.notification_info.open_count_module).sort();
var other = Object.keys(frappe.boot.notification_info.open_count_other).sort();

// clear toolbar / sidebar notifications
frappe.ui.notifications.dropdown_notification = $("#dropdown-notification").empty();


+ 5
- 4
frappe/public/js/frappe/ui/toolbar/search.js Wyświetl plik

@@ -57,7 +57,7 @@ frappe.search.SearchDialog = Class.extend({
clearTimeout($this.data('timeout'));
$this.data('timeout', setTimeout(function() {
if(me.$input.val() === me.current_keyword) return;
keywords = me.$input.val();
var keywords = me.$input.val();
if(keywords.length > 1) {
me.get_results(keywords);
} else {
@@ -102,12 +102,12 @@ frappe.search.SearchDialog = Class.extend({
frappe.search.utils.get_global_results(me.current_keyword,
current_count, me.more_count, type)
.then(function(doctype_results) {
me.add_more_results(doctype_results);
me.add_more_results(doctype_results);
}, function (err) {
console.error(err);
});
} else {
results = me.nav_lists[type].slice(0, me.more_count);
var results = me.nav_lists[type].slice(0, me.more_count);
me.nav_lists[type].splice(0, me.more_count);
me.add_more_results([{title: type, results: results}]);
}
@@ -133,6 +133,7 @@ frappe.search.SearchDialog = Class.extend({
if(me.$modal_body.find('.list-link').length > 1) {
if(me.modal_state === 0) {
// DOWN and UP keys navigate sidebar
var { UP_ARROW, DOWN_ARROW, TAB } = frappe.ui.keyCode;
if(e.which === DOWN_ARROW || e.which === TAB) {
e.preventDefault();
var $link = me.$modal_body.find('.list-link.select').next();
@@ -247,7 +248,7 @@ frappe.search.SearchDialog = Class.extend({
are_expansive = true;
break;
}
};
}
if(results[0].image) margin_more = "20px";
var [section_length, col_width] = are_expansive ? [3, "12"] : [4, "6"];



+ 390
- 347
frappe/public/js/frappe/ui/toolbar/search_utils.js Wyświetl plik

@@ -5,27 +5,27 @@ frappe.search.utils = {
this.recent = JSON.parse(frappe.boot.user.recent || "[]") || [];
},

get_recent_pages: function(keywords) {
var me = this;
values = [], options = [];
function find(list, keywords, process) {
list.forEach(function(item, i) {
_item = ($.isArray(item)) ? item[0] : item;
_item = __(_item || '').toLowerCase().replace(/-/g, " ");
if(keywords===_item || _item.indexOf(keywords) !== -1) {
var option = process(item);
if(option) {
if($.isPlainObject(option)) {
option = [option];
}
option.forEach(function(o) { o.match = item; });
options = option.concat(options);
}
}
});
}
get_recent_pages: function(keywords) {
var me = this, values = [], options = [];
function find(list, keywords, process) {
list.forEach(function(item, i) {
var _item = ($.isArray(item)) ? item[0] : item;
_item = __(_item || '').toLowerCase().replace(/-/g, " ");
if(keywords===_item || _item.indexOf(keywords) !== -1) {
var option = process(item);
if(option) {
if($.isPlainObject(option)) {
option = [option];
}
option.forEach(function(o) { o.match = item; });
options = option.concat(options);
}
}
});
}

me.recent.forEach(function(doctype, i) {
values.push([doctype[1], ['Form', doctype[0], doctype[1]]]);
@@ -48,7 +48,7 @@ frappe.search.utils = {
});

find(values, keywords, function(match) {
out = {
var out = {
route: match[1]
}
if(match[1][0]==='Form') {
@@ -73,35 +73,35 @@ frappe.search.utils = {
return out;
});

return options;
return options;
},

get_search_in_list: function(keywords) {
var me = this;
get_search_in_list: function(keywords) {
var me = this;
var out = [];
if(in_list(keywords.split(" "), "in") && (keywords.slice(-2) !== "in")) {
parts = keywords.split(" in ");
var parts = keywords.split(" in ");
frappe.boot.user.can_read.forEach(function (item) {
if(frappe.boot.user.can_search.includes(item)) {
var level = me.fuzzy_search(parts[1], item);
if(level) {
out.push({
type: "In List",
label: __('Find {0} in {1}', [__(parts[0]), me.bolden_match_part(__(item), parts[1])]),
value: __('Find {0} in {1}', [__(parts[0]), __(item)]),
route_options: {"name": ["like", "%" + parts[0] + "%"]},
index: 1 + level,
route: ["List", item]
});
}
}
var level = me.fuzzy_search(parts[1], item);
if(level) {
out.push({
type: "In List",
label: __('Find {0} in {1}', [__(parts[0]), me.bolden_match_part(__(item), parts[1])]),
value: __('Find {0} in {1}', [__(parts[0]), __(item)]),
route_options: {"name": ["like", "%" + parts[0] + "%"]},
index: 1 + level,
route: ["List", item]
});
}
}
});
}
return out;
},
},

get_creatables: function(keywords) {
var me = this;
get_creatables: function(keywords) {
var me = this;
var out = [];
if(keywords.split(" ")[0]==="new") {
frappe.boot.user.can_create.forEach(function (item) {
@@ -119,10 +119,10 @@ frappe.search.utils = {
});
}
return out;
},
},

get_doctypes: function(keywords) {
var me = this;
get_doctypes: function(keywords) {
var me = this;
var out = [];

var level, target;
@@ -137,48 +137,48 @@ frappe.search.utils = {
}
};
frappe.boot.user.can_read.forEach(function(item) {
level = me.fuzzy_search(keywords, item);
if(level) {
target = item;
if(in_list(frappe.boot.single_types, item)) {
out.push(option("", ["Form", item, item], 0.05));
} else if(frappe.boot.user.can_search.includes(item)) {
// include 'making new' option
if(in_list(frappe.boot.user.can_create, item)) {
var match = item;
out.push({
type: "New",
label: __("New {0}", [me.bolden_match_part(__(item), keywords)]),
value: __("New {0}", [__(item)]),
index: level + 0.01,
match: item,
onclick: function() { frappe.new_doc(match, true); }
});
}
if(in_list(frappe.boot.treeviews, item)) {
out.push(option("Tree", ["Tree", item], 0.05));
} else {
out.push(option("List", ["List", item], 0.05));
if(frappe.model.can_get_report(item)) {
out.push(option("Report", ["Report", item], 0.04));
}
if(frappe.boot.calendars.indexOf(item) !== -1) {
out.push(option("Calendar", ["List", item, "Calendar"], 0.03));
out.push(option("Gantt", ["List", item, "Gantt"], 0.02));
}
}
}
}
level = me.fuzzy_search(keywords, item);
if(level) {
target = item;
if(in_list(frappe.boot.single_types, item)) {
out.push(option("", ["Form", item, item], 0.05));
} else if(frappe.boot.user.can_search.includes(item)) {
// include 'making new' option
if(in_list(frappe.boot.user.can_create, item)) {
var match = item;
out.push({
type: "New",
label: __("New {0}", [me.bolden_match_part(__(item), keywords)]),
value: __("New {0}", [__(item)]),
index: level + 0.01,
match: item,
onclick: function() { frappe.new_doc(match, true); }
});
}
if(in_list(frappe.boot.treeviews, item)) {
out.push(option("Tree", ["Tree", item], 0.05));
} else {
out.push(option("List", ["List", item], 0.05));
if(frappe.model.can_get_report(item)) {
out.push(option("Report", ["Report", item], 0.04));
}
if(frappe.boot.calendars.indexOf(item) !== -1) {
out.push(option("Calendar", ["List", item, "Calendar"], 0.03));
out.push(option("Gantt", ["List", item, "Gantt"], 0.02));
}
}
}
}
});
return out;
},
},

get_reports: function(keywords) {
var me = this;
get_reports: function(keywords) {
var me = this;
var out = [];
var route;
var route;
Object.keys(frappe.boot.user.all_reports).forEach(function(item) {
var level = me.fuzzy_search(keywords, item);
if(level > 0) {
@@ -188,7 +188,7 @@ frappe.search.utils = {
else
route = ["query-report", item];
out.push({
type: "Report",
type: "Report",
label: __("Report {0}" , [me.bolden_match_part(__(item), keywords)]),
value: __("Report {0}" , [__(item)]),
index: level,
@@ -197,10 +197,10 @@ frappe.search.utils = {
}
});
return out;
},
},

get_pages: function(keywords) {
var me = this;
get_pages: function(keywords) {
var me = this;
var out = [];
this.pages = {};
$.each(frappe.boot.page_info, function(name, p) {
@@ -221,8 +221,8 @@ frappe.search.utils = {
});
}
});
var target = 'Calendar';
if(__('calendar').indexOf(keywords.toLowerCase()) === 0) {
var target = 'Calendar';
if(__('calendar').indexOf(keywords.toLowerCase()) === 0) {
out.push({
type: "Calendar",
value: __("Open {0}", [__(target)]),
@@ -231,7 +231,7 @@ frappe.search.utils = {
route: ['List', 'Event', target],
});
}
if(__('email inbox').indexOf(keywords.toLowerCase()) === 0) {
if(__('email inbox').indexOf(keywords.toLowerCase()) === 0) {
out.push({
type: "Inbox",
value: __("Open {0}", [__('Email Inbox')]),
@@ -241,17 +241,17 @@ frappe.search.utils = {
});
}
return out;
},
},

get_modules: function(keywords) {
var me = this;
get_modules: function(keywords) {
var me = this;
var out = [];
Object.keys(frappe.modules).forEach(function(item) {
var level = me.fuzzy_search(keywords, item);
if(level > 0) {
var module = frappe.modules[item];
if(module._doctype) return;
ret = {
var ret = {
type: "Module",
label: __("Open {0}", [me.bolden_match_part(__(item), keywords)]),
value: __("Open {0}", [__(item)]),
@@ -266,196 +266,196 @@ frappe.search.utils = {
}
});
return out;
},
get_global_results: function (keywords, start, limit, doctype = "") {
var me = this;
function get_results_sets(data) {
var results_sets = [], result, set;
function get_existing_set (doctype) {
return results_sets.find(function(set) {
return set.title === doctype;
});
}
function make_description(content, doc_name) {
var parts = content.split(" ||| ");
var result_max_length = 300;
var field_length = 120;
var fields = [];
var result_current_length = 0;
var field_text = "";
for(var i = 0; i < parts.length; i++) {
part = parts[i];
if(part.toLowerCase().indexOf(keywords) !== -1) {
// If the field contains the keyword
if(part.indexOf(' &&& ') !== -1) {
var colon_index = part.indexOf(' &&& ');
var field_value = part.slice(colon_index + 5);
} else {
var colon_index = part.indexOf(' : ');
var field_value = part.slice(colon_index + 3);
}
if(field_value.length > field_length) {
// If field value exceeds field_length, find the keyword in it
// and trim field value by half the field_length at both sides
// ellipsify if necessary
var field_data = "";
var index = field_value.indexOf(keywords);
field_data += index < field_length/2 ? field_value.slice(0, index)
: '...' + field_value.slice(index - field_length/2, index)
field_data += field_value.slice(index, index + field_length/2);
field_data += index + field_length/2 < field_value.length ? "..." : "";
field_value = field_data;
}
var field_name = part.slice(0, colon_index);
// Find remaining result_length and add field length to result_current_length
var remaining_length = result_max_length - result_current_length;
result_current_length += field_name.length + field_value.length + 2;
if(result_current_length < result_max_length) {
// We have room, push the entire field
field_text = '<span class="field-name text-muted">' +
me.bolden_match_part(field_name, keywords) + ': </span> ' +
me.bolden_match_part(field_value, keywords);
if(fields.indexOf(field_text) === -1 && doc_name !== field_value) {
fields.push(field_text);
}
} else {
// Not enough room
if(field_name.length < remaining_length){
// Ellipsify (trim at word end) and push
remaining_length -= field_name.length;
field_text = '<span class="field-name text-muted">' +
me.bolden_match_part(field_name, keywords) + ': </span> ';
field_value = field_value.slice(0, remaining_length);
field_value = field_value.slice(0, field_value.lastIndexOf(' ')) + ' ...';
field_text += me.bolden_match_part(field_value, keywords);
fields.push(field_text);
} else {
// No room for even the field name, skip
fields.push('...');
}
break;
}
}
}
return fields.join(', ');
}
data.forEach(function(d) {
// more properties
result = {
label: d.name,
value: d.name,
description: make_description(d.content, d.name),
route: ['Form', d.doctype, d.name],
}
if(d.image || d.image === null){
result.image = d.image;
}
set = get_existing_set(d.doctype);
if(set) {
set.results.push(result);
} else {
set = {
title: d.doctype,
results: [result],
fetch_type: "Global"
}
results_sets.push(set);
}
});
return results_sets;
}
return new Promise(function(resolve, reject) {
frappe.call({
method: "frappe.utils.global_search.search",
args: {
text: keywords,
start: start,
limit: limit,
doctype: doctype
},
callback: function(r) {
if(r.message) {
resolve(get_results_sets(r.message));
} else {
resolve([]);
}
}
});
});
},
get_help_results: function(keywords) {
function get_results_set(data) {
var result;
var set = {
title: "Help",
fetch_type: "Help",
results: []
}
data.forEach(function(d) {
// more properties
result = {
label: d[0],
value: d[0],
description: d[1],
data_path: d[2],
onclick: function() {
}
}
set.results.push(result);
});
return [set];
}
return new Promise(function(resolve, reject) {
frappe.call({
method: "frappe.utils.help.get_help",
args: {
text: keywords
},
callback: function(r) {
if(r.message) {
resolve(get_results_set(r.message));
} else {
resolve([]);
}
}
});
});
},
get_nav_results: function(keywords) {
function sort_uniques(array) {
var routes = [], out = [];
array.forEach(function(d) {
if(d.route) {
if(d.route[0] === "List" && d.route[2]) {
d.route.splice(2);
}
var str_route = d.route.join('/');
if(routes.indexOf(str_route) === -1) {
routes.push(str_route);
out.push(d);
} else {
var old = routes.indexOf(str_route);
if(out[old].index > d.index) {
out[old] = d;
}
}
} else {
out.push(d);
}
});
return out.sort(function(a, b) {
return b.index - a.index;
});
}
var lists = [], setup = [];
},
get_global_results: function (keywords, start, limit, doctype = "") {
var me = this;
function get_results_sets(data) {
var results_sets = [], result, set;
function get_existing_set (doctype) {
return results_sets.find(function(set) {
return set.title === doctype;
});
}
function make_description(content, doc_name) {
var parts = content.split(" ||| ");
var result_max_length = 300;
var field_length = 120;
var fields = [];
var result_current_length = 0;
var field_text = "";
for(var i = 0; i < parts.length; i++) {
var part = parts[i];
if(part.toLowerCase().indexOf(keywords) !== -1) {
// If the field contains the keyword
if(part.indexOf(' &&& ') !== -1) {
var colon_index = part.indexOf(' &&& ');
var field_value = part.slice(colon_index + 5);
} else {
var colon_index = part.indexOf(' : ');
var field_value = part.slice(colon_index + 3);
}
if(field_value.length > field_length) {
// If field value exceeds field_length, find the keyword in it
// and trim field value by half the field_length at both sides
// ellipsify if necessary
var field_data = "";
var index = field_value.indexOf(keywords);
field_data += index < field_length/2 ? field_value.slice(0, index)
: '...' + field_value.slice(index - field_length/2, index)
field_data += field_value.slice(index, index + field_length/2);
field_data += index + field_length/2 < field_value.length ? "..." : "";
field_value = field_data;
}
var field_name = part.slice(0, colon_index);
// Find remaining result_length and add field length to result_current_length
var remaining_length = result_max_length - result_current_length;
result_current_length += field_name.length + field_value.length + 2;
if(result_current_length < result_max_length) {
// We have room, push the entire field
field_text = '<span class="field-name text-muted">' +
me.bolden_match_part(field_name, keywords) + ': </span> ' +
me.bolden_match_part(field_value, keywords);
if(fields.indexOf(field_text) === -1 && doc_name !== field_value) {
fields.push(field_text);
}
} else {
// Not enough room
if(field_name.length < remaining_length){
// Ellipsify (trim at word end) and push
remaining_length -= field_name.length;
field_text = '<span class="field-name text-muted">' +
me.bolden_match_part(field_name, keywords) + ': </span> ';
field_value = field_value.slice(0, remaining_length);
field_value = field_value.slice(0, field_value.lastIndexOf(' ')) + ' ...';
field_text += me.bolden_match_part(field_value, keywords);
fields.push(field_text);
} else {
// No room for even the field name, skip
fields.push('...');
}
break;
}
}
}
return fields.join(', ');
}
data.forEach(function(d) {
// more properties
result = {
label: d.name,
value: d.name,
description: make_description(d.content, d.name),
route: ['Form', d.doctype, d.name],
}
if(d.image || d.image === null){
result.image = d.image;
}
set = get_existing_set(d.doctype);
if(set) {
set.results.push(result);
} else {
set = {
title: d.doctype,
results: [result],
fetch_type: "Global"
}
results_sets.push(set);
}
});
return results_sets;
}
return new Promise(function(resolve, reject) {
frappe.call({
method: "frappe.utils.global_search.search",
args: {
text: keywords,
start: start,
limit: limit,
doctype: doctype
},
callback: function(r) {
if(r.message) {
resolve(get_results_sets(r.message));
} else {
resolve([]);
}
}
});
});
},
get_help_results: function(keywords) {
function get_results_set(data) {
var result;
var set = {
title: "Help",
fetch_type: "Help",
results: []
}
data.forEach(function(d) {
// more properties
result = {
label: d[0],
value: d[0],
description: d[1],
data_path: d[2],
onclick: function() {
}
}
set.results.push(result);
});
return [set];
}
return new Promise(function(resolve, reject) {
frappe.call({
method: "frappe.utils.help.get_help",
args: {
text: keywords
},
callback: function(r) {
if(r.message) {
resolve(get_results_set(r.message));
} else {
resolve([]);
}
}
});
});
},
get_nav_results: function(keywords) {
function sort_uniques(array) {
var routes = [], out = [];
array.forEach(function(d) {
if(d.route) {
if(d.route[0] === "List" && d.route[2]) {
d.route.splice(2);
}
var str_route = d.route.join('/');
if(routes.indexOf(str_route) === -1) {
routes.push(str_route);
out.push(d);
} else {
var old = routes.indexOf(str_route);
if(out[old].index > d.index) {
out[old] = d;
}
}
} else {
out.push(d);
}
});
return out.sort(function(a, b) {
return b.index - a.index;
});
}
var lists = [], setup = [];
var all_doctypes = sort_uniques(this.get_doctypes(keywords));
all_doctypes.forEach(function(d) {
if(d.type === "") {
@@ -464,37 +464,37 @@ frappe.search.utils = {
lists.push(d);
}
});
var in_keyword = keywords.split(" in ")[0];
var in_keyword = keywords.split(" in ")[0];
return [
{title: "Recents", fetch_type: "Nav", results: sort_uniques(this.get_recent_pages(keywords))},
{title: "Create a new ...", fetch_type: "Nav", results: sort_uniques(this.get_creatables(keywords))},
{title: "Find '" + in_keyword + "' in ... ", fetch_type: "Nav", results: sort_uniques(this.get_search_in_list(keywords))},
{title: "Lists", fetch_type: "Nav", results: lists},
{title: "Recents", fetch_type: "Nav", results: sort_uniques(this.get_recent_pages(keywords))},
{title: "Create a new ...", fetch_type: "Nav", results: sort_uniques(this.get_creatables(keywords))},
{title: "Find '" + in_keyword + "' in ... ", fetch_type: "Nav", results: sort_uniques(this.get_search_in_list(keywords))},
{title: "Lists", fetch_type: "Nav", results: lists},
{title: "Reports", fetch_type: "Nav", results: sort_uniques(this.get_reports(keywords))},
{title: "Administration", fetch_type: "Nav", results: sort_uniques(this.get_pages(keywords))},
{title: "Administration", fetch_type: "Nav", results: sort_uniques(this.get_pages(keywords))},
{title: "Modules", fetch_type: "Nav", results: sort_uniques(this.get_modules(keywords))},
{title: "Setup", fetch_type: "Nav", results: setup},
]
},
{title: "Setup", fetch_type: "Nav", results: setup},
]
},

fuzzy_search: function(keywords, _item) {
// Returns 10 for case-perfect contain, 0 for not found
// 9 for perfect contain,
// 0 - 6 for fuzzy contain
fuzzy_search: function(keywords, _item) {
// Returns 10 for case-perfect contain, 0 for not found
// 9 for perfect contain,
// 0 - 6 for fuzzy contain

// **Specific use-case step**
item = __(_item || '').replace(/-/g, " ");
// **Specific use-case step**
var item = __(_item || '').replace(/-/g, " ");

var ilen = item.length;
var klen = keywords.length;
var length_ratio = klen/ilen;
var max_skips = 3, max_mismatch_len = 2;
var length_ratio = klen/ilen;
var max_skips = 3, max_mismatch_len = 2;

if (klen > ilen) { return 0; }

if(keywords === item || item.toLowerCase().indexOf(keywords) === 0) {
return 10 + length_ratio;
}
if(keywords === item || item.toLowerCase().indexOf(keywords) === 0) {
return 10 + length_ratio;
}

if (item.indexOf(keywords) !== -1 && keywords !== keywords.toLowerCase()) {
return 9 + length_ratio;
@@ -507,11 +507,11 @@ frappe.search.utils = {
return 8 + length_ratio;
}

var skips = 0, mismatches = 0;
var skips = 0, mismatches = 0;
outer: for (var i = 0, j = 0; i < klen; i++) {
if(mismatches !== 0) skips++;
if(skips > max_skips) return 0;
var k_ch = keywords.charCodeAt(i);
var k_ch = keywords.charCodeAt(i);
mismatches = 0;
while (j < ilen) {
if (item.charCodeAt(j++) === k_ch) {
@@ -522,49 +522,92 @@ frappe.search.utils = {
return 0;
}

// Since indexOf didn't pass, there will be atleast 1 skip
// hence no divide by zero, but just to be safe
if((skips + mismatches) > 0) {
return (5 + length_ratio)/(skips + mismatches);
} else {
return 0;
}
// Since indexOf didn't pass, there will be atleast 1 skip
// hence no divide by zero, but just to be safe
if((skips + mismatches) > 0) {
return (5 + length_ratio)/(skips + mismatches);
} else {
return 0;
}
},

bolden_match_part: function(str, subseq) {
bolden_match_part: function(str, subseq) {
var rendered = "";
if(this.fuzzy_search(subseq, str) === 0) {
return str;
} else if(this.fuzzy_search(subseq, str) > 6) {
var regEx = new RegExp("("+ subseq +")", "ig");
return str.replace(regEx, '<b>$1</b>');
} else {
var str_orig = str;
var str = str.toLowerCase();
var str_len = str.length;
var subseq = subseq.toLowerCase();

outer: for(var i = 0, j = 0; i < subseq.length; i++) {
var sub_ch = subseq.charCodeAt(i);
while(j < str_len) {
if(str.charCodeAt(j) === sub_ch) {
var str_char = str_orig.charAt(j);
if(str_char === str_char.toLowerCase()) {
rendered += '<b>' + subseq.charAt(i) + '</b>';
} else {
rendered += '<b>' + subseq.charAt(i).toUpperCase() + '</b>';
}
j++;
continue outer;
}
rendered += str_orig.charAt(j);
j++;
}
return str_orig;
}
rendered += str_orig.slice(j);
return rendered;
}

},
<<<<<<< HEAD
if(this.fuzzy_search(subseq, str) === 0) {
return str;
} else if(this.fuzzy_search(subseq, str) > 6) {
var regEx = new RegExp("("+ subseq +")", "ig");
return str.replace(regEx, '<b>$1</b>');
} else {
var str_orig = str;
var str = str.toLowerCase();
var str_len = str.length;
var subseq = subseq.toLowerCase();

outer: for(var i = 0, j = 0; i < subseq.length; i++) {
var sub_ch = subseq.charCodeAt(i);
while(j < str_len) {
if(str.charCodeAt(j) === sub_ch) {
var str_char = str_orig.charAt(j);
if(str_char === str_char.toLowerCase()) {
rendered += '<b>' + subseq.charAt(i) + '</b>';
} else {
rendered += '<b>' + subseq.charAt(i).toUpperCase() + '</b>';
}
j++;
continue outer;
}
rendered += str_orig.charAt(j);
j++;
}
return str_orig;
}
rendered += str_orig.slice(j);
return rendered;
}

},
}
=======
if(this.fuzzy_search(subseq, str) === 0) {
return str;
} else if(this.fuzzy_search(subseq, str) > 6) {
var regEx = new RegExp("("+ subseq +")", "ig");
return str.replace(regEx, '<b>$1</b>');
} else {
var str_orig = str;
var str = str.toLowerCase();
var str_len = str.length;
var subseq = subseq.toLowerCase();

outer: for(var i = 0, j = 0; i < subseq.length; i++) {
var sub_ch = subseq.charCodeAt(i);
while(j < str_len) {
if(str.charCodeAt(j) === sub_ch) {
var str_char = str_orig.charAt(j);
if(str_char === str_char.toLowerCase()) {
rendered += '<b>' + subseq.charAt(i) + '</b>';
} else {
rendered += '<b>' + subseq.charAt(i).toUpperCase() + '</b>';
}
j++;
continue outer;
}
rendered += str_orig.charAt(j);
j++;
}
return str_orig;
}
rendered += str_orig.slice(j);
return rendered;
}

},

unscrub_and_titlecase: function(str) {
return __(str || '').replace(/-|_/g, " ").replace(/\w*/g,
function(keywords){return keywords.charAt(0).toUpperCase() + keywords.substr(1).toLowerCase();});
},
}
>>>>>>> Remove all implicit global variables

+ 3
- 3
frappe/public/js/frappe/ui/toolbar/toolbar.js Wyświetl plik

@@ -162,7 +162,7 @@ frappe.ui.toolbar.Toolbar = Class.extend({

function show_results(e) {
//edit links
href = e.target.href;
var href = e.target.href;
if(href.indexOf('blob') > 0) {
window.open(href, '_blank');
}
@@ -220,7 +220,7 @@ frappe.ui.toolbar.clear_cache = function() {
frappe.assets.clear_local_storage();
$c('frappe.sessions.clear',{},function(r,rt){
if(!r.exc) {
show_alert(r.message);
frappe.show_alert(r.message);
location.reload(true);
}
});
@@ -228,7 +228,7 @@ frappe.ui.toolbar.clear_cache = function() {
}

frappe.ui.toolbar.download_backup = function() {
msgprint(__("Your download is being built, this may take a few moments..."));
frappe.msgprint(__("Your download is being built, this may take a few moments..."));
$c('frappe.utils.backups.get_backup',{},function(r,rt) {});
return false;
}


+ 1
- 1
frappe/public/js/frappe/ui/tree.js Wyświetl plik

@@ -231,7 +231,7 @@ frappe.ui.TreeNode = Class.extend({
},
load: function(callback) {
var node = this;
args = $.extend(this.tree.args || {}, {
var args = $.extend(this.tree.args || {}, {
parent: this.data.value
});



+ 6
- 6
frappe/public/js/frappe/upload.js Wyświetl plik

@@ -219,7 +219,7 @@ frappe.upload = {
if(opts.on_no_attach) {
opts.on_no_attach();
} else {
msgprint(__("Please attach a file or set a URL"));
frappe.msgprint(__("Please attach a file or set a URL"));
}
return;
}
@@ -267,21 +267,21 @@ frappe.upload = {
args.filename = fileobj.name.split(' ').join('_');
if(opts.options && opts.options.toLowerCase()=="image") {
if(!frappe.utils.is_image_file(args.filename)) {
msgprint(__("Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed"));
frappe.msgprint(__("Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed"));
return;
}
}

if((opts.max_width || opts.max_height) && frappe.utils.is_image_file(args.filename)) {
frappe.utils.resize_image(freader, function(_dataurl) {
dataurl = _dataurl;
var dataurl = _dataurl;
args.filedata = _dataurl.split(",")[1];
args.file_size = Math.round(args.filedata.length * 3 / 4);
console.log("resized!")
frappe.upload._upload_file(fileobj, args, opts, dataurl);
})
} else {
dataurl = freader.result;
var dataurl = freader.result;
args.filedata = freader.result.split(",")[1];
args.file_size = fileobj.size;
frappe.upload._upload_file(fileobj, args, opts, dataurl);
@@ -292,11 +292,11 @@ frappe.upload = {
},

upload_to_server: function(fileobj, args, opts, dataurl) {
// var msgbox = msgprint(__("Uploading..."));
// var msgbox = frappe.msgprint(__("Uploading..."));
if(opts.start) {
opts.start();
}
ajax_args = {
var ajax_args = {
"method": "uploadfile",
args: args,
callback: function(r) {


+ 2
- 2
frappe/public/js/frappe/views/calendar/calendar.js Wyświetl plik

@@ -264,7 +264,7 @@ frappe.views.Calendar = Class.extend({
args: me.get_update_args(event),
callback: function(r) {
if(r.exc) {
show_alert(__("Unable to update event"));
frappe.show_alert(__("Unable to update event"));
revertFunc();
}
},
@@ -346,7 +346,7 @@ frappe.views.Calendar = Class.extend({
$.each(frappe.route_options, function(k, value) {
if(me.page.fields_dict[k]) {
me.page.fields_dict[k].set_input(value);
};
}
})
frappe.route_options = null;
me.refresh();


+ 14
- 14
frappe/public/js/frappe/views/communication.js Wyświetl plik

@@ -85,8 +85,8 @@ frappe.views.CommunicationComposer = Class.extend({
];

// add from if user has access to multiple email accounts
email_accounts = frappe.boot.email_accounts.filter(function(account, idx){
return !inList(["All Accounts", "Sent", "Spam", "Trash"], account.email_account) &&
var email_accounts = frappe.boot.email_accounts.filter(function(account, idx){
return !in_list(["All Accounts", "Sent", "Spam", "Trash"], account.email_account) &&
account.enable_outgoing
})
if(frappe.boot.email_accounts && email_accounts.length > 1) {
@@ -168,7 +168,7 @@ frappe.views.CommunicationComposer = Class.extend({
var content = content_field.get_value() || "";
var subject = subject_field.get_value() || "";

parts = content.split('<!-- salutation-ends -->');
var parts = content.split('<!-- salutation-ends -->');

if(parts.length===2) {
content = [reply.message, "<br>", parts[1]];
@@ -318,8 +318,8 @@ frappe.views.CommunicationComposer = Class.extend({
if(me.frm) {
args = {
args: (me.frm.attachments.get_args
? me.frm.attachments.get_args()
: { from_form: 1,folder:"Home/Attachments" }),
? me.frm.attachments.get_args()
: { from_form: 1,folder:"Home/Attachments" }),
callback: function (attachment, r) {
me.frm.attachments.attachment_uploaded(attachment, r)
},
@@ -442,10 +442,10 @@ frappe.views.CommunicationComposer = Class.extend({
send_email: function(btn, form_values, selected_attachments, print_html, print_format) {
var me = this;

if((form_values.send_email || form_values.communication_medium === "Email") && !form_values.recipients){
msgprint(__("Enter Email Recipient(s)"));
return;
}
if((form_values.send_email || form_values.communication_medium === "Email") && !form_values.recipients) {
frappe.msgprint(__("Enter Email Recipient(s)"));
return;
}

if(!form_values.attach_document_print) {
print_html = null;
@@ -454,13 +454,13 @@ frappe.views.CommunicationComposer = Class.extend({

if(form_values.send_email) {
if(cur_frm && !frappe.model.can_email(me.doc.doctype, cur_frm)) {
msgprint(__("You are not allowed to send emails related to this document"));
frappe.msgprint(__("You are not allowed to send emails related to this document"));
return;
}

form_values.communication_medium = "Email";
form_values.sent_or_received = "Sent";
};
}

return frappe.call({
method:"frappe.core.doctype.communication.email.make",
@@ -489,7 +489,7 @@ frappe.views.CommunicationComposer = Class.extend({
frappe.utils.play_sound("email");

if(form_values.send_email && r.message["emails_not_sent_to"]) {
msgprint( __("Email not sent to {0} (unsubscribed / disabled)",
frappe.msgprint(__("Email not sent to {0} (unsubscribed / disabled)",
[ frappe.utils.escape_html(r.message["emails_not_sent_to"]) ]) );
}

@@ -504,7 +504,7 @@ frappe.views.CommunicationComposer = Class.extend({
cur_frm.reload_doc();
}
} else {
msgprint(__("There were errors while sending email. Please try again."));
frappe.msgprint(__("There were errors while sending email. Please try again."));
}
}
});
@@ -554,7 +554,7 @@ frappe.views.CommunicationComposer = Class.extend({
setup_awesomplete: function() {
var me = this;
[this.dialog.fields_dict.recipients.input,
this.dialog.fields_dict.cc.input]
this.dialog.fields_dict.cc.input]
.map(function(input) {
me.setup_awesomplete_for_input(input);
});


+ 2
- 2
frappe/public/js/frappe/views/gantt/gantt_view.js Wyświetl plik

@@ -181,7 +181,7 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({
},
callback: function() {
me.gantt.updating_task = false;
show_alert({message:__("Saved"), indicator: 'green'}, 1);
frappe.show_alert({message:__("Saved"), indicator: 'green'}, 1);
}
});
},
@@ -198,7 +198,7 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({
} else {
// reset gantt state
this.gantt.change_view_mode(this.gantt_view_mode);
show_alert({message: __("Not permitted"), indicator: 'red'}, 1);
frappe.show_alert({message: __("Not permitted"), indicator: 'red'}, 1);
return false;
}
},


+ 1
- 1
frappe/public/js/frappe/views/image/image_view.js Wyświetl plik

@@ -169,7 +169,7 @@ frappe.views.GalleryView = Class.extend({
freeze_message: "Fetching Images.."
}).then(function(r) {
if (!r.message) {
msgprint("No Images found")
frappe.msgprint("No Images found")
} else {
// filter image files from other
var images = r.message.filter(function(image) {


+ 7
- 5
frappe/public/js/frappe/views/inbox/inbox_view.js Wyświetl plik

@@ -20,7 +20,7 @@ frappe.views.InboxView = frappe.views.ListRenderer.extend({
render_inbox_view: function() {
var html = ""

email_account = this.get_current_email_account()
var email_account = this.get_current_email_account()
if(email_account)
html = this.emails.map(this.render_email_row.bind(this)).join("");
else
@@ -78,7 +78,7 @@ frappe.views.InboxView = frappe.views.ListRenderer.extend({
["Communication", "email_status", "not in", "Spam,Trash", true],
])
}
else if (inList(["Spam", "Trash"], email_account)) {
else if (in_list(["Spam", "Trash"], email_account)) {
filters = default_filters.concat([
["Communication", "email_status", "=", email_account, true],
["Communication", "email_account", "in", frappe.boot.all_accounts, true]
@@ -115,6 +115,7 @@ frappe.views.InboxView = frappe.views.ListRenderer.extend({
get_current_email_account: function() {
var route = frappe.get_route();
if(!route[3] && frappe.boot.email_accounts.length) {
var email_account;
if(frappe.boot.email_accounts[0].email_id == "All Accounts") {
email_account = "All Accounts"
} else {
@@ -130,8 +131,9 @@ frappe.views.InboxView = frappe.views.ListRenderer.extend({
},
make_no_result: function () {
var no_result_message = ""
email_account = this.get_current_email_account();
if (inList(["Spam", "Trash"], email_account)) {
var email_account = this.get_current_email_account();
var args;
if (in_list(["Spam", "Trash"], email_account)) {
return __("No {0} mail", [email_account])
} else if(!email_account && !frappe.boot.email_accounts.length) {
// email account is not configured
@@ -159,7 +161,7 @@ frappe.views.InboxView = frappe.views.ListRenderer.extend({
doc: {}
})
} else {
frappe.route_options = { 'email_id': user_email }
frappe.route_options = { 'email_id': frappe.session.user_email }
frappe.new_doc(this.no_result_doctype)
}
}


+ 2
- 33
frappe/public/js/frappe/views/kanban/kanban_board.js Wyświetl plik

@@ -119,7 +119,7 @@ frappe.provide("frappe.views");
}).then(function(r) {
saving_filters = false;
updater.set({ filters_modified: false });
show_alert({
frappe.show_alert({
message: __('Filters saved'),
indicator: 'green'
}, 0.5);
@@ -819,37 +819,6 @@ frappe.provide("frappe.views");
})
}

function edit_card_title_old() {

self.$card.find('.kanban-card-edit').on('click', function (e) {
e.stopPropagation();
$edit_card_area.show();
$kanban_card_area.hide();
$textarea.focus();
});

$textarea.on('blur', function () {
$edit_card_area.hide();
$kanban_card_area.show();
});

$textarea.keydown(function (e) {
if (e.which === 13) {
e.preventDefault();
var new_title = $textarea.val();
if (card.title === new_title) {
return;
}
get_doc().then(function () {
var tf = store.getState().card_meta.title_field.fieldname;
var doc = card.doc;
doc[tf] = new_title;
fluxify.doAction('update_doc', doc, card);
})
}
})
}

init();
}

@@ -1020,7 +989,7 @@ frappe.provide("frappe.views");
},
callback: function (r) {
frappe.model.clear_doc(doc.doctype, doc.name);
show_alert({ message: __("Saved"), indicator: 'green' }, 1);
frappe.show_alert({ message: __("Saved"), indicator: 'green' }, 1);
}
});
}


+ 1
- 1
frappe/public/js/frappe/views/pageview.js Wyświetl plik

@@ -6,7 +6,7 @@ frappe.provide("frappe.standard_pages");

frappe.views.pageview = {
with_page: function(name, callback) {
if(in_list(keys(frappe.standard_pages), name)) {
if(in_list(Object.keys(frappe.standard_pages), name)) {
if(!frappe.pages[name]) {
frappe.standard_pages[name]();
}


+ 25
- 25
frappe/public/js/frappe/views/reports/grid_report.js Wyświetl plik

@@ -7,7 +7,7 @@ $.extend(frappe.report_dump, {
data: {},
last_modified: {},
with_data: function(doctypes, callback) {
var pre_loaded = keys(frappe.report_dump.last_modified);
var pre_loaded = Object.keys(frappe.report_dump.last_modified);
return frappe.call({
method: "frappe.desk.report_dump.get_data",
type: "GET",
@@ -148,10 +148,10 @@ frappe.views.GridReport = Class.extend({
var me = this;
$.each(me.filter_inputs, function(i, v) {
var opts = v.get(0).opts;
if(opts.fieldtype == "Select" && inList(me.doctypes, opts.link)) {
if(opts.fieldtype == "Select" && in_list(me.doctypes, opts.link)) {
$(v).add_options($.map(frappe.report_dump.data[opts.link],
function(d) { return d.name; }));
} else if(opts.fieldtype == "Link" && inList(me.doctypes, opts.link)) {
} else if(opts.fieldtype == "Link" && in_list(me.doctypes, opts.link)) {
opts.list = $.map(frappe.report_dump.data[opts.link],
function(d) { return d.name; });
me.set_autocomplete(v, opts.list);
@@ -201,7 +201,7 @@ frappe.views.GridReport = Class.extend({
filters.val(value);
}
} else {
msgprint(__("Invalid Filter: {0}", [key]))
frappe.msgprint(__("Invalid Filter: {0}", [key]))
}
},
set_autocomplete: function($filter, list) {
@@ -219,8 +219,8 @@ frappe.views.GridReport = Class.extend({
var me = this;
$.each(this.filter_inputs, function(key, filter) {
var opts = filter.get(0).opts;
if(sys_defaults[key]) {
filter.val(sys_defaults[key]);
if(frappe.sys_defaults[key]) {
filter.val(frappe.sys_defaults[key]);
} else if(opts.fieldtype=='Select') {
filter.get(0).selectedIndex = 0;
} else if(opts.fieldtype=='Data') {
@@ -235,8 +235,8 @@ frappe.views.GridReport = Class.extend({

set_default_values: function() {
var values = {
from_date: dateutil.str_to_user(sys_defaults.year_start_date),
to_date: dateutil.str_to_user(sys_defaults.year_end_date)
from_date: frappe.datetime.str_to_user(frappe.sys_defaults.year_start_date),
to_date: frappe.datetime.str_to_user(frappe.sys_defaults.year_end_date)
}

var me = this;
@@ -298,7 +298,7 @@ frappe.views.GridReport = Class.extend({
} else if(opts.fieldtype!='Button') {
me[opts.fieldname] = f.val();
if(opts.fieldtype=="Date") {
me[opts.fieldname] = dateutil.user_to_str(me[opts.fieldname]);
me[opts.fieldname] = frappe.datetime.user_to_str(me[opts.fieldname]);
} else if (opts.fieldtype == "Select") {
me[opts.fieldname+'_default'] = opts.default_value;
}
@@ -306,7 +306,7 @@ frappe.views.GridReport = Class.extend({
});

if(this.filter_inputs.from_date && this.filter_inputs.to_date && (this.to_date < this.from_date)) {
msgprint(__("From Date must be before To Date"));
frappe.msgprint(__("From Date must be before To Date"));
return;
}

@@ -359,7 +359,7 @@ frappe.views.GridReport = Class.extend({
this.round_off_data();
this.prepare_data_view();
// chart might need prepared data
show_alert("Updated", 2);
frappe.show_alert("Updated", 2);
this.render();
this.setup_chart && this.setup_chart();
},
@@ -458,7 +458,7 @@ frappe.views.GridReport = Class.extend({
var filters = this.filter_inputs;
if(item._show) return true;

for (i in filters) {
for (var i in filters) {
if(!this.apply_filter(item, i)) {
return false;
}
@@ -502,7 +502,7 @@ frappe.views.GridReport = Class.extend({
return this[fieldname]==this[fieldname + "_default"];
},
date_formatter: function(row, cell, value, columnDef, dataContext) {
return dateutil.str_to_user(value);
return frappe.datetime.str_to_user(value);
},
currency_formatter: function(row, cell, value, columnDef, dataContext) {
return repl('<div style="text-align: right; %(_style)s">%(value)s</div>', {
@@ -586,9 +586,9 @@ frappe.views.GridReport = Class.extend({

var me = this;
var range = this.filter_inputs.range.val();
this.from_date = dateutil.user_to_str(this.filter_inputs.from_date.val());
this.to_date = dateutil.user_to_str(this.filter_inputs.to_date.val());
var date_diff = dateutil.get_diff(this.to_date, this.from_date);
this.from_date = frappe.datetime.user_to_str(this.filter_inputs.from_date.val());
this.to_date = frappe.datetime.user_to_str(this.filter_inputs.to_date.val());
var date_diff = frappe.datetime.get_diff(this.to_date, this.from_date);

me.column_map = {};
me.last_date = null;
@@ -596,7 +596,7 @@ frappe.views.GridReport = Class.extend({
var add_column = function(date) {
me.columns.push({
id: date,
name: dateutil.str_to_user(date),
name: frappe.datetime.str_to_user(date),
field: date,
formatter: me.currency_formatter,
width: 100
@@ -606,7 +606,7 @@ frappe.views.GridReport = Class.extend({
var build_columns = function(condition) {
// add column for each date range
for(var i=0; i <= date_diff; i++) {
var date = dateutil.add_days(me.from_date, i);
var date = frappe.datetime.add_days(me.from_date, i);
if(!condition) condition = function() { return true; }

if(condition(date)) add_column(date);
@@ -624,17 +624,17 @@ frappe.views.GridReport = Class.extend({
} else if(range=='Weekly') {
build_columns(function(date) {
if(!me.last_date) return true;
return !(dateutil.get_diff(date, me.from_date) % 7)
return !(frappe.datetime.get_diff(date, me.from_date) % 7)
});
} else if(range=='Monthly') {
build_columns(function(date) {
if(!me.last_date) return true;
return dateutil.str_to_obj(me.last_date).getMonth() != dateutil.str_to_obj(date).getMonth()
return frappe.datetime.str_to_obj(me.last_date).getMonth() != frappe.datetime.str_to_obj(date).getMonth()
});
} else if(range=='Quarterly') {
build_columns(function(date) {
if(!me.last_date) return true;
return dateutil.str_to_obj(date).getDate()==1 && in_list([0,3,6,9], dateutil.str_to_obj(date).getMonth())
return frappe.datetime.str_to_obj(date).getDate()==1 && in_list([0,3,6,9], frappe.datetime.str_to_obj(date).getMonth())
});
} else if(range=='Yearly') {
build_columns(function(date) {
@@ -649,8 +649,8 @@ frappe.views.GridReport = Class.extend({
// set label as last date of period
$.each(this.columns, function(i, col) {
col.name = me.columns[i+1]
? dateutil.str_to_user(dateutil.add_days(me.columns[i+1].id, -1))
: dateutil.str_to_user(me.to_date);
? frappe.datetime.str_to_user(frappe.datetime.add_days(me.columns[i+1].id, -1))
: frappe.datetime.str_to_user(me.to_date);
});
},
trigger_refresh_on_change: function(filters) {
@@ -815,7 +815,7 @@ frappe.views.TreeGridReport = frappe.views.GridReportWithPlot.extend({
if(group_ids.indexOf(item.name)==-1) {
item_group_map[parent].push(item);
} else {
msgprint(__("Ignoring Item {0}, because a group exists with the same name!", [item.name.bold()]));
frappe.msgprint(__("Ignoring Item {0}, because a group exists with the same name!", [item.name.bold()]));
}
});

@@ -844,7 +844,7 @@ frappe.views.TreeGridReport = frappe.views.GridReportWithPlot.extend({
},

export: function() {
var msgbox = msgprint($.format('<p>{0}</p>\
var msgbox = frappe.msgprint($.format('<p>{0}</p>\
<p><input type="checkbox" name="with_groups" checked="checked"> {1}</p>\
<p><input type="checkbox" name="with_ledgers" checked="checked"> {2}</p>\
<p><button class="btn btn-primary"> {3}</button>', [


+ 20
- 20
frappe/public/js/frappe/views/reports/query_report.js Wyświetl plik

@@ -33,10 +33,10 @@ frappe.views.QueryReport = Class.extend({
},
slickgrid_options: {
enableColumnReorder: false,
showHeaderRow: true,
headerRowHeight: 30,
explicitInitialization: true,
multiColumnSort: true
showHeaderRow: true,
headerRowHeight: 30,
explicitInitialization: true,
multiColumnSort: true
},
make: function() {
var me = this;
@@ -69,7 +69,7 @@ frappe.views.QueryReport = Class.extend({
// Edit
this.page.add_menu_item(__('Edit'), function() {
if(!frappe.user.is_report_manager()) {
msgprint(__("You are not allowed to create / edit reports"));
frappe.msgprint(__("You are not allowed to create / edit reports"));
return false;
}
frappe.set_route("Form", "Report", me.report_name);
@@ -181,7 +181,7 @@ frappe.views.QueryReport = Class.extend({
},
print_report: function() {
if(!frappe.model.can_print(this.report_doc.ref_doctype)) {
msgprint(__("You are not allowed to print this report"));
frappe.msgprint(__("You are not allowed to print this report"));
return false;
}

@@ -211,7 +211,7 @@ frappe.views.QueryReport = Class.extend({
var print_css = frappe.boot.print_css;

if(!frappe.model.can_print(this.report_doc.ref_doctype)) {
msgprint(__("You are not allowed to make PDF for this report"));
frappe.msgprint(__("You are not allowed to make PDF for this report"));
return false;
}

@@ -277,13 +277,13 @@ frappe.views.QueryReport = Class.extend({
xhr.responseType = "arraybuffer";

xhr.onload = function(success) {
if (this.status === 200) {
var blob = new Blob([success.currentTarget.response], {type: "application/pdf"});
var objectUrl = URL.createObjectURL(blob);
if (this.status === 200) {
var blob = new Blob([success.currentTarget.response], {type: "application/pdf"});
var objectUrl = URL.createObjectURL(blob);

//Open report in a new window
window.open(objectUrl);
}
//Open report in a new window
window.open(objectUrl);
}
};
xhr.send(formData);
},
@@ -563,7 +563,7 @@ frappe.views.QueryReport = Class.extend({
var newrow = {};
for(var i=1, j=this.columns.length; i<j; i++) {
newrow[this.columns[i].field] = row[i-1];
};
}
}
newrow._id = row_idx + 1;
newrow.id = newrow.name ? newrow.name : ("_" + newrow._id);
@@ -654,7 +654,7 @@ frappe.views.QueryReport = Class.extend({
return true;
} catch (e) {
if (e.message.indexOf("[parent_name] is undefined")!==-1) {
msgprint(__("Unable to display this tree report, due to missing data. Most likely, it is being filtered out due to permissions."));
frappe.msgprint(__("Unable to display this tree report, due to missing data. Most likely, it is being filtered out due to permissions."));
}

throw e;
@@ -704,7 +704,7 @@ frappe.views.QueryReport = Class.extend({
// non strings
if(filter.indexOf(":")==-1) {
if(columnDef.df.fieldtype=="Date") {
filter = dateutil.user_to_str(filter);
filter = frappe.datetime.user_to_str(filter);
}

if(in_list(["Float", "Currency", "Int"], columnDef.df.fieldtype)) {
@@ -717,8 +717,8 @@ frappe.views.QueryReport = Class.extend({
// range
filter = filter.split(":");
if(columnDef.df.fieldtype=="Date") {
filter[0] = dateutil.user_to_str(filter[0]);
filter[1] = dateutil.user_to_str(filter[1]);
filter[0] = frappe.datetime.user_to_str(filter[0]);
filter[1] = frappe.datetime.user_to_str(filter[1]);
}

if(in_list(["Float", "Currency", "Int"], columnDef.df.fieldtype)) {
@@ -782,7 +782,7 @@ frappe.views.QueryReport = Class.extend({
me.dataView.setItems(me.data);
me.dataView.endUpdate();
me.dataView.refresh();
});
});
},
setup_tree: function() {
// set these in frappe.query_reports[report_name]
@@ -817,7 +817,7 @@ frappe.views.QueryReport = Class.extend({
this.title = this.report_name;

if(!frappe.model.can_export(this.report_doc.ref_doctype)) {
msgprint(__("You are not allowed to export this report"));
frappe.msgprint(__("You are not allowed to export this report"));
return false;
}



+ 5
- 5
frappe/public/js/frappe/views/reports/reportview.js Wyświetl plik

@@ -12,7 +12,7 @@ frappe.views.ReportViewPage = Class.extend({
if(!frappe.model.can_get_report(doctype)) {
frappe.show_not_permitted(frappe.get_route_str());
return;
};
}

this.doctype = doctype;
this.docname = docname;
@@ -147,7 +147,7 @@ frappe.views.ReportView = frappe.ui.BaseList.extend({
columns.push(coldef);
}
});
};
}
if(!columns.length) {
var columns = [['name', this.doctype],];
$.each(frappe.meta.docfield_list[this.doctype], function(i, df) {
@@ -708,7 +708,7 @@ frappe.views.ReportView = frappe.ui.BaseList.extend({
}
var export_btn = this.page.add_menu_item(__('Export'), function() {
var args = me.get_args();
selected_items = me.get_checked_items()
var selected_items = me.get_checked_items()
frappe.prompt({fieldtype:"Select", label: __("Select File Type"), fieldname:"file_format_type",
options:"Excel\nCSV", default:"Excel", reqd: 1},
function(data) {
@@ -761,7 +761,7 @@ frappe.views.ReportView = frappe.ui.BaseList.extend({
},
callback: function(r) {
if(r.exc) {
msgprint(__("Report was not saved (there were errors)"));
frappe.msgprint(__("Report was not saved (there were errors)"));
return;
}
if(r.message != me.docname)
@@ -790,7 +790,7 @@ frappe.views.ReportView = frappe.ui.BaseList.extend({
});

this.page.add_menu_item(__("Delete"), function() {
delete_list = $.map(me.get_checked_items(), function(d) { return d.name; });
var delete_list = $.map(me.get_checked_items(), function(d) { return d.name; });
if(!delete_list.length)
return;
if(frappe.confirm(__("This is PERMANENT action and you cannot undo. Continue?"),


+ 1
- 1
frappe/public/js/frappe/views/test_runner.js Wyświetl plik

@@ -14,7 +14,7 @@ frappe.standard_pages["test-runner"] = function() {

var route = frappe.get_route();
if(route.length < 2) {
msgprint(__("To run a test add the module name in the route after '{0}'. For example, {1}", ['test-runner/', '#test-runner/lib/js/frappe/test_app.js']));
frappe.msgprint(__("To run a test add the module name in the route after '{0}'. For example, {1}", ['test-runner/', '#test-runner/lib/js/frappe/test_app.js']));
return;
}



+ 1
- 1
frappe/public/js/frappe/views/treeview.js Wyświetl plik

@@ -14,7 +14,7 @@ frappe.views.TreeFactory = frappe.views.Factory.extend({
};

if (!frappe.treeview_settings[route[1]] && !frappe.meta.get_docfield(route[1], "is_group")) {
msgprint(__("Tree view not available for {0}", [route[1]] ));
frappe.msgprint(__("Tree view not available for {0}", [route[1]] ));
return false;
}
$.extend(options, frappe.treeview_settings[route[1]] || {});


+ 7
- 6
frappe/public/js/legacy/clientscriptAPI.js Wyświetl plik

@@ -161,7 +161,7 @@ _f.Frm.prototype.set_currency_labels = function(fields_list, currency, parentfie
_f.Frm.prototype.field_map = function(fnames, fn) {
if(typeof fnames==='string') {
if(fnames == '*') {
fnames = keys(this.fields_dict);
fnames = Object.keys(this.fields_dict);
} else {
fnames = [fnames];
}
@@ -172,7 +172,7 @@ _f.Frm.prototype.field_map = function(fnames, fn) {
if(field) {
fn(field);
cur_frm.refresh_field(fieldname);
};
}
}
}

@@ -199,7 +199,7 @@ _f.Frm.prototype.set_df_property = function(fieldname, property, value, docname,
if(df && df[property] != value) {
df[property] = value;
refresh_field(fieldname, table_field);
};
}
}

_f.Frm.prototype.toggle_enable = function(fnames, enable) {
@@ -279,7 +279,7 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) {
}
}
} else {
msgprint("Field " + f + " not found.");
frappe.msgprint("Field " + f + " not found.");
throw "frm.set_value";
}
}
@@ -318,7 +318,7 @@ _f.Frm.prototype.call = function(opts, args, callback) {
opts.child = locals[opts.child.doctype][opts.child.name];

var std_field_list = ["doctype"].concat(frappe.model.std_fields_list);
for (key in r.message) {
for (var key in r.message) {
if (std_field_list.indexOf(key)===-1) {
opts.child[key] = r.message[key];
}
@@ -409,6 +409,7 @@ _f.Frm.prototype.has_mapper = function() {

_f.Frm.prototype.set_indicator_formatter = function(fieldname, get_color, get_text) {
// get doctype from parent
var doctype;
if(frappe.meta.docfield_map[this.doctype][fieldname]) {
doctype = this.doctype;
} else {
@@ -472,7 +473,7 @@ _f.Frm.prototype.make_new = function(doctype) {
this.custom_buttons[this.custom_make_buttons[doctype]].trigger('click');
} else {
frappe.model.with_doctype(doctype, function() {
new_doc = frappe.model.get_new_doc(doctype);
var new_doc = frappe.model.get_new_doc(doctype);

// set link fields (if found)
frappe.get_meta(doctype).fields.forEach(function(df) {


+ 1
- 2
frappe/public/js/legacy/datatype.js Wyświetl plik

@@ -17,7 +17,7 @@ function toTitle(str){
var word_in = str.split(" ");
var word_out = [];

for(w in word_in){
for(var w in word_in){
word_out[w] = word_in[w].charAt(0).toUpperCase() + word_in[w].slice(1);
}

@@ -100,7 +100,6 @@ function has_common(list1, list2) {
return false;
}

var inList = in_list; // bc
function add_lists(l1, l2) {
return [].concat(l1).concat(l2);
}


+ 2
- 2
frappe/public/js/legacy/dom.js Wyświetl plik

@@ -66,7 +66,7 @@ function $bg(e,w) { if(e && e.style && w)e.style.backgroundColor = w; }
function $y(ele, s) {
if(ele && s) {
for(var i in s) ele.style[i]=s[i];
};
}
return ele;
}

@@ -86,7 +86,7 @@ function make_table(parent, nr, nc, table_width, widths, cell_style, table_style
c.style.width = widths[ci];
}
if(cell_style) {
for(var s in cell_style) c.style[s] = cell_style[s];
for(var s in cell_style) c.style[s] = cell_style[s];
}
}
}


+ 13
- 13
frappe/public/js/legacy/form.js Wyświetl plik

@@ -60,17 +60,17 @@ _f.Frm = function(doctype, parent, in_form) {
_f.Frm.prototype.check_doctype_conflict = function(docname) {
var me = this;
if(this.doctype=='DocType' && docname=='DocType') {
msgprint(__('Allowing DocType, DocType. Be careful!'))
frappe.msgprint(__('Allowing DocType, DocType. Be careful!'))
} else if(this.doctype=='DocType') {
if (frappe.views.formview[docname] || frappe.pages['List/'+docname]) {
window.location.reload();
// msgprint(__("Cannot open {0} when its instance is open", ['DocType']))
// frappe.msgprint(__("Cannot open {0} when its instance is open", ['DocType']))
// throw 'doctype open conflict'
}
} else {
if (frappe.views.formview.DocType && frappe.views.formview.DocType.frm.opendocs[this.doctype]) {
window.location.reload();
// msgprint(__("Cannot open instance when its {0} is open", ['DocType']))
// frappe.msgprint(__("Cannot open instance when its {0} is open", ['DocType']))
// throw 'doctype open conflict'
}
}
@@ -136,12 +136,12 @@ _f.Frm.prototype.setup_drag_drop = function() {
e.preventDefault();

if(me.doc.__islocal) {
msgprint(__("Please save before attaching."));
frappe.msgprint(__("Please save before attaching."));
throw "attach error";
}

if(me.attachments.max_reached()) {
msgprint(__("Maximum Attachment Limit for this record reached."));
frappe.msgprint(__("Maximum Attachment Limit for this record reached."));
throw "attach error";
}

@@ -173,7 +173,7 @@ _f.Frm.prototype.print_doc = function() {
return;
}
if(!frappe.model.can_print(this.doc.doctype, this)) {
msgprint(__("You are not allowed to print this document"));
frappe.msgprint(__("You are not allowed to print this document"));
return;
}

@@ -189,7 +189,7 @@ _f.Frm.prototype.set_hidden = function(status) {
form_page.toggleClass('hidden', this.hidden);
this.toolbar.refresh();
if(status===true) {
msg = __('Edit {0} properties', [__(this.doctype)]);
var msg = __('Edit {0} properties', [__(this.doctype)]);
this.layout.show_message('<div style="padding-left: 15px; padding-right: 15px;">\
<a class="text-muted" onclick="cur_frm.set_hidden(false)">' + msg + '</a></div>');
} else {
@@ -815,12 +815,12 @@ _f.Frm.prototype.amend_doc = function() {
}
this.validate_form_action("Amend");
var me = this;
var fn = function(newdoc) {
newdoc.amended_from = me.docname;
if(me.fields_dict && me.fields_dict['amendment_date'])
newdoc.amendment_date = dateutil.obj_to_str(new Date());
}
this.copy_doc(fn, 1);
var fn = function(newdoc) {
newdoc.amended_from = me.docname;
if(me.fields_dict && me.fields_dict['amendment_date'])
newdoc.amendment_date = frappe.datetime.obj_to_str(new Date());
}
this.copy_doc(fn, 1);
frappe.utils.play_sound("click");
}



+ 1
- 1
frappe/public/js/legacy/handler.js Wyświetl plik

@@ -20,7 +20,7 @@ function $c_obj(doc, method, arg, callback, no_spinner, freeze_msg, btn) {

if(arg && typeof arg!='string') arg = JSON.stringify(arg);

args = {
var args = {
cmd:'runserverobj',
args: arg,
method: method


+ 1
- 1
frappe/public/js/legacy/layout.js Wyświetl plik

@@ -89,7 +89,7 @@ function LayoutCell(layout, layoutRow, width) {
if(width) { // add '%' if user has forgotten
var w = width + '';
if(w.substr(w.length-2, 2) != 'px') {
if(w.substr(w.length-1, 1) != "%") {width = width + '%'};
if(w.substr(w.length-1, 1) != "%") {width = width + '%'}
}
}



+ 13
- 13
frappe/public/js/legacy/print_format.js Wyświetl plik

@@ -34,7 +34,7 @@ _p.go = function(html) {
_p.preview = function(html) {
var w = window.open();
if(!w) {
msgprint(__("Please enable pop-ups"));
frappe.msgprint(__("Please enable pop-ups"));
return;
}
w.document.write(html);
@@ -113,7 +113,7 @@ $.extend(_p, {
fmtname= "Standard";
}

args = {
var args = {
fmtname: fmtname,
onload: onload,
no_letterhead: no_letterhead,
@@ -121,12 +121,12 @@ $.extend(_p, {
};

if(!cur_frm) {
msgprint(__("No document selected"));
frappe.msgprint(__("No document selected"));
return;
}

if(!frappe.model.can_print(cur_frm.doctype, cur_frm)) {
msgprint(__("You are not allowed to print this document"));
frappe.msgprint(__("You are not allowed to print this document"));
return;
}

@@ -145,7 +145,7 @@ $.extend(_p, {
} else {
var print_format_doc = locals["Print Format"][args.fmtname];
if(!print_format_doc) {
msgprint(__("Unknown Print Format: {0}", [args.fmtname]));
frappe.msgprint(__("Unknown Print Format: {0}", [args.fmtname]));
return;
}
args.onload(_p.render({
@@ -220,7 +220,7 @@ $.extend(_p, {
}

if(args.doc && cint(args.doc.docstatus)==0 && is_doctype_submittable) {
draft = _p.head_banner_format();
var draft = _p.head_banner_format();
draft = draft.replace("{{HEAD}}", "DRAFT");
draft = draft.replace("{{DESCRIPTION}}", "This box will go away after the document is submitted.");
return draft;
@@ -236,7 +236,7 @@ $.extend(_p, {
*/
show_archived: function(args) {
if(args.doc && args.doc.__archived) {
archived = _p.head_banner_format();
var archived = _p.head_banner_format();
archived = archived.replace("{{HEAD}}", "ARCHIVED");
archived = archived.replace("{{DESCRIPTION}}", "You must restore this document to make it editable.");
return archived;
@@ -252,7 +252,7 @@ $.extend(_p, {
*/
show_cancelled: function(args) {
if(args.doc && args.doc.docstatus==2) {
cancelled = _p.head_banner_format();
var cancelled = _p.head_banner_format();
cancelled = cancelled.replace("{{HEAD}}", "CANCELLED");
cancelled = cancelled.replace("{{DESCRIPTION}}", "You must amend this document to make it editable.");
return cancelled;
@@ -267,7 +267,7 @@ $.extend(_p, {
var body_style = '';
var style_list = container.getElementsByTagName('style');
while(style_list && style_list.length>0) {
for(i in style_list) {
for(var i in style_list) {
if(style_list[i] && style_list[i].innerHTML) {
body_style += style_list[i].innerHTML;
var parent = style_list[i].parentNode;
@@ -282,7 +282,7 @@ $.extend(_p, {
}

// Concatenate all styles
style_concat = (args.only_body ? '' : _p.def_print_style_body)
var style_concat = (args.only_body ? '' : _p.def_print_style_body)
+ _p.def_print_style_other + args.style + body_style;

return style_concat;
@@ -609,7 +609,7 @@ $.extend(_p, {
return html;
},

add_layout: function(doctype) {
add_layout: function(doctype) {v
var layout = new Layout();
layout.addrow();

@@ -625,7 +625,7 @@ $.extend(_p, {
// If only one table is passed
layout.cur_cell.appendChild(t);
} else {
page_break = '\n\
var page_break = '\n\
<div style = "page-break-after: always;" \
class = "page_break"></div><div class="page-settings"></div>';

@@ -662,7 +662,7 @@ $.extend(_p, {
// If value or a numeric type then proceed

// Add field table
row = _p.field_tab(layout.cur_cell);
var row = _p.field_tab(layout.cur_cell);

// Add label
row.cells[0].innerHTML = __(f.label ? f.label : f.fieldname);


+ 1
- 1
frappe/public/js/legacy/print_table.js Wyświetl plik

@@ -141,7 +141,7 @@ frappe.printTable = Class.extend({
// get from doctype and redistribute to fit 100%
if(!this.widths) {
this.widths = $.map(this.columns, function(fieldname, ci) {
df = frappe.meta.docfield_map[me.tabletype][fieldname];
var df = frappe.meta.docfield_map[me.tabletype][fieldname];
return df && df.print_width || (fieldname=="Sr" ? 30 : 80);
});



+ 5
- 5
frappe/templates/includes/contact.js Wyświetl plik

@@ -8,13 +8,13 @@ frappe.ready(function() {
var message = $('[name="message"]').val();

if(!(email && message)) {
msgprint(__("Please enter both your email and message so that we \
frappe.msgprint(__("Please enter both your email and message so that we \
can get back to you. Thanks!"));
return false;
}

if(!valid_email(email)) {
msgprint(__("You seem to have written your name instead of your email. \
if(!validate_email(email)) {
frappe.msgprint(__("You seem to have written your name instead of your email. \
Please enter a valid email address so that we can get back."));
$('[name="email"]').focus();
return false;
@@ -27,9 +27,9 @@ frappe.ready(function() {
message: message,
callback: function(r) {
if(r.message==="okay") {
msgprint(__("Thank you for your message"));
frappe.msgprint(__("Thank you for your message"));
} else {
msgprint(__("There were errors"));
frappe.msgprint(__("There were errors"));
console.log(r.exc);
}
$(':input').val('');


+ 2
- 2
frappe/website/doctype/website_settings/website_settings.js Wyświetl plik

@@ -14,7 +14,7 @@
// doctype:"Website Settings"
// },
// callback: function(r) {
// if(!r.exc) { msgprint(__("Exported")); }
// if(!r.exc) { frappe.msgprint(__("Exported")); }
// }
// })
// })
@@ -81,7 +81,7 @@ $.extend(cur_frm.cscript, {

cur_frm.cscript.set_banner_from_image = function(doc) {
if(!doc.banner_image) {
msgprint(__("Select a Brand Image first."));
frappe.msgprint(__("Select a Brand Image first."));
}
var src = doc.banner_image;
cur_frm.set_value("brand_html", "<img src='"+ src


Ładowanie…
Anuluj
Zapisz