From e847ffce302eb81ea6f19c814ce1d6fef2e7e5e9 Mon Sep 17 00:00:00 2001 From: pratu16x7 Date: Wed, 16 Aug 2017 10:13:12 +0530 Subject: [PATCH] [user-progress] cleanup --- frappe/desk/page/setup_wizard/setup_wizard.js | 4 +- frappe/public/build.json | 4 +- .../user_progress_dialog.js => ui/slides.js} | 168 +++--------------- frappe/public/js/frappe/ui/toolbar/toolbar.js | 18 +- .../frappe/ui/toolbar/user_progress_dialog.js | 138 ++++++++++++++ frappe/utils/selenium_testdriver.py | 2 +- 6 files changed, 173 insertions(+), 161 deletions(-) rename frappe/public/js/frappe/{form/user_progress_dialog.js => ui/slides.js} (68%) create mode 100644 frappe/public/js/frappe/ui/toolbar/user_progress_dialog.js diff --git a/frappe/desk/page/setup_wizard/setup_wizard.js b/frappe/desk/page/setup_wizard/setup_wizard.js index 7d1235b11b..c8286d49f2 100644 --- a/frappe/desk/page/setup_wizard/setup_wizard.js +++ b/frappe/desk/page/setup_wizard/setup_wizard.js @@ -150,12 +150,14 @@ frappe.setup.SetupWizard = class SetupWizard extends frappe.ui.Slides { args: {args: this.values}, callback: function() { me.show_setup_complete_state(); - frappe.flags.first_time_desk = 1; if(frappe.setup.welcome_page) { localStorage.setItem("session_last_route", frappe.setup.welcome_page); } setTimeout(function() { window.location = "/desk"; + setTimeout(function() { + frappe.frappe_toolbar.progress_dialog.show(); + }, 2000); }, 2000); }, error: function() { diff --git a/frappe/public/build.json b/frappe/public/build.json index 3bb9b26b66..9756cf7628 100755 --- a/frappe/public/build.json +++ b/frappe/public/build.json @@ -61,7 +61,6 @@ "public/js/frappe/form/link_selector.js", "public/js/frappe/form/multi_select_dialog.js", "public/js/frappe/ui/dialog.js", - "public/js/frappe/form/controls/base_control.js", "public/js/frappe/form/controls/base_input.js", "public/js/frappe/form/controls/data.js", @@ -164,6 +163,7 @@ "public/js/frappe/ui/page.html", "public/js/frappe/ui/page.js", + "public/js/frappe/ui/slides.js", "public/js/frappe/ui/find.js", "public/js/frappe/ui/iconbar.js", "public/js/frappe/form/layout.js", @@ -171,8 +171,6 @@ "public/js/frappe/form/link_selector.js", "public/js/frappe/form/multi_select_dialog.js", "public/js/frappe/ui/dialog.js", - "public/js/frappe/form/user_progress_dialog.js", - "public/js/frappe/form/user_progress_slide.html", "public/js/frappe/ui/app_icon.js", "public/js/frappe/model/model.js", diff --git a/frappe/public/js/frappe/form/user_progress_dialog.js b/frappe/public/js/frappe/ui/slides.js similarity index 68% rename from frappe/public/js/frappe/form/user_progress_dialog.js rename to frappe/public/js/frappe/ui/slides.js index b7b89223a4..9bbb1c3371 100644 --- a/frappe/public/js/frappe/form/user_progress_dialog.js +++ b/frappe/public/js/frappe/ui/slides.js @@ -1,7 +1,6 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -frappe.provide("frappe.setup"); frappe.provide("frappe.ui"); frappe.ui.Slide = class Slide { @@ -40,6 +39,8 @@ frappe.ui.Slide = class Slide { if(this.image_src) this.$content.append( $(``)); + this.reqd_fields = []; + this.refresh(); this.made = true; } @@ -159,11 +160,13 @@ frappe.ui.Slide = class Slide { } unbind_primary_action() { - this.slides_footer.off('click', '.primary', this.primary_action.bind(this)); + this.slides_footer.find(".action").off(); } bind_primary_action() { - this.slides_footer.on('click', '.primary', this.primary_action.bind(this)); + this.slides_footer.find(".action").on('click', () => { + this.primary_action(); + }); } show_slide() { @@ -195,100 +198,6 @@ frappe.ui.Slide = class Slide { primary_action() { } }; -frappe.setup.UserProgressSlide = class UserProgressSlide extends frappe.ui.Slide { - constructor(slide = null) { - super(slide); - } - - make() { - super.make(); - } - - setup_done_state() { - this.$body.find(".form-wrapper").hide(); - this.make_done_state(); - this.bind_done_state(); - } - - make_done_state() { - this.$done_state = $(`
-

-

${__("Completed!")}

-
-
- - - -
- -
-
`).appendTo(this.$body); - } - - bind_done_state() { - if(this.doctype) { - this.$body.find('.doctype-actions').removeClass("hide"); - this.$list = this.$body.find('.list-btn') - .html("Go to " + this.name) - .on('click', () => { - frappe.set_route("List", this.doctype); - }); - if(this.sec_doctype) { - this.$sec_list = this.$body.find('.sec-list-btn') - .removeClass("hide") - .html("Go to " + this.sec_doctype + "s") - .on('click', () => { - frappe.set_route("List", this.sec_doctype); - }); - } - this.$import = this.$body.find('.import-btn') - .html("Import " + this.name) - .on('click', () => { - frappe.set_route("data-import-tool"); - }); - } else if (this.route) { - this.$body.find('.doc-actions').removeClass("hide"); - this.$doc = this.$body.find('.doc-btn').on('click', () => { - frappe.set_route(this.route); - }); - } - } - - primary_action() { - var me = this; - if(this.set_values()) { - frappe.call({ - method: me.method, - args: {args_data: me.values}, - callback: function() { - me.done = 1; - // hide Create button immediately, or show_slide again - me.$primary_btn.hide(); - me.refresh(); - - // let completed = 0; - // me.container.slides.map((slide, i) => { - // if(me.container.slide_dict[i]) { - // if(me.container.slide_dict[i].done) completed++; - // } else { - // if(slide.done) completed++; - // } - // }); - // let percent = completed * 100 / me.container.slides.length; - // $('.user-progress .progress-bar').css({'width': percent + '%'}); - // if(percent === 100) { - // $(document).trigger("user-initial-setup-complete"); - // } - - }, - freeze: true - }); - } - } -}; - frappe.ui.Slides = class Slides { constructor({ parent = null, @@ -296,7 +205,8 @@ frappe.ui.Slides = class Slides { slide_class = null, unidirectional = 0, done_state = 0, - before_load = null + before_load = null, + on_update = null }) { this.parent = parent; this.slides = slides; @@ -304,6 +214,7 @@ frappe.ui.Slides = class Slides { this.unidirectional = unidirectional; this.done_state = done_state; this.before_load = before_load; + this.on_update = on_update; this.slide_dict = {}; @@ -384,6 +295,16 @@ frappe.ui.Slides = class Slides { this.$slide_progress.append($dot); }); + this.completed = 0; + this.slides.map((slide, i) => { + if(this.slide_dict[i]) { + if(this.slide_dict[i].done) this.completed++; + } else { + if(slide.done) this.completed++; + } + }); + if(this.on_update) {this.on_update(this.completed, this.slides.length);} + if(!this.unidirectional) this.bind_progress_dots(); } @@ -402,7 +323,7 @@ frappe.ui.Slides = class Slides { this.$next_btn = this.$footer.find('.next-btn').attr('tabIndex', 0) .on('click', () => { - if (this.current_slide.set_values()) { + if (!this.unidirectional || (this.unidirectional && this.current_slide.set_values())) { this.show_slide(this.current_id + 1); } }); @@ -444,6 +365,8 @@ frappe.ui.Slides = class Slides { this.slide_dict[id] = null; } + on_update(completed, total) {} + show_hide_prev_next(id) { (id === 0) ? this.$prev_btn.hide() : this.$prev_btn.show(); @@ -464,51 +387,4 @@ frappe.ui.Slides = class Slides { update_values() { this.values = $.extend(this.values, this.get_values()); } -}; - -frappe.setup.UserProgressDialog = class UserProgressDialog { - constructor({ - slides = [] - }) { - this.slides = slides; - this.setup(); - } - - setup() { - this.dialog = new frappe.ui.Dialog({title: __("Complete Setup")}); - this.slide_container = new frappe.ui.Slides({ - parent: this.dialog.body, - slides: this.slides, - slide_class: frappe.setup.UserProgressSlide, - done_state: 1, - before_load: ($footer) => { - $footer.find('.text-right').prepend( - $(` - ${__("Create")}`)); - } - }); - this.make_dismiss_button(); - } - - make_dismiss_button() { - this.dialog.set_primary_action(__('Dismiss'), () => { - $('.user-progress').addClass('hide'); - this.dialog.hide(); - }); - this.$dismiss_button = this.dialog.header.find('.btn-primary').addClass('dismiss-btn'); - // hidden by default - this.$dismiss_button.addClass('hide'); - - $(document).on("user-initial-setup-complete", () => { - this.show_dismiss_button(); - }); - } - - show_dismiss_button() { - this.$dismiss_button.removeClass('hide'); - } - - show() { - this.dialog.show(); - } }; \ No newline at end of file diff --git a/frappe/public/js/frappe/ui/toolbar/toolbar.js b/frappe/public/js/frappe/ui/toolbar/toolbar.js index 525ff3ec78..c1d6e8ac6b 100644 --- a/frappe/public/js/frappe/ui/toolbar/toolbar.js +++ b/frappe/public/js/frappe/ui/toolbar/toolbar.js @@ -212,16 +212,14 @@ frappe.ui.toolbar.Toolbar = Class.extend({ let percent = completed * 100 / slides.length; $('.user-progress .progress-bar').css({'width': percent + '%'}); - // me.progress_dialog = new frappe.setup.UserProgressDialog({ - // slides: slides - // }); - // $('.user-progress .dropdown-toggle').on('click', () => { - // me.progress_dialog.show(); - // }); - // if(frappe.flags.first_time_desk) { - // me.progress_dialog.show(); - // frappe.flags.first_time_desk = 0; - // } + frappe.require("assets/frappe/js/frappe/ui/toolbar/user_progress_dialog.js", function() { + me.progress_dialog = new frappe.setup.UserProgressDialog({ + slides: slides + }); + $('.user-progress .dropdown-toggle').on('click', () => { + me.progress_dialog.show(); + }); + }); } }, freeze: false diff --git a/frappe/public/js/frappe/ui/toolbar/user_progress_dialog.js b/frappe/public/js/frappe/ui/toolbar/user_progress_dialog.js new file mode 100644 index 0000000000..55cce39886 --- /dev/null +++ b/frappe/public/js/frappe/ui/toolbar/user_progress_dialog.js @@ -0,0 +1,138 @@ +// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +// License: GNU General Public License v3. See license.txt + +frappe.provide("frappe.setup"); +frappe.provide("frappe.ui"); + +frappe.setup.UserProgressSlide = class UserProgressSlide extends frappe.ui.Slide { + constructor(slide = null) { + super(slide); + } + + make() { + super.make(); + } + + setup_done_state() { + this.$body.find(".form-wrapper").hide(); + this.make_done_state(); + this.bind_done_state(); + } + + make_done_state() { + this.$done_state = $(`
+

+

${__("Completed!")}

+
+
+ + + +
+ +
+
`).appendTo(this.$body); + } + + bind_done_state() { + if(this.doctype) { + this.$body.find('.doctype-actions').removeClass("hide"); + this.$list = this.$body.find('.list-btn') + .html("Go to " + this.name) + .on('click', () => { + frappe.set_route("List", this.doctype); + }); + if(this.sec_doctype) { + this.$sec_list = this.$body.find('.sec-list-btn') + .removeClass("hide") + .html("Go to " + this.sec_doctype + "s") + .on('click', () => { + frappe.set_route("List", this.sec_doctype); + }); + } + this.$import = this.$body.find('.import-btn') + .html("Import " + this.name) + .on('click', () => { + frappe.set_route("data-import-tool"); + }); + } else if (this.route) { + this.$body.find('.doc-actions').removeClass("hide"); + this.$doc = this.$body.find('.doc-btn').on('click', () => { + frappe.set_route(this.route); + }); + } + } + + primary_action() { + var me = this; + if(this.set_values()) { + frappe.call({ + method: me.method, + args: {args_data: me.values}, + callback: function() { + me.done = 1; + // hide Create button immediately, or show_slide again + me.$primary_btn.hide(); + me.refresh(); + }, + freeze: true + }); + } + } +}; + +frappe.setup.UserProgressDialog = class UserProgressDialog { + constructor({ + slides = [] + }) { + this.slides = slides; + this.setup(); + } + + setup() { + this.dialog = new frappe.ui.Dialog({title: __("Complete Setup")}); + this.slide_container = new frappe.ui.Slides({ + parent: this.dialog.body, + slides: this.slides, + slide_class: frappe.setup.UserProgressSlide, + done_state: 1, + before_load: ($footer) => { + $footer.find('.text-right').prepend( + $(` + ${__("Create")}`)); + }, + on_update: (completed, total) => { + let percent = completed * 100 / total; + $('.user-progress .progress-bar').css({'width': percent + '%'}); + if(percent === 100) { + $(document).trigger("user-initial-setup-complete"); + } + } + }); + this.make_dismiss_button(); + } + + make_dismiss_button() { + this.dialog.set_primary_action(__('Dismiss'), () => { + $('.user-progress').addClass('hide'); + this.dialog.hide(); + }); + this.$dismiss_button = this.dialog.header.find('.btn-primary').addClass('dismiss-btn'); + // hidden by default + this.$dismiss_button.addClass('hide'); + + $(document).on("user-initial-setup-complete", () => { + this.show_dismiss_button(); + }); + } + + show_dismiss_button() { + this.$dismiss_button.removeClass('hide'); + } + + show() { + this.dialog.show(); + } +}; diff --git a/frappe/utils/selenium_testdriver.py b/frappe/utils/selenium_testdriver.py index 809e398f92..2c6a224be7 100644 --- a/frappe/utils/selenium_testdriver.py +++ b/frappe/utils/selenium_testdriver.py @@ -69,7 +69,7 @@ class TestDriver(object): self.get('login') self.wait_for("#login_email") self.set_input("#login_email", "Administrator") - self.set_input("#login_password", "abcd1234") + self.set_input("#login_password", "admin") self.click('.btn-login') self.wait_for(wait_for_id) self.logged_in = True