diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index c19be2f7330..d23bbb3adfe 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -294,7 +294,7 @@ class Website(openerp.addons.web.controllers.main.Home): #------------------------------------------------------ # Helpers #------------------------------------------------------ - @http.route(['/website/kanban/'], type='http', auth="public", methods=['POST'], website=True) + @http.route(['/website/kanban'], type='http', auth="public", methods=['POST'], website=True) def kanban(self, **post): return request.website.kanban_col(**post) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 1833ce102db..c0a9e209d00 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -91,7 +91,12 @@ class ir_http(orm.AbstractModel): assert path is not None except Exception: return self._handle_exception(werkzeug.exceptions.NotFound()) - if path != werkzeug.url_quote(request.httprequest.path): + + generated_path = werkzeug.url_unquote_plus(path) + current_path = werkzeug.url_unquote_plus(request.httprequest.path) + if generated_path != current_path: + if request.lang != request.website.default_lang_code: + path = '/' + request.lang + path return werkzeug.utils.redirect(path) def _handle_exception(self, exception=None, code=500): diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 1a541865987..15e1a643d3d 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -248,7 +248,7 @@ class website(osv.osv): pmin = pmax - scope if pmax - scope > 0 else 1 def get_url(page): - _url = "%spage/%s/" % (url, page) if page > 1 else url + _url = "%s/page/%s" % (url, page) if page > 1 else url if url_args: _url = "%s?%s" % (_url, werkzeug.url_encode(url_args)) return _url diff --git a/addons/website/static/src/js/website.editor.newpage.js b/addons/website/static/src/js/website.editor.newpage.js index b475223ecd9..77a086790fa 100644 --- a/addons/website/static/src/js/website.editor.newpage.js +++ b/addons/website/static/src/js/website.editor.newpage.js @@ -48,7 +48,7 @@ } }).then(function (val, field, $dialog) { if (val) { - var url = '/website/add/' + encodeURI(val); + var url = '/website/add' + encodeURI(val); if ($dialog.find('input[type="checkbox"]').is(':checked')) url +="?add_menu=1"; document.location = url; } diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index 065928df1cf..31e39b3bbc4 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -53,6 +53,7 @@ /* ---------------------------------------------------- Widgets ---------------------------------------------------- */ + website.prompt = function (options) { /** * A bootstrapped version of prompt() albeit asynchronous @@ -198,7 +199,7 @@ var page = +$a.attr("href").split(",").pop().split('-')[1]; data['page'] = page; - $.post('/website/kanban/', data, function (col) { + $.post('/website/kanban', data, function (col) { $col.find("> .thumbnail").remove(); $pagination.last().before(col); }); diff --git a/addons/website/static/src/js/website.mobile.js b/addons/website/static/src/js/website.mobile.js index 59c2328e09b..88a558f5094 100644 --- a/addons/website/static/src/js/website.mobile.js +++ b/addons/website/static/src/js/website.mobile.js @@ -18,9 +18,9 @@ }, start: function () { if (!window.location.origin) { // fix for ie9 - window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '') + '/'; + window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); } - document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview"; + document.getElementById("mobile-viewport").src = window.location.origin + (window.location.pathname.length ? '/' : '') + window.location.pathname + "#mobile-preview"; this.$el.modal(); }, destroy: function () { diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index 61b8f851339..b7e55fe166b 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -1,11 +1,30 @@ (function () { 'use strict'; -var website = openerp.website; +// raise an error in test mode if openerp don't exist +if (typeof openerp === "undefined") { + var error = "openerp is undefined" + + "\nhref: " + window.location.href + + "\nreferrer: " + document.referrer + + "\nlocalStorage: " + JSON.stringify(window.localStorage); + if (typeof $ !== "undefined") { + error += '\n\n' + $("body").html(); + } + throw new Error(error); +} + +var website = window.openerp.website; + +// don't rewrite website.Tour in test mode +if (typeof website.Tour !== "undefined") { + return; +} // don't need template to use bootstrap Tour in automatic mode -if (typeof QWeb2 !== "undefined") -website.add_template_file('/website/static/src/xml/website.tour.xml'); +if (typeof QWeb2 !== "undefined") { + website.add_template_file('/website/static/src/xml/website.tour.xml'); + +} // don't need to use bootstrap Tour to launch an automatic tour function bootstrap_tour_stub () { @@ -19,27 +38,28 @@ function bootstrap_tour_stub () { -if (website.EditorBar) -website.EditorBar.include({ - tours: [], - start: function () { - var self = this; - var menu = $('#help-menu'); - _.each(this.tours, function (tour) { - var $menuItem = $($.parseHTML('
  • '+tour.name+'
  • ')); - $menuItem.click(function () { - tour.reset(); - tour.run(); +if (website.EditorBar) { + website.EditorBar.include({ + tours: [], + start: function () { + var self = this; + var menu = $('#help-menu'); + _.each(this.tours, function (tour) { + var $menuItem = $($.parseHTML('
  • '+tour.name+'
  • ')); + $menuItem.click(function () { + tour.reset(); + tour.run(); + }); + menu.append($menuItem); }); - menu.append($menuItem); - }); - return this._super(); - }, - registerTour: function (tour) { - website.Tour.add(tour); - this.tours.push(tour); - } -}); + return this._super(); + }, + registerTour: function (tour) { + website.Tour.add(tour); + this.tours.push(tour); + } + }); +} ///////////////////////////////////////////////// @@ -308,7 +328,8 @@ 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("Can't arrive to step " + step.stepId + ": '" + step._title + "'" + + '\nhref: ' + window.location.href + '\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()) @@ -363,12 +384,13 @@ website.Tour = openerp.Class.extend({ } }, endTour: function () { - if (parseInt(this.localStorage.getItem("tour-"+this.id+"-test"),10) >= this.steps.length-1) { + var test = parseInt(this.localStorage.getItem("tour-"+this.id+"-test"),10) >= this.steps.length-1; + this.reset(); + if (test) { console.log('ok'); } else { console.log('error'); } - this.reset(); }, autoNextStep: function () { var self = this; diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 063d2b638f4..3df96cb65f2 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -289,8 +289,7 @@ diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index 45a52a854f0..7cab897e695 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -55,7 +55,7 @@ class WebsiteBlog(http.Controller): blog_obj = request.registry['blog.post'] total = blog_obj.search(cr, uid, [], count=True, context=context) pager = request.website.pager( - url='/blog/', + url='/blog', total=total, page=page, step=BYPAGE, @@ -112,7 +112,7 @@ class WebsiteBlog(http.Controller): path_filter += 'tag/%s/' % tag.id domain += [("tag_ids", "in", [tag.id])] if date: - path_filter += "date/%s/" % date + path_filter += "date/%s" % date domain += [("create_date", ">=", date.split("_")[0]), ("create_date", "<=", date.split("_")[1])] blog_post_count = blog_post_obj.search(cr, uid, domain, count=True, context=context) @@ -308,4 +308,3 @@ class WebsiteBlog(http.Controller): @http.route('/blog/get_user/', type='json', auth="public", website=True) def get_user(self, **post): return [False if request.session.uid else True] - diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index fbfb1908a14..6d6dda59a99 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -13,21 +13,21 @@ class WebsiteCrmPartnerAssign(http.Controller): _references_per_page = 20 @http.route([ - '/partners/', - '/partners/page//', + '/partners', + '/partners/page/', '/partners/grade/', - '/partners/grade//page//', + '/partners/grade//page/', '/partners/country/', '/partners/country/-', - '/partners/country//page//', - '/partners/country/-/page//', + '/partners/country//page/', + '/partners/country/-/page/', - '/partners/grade//country//', + '/partners/grade//country/', '/partners/grade//country/-', - '/partners/grade//country//page//', - '/partners/grade//country/-/page//', + '/partners/grade//country//page/', + '/partners/grade//country/-/page/', ], type='http', auth="public", website=True, multilang=True) def partners(self, country_id=0, grade_id=0, page=0, **post): @@ -72,7 +72,7 @@ class WebsiteCrmPartnerAssign(http.Controller): partner_ids = partner_obj.search( request.cr, openerp.SUPERUSER_ID, partner_domain, context=request.context) - pager = request.website.pager(url="/partners/", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post) + pager = request.website.pager(url="/partners", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post) # search for partners to display partners_data = partner_obj.search_read(request.cr, openerp.SUPERUSER_ID, @@ -110,7 +110,7 @@ class WebsiteCrmPartnerAssign(http.Controller): } return request.website.render("website_crm_partner_assign.index", values) - @http.route(['/partners//', '/partners/-/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/partners/', '/partners/-'], type='http', auth="public", website=True, multilang=True) def partners_ref(self, partner_id, **post): partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context) values = website_partner.get_partner_template_value(partner) diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml index cd2e3cb58bd..56ac22d1eee 100644 --- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml @@ -5,7 +5,7 @@ @@ -55,7 +55,7 @@
  • - + @@ -93,11 +93,11 @@
    - +
    - - + -
    @@ -112,7 +112,7 @@

    World Map

    diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py index 173b0871dbe..5f0825e132c 100644 --- a/addons/website_customer/controllers/main.py +++ b/addons/website_customer/controllers/main.py @@ -12,12 +12,12 @@ class WebsiteCustomer(http.Controller): _references_per_page = 20 @http.route([ - '/customers/', - '/customers/page//', + '/customers', + '/customers/page/', '/customers/country/', '/customers/country/-', - '/customers/country//page//', - '/customers/country/-/page//', + '/customers/country//page/', + '/customers/country/-/page/', ], type='http', auth="public", website=True, multilang=True) def customers(self, country_id=0, page=0, **post): cr, uid, context = request.cr, request.uid, request.context @@ -62,7 +62,7 @@ class WebsiteCustomer(http.Controller): # pager pager = request.website.pager( - url="/customers/", total=len(partner_ids), page=page, step=self._references_per_page, + url="/customers", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post ) @@ -83,7 +83,7 @@ class WebsiteCustomer(http.Controller): } return request.website.render("website_customer.index", values) - @http.route(['/customers//', '/customers/-/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/customers/', '/customers/-'], type='http', auth="public", website=True, multilang=True) def customer(self, partner_id, **post): partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context) values = website_partner.get_partner_template_value(partner) diff --git a/addons/website_customer/views/website_customer.xml b/addons/website_customer/views/website_customer.xml index ad924cba55d..ba89f456e23 100644 --- a/addons/website_customer/views/website_customer.xml +++ b/addons/website_customer/views/website_customer.xml @@ -5,7 +5,7 @@ @@ -44,11 +44,11 @@
  • - + @@ -143,7 +143,7 @@ @@ -158,11 +158,11 @@

    References

    - +
    - +
    diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index eb38e2dbe55..dad603f47ef 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -33,7 +33,7 @@ from openerp import tools import werkzeug.urls class website_event(http.Controller): - @http.route(['/event/', '/event/page/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event', '/event/page/'], type='http', auth="public", website=True, multilang=True) def events(self, page=1, **searches): cr, uid, context = request.cr, request.uid, request.context event_obj = request.registry['event.event'] @@ -134,7 +134,7 @@ class website_event(http.Controller): event_count = event_obj.search( request.cr, request.uid, dom_without("none"), count=True, context=request.context) - pager = request.website.pager(url="/event/", total=event_count, page=page, step=step, scope=5) + pager = request.website.pager(url="/event", total=event_count, page=page, step=step, scope=5) order = 'website_published desc, date_begin' if searches.get('date','all') == 'old': @@ -202,4 +202,4 @@ class website_event(http.Controller): 'date_end': (date_begin + timedelta(days=(1))).strftime('%Y-%m-%d'), } event_id = Event.create(request.cr, request.uid, vals, context=context) - return request.redirect("/event/%s/?enable_editor=1" % event_id) + return request.redirect("/event/%s?enable_editor=1" % event_id) diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index 20d3499cf4a..3d019ba7417 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -50,7 +50,7 @@
  • - + not published

    @@ -248,7 +248,7 @@

    Event not found!

    Sorry, the requested event is not available anymore.

    -

    Return to the event list.

    +

    Return to the event list.

    diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py index cc9ddc0ad56..2db874cf5b7 100644 --- a/addons/website_event_sale/controllers/main.py +++ b/addons/website_event_sale/controllers/main.py @@ -78,7 +78,7 @@ class website_event(website_event): order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context) if not _values: - return request.redirect("/event/%s/" % event_id) + return request.redirect("/event/%s" % event_id) return request.redirect("/shop/checkout") def _add_event(self, event_name="New Event", context={}, **kwargs): diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 3c74cc2317e..48b9b62b349 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -7,7 +7,6 @@ id: 'event_buy_tickets', name: "Try to buy tickets for event", path: '/event', - testPath: '/(event|shop)', init: function () { var self = this; self.steps = [ @@ -44,7 +43,7 @@ { title: "Complete checkout", waitFor: '#top_menu .my_cart_quantity:contains(5)', - element: 'form[action="/shop/confirm_order/"] .btn:contains("Confirm")', + element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', onload: function (tour) { if ($("input[name='name']").val() === "") $("input[name='name']").val("website_sale-test-shoptest"); diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index 6405bbd4cbf..b5950aaec54 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -5,13 +5,15 @@ inject = [ "./../../../website_event_sale/static/src/js/website.tour.event_sale.js", ] +@openerp.tests.common.at_install(False) +@openerp.tests.common.post_install(True) class TestUi(openerp.tests.HttpCase): def test_admin(self): - self.phantom_js("/", "openerp.website.Tour.run_test('banner')", "openerp.website.Tour") + self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", inject=inject) def test_demo(self): - self.phantom_js("/", "openerp.website.Tour.run_test('login_edit')", "openerp.website.Tour", login="demo", password="demo", inject=inject); + self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", login="demo", password="demo", inject=inject); def test_public(self): - self.phantom_js("/", "openerp.website.Tour.run_test('login_edit')", "openerp.website.Tour", login=None, inject=inject); + self.phantom_js("/", "openerp.website.Tour.run_test('event_buy_tickets')", "openerp.website.Tour", login=None, inject=inject); diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py index d4b7177814d..466e3d37a40 100644 --- a/addons/website_event_track/controllers/event.py +++ b/addons/website_event_track/controllers/event.py @@ -38,7 +38,7 @@ class website_event(http.Controller): return request.website.render("website_event_track.track_view", values) # TODO: not implemented - @http.route(['/event//agenda/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event//agenda'], type='http', auth="public", website=True, multilang=True) def event_agenda(self, event, tag=None, **post): values = { 'event': event, @@ -47,7 +47,7 @@ class website_event(http.Controller): return request.website.render("website_event_track.agenda", values) @http.route([ - '/event//track/', + '/event//track', '/event//track/tag/' ], type='http', auth="public", website=True, multilang=True) def event_tracks(self, event, tag=None, **post): @@ -74,7 +74,7 @@ class website_event(http.Controller): } return request.website.render("website_event_track.tracks", values) - @http.route(['/event//track_proposal/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event//track_proposal'], type='http', auth="public", website=True, multilang=True) def event_track_proposal(self, event, **post): values = { 'event': event } return request.website.render("website_event_track.event_track_proposal", values) diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index 312fb67c087..bb7c8db17d9 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -142,12 +142,12 @@ class event_event(osv.osv): context = context or {} result = super(event_event, self)._get_new_menu_pages(cr, uid, event, context=context) if event.show_tracks: - result.append( (_('Talks'), '/event/%s/track/' % slug(event))) - result.append( (_('Agenda'), '/event/%s/agenda/' % slug(event))) + result.append( (_('Talks'), '/event/%s/track' % slug(event))) + result.append( (_('Agenda'), '/event/%s/agenda' % slug(event))) if event.blog_id: - result.append( (_('News'), '/blogpost/'+slug(event.blog_ig))) + result.append( (_('News'), '/blogpost'+slug(event.blog_ig))) if event.show_track_proposal: - result.append( (_('Talk Proposals'), '/event/%s/track_proposal/' % slug(event))) + result.append( (_('Talk Proposals'), '/event/%s/track_proposal' % slug(event))) return result # diff --git a/addons/website_event_track/views/website_event.xml b/addons/website_event_track/views/website_event.xml index a2a180aca3b..f7c018bead1 100644 --- a/addons/website_event_track/views/website_event.xml +++ b/addons/website_event_track/views/website_event.xml @@ -174,7 +174,7 @@