From 8f7db60fd60313e3fddcaa88b81be22f5fd5663d Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 08:55:16 +0100 Subject: [PATCH 01/13] [FIX] Tour should not start when testing bzr revid: ddm@openerp.com-20131216075516-o70h4ydhgqj4i3kh --- addons/website/static/src/js/website.tour.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/addons/website/static/src/js/website.tour.js b/addons/website/static/src/js/website.tour.js index c2f3b09911a..fb869119352 100644 --- a/addons/website/static/src/js/website.tour.js +++ b/addons/website/static/src/js/website.tour.js @@ -69,7 +69,7 @@ $doc.one('shown.bs.modal', function () { $('.modal button.btn-primary').one('click', function () { $doc.off('hide.bs.modal', onStop); - self.moveToStep(step.trigger.modal.afterSubmit); + (callback || self.moveToNextStep).apply(self, [step.trigger.modal.afterSubmit]); }); (callback || self.moveToNextStep).apply(self); }); @@ -290,6 +290,7 @@ return this._super(); }, registerTour: function (tour) { + var self = this; var testId = 'test_'+tour.id+'_tour'; this.tours.push(tour); var test = { @@ -343,9 +344,17 @@ currentStep = actionSteps.shift(); } } - setTimeout(function () { - executeStep(currentStep); - }, 0); + if (currentStep.snippet && $(currentStep.element).length === 0) { + self.on('rte:ready', this, function () { + executeStep(currentStep); + }); + } else { + setTimeout(function () { + setTimeout(function () { + executeStep(currentStep); + }, 0); + }, 0); + } } }, reset: function () { From 7ce0b5a69e221770bef6519660fa1de860606b08 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 09:56:36 +0100 Subject: [PATCH 02/13] [FIX] Main object for blog posts (promote) bzr revid: ddm@openerp.com-20131216085636-y1h0h4ig9pbv9bcm --- addons/website_blog/controllers/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index d38d110aac1..00835d133ab 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -209,6 +209,7 @@ class WebsiteBlog(http.Controller): 'tags': tags, 'tag': tag and request.registry['blog.tag'].browse(cr, uid, int(tag), context=context) or None, 'blog_post': blog_post, + 'main_object': blog_post, 'pager': pager, 'nav_list': self.nav_list(), 'enable_editor': enable_editor, From 87c3b6ac726cf2d6531d716a13705549ad86d28b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 16 Dec 2013 10:23:43 +0100 Subject: [PATCH 03/13] [FIX] disabling of field escaping bzr revid: xmo@openerp.com-20131216092343-0e6t7nvse3r0p2zs --- addons/website/models/ir_qweb.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index d553acf363a..ea982bbe563 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -25,6 +25,7 @@ import openerp from openerp.osv import orm, fields from openerp.tools import ustr, DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT from openerp.addons.web.http import request +from openerp.addons.base.ir import ir_qweb REMOTE_CONNECTION_TIMEOUT = 2.5 @@ -198,7 +199,6 @@ class ManyToOne(orm.AbstractModel): matches = self.pool[column._obj].name_search( cr, uid, name=element.text_content().strip(), context=context) # FIXME: no match? More than 1 match? - print element.text_content().strip() assert len(matches) == 1 return matches[0][0] @@ -239,10 +239,10 @@ class Image(orm.AbstractModel): if options is None: options = {} classes = ['img', 'img-responsive'] + options.get('class', '').split() - return '' % ( + return ir_qweb.HTMLSafe('' % ( ' '.join(itertools.imap(werkzeug.utils.escape, classes)), record._model._name, - field_name, record.id) + field_name, record.id)) local_url_re = re.compile(r'^/(?P[^]]+)/static/(?P.+)$') def from_html(self, cr, uid, model, column, element, context=None): @@ -390,4 +390,4 @@ class Contact(orm.AbstractModel): 'options': options }, engine='website.qweb', context=context) - return html + return ir_qweb.HTMLSafe(html) From 7763d6967ede37c771efec2f22ed3718b9c9219e Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 10:27:11 +0100 Subject: [PATCH 04/13] [FIX] Main object for partners (promote) bzr revid: ddm@openerp.com-20131216092711-sv3n8ah969zm8nbs --- addons/website_crm_partner_assign/controllers/main.py | 2 ++ addons/website_crm_partner_assign/models/res_partner.py | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index 6ac2f54b6d2..56cf9c3a4a0 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -96,4 +96,6 @@ class WebsiteCrmPartnerAssign(http.Controller): values = website_partner.get_partner_template_value(partner) if not values: return self.partners(**post) + else: + values['main_object'] = values['partner'] return request.website.render("website_crm_partner_assign.partner", values) diff --git a/addons/website_crm_partner_assign/models/res_partner.py b/addons/website_crm_partner_assign/models/res_partner.py index bd3c1e64ff3..8cb7a3aa771 100644 --- a/addons/website_crm_partner_assign/models/res_partner.py +++ b/addons/website_crm_partner_assign/models/res_partner.py @@ -6,4 +6,8 @@ class res_partner_grade(osv.osv): _inherit = 'res.partner.grade' _columns = { 'website_description': fields.html('Description for the website'), - } \ No newline at end of file + } + +class res_partner(osv.osv): + _name = 'res.partner' + _inherit = ['res.partner','website.seo.metadata'] \ No newline at end of file From 7cd60fb225fa0f7fe1eec928624bb212508eb445 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 10:58:47 +0100 Subject: [PATCH 05/13] [FIX] Customers CMS bug bzr revid: ddm@openerp.com-20131216095847-i4dqzk4ix26hh3cg --- addons/website_customer/controllers/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py index 21aca3b6235..585e7837a74 100644 --- a/addons/website_customer/controllers/main.py +++ b/addons/website_customer/controllers/main.py @@ -81,11 +81,11 @@ class WebsiteCustomer(http.Controller): return self.customers(**post) partner_obj = request.registry['res.partner'] - if values['partner_data']['assigned_partner_id']: + if values['partner_data'].get('assigned_partner_id', None): values['assigned_partner_data'] = partner_obj.read( request.cr, openerp.SUPERUSER_ID, [values['partner_data']['assigned_partner_id'][0]], request.website.get_partner_white_list_fields(), context=request.context)[0] - if values['partner_data']['implemented_partner_ids']: + if values['partner_data'].get('implemented_partner_ids', None): implemented_partners_data = partner_obj.read( request.cr, openerp.SUPERUSER_ID, values['partner_data']['implemented_partner_ids'], request.website.get_partner_white_list_fields(), context=request.context) From 285a596bf2ae96d22fc34c54a2c0c4004b27665e Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 11:25:57 +0100 Subject: [PATCH 06/13] [FIX] Main object for customers (promote) bzr revid: ddm@openerp.com-20131216102557-m9itxlw5jqjcdtlr --- addons/website_crm_partner_assign/models/res_partner.py | 4 ---- addons/website_customer/controllers/main.py | 1 + addons/website_partner/models/res_partner.py | 3 ++- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/addons/website_crm_partner_assign/models/res_partner.py b/addons/website_crm_partner_assign/models/res_partner.py index 8cb7a3aa771..e295c7ab0b1 100644 --- a/addons/website_crm_partner_assign/models/res_partner.py +++ b/addons/website_crm_partner_assign/models/res_partner.py @@ -7,7 +7,3 @@ class res_partner_grade(osv.osv): _columns = { 'website_description': fields.html('Description for the website'), } - -class res_partner(osv.osv): - _name = 'res.partner' - _inherit = ['res.partner','website.seo.metadata'] \ No newline at end of file diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py index 585e7837a74..d0663dfdfdc 100644 --- a/addons/website_customer/controllers/main.py +++ b/addons/website_customer/controllers/main.py @@ -94,4 +94,5 @@ class WebsiteCustomer(http.Controller): if data.get('website_published'): values['implemented_partners_data'].append(data) + values['main_object'] = values['partner'] return request.website.render("website_customer.details", values) diff --git a/addons/website_partner/models/res_partner.py b/addons/website_partner/models/res_partner.py index c5d7539edca..aa9a7cc02a3 100644 --- a/addons/website_partner/models/res_partner.py +++ b/addons/website_partner/models/res_partner.py @@ -4,7 +4,8 @@ from openerp.osv import osv, fields class WebsiteResPartner(osv.Model): - _inherit = 'res.partner' + _name = 'res.partner' + _inherit = ['res.partner','website.seo.metadata'] _columns = { 'website_published': fields.boolean( From ff25c7a85aa35f7ba97f70d908f69397f25b7236 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 11:54:03 +0100 Subject: [PATCH 07/13] [FIX] Main object for events (promote) bzr revid: ddm@openerp.com-20131216105403-0x6p1gg4ef0zjvid --- addons/website_event/controllers/main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index a9cc84b1d6d..70898843fed 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -166,6 +166,7 @@ class website_event(http.Controller): website.preload_records(event, on_error="website_event.404") values = { 'event': event, + 'main_object': event } return request.website.render(page, values) @@ -185,6 +186,7 @@ class website_event(http.Controller): website.preload_records(event, on_error="website_event.404") values = { 'event': event, + 'main_object': event, 'range': range, } return request.website.render("website_event.event_description_full", values) From defdd6e5659a173ab451d290071f3e3bd3ae104a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Mon, 16 Dec 2013 12:02:34 +0100 Subject: [PATCH 08/13] [ADD] main_object for events bzr revid: fme@openerp.com-20131216110234-iup1hiz57b68j8g7 --- addons/website_event/controllers/main.py | 1 + .../website_event_track/controllers/event.py | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 70898843fed..638c5ded6e5 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -188,6 +188,7 @@ class website_event(http.Controller): 'event': event, 'main_object': event, 'range': range, + 'main_object': event, } return request.website.render("website_event.event_description_full", values) diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py index ba683b956b5..fd73c5f2360 100644 --- a/addons/website_event_track/controllers/event.py +++ b/addons/website_event_track/controllers/event.py @@ -31,7 +31,11 @@ class website_event(http.Controller): @website.route(['/event//track/'], type='http', auth="public", multilang=True) def event_track_view(self, event, track, **post): # TODO: not implemented - values = { 'track': track, 'event': track.event_id} + values = { + 'track': track, + 'event': track.event_id, + 'main_object': track.event_id, + } return request.website.render("website_event_track.track_view", values) @website.route([ @@ -55,6 +59,7 @@ class website_event(http.Controller): values = { 'event': event, + 'main_object': event, 'tracks': tracks, 'tags': event.tracks_tag_ids, 'searches': searches, @@ -64,15 +69,24 @@ class website_event(http.Controller): @website.route(['/event/detail/'], type='http', auth="public", multilang=True) def event_detail(self, event, **post): - values = { 'event': event } + values = { + 'event': event, + 'main_object': event, + } return request.website.render("website_event_track.event_home", values) @website.route(['/event//track_proposal/'], type='http', auth="public", multilang=True) def event_track_proposal(self, event, **post): - values = { 'event': event } + values = { + 'event': event, + 'main_object': event, + } return request.website.render("website_event_track.event_track_proposal", values) @website.route(['/event//track_proposal/success/'], type='http', auth="public", multilang=True) def event_track_proposal_success(self, event, **post): - values = { 'event': event } + values = { + 'event': event, + 'main_object': event, + } return request.website.render("website_event_track.event_track_proposal_success", values) From 599b34d78d988f7ec8e85bc1792da0ccab04e2b8 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 12:22:11 +0100 Subject: [PATCH 09/13] [FIX] Snafu bzr revid: ddm@openerp.com-20131216112211-t8tvnamftce80qjd --- .../website_event_track/controllers/event.py | 21 ++++--------------- addons/website_event_track/models/event.py | 2 +- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py index fd73c5f2360..22e4c1501a9 100644 --- a/addons/website_event_track/controllers/event.py +++ b/addons/website_event_track/controllers/event.py @@ -31,11 +31,7 @@ class website_event(http.Controller): @website.route(['/event//track/'], type='http', auth="public", multilang=True) def event_track_view(self, event, track, **post): # TODO: not implemented - values = { - 'track': track, - 'event': track.event_id, - 'main_object': track.event_id, - } + values = { 'track': track, 'event': track.event_id, 'main_object': track } return request.website.render("website_event_track.track_view", values) @website.route([ @@ -69,24 +65,15 @@ class website_event(http.Controller): @website.route(['/event/detail/'], type='http', auth="public", multilang=True) def event_detail(self, event, **post): - values = { - 'event': event, - 'main_object': event, - } + values = { 'event': event, 'main_object': event } return request.website.render("website_event_track.event_home", values) @website.route(['/event//track_proposal/'], type='http', auth="public", multilang=True) def event_track_proposal(self, event, **post): - values = { - 'event': event, - 'main_object': event, - } + values = { 'event': event } return request.website.render("website_event_track.event_track_proposal", values) @website.route(['/event//track_proposal/success/'], type='http', auth="public", multilang=True) def event_track_proposal_success(self, event, **post): - values = { - 'event': event, - 'main_object': event, - } + values = { 'event': event } return request.website.render("website_event_track.event_track_proposal_success", values) diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index 009e12308da..99376fe913e 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -59,7 +59,7 @@ class event_track_location(osv.osv): class event_track(osv.osv): _name = "event.track" _order = 'date' - _inherit = ['mail.thread', 'ir.needaction_mixin'] + _inherit = ['mail.thread', 'ir.needaction_mixin', 'website.seo.metadata'] _columns = { 'name': fields.char('Track Title', required=True), 'user_id': fields.many2one('res.users', 'Responsible'), From ff7da06cf931815ec6515d77b35b1bfb2781aa83 Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 14:35:49 +0100 Subject: [PATCH 10/13] [FIX] Main object for jobs (promote) bzr revid: ddm@openerp.com-20131216133549-57343aix6it9ch5a --- addons/website_hr_recruitment/controllers/main.py | 2 +- addons/website_hr_recruitment/models/hr_job.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/website_hr_recruitment/controllers/main.py b/addons/website_hr_recruitment/controllers/main.py index f1d5fc81916..42d9fbbc2d0 100644 --- a/addons/website_hr_recruitment/controllers/main.py +++ b/addons/website_hr_recruitment/controllers/main.py @@ -49,7 +49,7 @@ class website_hr_recruitment(http.Controller): @website.route(['/job/detail/'], type='http', auth="public", multilang=True) def detail(self, job, **kwargs): - return request.website.render("website_hr_recruitment.detail", {'job': job}) + return request.website.render("website_hr_recruitment.detail", { 'job': job, 'main_object': job }) @website.route(['/job/success'], methods=['POST'], type='http', auth="admin", multilang=True) def success(self, **post): diff --git a/addons/website_hr_recruitment/models/hr_job.py b/addons/website_hr_recruitment/models/hr_job.py index d2624231fc7..0984c9d40eb 100644 --- a/addons/website_hr_recruitment/models/hr_job.py +++ b/addons/website_hr_recruitment/models/hr_job.py @@ -5,7 +5,8 @@ from openerp.osv import osv, fields class hr_job(osv.osv): """ Override to add website-related columns: published, description. """ - _inherit = "hr.job" + _name = 'hr.job' + _inherit = ['hr.job','website.seo.metadata'] def _website_url(self, cr, uid, ids, field_name, arg, context=None): res = dict.fromkeys(ids, '') From d15f3d2b8a420da788f741b933c429538fcbdaef Mon Sep 17 00:00:00 2001 From: ddm Date: Mon, 16 Dec 2013 14:40:33 +0100 Subject: [PATCH 11/13] [FIX] Main object for members (promote) bzr revid: ddm@openerp.com-20131216134033-qnrvj06od8y2o868 --- addons/website_crm_partner_assign/controllers/main.py | 3 +-- addons/website_membership/controllers/main.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index 56cf9c3a4a0..50ad1e26519 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -96,6 +96,5 @@ class WebsiteCrmPartnerAssign(http.Controller): values = website_partner.get_partner_template_value(partner) if not values: return self.partners(**post) - else: - values['main_object'] = values['partner'] + values['main_object'] = values['partner'] return request.website.render("website_crm_partner_assign.partner", values) diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py index feab461f6c3..6985d4449f2 100644 --- a/addons/website_membership/controllers/main.py +++ b/addons/website_membership/controllers/main.py @@ -87,4 +87,5 @@ class WebsiteMembership(http.Controller): values = website_partner.get_partner_template_value(partner) if not values: return self.members(**post) + values['main_object'] = values['partner'] return request.website.render("website_membership.partner", values) From 98c4e6b3d4023663e4fda1244d57dbf94219fd9d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Mon, 16 Dec 2013 14:44:24 +0100 Subject: [PATCH 12/13] [IMP] editability criteria for links and images if a link or image is an editing host (has @contenteditable=true), its body is editable *but* its attributes should not be considered editable: if the attributes come from a t-att-*, @contenteditable will be set on the node itself. such elements should be ignored by the link & image dialog handling thing, as editing their attributes has undesirable effects. bzr revid: xmo@openerp.com-20131216134424-fdqs03i9pidbmaqt --- .../website/static/src/js/website.editor.js | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 40b7820e89a..1e3ef0da66a 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -32,6 +32,27 @@ }); }); + /** + * An editing host is an HTML element with @contenteditable=true, or the + * child of a document in designMode=on (but that one's not supported) + * + * https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#editing-host + */ + function is_editing_host(element) { + return element.getAttribute('contentEditable') === 'true'; + } + /** + * Checks that both the element's content *and the element itself* are + * editable: an editing host is considered non-editable because its content + * is editable but its attributes should not be considered editable + */ + function is_editable_node(element) { + return !(element.data('oe-model') === 'ir.ui.view' + || element.data('cke-realelement') + || is_editing_host(element) + || element.isReadOnly()); + } + function link_dialog(editor) { return new website.editor.RTELinkDialog(editor).appendTo(document.body); } @@ -54,18 +75,13 @@ init: function (editor) { editor.on('doubleclick', function (evt) { var element = evt.data.element; - if (element.is('img') - && !element.data('cke-realelement') - && !element.isReadOnly() - && (element.data('oe-model') !== 'ir.ui.view')) { + if (element.is('img') && is_editable_node(element)) { image_dialog(editor, element); return; } element = get_selected_link(editor) || evt.data.element; - if (element.isReadOnly() - || !element.is('a') - || element.data('oe-model')) { + if (!(element.is('a') && is_editable_node(element))) { return; } @@ -360,7 +376,8 @@ }); $body.css('padding-top', '50px'); // Not working properly: editor.$el.outerHeight()); }; - /* ----- TOP EDITOR BAR FOR ADMIN ---- */ + + /* ----- TOP EDITOR BAR FOR ADMIN ---- */ website.EditorBar = openerp.Widget.extend({ template: 'website.editorbar', events: { @@ -597,9 +614,7 @@ if (previous && previous === this) { return; } var selected = new CKEDITOR.dom.element(this); - if (selected.data('oe-model') === 'ir.ui.view' - || selected.data('cke-realelement') - || selected.isReadOnly()) { + if (!is_editable_node(selected)) { return; } From 3aaa0c10fe59f11cd3604c8e837d6bdb215d11b7 Mon Sep 17 00:00:00 2001 From: Max Mumford Date: Mon, 16 Dec 2013 17:06:54 +0100 Subject: [PATCH 13/13] [ADD]
tag around content for easy replacing, and CSS changes to maintain current UI bzr revid: mmu@openerp.com-20131216160654-s75kx9xr2yutq5fg --- addons/website/static/src/css/website.css | 2 +- addons/website/static/src/css/website.sass | 2 +- addons/website/views/website_templates.xml | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/addons/website/static/src/css/website.css b/addons/website/static/src/css/website.css index 3c57d1bf69f..4d75ef6ef51 100644 --- a/addons/website/static/src/css/website.css +++ b/addons/website/static/src/css/website.css @@ -203,7 +203,7 @@ html, body, #wrapwrap { width: 100%; } -header, #wrap, footer { +header, main, footer { display: table-row; } diff --git a/addons/website/static/src/css/website.sass b/addons/website/static/src/css/website.sass index eeac3ce2eb5..babeee577a7 100644 --- a/addons/website/static/src/css/website.sass +++ b/addons/website/static/src/css/website.sass @@ -127,7 +127,7 @@ html,body, #wrapwrap display: table width: 100% -header, #wrap, footer +header, main, footer display: table-row footer diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 257e3bb4562..be7d4c65a85 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -114,7 +114,9 @@ - +
+ +