Browse Source

[fixed] frappe.require is now async 💥

version-14
Rushabh Mehta 9 years ago
parent
commit
75c0d581d5
18 changed files with 204 additions and 164 deletions
  1. +50
    -48
      frappe/desk/page/activity/activity.js
  2. +12
    -16
      frappe/desk/page/setup_wizard/setup_wizard.js
  3. +9
    -2
      frappe/email/__init__.py
  4. +1
    -0
      frappe/public/build.json
  5. +13
    -6
      frappe/public/js/frappe/assets.js
  6. +21
    -11
      frappe/public/js/frappe/form/control.js
  7. +3
    -1
      frappe/public/js/frappe/form/formatters.js
  8. +12
    -9
      frappe/public/js/frappe/form/print.js
  9. +0
    -1
      frappe/public/js/frappe/misc/tools.js
  10. +19
    -13
      frappe/public/js/frappe/request.js
  11. +3
    -3
      frappe/public/js/frappe/ui/filters/filters.js
  12. +12
    -10
      frappe/public/js/frappe/views/calendar.js
  13. +15
    -15
      frappe/public/js/frappe/views/ganttview.js
  14. +8
    -5
      frappe/public/js/frappe/views/reports/grid_report.js
  15. +6
    -5
      frappe/public/js/frappe/views/reports/query_report.js
  16. +5
    -5
      frappe/public/js/frappe/views/test_runner.js
  17. +10
    -10
      frappe/public/js/legacy/form.js
  18. +5
    -4
      frappe/website/doctype/website_theme/website_theme.js

+ 50
- 48
frappe/desk/page/activity/activity.js View File

