summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/widgets/ace.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website/static/src/js/widgets/ace.js')
-rw-r--r--addons/website/static/src/js/widgets/ace.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/addons/website/static/src/js/widgets/ace.js b/addons/website/static/src/js/widgets/ace.js
new file mode 100644
index 00000000000..2ce486fc1c8
--- /dev/null
+++ b/addons/website/static/src/js/widgets/ace.js
@@ -0,0 +1,96 @@
+odoo.define('website.ace', function (require) {
+'use strict';
+
+var Widget = require('web.Widget');
+var website = require('website.website');
+var mixins = require('web.mixins');
+
+var ViewEditor = require('web_editor.ace');
+
+var hash = "#advanced-view-editor";
+
+var Ace = Widget.extend(mixins.ServiceProvider, {
+ events: {
+ "click a[data-action=ace]": function (e) {
+ e.preventDefault();
+ this.launchAce();
+ },
+ },
+ init: function () {
+ mixins.ServiceProvider.init.apply(this, arguments);
+ this._super.apply(this, arguments);
+ },
+ start: function () {
+ if (window.location.hash.substr(0, hash.length) === hash) {
+ this.launchAce();
+ }
+ return this._super.apply(this, arguments);
+ },
+ launchAce: function () {
+ if (this.globalEditor) {
+ this.globalEditor.do_show();
+ } else {
+ var currentHash = window.location.hash;
+ var indexOfView = currentHash.indexOf("?res=");
+ var initialResID = undefined;
+ if (indexOfView >= 0) {
+ initialResID = currentHash.substr(indexOfView + ("?res=".length));
+ var parsedResID = parseInt(initialResID, 10);
+ if (parsedResID) {
+ initialResID = parsedResID;
+ }
+ }
+
+ this.globalEditor = new ViewEditor(this, $(document.documentElement).data('view-xmlid'), {
+ initialResID: initialResID,
+ defaultBundlesRestriction: [
+ "web.assets_frontend",
+ "website.assets_frontend",
+ ],
+ });
+ this.globalEditor.appendTo(document.body);
+
+ $("a[data-action=edit]").on("click", this.globalEditor.do_hide.bind(this.globalEditor));
+ }
+ },
+});
+
+/**
+ * Extend the default view editor so that the URL hash is updated with view id.
+ */
+ViewEditor = ViewEditor.extend({
+ displayResource: function () {
+ this._super.apply(this, arguments);
+ this._updateHash();
+ },
+ saveResources: function () {
+ return this._super.apply(this, arguments).then((function () {
+ this._updateHash();
+ window.location.reload();
+ }).bind(this));
+ },
+ resetResource: function () {
+ return this._super.apply(this, arguments).then((function () {
+ window.location.reload();
+ }).bind(this));
+ },
+ do_hide: function () {
+ this._super.apply(this, arguments);
+ window.location.hash = "";
+ },
+ _updateHash: function () {
+ window.location.hash = hash + "?res=" + this.selectedResource();
+ },
+});
+
+website.TopBar.include({
+ start: function () {
+ this.ace = new Ace();
+ return $.when(
+ this._super.apply(this, arguments),
+ this.ace.attachTo(this.$('#html_editor'))
+ );
+ },
+});
+
+});