diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 35cc77474f6..5453c68c866 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -47,24 +47,6 @@ } localStorage.setItem("website-reloads", JSON.stringify(stack)); }; - } else if (step.trigger.url) { - step.triggers = function (callback) { - var stack = JSON.parse(localStorage.getItem("website-geturls")) || []; - var id = step.trigger.url.toString(); - var index = stack.indexOf(id); - if (index !== -1) { - var url = new website.UrlParser(window.location.href); - var test = typeof step.trigger.url === "string" ? - step.trigger.url == url.pathname+url.search : - step.trigger.url.test(url.pathname+url.search); - if (!test) return; - stack.splice(index,1); - (callback || self.moveToNextStep).apply(self); - } else { - stack.push(id); - } - localStorage.setItem("website-geturls", JSON.stringify(stack)); - }; } else if (step.trigger === 'drag') { step.triggers = function (callback) { self.onSnippetDragged(callback || self.moveToNextStep); @@ -86,8 +68,27 @@ }); }; } - } else if (step.trigger.modal) { + } else if (step.trigger.url) { step.triggers = function (callback) { + var stack = JSON.parse(localStorage.getItem("website-geturls")) || []; + var id = step.trigger.url.toString(); + var index = stack.indexOf(id); + if (index !== -1) { + var url = new website.UrlParser(window.location.href); + var test = typeof step.trigger.url === "string" ? + step.trigger.url == url.pathname+url.search : + step.trigger.url.test(url.pathname+url.search); + if (!test) return; + stack.splice(index,1); + (callback || self.moveToNextStep).apply(self); + } else { + stack.push(id); + } + localStorage.setItem("website-geturls", JSON.stringify(stack)); + return index !== -1; + }; + } else if (step.trigger.modal) { + step.triggers = function (callback, auto) { var $doc = $(document); function onStop () { if (step.trigger.modal.stopOnClose) { @@ -98,7 +99,10 @@ $doc.one('shown.bs.modal', function () { $('.modal button.btn-primary').one('click', function () { $doc.off('hide.bs.modal', onStop); - (callback || self.moveToNextStep).apply(self, [step.trigger.modal.afterSubmit]); + console.log(callback); + if (!callback) { + self.moveToStep(step.trigger.modal.afterSubmit); + } }); (callback || self.moveToNextStep).apply(self); }); @@ -199,16 +203,19 @@ }, onSnippetDragged: function (callback) { var self = this; - function beginDrag () { + var selector = '#website-top-navbar [data-snippet-id].ui-draggable'; + var beginDrag = function beginDrag () { $('.popover.tour').remove(); - function advance () { + var advance = function advance () { if (_.isFunction(callback)) { callback.apply(self); } - } + $(selector).off('mouseup', advance); + }; $(document.body).one('mouseup', advance); - } - $('#website-top-navbar [data-snippet-id].ui-draggable').one('mousedown', beginDrag); + $(selector).off('mousedown', beginDrag); + }; + $(selector).one('mousedown', beginDrag); }, onSnippetDraggedAdvance: function () { onSnippetDragged(self.moveToNextStep); @@ -280,7 +287,7 @@ function actualDragAndDrop ($thumbnail) { var thumbnailPosition = $thumbnail.position(); $thumbnail.trigger($.Event("mousedown", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top })); - $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: thumbnailPosition.left, pageY: thumbnailPosition.top+500 })); + $thumbnail.trigger($.Event("mousemove", { which: 1, pageX: document.body.scrollWidth/2, pageY: document.body.scrollHeight/2 })); var $dropZone = $(".oe_drop_zone").first(); var dropPosition = $dropZone.position(); $dropZone.trigger($.Event("mouseup", { which: 1, pageX: dropPosition.left, pageY: dropPosition.top })); @@ -327,7 +334,8 @@ var self = this; var testId = 'test_'+tour.id+'_tour'; this.tours.push(tour); - var defaultDelay = 1000; //ms + var defaultDelay = 250; //ms + var defaultDelayReload = 1500; //ms var overlapsCrash; var test = { id: tour.id, @@ -346,50 +354,67 @@ test.reset(); throw message; } - function executeStep (step) { - // check if they are a cycle + function initReport () { + // set last time for report + if (!window.localStorage.getItem("test-last-time")) { + window.localStorage.setItem("test-last-time", new Date().getTime()); + } + } + function setReport (step) { + var report = JSON.parse(window.localStorage.getItem("test-report")) || {}; + report[step.stepId] = (new Date().getTime() - window.localStorage.getItem("test-last-time")) + " ms"; + window.localStorage.setItem("test-report", JSON.stringify(report)); + } + function testCycling (step) { var lastStep = window.localStorage.getItem(testId); var tryStep = lastStep != step.stepId ? 0 : (+(window.localStorage.getItem("test-last-"+testId) || 0) + 1); window.localStorage.setItem("test-last-"+testId, tryStep); if (tryStep > 2) { throwError("Test: '" + testId + "' cycling step: '" + step.stepId + "'"); } + return tryStep; + } + function getDelay (step) { + return step.delay || + ((step.trigger === 'reload' || (step.trigger && step.trigger.url)) + ? defaultDelayReload + : defaultDelay); + } + function executeStep (step) { + if (testCycling(step) === 0) initReport(); + + var delay = getDelay (step); + + overlapsCrash = setTimeout(function () { + throwError("Test: '" + testId + "' can't resolve step: '" + step.stepId + "'"); + }, delay + 1000); - // set last time for report - if (tryStep == 0 || !window.localStorage.getItem("test-last-time")) { - window.localStorage.setItem("test-last-time", new Date().getTime()); - } var _next = false; window.localStorage.setItem(testId, step.stepId); function next () { _next = true; + clearTimeout(overlapsCrash); - // set report - var report = JSON.parse(window.localStorage.getItem("test-report")) || {}; - report[step.stepId] = (new Date().getTime() - window.localStorage.getItem("test-last-time")) + " ms"; - window.localStorage.setItem("test-report", JSON.stringify(report)); + setReport(step); var nextStep = actionSteps.shift(); + if (nextStep) { setTimeout(function () { executeStep(nextStep); - }, step.delay || defaultDelay); + }, delay); } else { - clearTimeout(overlapsCrash); window.localStorage.removeItem(testId); } } - setTimeout(function () { - clearTimeout(overlapsCrash); - overlapsCrash = setTimeout(function () { - throwError("Test: '" + testId + "' can't resolve step: '" + step.stepId + "'"); - }, (step.delay || defaultDelay) + 1000); + setTimeout(function () { var $element = $(step.element); - if (step.triggers) { + var flag = step.triggers && (!step.trigger || !step.trigger.modal); + if (flag) { try { - step.triggers(next); + step.triggers(next, true); } catch (e) { throwError(e); } @@ -414,7 +439,7 @@ $element.trigger($.Event("mouseup", { srcElement: $element })); } } - if (!step.triggers) next(); + if (!flag) next(); },0); } var url = new website.UrlParser(window.location.href); diff --git a/addons/website_event/static/src/js/website.tour.event.js b/addons/website_event/static/src/js/website.tour.event.js index 39f5a997024..7f3c62c88e2 100644 --- a/addons/website_event/static/src/js/website.tour.event.js +++ b/addons/website_event/static/src/js/website.tour.event.js @@ -43,7 +43,7 @@ modal: { stopOnClose: true, afterSubmit: 'event-page', - } + }, }, }, { @@ -60,8 +60,8 @@ placement: 'right', title: "Create Event", content: "Click Continue to create the event.", - trigger: { - url: /event\/[0-9]+\/register/ + trigger: { + url: /event\/[0-9]+\/register/ }, }, { @@ -148,11 +148,10 @@ title: "Publish your event", content: "Click to publish your event.", trigger: 'click', - delay: 5000, }, { stepId: 'customize-event', - element: '.js_publish_management button#dopprod-8', + element: '.js_publish_management button[data-toggle="dropdown"]', placement: 'left', title: "Customize your event", content: "Click here to customize your event further.",