@@ -6,68 +6,70 @@ frappe.provide("frappe.activity");
frappe.pages['activity'].on_page_load = function(wrapper) {
var me = this;

frappe.require('assets/frappe/js/lib/flot/jquery.flot.js');
frappe.require('assets/frappe/js/lib/flot/jquery.flot.downsample.js');

frappe.ui.make_app_page({
parent: wrapper,
single_column: true
});

this.page = wrapper.page;

this.page.set_title(__("Activity"));

frappe.model.with_doctype("Communication", function() {
me.page.list = new frappe.ui.Listing({
hide_refresh: true,
page: me.page,
method: 'frappe.desk.page.activity.activity.get_feed',
parent: $("<div></div>").appendTo(me.page.main),
render_row: function(row, data) {
new frappe.activity.Feed(row, data);
},
show_filters: true,
doctype: "Communication",
get_args: function() {
if (frappe.route_options && frappe.route_options.show_likes) {
delete frappe.route_options.show_likes;
return {
show_likes: true
me.page = wrapper.page;

me.page.set_title(__("Activity"));

frappe.require(['assets/frappe/js/lib/flot/jquery.flot.js',
'assets/frappe/js/lib/flot/jquery.flot.downsample.js'], function() {

frappe.model.with_doctype("Communication", function() {
me.page.list = new frappe.ui.Listing({
hide_refresh: true,
page: me.page,
method: 'frappe.desk.page.activity.activity.get_feed',
parent: $("<div></div>").appendTo(me.page.main),
render_row: function(row, data) {
new frappe.activity.Feed(row, data);
},
show_filters: true,
doctype: "Communication",
get_args: function() {
if (frappe.route_options && frappe.route_options.show_likes) {
delete frappe.route_options.show_likes;
return {
show_likes: true
}
} else {
return {}
}
}
} else {
return {}
}
}
});
});

me.page.list.run();
me.page.list.run();

me.page.set_primary_action(__("Refresh"), function() {
me.page.list.filter_list.clear_filters();
me.page.list.run();
}, "octicon octicon-sync");
});
me.page.set_primary_action(__("Refresh"), function() {
me.page.list.filter_list.clear_filters();
me.page.list.run();
}, "octicon octicon-sync");
});

frappe.activity.render_plot(this.page);
frappe.activity.render_plot(me.page);

this.page.main.on("click", ".activity-message", function() {
var link_doctype = $(this).attr("data-link-doctype"),
link_name = $(this).attr("data-link-name"),
doctype = $(this).attr("data-doctype"),
docname = $(this).attr("data-docname");
me.page.main.on("click", ".activity-message", function() {
var link_doctype = $(this).attr("data-link-doctype"),
link_name = $(this).attr("data-link-name"),
doctype = $(this).attr("data-doctype"),
docname = $(this).attr("data-docname");

if (doctype && docname) {
if (link_doctype && link_name) {
frappe.route_options = {
scroll_to: { "doctype": doctype, "name": docname }
}
}
if (doctype && docname) {
if (link_doctype && link_name) {
frappe.route_options = {
scroll_to: { "doctype": doctype, "name": docname }
}
}

frappe.set_route(["Form", link_doctype || doctype, link_name || docname]);
}
frappe.set_route(["Form", link_doctype || doctype, link_name || docname]);
}
});
});


// Build Report Button
if(frappe.boot.user.can_get_report.indexOf("Feed")!=-1) {
this.page.add_menu_item(__('Build Report'), function() {


+ 12
- 16
frappe/desk/page/setup_wizard/setup_wizard.js View File

@@ -27,24 +27,20 @@ frappe.pages['setup-wizard'].on_page_load = function(wrapper) {
$(".navbar:first").toggle(false);
$("body").css({"padding-top":"30px"});

frappe.require("/assets/frappe/css/animate.min.css");
var requires = ["/assets/frappe/css/animate.min.css"].concat(frappe.boot.setup_wizard_requires || []);

frappe.require(requires, function() {
frappe.wiz.run_event("before_load");
var wizard_settings = {
page_name: "setup-wizard",
parent: wrapper,
slides: frappe.wiz.slides,
title: __("Welcome")
}

$.each(frappe.boot.setup_wizard_requires || [], function(i, path) {
frappe.require(path);
frappe.wiz.wizard = new frappe.wiz.Wizard(wizard_settings);
frappe.wiz.run_event("after_load");
});

frappe.wiz.run_event("before_load");

var wizard_settings = {
page_name: "setup-wizard",
parent: wrapper,
slides: frappe.wiz.slides,
title: __("Welcome")
}

frappe.wiz.wizard = new frappe.wiz.Wizard(wizard_settings);

frappe.wiz.run_event("after_load");
}

frappe.pages['setup-wizard'].on_page_show = function(wrapper) {


+ 9
- 2
frappe/email/__init__.py View File

@@ -32,16 +32,23 @@ def get_contact_list(doctype, fieldname, txt):
"""Returns contacts (from autosuggest)"""
txt = txt.replace('%', '')

def get_users():
return filter(None, frappe.db.sql_list('select email from tabUser where email like %s',
('%' + txt + '%')))
try:
return filter(None, frappe.db.sql_list('select `{0}` from `tab{1}` where `{0}` like %s'.format(fieldname, doctype),
out = filter(None, frappe.db.sql_list('select `{0}` from `tab{1}` where `{0}` like %s'.format(fieldname, doctype),
'%' + txt + '%'))
if out:
out = get_users()
except Exception, e:
if e.args[0]==1146:
# no Contact, use User
return filter(None, frappe.db.sql_list('select email from tabUser where email like %s', ('%' + txt + '%')))
out = get_users()
else:
raise

return out

def get_system_managers():
return frappe.db.sql_list("""select parent FROM tabUserRole
WHERE role='System Manager'


+ 1
- 0
frappe/public/build.json View File

@@ -67,6 +67,7 @@
"public/js/lib/d3.min.js",
"public/js/lib/cal-heatmap.js",
"public/js/lib/c3.min.js",
"public/js/lib/markdown.js",

"public/js/frappe/provide.js",
"public/js/frappe/class.js",


+ 13
- 6
frappe/public/js/frappe/assets.js View File

@@ -9,7 +9,7 @@ frappe.require = function(items, callback) {
if(typeof items === "string") {
items = [items];
}
frappe.assets.execute(items);
frappe.assets.execute(items, callback);
};

frappe.assets = {
@@ -59,7 +59,7 @@ frappe.assets = {
executed_ : [],

// pass on to the handler to set
execute: function(items) {
execute: function(items, callback) {
var to_fetch = []
for(var i=0, l=items.length; i<l; i++) {
if(!frappe.assets.exists(items[i])) {
@@ -67,9 +67,15 @@ frappe.assets = {
}
}
if(to_fetch.length) {
frappe.assets.fetch(to_fetch);
frappe.assets.fetch(to_fetch, function() {
frappe.assets.eval_assets(items, callback);
});
} else {
frappe.assets.eval_assets(items, callback);
}
},

eval_assets: function(items, callback) {
for(var i=0, l=items.length; i<l; i++) {
// execute js/css if not already.
var path = items[i];
@@ -79,6 +85,7 @@ frappe.assets = {
frappe.assets.executed_.push(path)
}
}
callback();
},

// check if the asset exists in
@@ -98,7 +105,7 @@ frappe.assets = {
},

// load an asset via
fetch: function(items) {
fetch: function(items, callback) {
// this is virtual page load, only get the the source
// *without* the template

@@ -112,10 +119,10 @@ frappe.assets = {
$.each(items, function(i, src) {
frappe.assets.add(src, r.message[i]);
});
callback();
},
async: false,
freeze: true,
})
});
},

add: function(src, txt) {


+ 21
- 11
frappe/public/js/frappe/form/control.js View File

@@ -618,19 +618,25 @@ frappe.ui.form.ControlDate = frappe.ui.form.ControlData.extend({
}
})

import_timepicker = function() {
frappe.require("assets/frappe/js/lib/jquery/jquery.ui.slider.min.js");
frappe.require("assets/frappe/js/lib/jquery/jquery.ui.sliderAccess.js");
frappe.require("assets/frappe/js/lib/jquery/jquery.ui.timepicker-addon.css");
frappe.require("assets/frappe/js/lib/jquery/jquery.ui.timepicker-addon.js");
import_timepicker = function(callback) {
frappe.require([
"assets/frappe/js/lib/jquery/jquery.ui.slider.min.js",
"assets/frappe/js/lib/jquery/jquery.ui.sliderAccess.js",
"assets/frappe/js/lib/jquery/jquery.ui.timepicker-addon.css",
"assets/frappe/js/lib/jquery/jquery.ui.timepicker-addon.js"
], callback);
}

frappe.ui.form.ControlTime = frappe.ui.form.ControlData.extend({
make_input: function() {
import_timepicker();
this._super();
this.$input.timepicker({
timeFormat: 'HH:mm:ss',
var me = this;
var _super = this._super;
import_timepicker(function() {
_super.apply(me);
me.$input.timepicker({
timeFormat: 'HH:mm:ss',
});
me.refresh();
});
}
});
@@ -648,8 +654,12 @@ frappe.ui.form.ControlDatetime = frappe.ui.form.ControlDate.extend({
this.$input.datetimepicker(this.datepicker_options);
},
make_input: function() {
import_timepicker();
this._super();
var me = this;
var _super = this._super;
import_timepicker(function() {
_super.apply(me);
me.refresh();
})
},
parse: function(value) {
if(value) {


+ 3
- 1
frappe/public/js/frappe/form/formatters.js View File

@@ -96,7 +96,9 @@ frappe.form.formatters = {
return value || "";
},
Datetime: function(value) {
return value ? dateutil.str_to_user(dateutil.convert_to_user_tz(value)) : "";
return value ? moment(dateutil.convert_to_user_tz(value))
.tz(frappe.boot.sysdefaults.time_zone).format('MMMM Do YYYY, h:mm a z') : "";
//return value ? dateutil.str_to_user(dateutil.convert_to_user_tz(value)) : "";
},
Text: function(value) {
if(value) {


+ 12
- 9
frappe/public/js/frappe/form/print.js View File

@@ -179,19 +179,22 @@ frappe.ui.form.PrintPreview = Class.extend({
.empty().add_options(this.print_formats);
},
with_old_style: function(opts) {
var me = this;
frappe.require("/assets/js/print_format_v3.min.js");
_p.build(opts.format, opts.callback, opts.no_letterhead, opts.only_body, opts.no_heading);
frappe.require("/assets/js/print_format_v3.min.js", function() {
_p.build(opts.format, opts.callback, opts.no_letterhead, opts.only_body, opts.no_heading);
});
},
print_old_style: function() {
frappe.require("/assets/js/print_format_v3.min.js");
_p.build(this.print_sel.val(), _p.go,
!this.with_letterhead());
var me = this;
frappe.require("/assets/js/print_format_v3.min.js", function() {
_p.build(me.print_sel.val(), _p.go,
!me.with_letterhead());
});
},
new_page_preview_old_style: function() {
frappe.require("/assets/js/print_format_v3.min.js");
_p.build(this.print_sel.val(), _p.preview,
!this.with_letterhead());
var me = this;
frappe.require("/assets/js/print_format_v3.min.js", function() {
_p.build(me.print_sel.val(), _p.preview, !me.with_letterhead());
});
},
selected_format: function() {
return this.print_sel.val() || this.frm.meta.default_print_format || "Standard";


+ 0
- 1
frappe/public/js/frappe/misc/tools.js View File

@@ -34,7 +34,6 @@ frappe.tools.downloadify = function(data, roles, title) {

frappe.markdown = function(txt) {
if(!frappe.md2html) {
frappe.require('assets/frappe/js/lib/markdown.js');
frappe.md2html = new Showdown.converter();
}



+ 19
- 13
frappe/public/js/frappe/request.js View File

@@ -64,7 +64,6 @@ frappe.request.call = function(opts) {

var statusCode = {
200: function(data, xhr) {
if(typeof data === "string") data = JSON.parse(data);
opts.success_callback && opts.success_callback(data, xhr.responseText);
},
401: function(xhr) {
@@ -136,6 +135,25 @@ frappe.request.call = function(opts) {
frappe.last_request = ajax_args.data;

return $.ajax(ajax_args)
.done(function(data, textStatus, xhr) {
if(typeof data === "string") data = JSON.parse(data);

// sync attached docs
if(data.docs || data.docinfo) {
frappe.model.sync(data);
}

// sync translated messages
if(data.__messages) {
$.extend(frappe._messages, data.__messages);
}

// callbacks
var status_code_handler = statusCode[xhr.statusCode().status];
if (status_code_handler) {
status_code_handler(data, xhr);
}
})
.always(function(data, textStatus, xhr) {
if(typeof data==="string") {
data = JSON.parse(data);
@@ -149,12 +167,6 @@ frappe.request.call = function(opts) {
opts.always(data);
}
})
.done(function(data, textStatus, xhr) {
var status_code_handler = statusCode[xhr.statusCode().status];
if (status_code_handler) {
status_code_handler(data, xhr);
}
})
.fail(function(xhr, textStatus) {
var status_code_handler = statusCode[xhr.statusCode().status];
if (status_code_handler) {
@@ -251,12 +263,6 @@ frappe.request.cleanup = function(opts, r) {
console.log("========");
}

if(r.docs || r.docinfo) {
frappe.model.sync(r);
}
if(r.__messages) {
$.extend(frappe._messages, r.__messages);
}

frappe.last_response = r;



+ 3
- 3
frappe/public/js/frappe/ui/filters/filters.js View File

@@ -310,7 +310,7 @@ frappe.ui.Filter = Class.extend({
},

get_selected_value: function() {
var val = this.field.get_parsed_value();
var val = strip(this.field.get_parsed_value());

if(this.field.df.original_type == 'Check') {
val = (val=='Yes' ? 1 :0);
@@ -443,9 +443,9 @@ frappe.ui.FieldSelect = Class.extend({
},
val: function(value) {
if(value===undefined) {
return this.get_value()
return this.get_value();
} else {
this.set_value(value)
this.set_value(value);
}
},
clear: function() {


+ 12
- 10
frappe/public/js/frappe/views/calendar.js View File

@@ -8,16 +8,18 @@ frappe.views.CalendarFactory = frappe.views.Factory.extend({
make: function(route) {
var me = this;

frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.min.css');
frappe.require('assets/frappe/js/lib/fullcalendar/fullcalendar.min.js');

frappe.model.with_doctype(route[1], function() {
var options = {
doctype: route[1]
};
$.extend(options, frappe.views.calendar[route[1]] || {});

frappe.views.calendars[route[1]] = new frappe.views.Calendar(options);
frappe.require([
'assets/frappe/js/lib/fullcalendar/fullcalendar.min.css',
'assets/frappe/js/lib/fullcalendar/fullcalendar.min.js'
], function() {
frappe.model.with_doctype(route[1], function() {
var options = {
doctype: route[1]
};
$.extend(options, frappe.views.calendar[route[1]] || {});

frappe.views.calendars[route[1]] = new frappe.views.Calendar(options);
});
});
}
});


+ 15
- 15
frappe/public/js/frappe/views/ganttview.js View File

@@ -6,25 +6,25 @@ frappe.provide("frappe.views.calendar");
frappe.views.GanttFactory = frappe.views.Factory.extend({
make: function(route) {
var me = this;
me.doctype = route[1];

frappe.require('assets/frappe/js/lib/jQuery.Gantt/css/style.css');
frappe.require('assets/frappe/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js');
frappe.require(['assets/frappe/js/lib/jQuery.Gantt/css/style.css',
'assets/frappe/js/lib/jQuery.Gantt/js/jquery.fn.gantt.js'], function() {

this.doctype = route[1];
frappe.model.with_doctype(me.doctype, function() {
var page = me.make_page();
$(page).on("show", function() {
page.ganttview.set_filters_from_route_options();
});

frappe.model.with_doctype(this.doctype, function() {
var page = me.make_page();
$(page).on("show", function() {
page.ganttview.set_filters_from_route_options();
});

var options = {
doctype: me.doctype,
parent: page
};
$.extend(options, frappe.views.calendar[me.doctype] || {});
var options = {
doctype: me.doctype,
parent: page
};
$.extend(options, frappe.views.calendar[me.doctype] || {});

page.ganttview = new frappe.views.Gantt(options);
page.ganttview = new frappe.views.Gantt(options);
});
});
}
});


+ 8
- 5
frappe/public/js/frappe/views/reports/grid_report.js View File

@@ -666,13 +666,16 @@ frappe.views.GridReportWithPlot = frappe.views.GridReport.extend({
this.plot_area.toggle(false);
return;
}
frappe.require('assets/frappe/js/lib/flot/jquery.flot.js');
frappe.require('assets/frappe/js/lib/flot/jquery.flot.downsample.js');

this.plot = $.plot(this.plot_area.toggle(true), plot_data,
this.get_plot_options());
var me = this;
frappe.require(['assets/frappe/js/lib/flot/jquery.flot.js',
'assets/frappe/js/lib/flot/jquery.flot.downsample.js'], function() {
me.plot = $.plot(me.plot_area.toggle(true), plot_data,
me.get_plot_options());

me.setup_plot_hover();
});

this.setup_plot_hover();
},
setup_plot_check: function() {
var me = this;


+ 6
- 5
frappe/public/js/frappe/views/reports/query_report.js View File

@@ -115,12 +115,13 @@ frappe.views.QueryReport = Class.extend({
callback: function(r) {
frappe.dom.eval(r.message.script || "");

var report_settings = frappe.query_reports[me.report_name];
me.html_format = r.message.html_format;
report_settings["html_format"] = r.message.html_format;

me.setup_report();
frappe.after_ajax(function() {
var report_settings = frappe.query_reports[me.report_name];
me.html_format = r.message.html_format;
report_settings["html_format"] = r.message.html_format;

me.setup_report();
});
}
});
} else {


+ 5
- 5
frappe/public/js/frappe/views/test_runner.js View File

@@ -18,10 +18,10 @@ frappe.standard_pages["test-runner"] = function() {
return;
}

frappe.require("assets/frappe/js/lib/jquery/qunit.js");
frappe.require("assets/frappe/js/lib/jquery/qunit.css");
var requires = ["assets/frappe/js/lib/jquery/qunit.js",
"assets/frappe/js/lib/jquery/qunit.css"].concat(route.splice(1).join("/"));

QUnit.load();
frappe.require(route.splice(1).join("/"));
frappe.require(requires, function() {
QUnit.load();
});
}

+ 10
- 10
frappe/public/js/legacy/form.js View File

@@ -168,7 +168,7 @@ _f.Frm.prototype.print_doc = function() {
this.hide_print();
return;
}
if(!frappe.model.can_print(this.doc.doctype, cur_frm)) {
if(!frappe.model.can_print(this.doc.doctype, this)) {
msgprint(__("You are not allowed to print this document"));
return;
}
@@ -422,10 +422,10 @@ _f.Frm.prototype.refresh = function(docname) {
if(!this.setup_done) this.setup();

// load the record for the first time, if not loaded (call 'onload')
cur_frm.cscript.is_onload = false;
this.cscript.is_onload = false;
if(!this.opendocs[this.docname]) {
var me = this;
cur_frm.cscript.is_onload = true;
this.cscript.is_onload = true;
this.setnewdoc();
$(document).trigger("form-load", [this]);
$(this.page.wrapper).on('hide', function(e) {
@@ -534,7 +534,7 @@ _f.Frm.prototype.render_form = function(is_a_different_doc) {
this.refresh_header(is_a_different_doc);
}

$(cur_frm.wrapper).trigger('render_complete');
$(this.wrapper).trigger('render_complete');

if(!this.hidden) {
this.layout.show_empty_form_message();
@@ -544,8 +544,8 @@ _f.Frm.prototype.render_form = function(is_a_different_doc) {
}

_f.Frm.prototype.refresh_field = function(fname) {
if(cur_frm.fields_dict[fname] && cur_frm.fields_dict[fname].refresh) {
cur_frm.fields_dict[fname].refresh();
if(this.fields_dict[fname] && this.fields_dict[fname].refresh) {
this.fields_dict[fname].refresh();
this.layout.refresh_dependency();
}
}
@@ -582,13 +582,13 @@ _f.Frm.prototype.cleanup_refresh = function() {
if(me.meta.autoname && me.meta.autoname.substr(0,6)=='field:' && !me.doc.__islocal) {
var fn = me.meta.autoname.substr(6);

if (cur_frm.doc[fn]) {
cur_frm.toggle_display(fn, false);
if (me.doc[fn]) {
me.toggle_display(fn, false);
}
}

if(me.meta.autoname=="naming_series:" && !me.doc.__islocal) {
cur_frm.toggle_display("naming_series", false);
me.toggle_display("naming_series", false);
}
}

@@ -914,7 +914,7 @@ _f.Frm.prototype.add_fetch = function(link_field, src_field, tar_field) {
}

_f.Frm.prototype.set_print_heading = function(txt) {
this.pformat[cur_frm.docname] = txt;
this.pformat[this.docname] = txt;
}

_f.Frm.prototype.action_perm_type_map = {


+ 5
- 4
frappe/website/doctype/website_theme/website_theme.js View File

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

frappe.require('assets/frappe/js/lib/jscolor/jscolor.js');

frappe.provide("frappe.website_theme");
$.extend(frappe.website_theme, {
@@ -10,10 +9,12 @@ $.extend(frappe.website_theme, {
});

frappe.ui.form.on("Website Theme", "onload_post_render", function(frm) {
$.each(frappe.website_theme.color_variables, function(i, v) {
$(frm.fields_dict[v].input).addClass('color {required:false,hash:true}');
frappe.require('assets/frappe/js/lib/jscolor/jscolor.js', function() {
$.each(frappe.website_theme.color_variables, function(i, v) {
$(frm.fields_dict[v].input).addClass('color {required:false,hash:true}');
});
jscolor.bind();
});
jscolor.bind();
});

frappe.ui.form.on("Website Theme", "refresh", function(frm) {


Loading…
Cancel
Save