summaryrefslogtreecommitdiff
path: root/addons/website/static/src
diff options
context:
space:
mode:
authorGaurav Panchal <gan@openerp.com>2015-06-30 13:21:41 +0530
committerChristophe Matthieu <chm@odoo.com>2015-07-31 12:57:24 +0200
commitd52ec7fc42cbeecafea921ea30d1d0723a59078a (patch)
tree43695e3eeb88ceca1947836b0f2820ae2892744e /addons/website/static/src
parent9fa38eeab2382144ad37cfb4755ead114dd48dc3 (diff)
[IMP] website: keyword search base on language on website promote
Diffstat (limited to 'addons/website/static/src')
-rw-r--r--addons/website/static/src/js/website.seo.js105
-rw-r--r--addons/website/static/src/xml/website.seo.xml26
2 files changed, 89 insertions, 42 deletions
diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js
index a43d87c805d..d2b7683645f 100644
--- a/addons/website/static/src/js/website.seo.js
+++ b/addons/website/static/src/js/website.seo.js
@@ -10,6 +10,8 @@ var Widget = require('web.Widget');
var base = require('web_editor.base');
var website = require('website.website');
+var _t = core._t;
+
var qweb = core.qweb;
ajax.loadXML('/website/static/src/xml/website.seo.xml', qweb);
@@ -42,6 +44,7 @@ var Suggestion = Widget.extend({
init: function (parent, options) {
this.root = options.root;
this.keyword = options.keyword;
+ this.language = options.language;
this.htmlPage = options.page;
this._super(parent);
},
@@ -67,6 +70,7 @@ var SuggestionList = Widget.extend({
template: 'website.seo_suggestion_list',
init: function (parent, options) {
this.root = options.root;
+ this.language = options.language;
this.htmlPage = options.page;
this._super(parent);
},
@@ -75,31 +79,39 @@ var SuggestionList = Widget.extend({
},
refresh: function () {
var self = this;
- self.$el.append("Loading...");
- function addSuggestions (list) {
- self.$el.empty();
- // TODO Improve algorithm + Ajust based on custom user keywords
- var regex = new RegExp(self.root, "gi");
- var cleanList = _.map(list, function (word) {
- return word.replace(regex, "").trim();
- });
- // TODO Order properly ?
- _.each(_.uniq(cleanList), function (keyword) {
- if (keyword) {
- var suggestion = new Suggestion(self, {
- root: self.root,
- keyword: keyword,
- page: self.htmlPage,
- });
- suggestion.on('selected', self, function (word) {
- self.trigger('selected', word);
- });
- suggestion.appendTo(self.$el);
- }
- });
- }
- $.getJSON("/website/seo_suggest/" + encodeURIComponent(this.root + " "), addSuggestions);
+ self.$el.append(_t("Loading..."));
+ var language = self.language || base.get_context().lang.toLowerCase();
+ ajax.jsonRpc('/website/seo_suggest', 'call', {
+ 'keywords': self.root,
+ 'lang': language,
+ }).then(function(keyword_list){
+ self.addSuggestions(JSON.parse(keyword_list));
+ });
},
+ addSuggestions: function(keywords) {
+ var self = this;
+ self.$el.empty();
+ // TODO Improve algorithm + Ajust based on custom user keywords
+ var regex = new RegExp(self.root, "gi");
+ var keywords = _.map(_.uniq(keywords), function (word) {
+ return word.replace(regex, "").trim();
+ });
+ // TODO Order properly ?
+ _.each(keywords, function (keyword) {
+ if (keyword) {
+ var suggestion = new Suggestion(self, {
+ root: self.root,
+ language: self.language,
+ keyword: keyword,
+ page: self.htmlPage,
+ });
+ suggestion.on('selected', self, function (word, language) {
+ self.trigger('selected', word, language);
+ });
+ suggestion.appendTo(self.$el);
+ }
+ });
+ },
});
var Keyword = Widget.extend({
@@ -110,6 +122,7 @@ var Keyword = Widget.extend({
maxWordsPerKeyword: 4, // TODO Check
init: function (parent, options) {
this.keyword = options.word;
+ this.language = options.language;
this.htmlPage = options.page;
this._super(parent);
},
@@ -118,10 +131,11 @@ var Keyword = Widget.extend({
this.htmlPage.on('description-changed', this, this.updateLabel);
this.suggestionList = new SuggestionList(this, {
root: this.keyword,
+ language: this.language,
page: this.htmlPage,
});
- this.suggestionList.on('selected', this, function (word) {
- this.trigger('selected', word);
+ this.suggestionList.on('selected', this, function (word, language) {
+ this.trigger('selected', word, language);
});
this.suggestionList.appendTo(this.$('.js_seo_keyword_suggestion'));
},
@@ -159,11 +173,6 @@ var KeywordList = Widget.extend({
_.each(existingKeywords, function (word) {
self.add.call(self, word);
});
- } else {
- var companyName = self.htmlPage.company().toLowerCase();
- if (companyName != 'yourcompany') {
- self.add(companyName);
- }
}
},
keywords: function () {
@@ -179,21 +188,22 @@ var KeywordList = Widget.extend({
exists: function (word) {
return _.contains(this.keywords(), word);
},
- add: function (candidate) {
+ add: function (candidate, language) {
var self = this;
// TODO Refine
var word = candidate ? candidate.replace(/[,;.:<>]+/g, " ").replace(/ +/g, " ").trim().toLowerCase() : "";
if (word && !self.isFull() && !self.exists(word)) {
var keyword = new Keyword(self, {
word: word,
+ language: language,
page: this.htmlPage,
});
keyword.on('removed', self, function () {
self.trigger('list-not-full');
self.trigger('removed', word);
});
- keyword.on('selected', self, function (word) {
- self.trigger('selected', word);
+ keyword.on('selected', self, function (word, language) {
+ self.trigger('selected', word, language);
});
keyword.appendTo(self.$el);
}
@@ -342,6 +352,7 @@ var Configurator = Widget.extend({
canEditTitle: false,
canEditDescription: false,
canEditKeywords: false,
+ canEditLanguage: false,
maxTitleSize: 65,
maxDescriptionSize: 150,
start: function () {
@@ -372,13 +383,31 @@ var Configurator = Widget.extend({
$modal.find('button[data-action=add]')
.prop('disabled', false).removeClass('disabled');
});
- self.keywordList.on('selected', self, function (word) {
- self.keywordList.add(word);
+ self.keywordList.on('selected', self, function (word, language) {
+ self.keywordList.add(word, language);
});
self.keywordList.appendTo($modal.find('.js_seo_keywords_list'));
self.disableUnsavableFields();
self.renderPreview();
$modal.modal();
+ self.getLanguages();
+ },
+ getLanguages: function(){
+ var self = this;
+ ajax.jsonRpc('/web/dataset/call_kw', 'call', {
+ model: 'website',
+ method: 'get_languages',
+ args: [],
+ kwargs: {
+ ids: [base.get_context().website_id],
+ context: base.get_context()
+ }
+ }).then( function(data) {
+ self.$('#language-box').html(core.qweb.render('Configurator.language_promote', {
+ 'language': data,
+ 'def_lang': base.get_context().lang
+ }));
+ });
},
disableUnsavableFields: function () {
var self = this;
@@ -431,8 +460,10 @@ var Configurator = Widget.extend({
},
addKeyword: function (word) {
var $input = this.$('input[name=seo_page_keywords]');
+ var $language = this.$('select[name=seo_page_language]');
var keyword = _.isString(word) ? word : $input.val();
- this.keywordList.add(keyword);
+ var language = $language.val().toLowerCase();
+ this.keywordList.add(keyword, language);
$input.val("");
},
update: function () {
diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml
index c5522596a74..6e6e9438945 100644
--- a/addons/website/static/src/xml/website.seo.xml
+++ b/addons/website/static/src/xml/website.seo.xml
@@ -4,6 +4,12 @@
<t t-name="website.TopBar.menu.promote">
<li><a data-action="promote-current-page" href="#"><span title="Promote page on the web">Promote</span></a></li>
</t>
+
+ <t t-name="Configurator.language_promote">
+ <t t-foreach="language" t-as="lang">
+ <option t-att-value="lang[0]" t-att-selected="lang[0] == def_lang ? 'selected' : null"><t t-esc="lang[1]" /></option>
+ </t>
+ </t>
<t t-name="website.seo_configuration">
<div class="modal fade oe_seo_configuration js_seo_configuration" tabindex="-1" role="dialog">
@@ -24,14 +30,24 @@
<div class="form-group">
<label for="seo_page_keywords" class="col-sm-3 control-label">Add keyword:</label>
<div class="col-sm-4">
- <div class="input-group">
+ <div>
<input type="text" name="seo_page_keywords" class="form-control" maxlength="30"/>
- <span class="input-group-btn">
- <button data-action="add" class="btn btn-default" type="button">Add</button>
- </span>
</div>
</div>
</div>
+ <div class="row mt8">
+ <label for="seo_page_language" class="col-sm-3 control-label">Language:</label>
+ <div>
+ <div class="col-sm-4">
+ <select name="seo_page_language" id="language-box" class="form-control"/>
+ </div>
+ </div>
+ </div>
+ <div class="row mt8">
+ <div class="col-md-10 text-center">
+ <button data-action="add" class="btn btn-default" type="button">Add</button>
+ </div>
+ </div>
</div>
<span class="text-muted">Most searched topics related to your keywords, ordered by importance:</span>
<!-- filled in JS -->
@@ -97,7 +113,7 @@
<dl class="dl-horizontal mt8 mb8">
<dt>
<span t-attf-title="#{ widget.tooltip() }" t-attf-class="oe_seo_keyword #{ widget.highlight() } js_seo_keyword" t-att-data-keyword="widget.keyword">
- <a href="#" class="oe_remove" data-action="remove-keyword">x</a> <t t-raw="widget.keyword"/>
+ <t t-raw="widget.keyword"/> <a href="#" class="oe_remove" data-action="remove-keyword">x</a>
</span>
</dt>
<dd class="js_seo_keyword_suggestion">