summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/src/js')
-rw-r--r--addons/website/static/src/js/website.editor.js48
-rw-r--r--addons/website/static/src/js/website.editor.newpage.js4
-rw-r--r--addons/website/static/src/js/website.snippets.animation.js2
-rw-r--r--addons/website/static/src/js/website.snippets.editor.js21
-rw-r--r--addons/website/static/src/js/website.tests.js40
-rw-r--r--addons/website/static/src/js/website.tour.banner.js92
-rw-r--r--addons/website/static/src/js/website.tour.js145
-rw-r--r--addons/website/static/src/js/website.tour.test.admin.js106
-rw-r--r--addons/website/static/src/js/website.tour.test.js34
9 files changed, 335 insertions, 157 deletions
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js
index ab97ee2bcf9..7e867dca685 100644
--- a/addons/website/static/src/js/website.editor.js
+++ b/addons/website/static/src/js/website.editor.js
@@ -10,6 +10,9 @@
if (!is_smartphone) {
website.ready().then(website.init_editor);
+ } else {
+ // remove padding of fake editor bar
+ document.body.style.padding = 0;
}
$(document).on('click', 'a.js_link2post', function (ev) {
@@ -411,6 +414,7 @@
openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': view_name }).then(
function(result) {
_.each(result, function (item) {
+ if (item.xml_id === "website.debugger" && !window.location.search.match(/[&?]debug(&|$)/)) return;
if (item.header) {
menu.append('<li class="dropdown-header">' + item.name + '</li>');
} else {
@@ -437,6 +441,12 @@
});
},
start: function() {
+ // remove placeholder editor bar
+ var fakebar = document.getElementById('website-top-navbar-placeholder');
+ if (fakebar) {
+ fakebar.parentNode.removeChild(fakebar);
+ }
+
var self = this;
this.saving_mutex = new openerp.Mutex();
@@ -628,7 +638,7 @@
image_dialog(editor, new CKEDITOR.dom.element(previous));
$image_button.hide();
previous = null;
- });
+ }, 'btn-sm');
// previous is the state of the button-trigger: it's the
// currently-ish hovered element which can trigger a button showing.
@@ -1073,7 +1083,7 @@
} else {
// Create the page, get the URL back
done = $.get(_.str.sprintf(
- '/pagenew/%s?noredirect=1', encodeURI(data.id)))
+ '/website/add/%s?noredirect=1', encodeURI(data.id)))
.then(function (response) {
self.make_link(response, false, data.id);
});
@@ -1265,7 +1275,7 @@
}),
start: function () {
- this.$('.modal-footer [disabled]').text("Uploading…");
+ this.$('button.wait').text("Uploading…");
var $options = this.$('.image-style').children();
this.image_styles = $options.map(function () { return this.value; }).get();
@@ -1298,13 +1308,16 @@
* Sets the provided image url as the dialog's value-to-save and
* refreshes the preview element to use it.
*/
- set_image: function (url) {
+ set_image: function (url, error) {
+ this.$('input.url').val(
+ error ? '' : url);
this.$('input.url').val(url);
this.preview_image();
},
file_selection: function () {
this.$el.addClass('nosave');
+ this.$('form').removeClass('has-error').find('.help-block').empty();
this.$('button.filepicker').removeClass('btn-danger btn-success');
var self = this;
@@ -1319,25 +1332,38 @@
},
file_selected: function(url, error) {
var $button = this.$('button.filepicker');
- if (error) {
+ if (!error) {
+ $button.addClass('btn-success');
+ } else {
+ url = null;
+ this.$('form').addClass('has-error')
+ .find('.help-block').text(error);
$button.addClass('btn-danger');
- return;
}
- $button.addClass('btn-success');
- this.set_image(url);
+ this.set_image(url, error);
},
preview_image: function () {
- this.$el.removeClass('nosave');
+ var loaded = function () {
+ this.$el.removeClass('nosave');
+ }.bind(this);
var image = this.$('input.url').val();
- if (!image) { return; }
+ if (!image) { loaded(); return; }
- this.$('img.image-preview')
+ var $img = this.$('img.image-preview')
.attr('src', image)
.removeClass(this.image_styles.join(' '))
.addClass(this.$('select.image-style').val());
+
+ if ($img.prop('complete')) {
+ loaded();
+ } else {
+ $img.load(loaded)
+ }
},
browse_existing: function (e) {
e.preventDefault();
+ this.$('form').removeClass('has-error').find('.help-block').empty();
+ this.$('button.filepicker').removeClass('btn-danger btn-success');
new website.editor.ExistingImageDialog(this).appendTo(document.body);
},
});
diff --git a/addons/website/static/src/js/website.editor.newpage.js b/addons/website/static/src/js/website.editor.newpage.js
index 944a24b89d8..8d3b3e9b6b5 100644
--- a/addons/website/static/src/js/website.editor.newpage.js
+++ b/addons/website/static/src/js/website.editor.newpage.js
@@ -2,6 +2,7 @@
"use strict";
var website = openerp.website;
+ var _t = openerp._t;
website.is_editable = true;
website.is_editable_button = true;
@@ -16,7 +17,8 @@
'click a[data-action=new_page]': function (ev) {
ev.preventDefault();
website.prompt({
- window_title: "New Page",
+ id: "editor_new_page",
+ window_title: _t("New Page"),
input: "Page Title",
}).then(function (val) {
if (val) {
diff --git a/addons/website/static/src/js/website.snippets.animation.js b/addons/website/static/src/js/website.snippets.animation.js
index 60c5aea49e2..048cf20231f 100644
--- a/addons/website/static/src/js/website.snippets.animation.js
+++ b/addons/website/static/src/js/website.snippets.animation.js
@@ -105,7 +105,7 @@
var offset = 0;
var padding = parseInt($(document.body).css("padding-top"));
if (speed < 1) {
- var inner_offset = self.$target.outerHeight() - this.height / this.width * document.body.clientWidth;
+ var inner_offset = - self.$target.outerHeight() + this.height / this.width * document.body.clientWidth;
var outer_offset = self.$target.offset().top - (document.body.clientHeight - self.$target.outerHeight()) - padding;
offset = - outer_offset * speed + inner_offset;
} else {
diff --git a/addons/website/static/src/js/website.snippets.editor.js b/addons/website/static/src/js/website.snippets.editor.js
index 8a3e7a4421d..e45bee9685b 100644
--- a/addons/website/static/src/js/website.snippets.editor.js
+++ b/addons/website/static/src/js/website.snippets.editor.js
@@ -9,7 +9,7 @@
var self = this;
$("[data-oe-model]").on('click', function (event) {
var $this = $(event.srcElement);
- var tag = $this[0].tagName.toLowerCase();
+ var tag = $this[0] && $this[0].tagName.toLowerCase();
if (!(tag === 'a' || tag === "button") && !$this.parents("a, button").length) {
self.$('[data-action="edit"]').parent().effect('bounce', {distance: 18, times: 5}, 250);
}
@@ -416,6 +416,25 @@
}
setTimeout(function () {
$("#oe_snippets").trigger('snippet-dropped', $target);
+
+ // reset snippet for rte
+ $target.removeData("snippet-editor");
+ if ($target.data("overlay")) {
+ $target.data("overlay").remove();
+ $target.removeData("overlay");
+ }
+ self.create_overlay($target);
+ $target.find("[data-snippet-id]").each(function () {
+ var $snippet = $(this);
+ $snippet.removeData("snippet-editor");
+ if ($snippet.data("overlay")) {
+ $snippet.data("overlay").remove();
+ $snippet.removeData("overlay");
+ }
+ self.create_overlay($snippet);
+ });
+ // end
+
self.make_active($target);
},0);
} else {
diff --git a/addons/website/static/src/js/website.tests.js b/addons/website/static/src/js/website.tests.js
deleted file mode 100644
index 977dc8e1848..00000000000
--- a/addons/website/static/src/js/website.tests.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var tests = {};
-var droptest = function () {
- var errors = [];
- for (var snippet_id in tests) {
- if (!tests[snippet_id]['activated'] || !tests[snippet_id]['dropped']){
- console.log("Can't dropped or activated snippet: " + snippet_id);
- }
- }
- if (errors.length) {
- console.log(tests);
- throw new Error("Can't dropped or activated at least one snippet");
- }
- $("#oe_snippets").off('snippet-activated snippet-dropped');
-};
-var droptesttime = setTimeout(droptest,0);
-
-$("#oe_snippets").off('snippet-activated snippet-dropped')
- .on('snippet-activated', function (event, dom) {
- tests[$(dom).data('src-snippet-id')]['activated'] = true;
- clearTimeout(droptesttime);
- droptesttime = setTimeout(droptest,0);
- })
- .on('snippet-dropped', function (event, dom, src_snipped_id) {
- tests[$(dom).data('src-snippet-id')]['dropped'] = true;
- clearTimeout(droptesttime);
- droptesttime = setTimeout(droptest,0);
- });
-var $thumbnails = $('#oe_snippets div.oe_snippet[data-snippet-id] .oe_snippet_thumbnail');
-$thumbnails.each(function () {
- var $thumbnail = $(this);
- tests[$thumbnail.parent().data('snippet-id')] = {};
- var position = $thumbnail.position();
- $thumbnail.trigger( $.Event( "mousedown", { which: 1, pageX: position.left, pageY: position.top } ) );
- $thumbnail.trigger( $.Event( "mousemove", { which: 1, pageX: position.left+100, pageY: position.top+100 } ) );
- $first_drop = $(".oe_drop_zone").first();
- position = $first_drop.position();
- $first_drop.trigger( $.Event( "mouseup", { which: 1, pageX: position.left+20, pageY: position.top+20 } ) );
- clearTimeout(droptesttime);
- droptesttime = setTimeout(droptest,0);
-});
diff --git a/addons/website/static/src/js/website.tour.banner.js b/addons/website/static/src/js/website.tour.banner.js
index c46efcabce8..7d307bd26d7 100644
--- a/addons/website/static/src/js/website.tour.banner.js
+++ b/addons/website/static/src/js/website.tour.banner.js
@@ -2,112 +2,114 @@
'use strict';
var website = openerp.website;
+ var _t = openerp._t;
website.EditorBar.include({
start: function () {
- this.registerTour(new website.BannerTour(this));
+ this.registerTour(new website.Tour.Banner(this));
return this._super();
},
});
- website.BannerTour = website.Tour.extend({
+ website.Tour.Banner = website.Tour.extend({
id: 'banner',
- name: "Insert a banner",
- path: '/',
- init: function (editor) {
+ name: "Build a page",
+ path: '/page/website.homepage',
+ init: function () {
var self = this;
self.steps = [
{
- title: "Welcome to your website!",
- content: "This tutorial will guide you to build your home page. We will start by adding a banner.",
- template: self.popover({ next: "Start Tutorial", end: "Skip It" }),
- backdrop: true,
+ title: _t("Welcome to your website!"),
+ content: _t("This tutorial will guide you to build your home page. We will start by adding a banner."),
+ popover: { next: _t("Start Tutorial"), end: _t("Skip It") },
},
{
waitNot: '.popover.tour',
element: 'button[data-action=edit]',
placement: 'bottom',
- title: "Edit this page",
- content: "Every page of your website can be modified through the <i>Edit</i> button.",
- template: self.popover({ fixed: true }),
+ title: _t("Edit this page"),
+ content: _t("Every page of your website can be modified through the <i>Edit</i> button."),
+ popover: { fixed: true },
},
{
element: 'button[data-action=snippet]',
placement: 'bottom',
- title: "Insert building blocks",
- content: "To add content in a page, you can insert building blocks.",
- template: self.popover({ fixed: true }),
+ title: _t("Insert building blocks"),
+ content: _t("To add content in a page, you can insert building blocks."),
+ popover: { fixed: true },
},
{
snippet: 'carousel',
placement: 'bottom',
- title: "Drag & Drop a Banner",
- content: "Drag the Banner block and drop it in your page.",
- template: self.popover({ fixed: true }),
+ title: _t("Drag & Drop a Banner"),
+ content: _t("Drag the Banner block and drop it in your page."),
+ popover: { fixed: true },
},
{
waitFor: '.oe_overlay_options .oe_options:visible',
element: '#wrap [data-snippet-id=carousel]:first .carousel-caption',
placement: 'top',
- title: "Customize banner's text",
- content: "Click in the text and start editing it. Click continue once it's done.",
- template: self.popover({ next: "Continue" }),
+ title: _("Customize banner's text"),
+ content: _("Click in the text and start editing it."),
+ popover: { next: _t("Continue") },
},
{
element: '.oe_overlay_options .oe_options',
placement: 'left',
- title: "Customize the banner",
- content: "Customize any block through this menu. Try to change the background of the banner.",
- template: self.popover({ next: "Continue" }),
+ title: _t("Customize the banner"),
+ content: _t("Customize any block through this menu. Try to change the background of the banner."),
+ popover: { next: _t("Continue") },
},
{
waitNot: '.popover.tour',
element: 'button[data-action=snippet]',
placement: 'bottom',
- title: "Add Another Block",
- content: "Let's add another building block to your page.",
- template: self.popover({ fixed: true }),
+ title: _t("Add Another Block"),
+ content: _t("Let's add another building block to your page."),
+ popover: { fixed: true },
},
{
snippet: 'three-columns',
placement: 'bottom',
- title: "Drag & Drop a Block",
- content: "Drag the <em>'3 Columns'</em> block and drop it below the banner.",
- template: self.popover({ fixed: true }),
+ title: _t("Drag & Drop This Block"),
+ content: _t("Drag the <em>'Three Columns'</em> block and drop it below the banner."),
+ popover: { fixed: true },
},
{
waitFor: '.oe_overlay_options .oe_options:visible',
element: 'button[data-action=save]',
placement: 'right',
- title: "Save your modifications",
- content: "Publish your page by clicking on the <em>'Save'</em> button.",
- template: self.popover({ fixed: true }),
+ title: _t("Save your modifications"),
+ content: _t("Publish your page by clicking on the <em>'Save'</em> button."),
+ popover: { fixed: true },
},
{
waitFor: 'button[data-action=edit]:visible',
- title: "Congratulation!",
- content: "Your homepage has been updated.",
- template: self.popover({ next: "Continue" }),
+ title: _("Good Job!"),
+ content: _("Well done, you created your homepage."),
+ popover: { next: _t("Continue") },
},
{
waitNot: '.popover.tour',
element: 'a[data-action=show-mobile-preview]',
placement: 'bottom',
- title: "Test Your Mobile Version",
- content: "Let's check how your homepage looks like on mobile devices.",
- template: self.popover({ fixed: true }),
+ title: _t("Test Your Mobile Version"),
+ content: _t("Let's check how your homepage looks like on mobile devices."),
+ popover: { fixed: true },
},
{
- element: 'button[data-dismiss=modal]',
+ element: '.modal:has(#mobile-viewport) button[data-dismiss=modal]',
placement: 'right',
- title: "Close Mobile Preview",
- content: "Scroll in the mobile preview to test the rendering. Once it's ok, close this dialog.",
+ title: _t("Close Mobile Preview"),
+ content: _t("Scroll in the mobile preview to test the rendering. Once it's ok, close this dialog."),
},
{
waitNot: '.modal',
- title: "Congrats",
- content: "Congratulation. This tour is finished.",
- template: self.popover({ fixed: true, next: "Close Tutorial" }),
+ element: '#content-menu-button',
+ placement: 'bottom',
+ title: _t("Add new pages and menus"),
+ content: _t("The 'Content' menu allows you to add pages or add the top menu."),
+ popover: { next: _t("Close Tutorial") },
},
];
return this._super();
diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js
index 1db813e4cd4..8b1284f0a07 100644
--- a/addons/website/static/src/js/website.tour.js
+++ b/addons/website/static/src/js/website.tour.js
@@ -2,8 +2,11 @@
'use strict';
var website = openerp.website;
+
+if (typeof QWeb2 !== "undefined")
website.add_template_file('/website/static/src/xml/website.tour.xml');
+if (website.EditorBar)
website.EditorBar.include({
tours: [],
start: function () {
@@ -17,31 +20,11 @@ website.EditorBar.include({
});
menu.append($menuItem);
});
-
- this.waitRTEReady = false;
- this.on('rte:called', this, function () {self.waitRTEReady = true; });
- this.on('rte:ready', this, function () {self.waitRTEReady = false;});
-
- var res = this._super();
- website.Tour.waitReady.call(this, this.testRunning);
- return res;
+ return this._super();
},
registerTour: function (tour) {
website.Tour.add(tour);
this.tours.push(tour);
- },
- testRunning: function () {
- if (this.waitRTEReady) {
- this.on('rte:ready', this, function () {
- website.Tour.each(function () {
- this.running();
- });
- });
- } else {
- website.Tour.each(function () {
- this.running();
- });
- }
}
});
@@ -78,23 +61,12 @@ $.ajaxSetup({
}
});
-
website.Tour = openerp.Class.extend({
steps: [],
defaultDelay: 50, //ms
+ defaultOverLaps: 5000, //ms
localStorage: window.localStorage,
- init: function (url) {
- this.tour = new Tour({
- name: this.id,
- storage: this.tourStorage,
- keyboard: false,
- template: this.popover(),
- onHide: function () {
- window.scrollTo(0, 0);
- }
- });
- this.registerSteps();
- },
+ init: function () {},
run: function (automatic) {
this.reset();
@@ -107,7 +79,10 @@ website.Tour = openerp.Class.extend({
if (automatic) {
this.localStorage.setItem("tour-"+this.id+"-test-automatic", true);
+ } else {
+ this.localStorage.removeItem("tour-"+this.id+"-test-automatic");
}
+ this.automatic = automatic;
if (this.path) {
// redirect to begin of the tour in function of the language
@@ -123,12 +98,13 @@ website.Tour = openerp.Class.extend({
website.Tour.waitReady.call(this, function () {self._running();});
},
running: function () {
+ var self = this;
if (+this.localStorage.getItem("tour-"+this.id+"-test") >= this.steps.length-1) {
this.endTour();
return;
}
- if (website.Tour.is_busy() || !this.testPathUrl()) return;
+ if (website.Tour.is_busy()) return;
// launch tour with url
this.checkRunningUrl();
@@ -136,6 +112,21 @@ website.Tour = openerp.Class.extend({
// mark tour as busy (only one test running)
if (this.localStorage.getItem("tour-"+this.id+"-test") != null) {
website.Tour.busy = true;
+ this.automatic = !!this.localStorage.getItem("tour-"+this.id+"-test-automatic");
+ }
+
+ if (!this.testPathUrl()) {
+ if (this.automatic) {
+ this.timer = setTimeout(function () {
+ self.reset();
+ throw new Error("Wrong url for running " + self.id
+ + '\ntestPath: ' + self.testPath
+ + '\nhref: ' + window.location.href
+ + "\nreferrer: " + document.referrer
+ );
+ },this.defaultOverLaps);
+ }
+ return;
}
var self = this;
@@ -143,14 +134,10 @@ website.Tour = openerp.Class.extend({
},
_running: function () {
var stepId = this.localStorage.getItem("tour-"+this.id+"-test");
- var automatic = !!this.localStorage.getItem("tour-"+this.id+"-test-automatic");
-
+
if (stepId != null) {
- if (!this.check(this.step(stepId))) {
- var step = this.next(stepId);
- stepId = step ? step.stepId : stepId;
- }
- this.nextStep(stepId, automatic ? this.autoNextStep : null, automatic ? 5000 : null);
+ this.registerTour();
+ this.nextStep(stepId, this.automatic ? this.autoNextStep : null, this.automatic ? this.defaultOverLaps : null);
}
},
@@ -187,20 +174,35 @@ website.Tour = openerp.Class.extend({
}
},
+ registerTour: function () {
+ this.tour = new Tour({
+ name: this.id,
+ storage: this.tourStorage,
+ keyboard: false,
+ template: this.popover(),
+ onHide: function () {
+ window.scrollTo(0, 0);
+ }
+ });
+ this.registerSteps();
+ },
registerSteps: function () {
for (var index=0, len=this.steps.length; index<len; index++) {
var step = this.steps[index];
step.stepId = step.stepId || ""+index;
- if (!step.waitNot && index > 0 && $(this.steps[index-1].template).has("button[data-role='next']").size()) {
- step.waitNot = '.popover.tour';
+ if (!step.waitNot && index > 0 && this.steps[index-1] &&
+ this.steps[index-1].popover && this.steps[index-1].popover.next) {
+ step.waitNot = '.popover.tour:visible';
}
if (!step.waitFor && index > 0 && this.steps[index-1].snippet) {
step.waitFor = '.oe_overlay_options .oe_options:visible';
}
- step._title = step.title;
- step.title = openerp.qweb.render('website.tour_popover_title', { title: step.title });
+ step._title = step._title || step.title;
+ step.title = this.popoverTitle({ title: step._title });
+ step.template = step.template || this.popover( step.popover );
+
if (!step.element) step.orphan = true;
if (step.snippet) {
step.element = '#oe_snippets div.oe_snippet[data-snippet-id="'+step.snippet+'"] .oe_snippet_thumbnail';
@@ -208,9 +210,10 @@ website.Tour = openerp.Class.extend({
}
- if ($(this.steps[index-1].template).has("button[data-role='next']").size()) {
+ if (this.steps[index-1] &&
+ this.steps[index-1].popover && this.steps[index-1].popover.next) {
var step = {
- stepId: index,
+ stepId: ""+index,
waitNot: '.popover.tour:visible'
};
this.steps.push(step);
@@ -219,8 +222,21 @@ website.Tour = openerp.Class.extend({
this.tour.addSteps(this.steps);
},
+ popoverTitle: function (options) {
+ try {
+ return openerp.qweb.render('website.tour_popover_title', options);
+ } catch (e) {
+ if (!this.automatic) throw e;
+ return options.title;
+ }
+ },
popover: function (options) {
- return openerp.qweb.render('website.tour_popover', options);
+ try {
+ return openerp.qweb.render('website.tour_popover', options);
+ } catch (e) {
+ if (!this.automatic) throw e;
+ return "";
+ }
},
timer: null,
@@ -268,7 +284,12 @@ website.Tour = openerp.Class.extend({
self.timer = setTimeout(checkNext, self.defaultDelay);
} else {
self.reset();
- throw new Error("Time overlaps to arrive to step " + step.stepId + ": '" + step._title + "'");
+ throw new Error("Time overlaps to arrive to step " + step.stepId + ": '" + step._title + "'"
+ + '\nelement: ' + Boolean(!step.element || ($(step.element).size() && $(step.element).is(":visible") && !$(step.element).is(":hidden")))
+ + '\nwaitNot: ' + Boolean(!step.waitNot || !$(step.waitNot).size())
+ + '\nwaitFor: ' + Boolean(!step.waitFor || $(step.waitFor).size())
+ + '\n\n' + $("body").html()
+ );
}
}
checkNext();
@@ -291,7 +312,7 @@ website.Tour = openerp.Class.extend({
$(".popover.tour").remove();
// go to step in bootstrap tour
this.tour.goto(index);
- if (step.callback) step.callback();
+ if (step.onload) step.onload();
next = steps.shift();
break;
}
@@ -358,7 +379,10 @@ website.Tour = openerp.Class.extend({
} else if (step.sampleText) {
$element.trigger($.Event("keydown", { srcElement: $element }));
- if ($element.is("select") || $element.is("input") ) {
+ if ($element.is("input") ) {
+ $element.val(step.sampleText);
+ } if ($element.is("select")) {
+ $element.find("[value='"+step.sampleText+"'], option:contains('"+step.sampleText+"')").attr("selected", true);
$element.val(step.sampleText);
} else {
$element.html(step.sampleText);
@@ -404,7 +428,10 @@ website.Tour.busy = false;
website.Tour.add = function (tour) {
website.Tour.waitReady(function () {
tour = tour.id ? tour : new tour();
- website.Tour.tours[tour.id] = tour;
+ if (!website.Tour.tours[tour.id]) {
+ website.Tour.tours[tour.id] = tour;
+ tour.running();
+ }
});
};
website.Tour.get = function (id) {
@@ -420,7 +447,7 @@ website.Tour.each = function (callback) {
website.Tour.waitReady = function (callback) {
var self = this;
$(document).ready(function () {
- if ($.ajaxBusy == null || $.ajaxBusy) {
+ if ($.ajaxBusy) {
$(document).ajaxStop(function() {
setTimeout(function () {
callback.call(self);
@@ -435,18 +462,20 @@ website.Tour.waitReady = function (callback) {
});
};
website.Tour.run_test = function (id) {
- website.Tour.get(id).run(true);
+ website.Tour.waitReady(function () {
+ if (!website.Tour.is_busy()) {
+ website.Tour.tours[id].run(true);
+ }
+ });
};
website.Tour.is_busy = function () {
for (var k in this.localStorage) {
if (!k.indexOf("tour-")) {
- return true;
+ return k;
}
}
return website.Tour.busy;
};
-
-
}());
diff --git a/addons/website/static/src/js/website.tour.test.admin.js b/addons/website/static/src/js/website.tour.test.admin.js
new file mode 100644
index 00000000000..787f05beb23
--- /dev/null
+++ b/addons/website/static/src/js/website.tour.test.admin.js
@@ -0,0 +1,106 @@
+(function () {
+ 'use strict';
+
+ var website = openerp.website;
+
+ website.Tour.LoginEdit = website.Tour.extend({
+ id: 'login_edit',
+ name: "Try to log as admin and check editor",
+ path: '/',
+ init: function () {
+ var self = this;
+ self.steps = [
+ {
+ title: "click login",
+ element: '#top_menu a[href*="/web/login"]',
+ },
+ {
+ title: "insert login",
+ element: '.oe_login_form input[name="login"]',
+ sampleText: "admin",
+ },
+ {
+ title: "insert password",
+ waitFor: '.oe_login_form input[name="login"][value!=""]',
+ element: '.oe_login_form input[name="password"]',
+ sampleText: "admin",
+ },
+ {
+ title: "select 2 Standard tickets",
+ waitFor: '.oe_login_form input[name="password"][value!=""]',
+ element: '.oe_login_form button',
+ },
+ {
+ title: "go back to website from backend",
+ element: 'a[data-action-model="ir.actions.act_url"]:contains("Website")',
+ },
+ {
+ title: 'try to edit',
+ waitNot: '#wrap .carousel',
+ element: 'button[data-action=edit]:visible',
+ },
+ {
+ title: 'check edit mode',
+ waitFor: 'button[data-action=save]:visible',
+ },
+ {
+ title: 'check branding',
+ waitFor: '#wrap[data-oe-model="ir.ui.view"]',
+ },
+ {
+ title: 'check rte',
+ waitFor: '#oe_rte_toolbar',
+ },
+ {
+ title: 'check insert block button',
+ element: '[data-action="snippet"]:visible',
+ },
+ {
+ title: 'add snippets',
+ snippet: 'carousel',
+ },
+ {
+ title: 'try to save',
+ waitFor: '.oe_overlay_options .oe_options:visible',
+ element: 'button[data-action=save]:visible',
+ },
+ {
+ title: 'check saved',
+ waitFor: '#wrap div.carousel',
+ element: 'button[data-action=edit]:visible',
+ },
+ {
+ title: 'try to re-edit',
+ waitFor: 'button[data-action=save]:visible',
+ element: '#wrap .carousel',
+ },
+ {
+ title: 'remove snippet',
+ element: '.oe_snippet_remove',
+ },
+ {
+ title: 'try to re-save',
+ waitNot: '#wrap .carousel',
+ element: 'button[data-action=save]:visible',
+ },
+ {
+ title: "click admin",
+ waitFor: 'button[data-action=edit]:visible',
+ element: 'a:contains("Administrator")',
+ },
+ {
+ title: "click logout",
+ element: '#top_menu a[href*="/logout"]',
+ },
+ {
+ title: "check logout",
+ waitFor: '#top_menu a[href*="/web/login"]',
+ },
+ ];
+ return this._super();
+ },
+ });
+ // for test without editor bar
+ website.Tour.add(website.Tour.LoginEdit);
+
+}());
diff --git a/addons/website/static/src/js/website.tour.test.js b/addons/website/static/src/js/website.tour.test.js
new file mode 100644
index 00000000000..3e85ce20dae
--- /dev/null
+++ b/addons/website/static/src/js/website.tour.test.js
@@ -0,0 +1,34 @@
+(function () {
+
+function LoadScript(src) {
+ xmlHttp = new XMLHttpRequest();
+ xmlHttp.onreadystatechange = function() {
+ if(xmlHttp.readyState == 4) {
+ if (xmlHttp.status == 200 || xmlHttp.status == 304) {
+ new Function(xmlHttp.responseText)();
+ } else {
+ throw new Error("Can't load JavaScript.\nhref: " + window.location.href + "\nsrc: " + src);
+ }
+ }
+ };
+ xmlHttp.open("GET", src, false);
+ xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+ xmlHttp.send(null);
+}
+
+if (typeof jQuery === "undefined")
+ LoadScript("/web/static/lib/jquery/jquery.js");
+if (typeof _ === "undefined")
+ LoadScript("/web/static/lib/underscore/underscore.js");
+if (typeof openerp === "undefined") {
+ LoadScript("/web/static/lib/qweb/qweb2.js");
+ LoadScript("/web/static/src/js/openerpframework.js");
+}
+if (typeof openerp === "undefined" || !openerp.website || !openerp.website.add_template_file)
+ LoadScript("/website/static/src/js/website.js");
+if (typeof Tour === "undefined")
+ LoadScript("/website/static/lib/bootstrap-tour/bootstrap-tour.js");
+if (typeof openerp === "undefined" || !openerp.website.Tour)
+ LoadScript("/website/static/src/js/website.tour.js");
+
+})(); \ No newline at end of file