diff options
| author | ddm <ddm@openerp.com> | 2013-09-12 17:33:38 +0200 |
|---|---|---|
| committer | ddm <ddm@openerp.com> | 2013-09-12 17:33:38 +0200 |
| commit | 0673d95ff53fa69cf2f09656d51aad54bdf81f97 (patch) | |
| tree | ec00e18a3ab7c94d5f8ae061af7fb49f69b3c6d0 /addons/website | |
| parent | 28043e726272f4b54b3afa8e84f7688f5001ba92 (diff) | |
[FIX] SEO according to mockup
bzr revid: ddm@openerp.com-20130912153338-00oh2h3qals2h2g9
Diffstat (limited to 'addons/website')
| -rw-r--r-- | addons/website/static/src/js/website.ace.js | 37 | ||||
| -rw-r--r-- | addons/website/static/src/js/website.seo.js | 67 | ||||
| -rw-r--r-- | addons/website/static/src/xml/website.seo.xml | 34 |
3 files changed, 39 insertions, 99 deletions
diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js index bc7c58575db..fd26c50aefd 100644 --- a/addons/website/static/src/js/website.ace.js +++ b/addons/website/static/src/js/website.ace.js @@ -27,21 +27,16 @@ this.xml = text; }, isWellFormed: function () { - try { - if (document.implementation.createDocument) { - var dom = new DOMParser().parseFromString(this.xml, "text/xml"); - return dom.getElementsByTagName("parsererror").length === 0; - } else if (window.ActiveXObject) { - // TODO test in IE - var msDom = new ActiveXObject("Microsoft.XMLDOM"); - msDom.async = false; - return !msDom.loadXML(this.xml); - } else { - throw Error("Not implemented"); - } - } catch(exception) { - console.log(exception); + if (document.implementation.createDocument) { + var dom = new DOMParser().parseFromString(this.xml, "text/xml"); + return dom.getElementsByTagName("parsererror").length === 0; + } else if (window.ActiveXObject) { + // TODO test in IE + var msDom = new ActiveXObject("Microsoft.XMLDOM"); + msDom.async = false; + return !msDom.loadXML(this.xml); } + return true; }, format: function () { return vkbeautify.xml(this.xml, 4); @@ -101,15 +96,11 @@ method: 'read', args: [[this.selectedViewId()], ['arch'], website.get_context()], }).then(function(result) { - if (result && result.length > 0) { - var xml = new website.ace.XmlDocument(result[0].arch) - var editingSession = new ace.EditSession(xml.xml); - editingSession.setMode("ace/mode/xml"); - editingSession.setUndoManager(new ace.UndoManager()); - editor.setSession(editingSession); - } else { - throw Error("Could not load view XML"); - } + var xml = new website.ace.XmlDocument(result[0].arch); + var editingSession = new ace.EditSession(xml.xml); + editingSession.setMode("ace/mode/xml"); + editingSession.setUndoManager(new ace.UndoManager()); + editor.setSession(editingSession); }); }, formatXml: function () { diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index 9dd0e955285..db5d4df7bc5 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -77,6 +77,10 @@ this.type = this.types[options.type] || 'default'; this._super(parent); }, + start: function () { + this.suggestionList = new website.seo.SuggestionList(this, this.keyword); + this.suggestionList.appendTo(this.$('.js_seo_keyword_suggestion')); + }, destroy: function () { this.trigger('removed'); this._super(); @@ -145,8 +149,8 @@ website.seo.SuggestionList = openerp.Widget.extend({ template: 'website.seo_list', - init: function (parent) { - this.rootWords = []; + init: function (parent, word) { + this.word = word; this._super(parent); }, start: function () { @@ -154,14 +158,9 @@ }, refresh: function () { var self = this; - self.$el.empty(); self.$el.append("Loading..."); - var requests = _.map(this.rootWords, function (word) { - // cf. https://github.com/ddm/seo - // TODO Try with /recommend/ - return $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(word)); - }); function addSuggestions (list) { + self.$el.empty(); // TODO Improve algorithm + Ajust based on custom user keywords var nameRegex = new RegExp(self.companyName, "gi"); var cleanList = _.map(list, function removeCompanyName (word) { @@ -181,38 +180,7 @@ } }); } - var deferred = $.Deferred(); - var suggestions = []; - $.when.apply($, requests).then(function (result) { - self.$el.empty(); - if (result && _.isArray(result[0])) { - var suggestionLists = _.map(Array.prototype.slice.call(arguments), function (l) { - return l[0]; - }); - _.each(suggestionLists, function (newSuggestions) { - suggestions = suggestions.concat(newSuggestions); - }); - deferred.resolve(_.uniq(suggestions)); - } else if (result && _.isString(result[0])) { - deferred.resolve(_.uniq(result)); - } - }); - $.when(deferred).then(addSuggestions); - }, - suggestions: function () { - return this.$('.js_seo_suggestion').map(function () { - return $(this).data('keyword'); - }); - }, - addRootWord: function (word) { - this.rootWords.push(word); - this.refresh(); - }, - removeRootWord: function (word) { - this.rootWords = _.reject(this.rootWords, function (rootWord) { - return rootWord === word; - }); - this.refresh(); + $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(this.word), addSuggestions); }, }); @@ -283,14 +251,6 @@ .prop('disabled', false).removeClass('disabled'); }); this.keywordList.appendTo($modal.find('.js_seo_keywords_list')); - this.suggestionList = new website.seo.SuggestionList(this, companyName); - this.suggestionList.on('selected', self, function (word) { - self.acceptSuggestion(word); - }); - this.keywordList.on('removed', self, function (word) { - this.suggestionList.removeRootWord(word); - }); - this.suggestionList.appendTo($modal.find('.js_seo_suggestions_list')); var companyName = pageParser.company().toLowerCase(); this.addKeyword(companyName); $modal.modal(); @@ -299,13 +259,13 @@ var tips = []; var self = this; function displayTip(message, type) { - new website.seo.Tip(this, { + new website.seo.Tip(self, { message: message, - type: type + type: type, }).appendTo(self.$('.js_seo_tips')); } var pageParser = parser || new website.seo.PageParser(); - if (!pageParser.headers('h1').length === 0) { + if (pageParser.headers('h1').length === 0) { tips.push({ type: 'warning', message: "You don't have an <h1> tag on your page.", @@ -334,13 +294,8 @@ var $input = this.$('input[name=seo_page_keywords]'); var keyword = _.isString(word) ? word : $input.val(); this.keywordList.add(keyword, false); - this.suggestionList.addRootWord(keyword); $input.val(""); }, - acceptSuggestion: function (suggestion) { - this.keywordList.add(suggestion, true); - this.suggestionList.addRootWord(suggestion); - }, update: function () { var data = { title: this.$('input[name=seo_page_title]').val(), diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml index f25dccfda16..dd7ebab8c81 100644 --- a/addons/website/static/src/xml/website.seo.xml +++ b/addons/website/static/src/xml/website.seo.xml @@ -11,14 +11,8 @@ </div> <div class="modal-body"> <div class="js_seo_tips" /> - <section> + <section class="js_seo_keywords_list"> <h3 class="page-header">1. Define keywords <small>describing your page content</small></h3> - <dl class="dl-horizontal"> - <dt>Suggestions</dt> - <dd class="js_seo_suggestions_list"> - <!-- filled in JS --> - </dd> - </dl> <div class="form-horizontal" role="form"> <div class="form-group"> <label for="seo_page_keywords" class="col-lg-2 control-label">New keyword</label> @@ -32,12 +26,7 @@ </div> </div> </div> - <dl class="dl-horizontal oe_seo_keywords_list"> - <dt>Current selection</dt> - <dd class="js_seo_keywords_list"> - <!-- filled in JS --> - </dd> - </dl> + <!-- filled in JS --> </section> <section> <h3 class="page-header">2. Choose a title and description <small>containing keywords relevant to what people are searching on the web</small></h3> @@ -86,13 +75,18 @@ </t> <t t-name="website.seo_keyword"> - <li class="oe_seo_keyword"> - <span t-attf-class="label label-#{ widget.type } js_seo_keyword" t-att-data-keyword="widget.keyword"> - <t t-raw="widget.keyword"/> - &nbsp; - <a href="#" class="oe_remove" data-action="remove-keyword">x</a> - </span> - </li> + <dl class="dl-horizontal js_seo_keyword"> + <dt> + <span t-attf-class="label label-#{ widget.type } js_seo_keyword" t-att-data-keyword="widget.keyword"> + <t t-raw="widget.keyword"/> + &nbsp; + <a href="#" class="oe_remove" data-action="remove-keyword">x</a> + </span> + </dt> + <dd class="js_seo_keyword_suggestion"> + <!-- filled in JS --> + </dd> + </dl> </t> <t t-name="website.seo_suggestion"> |
