summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/website.editor.js
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2013-09-23 14:03:28 +0200
committerXavier Morel <xmo@openerp.com>2013-09-23 14:03:28 +0200
commit89fc31a633562dbbf046ee48cd943b2eb63c37d0 (patch)
treec835cbdad281bb200e00b05ea3574351a42f3bc6 /addons/website/static/src/js/website.editor.js
parentbe4b1b9b599d2dea07f68908b56a2c84ab8e5e5f (diff)
parent6788b91af4ae0b116b55af3cb0c5ecf2a16acdac (diff)
[MERGE] from trunk
bzr revid: xmo@openerp.com-20130923120328-0wgd7wxhl1y5qyhr
Diffstat (limited to 'addons/website/static/src/js/website.editor.js')
-rw-r--r--addons/website/static/src/js/website.editor.js103
1 files changed, 90 insertions, 13 deletions
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js
index 16443ac36c4..b2a93b9cfd6 100644
--- a/addons/website/static/src/js/website.editor.js
+++ b/addons/website/static/src/js/website.editor.js
@@ -236,10 +236,17 @@
this.rte = new website.RTE(this);
this.rte.on('change', this, this.proxy('rte_changed'));
+ var instanceReady = false;
+ this.rte.on('instanceReady', this, function () {
+ clearTimeout(instanceReady);
+ instanceReady = setTimeout(function () {
+ self.trigger('rte:ready');
+ }, 0);
+ });
return $.when(
this._super.apply(this, arguments),
- this.rte.prependTo(this.$('#website-top-edit .nav.pull-right'))
+ this.rte.appendTo(this.$('#website-top-edit .nav.pull-right'))
);
},
edit: function () {
@@ -667,23 +674,34 @@
},
'change input[type=file]': 'file_selection',
'change input.url': 'preview_image',
- 'click .existing-attachments a': 'select_existing',
+ 'click a[href=#existing]': 'browse_existing',
+ 'change select.image-style': 'preview_image',
}),
start: function () {
var selection = this.editor.getSelection();
var el = selection && selection.getSelectedElement();
this.element = null;
+
+ var $select = this.$('.image-style');
+ var $options = $select.children();
+ this.image_styles = $options.map(function () { return this.value; }).get();
+
if (el && el.is('img')) {
this.element = el;
+ _(this.image_styles).each(function (style) {
+ if (el.hasClass(style)) {
+ $select.val(style);
+ }
+ });
+ // set_image must follow setup of image style
this.set_image(el.getAttribute('src'));
}
- return $.when(
- this._super(),
- this.fetch_existing().then(this.proxy('fetched_existing')));
+ return this._super();
},
save: function () {
var url = this.$('input.url').val();
+ var style = this.$('.image-style').val();
var element, editor = this.editor;
if (!(element = this.element)) {
element = editor.document.createElement('img');
@@ -697,7 +715,10 @@
}, 0);
}
element.setAttribute('src', url);
- this._super();
+ $(element.$).removeClass(this.image_styles.join(' '));
+ if (style) { element.addClass(style); }
+
+ return this._super();
},
/**
@@ -735,17 +756,54 @@
var image = this.$('input.url').val();
if (!image) { return; }
- this.$('img.image-preview').attr('src', image);
+ this.$('img.image-preview')
+ .attr('src', image)
+ .removeClass(this.image_styles.join(' '))
+ .addClass(this.$('select.image-style').val());
+ },
+
+ browse_existing: function (e) {
+ e.preventDefault();
+ new website.editor.ExistingImageDialog(this).appendTo(document.body);
+ },
+ });
+
+ var IMAGES_PER_ROW = 6;
+ var IMAGES_ROWS = 4;
+ website.editor.ExistingImageDialog = website.editor.Dialog.extend({
+ template: 'website.editor.dialog.image.existing',
+ events: _.extend({}, website.editor.Dialog.prototype.events, {
+ 'click .existing-attachments img': 'select_existing',
+ 'click .pager > li': function (e) {
+ e.preventDefault();
+ var $target = $(e.currentTarget);
+ if ($target.hasClass('disabled')) {
+ return;
+ }
+ this.page += $target.hasClass('previous') ? -1 : 1;
+ this.display_attachments();
+ },
+ }),
+ init: function (parent) {
+ this.image = null;
+ this.page = 0;
+ this.parent = parent;
+ this._super(parent.editor);
+ },
+
+ start: function () {
+ return $.when(
+ this._super(),
+ this.fetch_existing().then(this.proxy('fetched_existing')));
},
fetch_existing: function () {
- // FIXME: lazy load attachments?
return openerp.jsonRpc('/web/dataset/call_kw', 'call', {
model: 'ir.attachment',
method: 'search_read',
args: [],
kwargs: {
- fields: ['name'],
+ fields: ['name', 'website_url'],
domain: [['res_model', '=', 'ir.ui.view']],
order: 'name',
context: website.get_context(),
@@ -753,17 +811,36 @@
});
},
fetched_existing: function (records) {
+ this.records = records;
+ this.display_attachments();
+ },
+ display_attachments: function () {
+ var per_screen = IMAGES_PER_ROW * IMAGES_ROWS;
+
+ var from = this.page * per_screen;
+ var records = this.records;
+
// Create rows of 3 records
var rows = _(records).chain()
- .groupBy(function (_, index) { return Math.floor(index / 3); })
+ .slice(from, from + per_screen)
+ .groupBy(function (_, index) { return Math.floor(index / IMAGES_PER_ROW); })
.values()
.value();
+
this.$('.existing-attachments').replaceWith(
- openerp.qweb.render('website.editor.dialog.image.existing', {rows: rows}));
+ openerp.qweb.render(
+ 'website.editor.dialog.image.existing.content', {rows: rows}));
+ this.$('.pager')
+ .find('li.previous').toggleClass('disabled', (from === 0)).end()
+ .find('li.next').toggleClass('disabled', (from + per_screen >= records.length));
+
},
select_existing: function (e) {
- e.preventDefault();
- this.set_image(e.currentTarget.getAttribute('href'));
+ var link = $(e.currentTarget).attr('src');
+ if (link) {
+ this.parent.set_image(link);
+ }
+ this.close()
},
});