summaryrefslogtreecommitdiff
path: root/addons/website/static/src
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/src')
-rw-r--r--addons/website/static/src/js/website.ace.js37
-rw-r--r--addons/website/static/src/js/website.seo.js67
-rw-r--r--addons/website/static/src/xml/website.seo.xml34
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"/>
- &amp;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"/>
+ &amp;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">