CMS basic view editing
bzr revid: ddm@openerp.com-20130909214626-51zfydwbw624heqz
This commit is contained in:
parent
bf09524def
commit
7c45e5976e
|
@ -131,7 +131,7 @@ class Website(openerp.addons.web.controllers.main.Home):
|
|||
return True
|
||||
|
||||
@website.route('/website/customize_template_get', type='json', auth='admin') # FIXME: auth
|
||||
def customize_template_get(self, xml_id):
|
||||
def customize_template_get(self, xml_id, optional=True):
|
||||
imd = request.registry['ir.model.data']
|
||||
view_model, view_theme_id = imd.get_object_reference(
|
||||
request.cr, request.uid, 'website', 'theme')
|
||||
|
@ -141,10 +141,11 @@ class Website(openerp.addons.web.controllers.main.Home):
|
|||
done = {}
|
||||
result = []
|
||||
for v in views:
|
||||
if v.inherit_option_id and v.inherit_option_id.id != view_theme_id:
|
||||
if v.inherit_option_id and v.inherit_option_id.id != view_theme_id or not optional:
|
||||
if v.inherit_option_id.id not in done:
|
||||
result.append({
|
||||
'name': v.inherit_option_id.name,
|
||||
'id': v.id,
|
||||
'header': True,
|
||||
'active': False
|
||||
})
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
@charset "utf-8";
|
||||
/* ---- CKEditor Minimal Reset ---- */
|
||||
.navbar.navbar-inverse .cke_chrome {
|
||||
border: none;
|
||||
|
@ -312,3 +313,24 @@ table.editorbar-panel td.selected {
|
|||
.oe_seo_configuration .oe_seo_suggestion {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* ---- ACE EDITOR ---- */
|
||||
.oe_ace_view_editor {
|
||||
position: fixed;
|
||||
top: 51px;
|
||||
right: 0px;
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
.oe_ace_view_editor .oe_ace_view_editor_title {
|
||||
height: 36px;
|
||||
background-color: #111111;
|
||||
}
|
||||
.oe_ace_view_editor .ace_editor {
|
||||
position: absolute;
|
||||
top: 36px;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
|
|
@ -280,3 +280,22 @@ $remove_color: $icon_close
|
|||
color: $remove_color
|
||||
.oe_seo_suggestion
|
||||
cursor: pointer
|
||||
|
||||
/* ---- ACE EDITOR ---- */
|
||||
|
||||
.oe_ace_view_editor
|
||||
position: fixed
|
||||
top: 51px
|
||||
right: 0px
|
||||
width: 50%
|
||||
height: 100%
|
||||
z-index: 1000
|
||||
.oe_ace_view_editor_title
|
||||
height: 36px
|
||||
background-color: #111
|
||||
.ace_editor
|
||||
position: absolute
|
||||
top: 36px
|
||||
right: 0
|
||||
bottom: 0
|
||||
left: 0
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
(function () {
|
||||
'use strict';
|
||||
|
||||
var editor = null;
|
||||
|
||||
var website = openerp.website;
|
||||
website.templates.push('/website/static/src/xml/website.ace.xml');
|
||||
|
||||
website.EditorBar.include({
|
||||
events: _.extend({}, website.EditorBar.prototype.events, {
|
||||
'click a[data-action=ace]': 'launchAce',
|
||||
}),
|
||||
launchAce: function () {
|
||||
if (!editor) {
|
||||
editor = new website.ace.ViewEditor();
|
||||
editor.appendTo($(document.body));
|
||||
}
|
||||
editor.show();
|
||||
},
|
||||
});
|
||||
|
||||
website.ace = {};
|
||||
|
||||
website.ace.ViewOption = openerp.Widget.extend({
|
||||
template: 'website.ace_view_option',
|
||||
init: function (parent, options) {
|
||||
this.view_id = options.id;
|
||||
this.view_name = options.name;
|
||||
this._super(parent);
|
||||
},
|
||||
});
|
||||
|
||||
website.ace.ViewEditor = openerp.Widget.extend({
|
||||
template: 'website.ace_view_editor',
|
||||
events: {
|
||||
'change #ace-view-list': 'displayView',
|
||||
'click button[data-action=save-view]': 'saveView',
|
||||
},
|
||||
start: function () {
|
||||
var self = this;
|
||||
var currentView = $(document.documentElement).data('view-xmlid');
|
||||
this.$viewList = this.$('#ace-view-list'),
|
||||
openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': currentView, 'optional': false })
|
||||
.then(function(result) {
|
||||
_.each(result, function (view) {
|
||||
if (view.id) {
|
||||
new website.ace.ViewOption(self, view).appendTo(self.$viewList);
|
||||
}
|
||||
});
|
||||
var editor = ace.edit(self.$('#ace-view-editor')[0]);
|
||||
editor.setTheme("ace/theme/monokai");
|
||||
editor.getSession().setMode("ace/mode/xml");
|
||||
self.aceEditor = editor;
|
||||
self.displayView();
|
||||
});
|
||||
},
|
||||
displayView: function () {
|
||||
var self = this;
|
||||
var viewId = self.$viewList.val();
|
||||
openerp.jsonRpc('/web/dataset/call', 'call', {
|
||||
model: 'ir.ui.view',
|
||||
method: 'read',
|
||||
args: [[viewId], ['arch']]
|
||||
}).then(function(result) {
|
||||
var viewXML = result[0].arch;
|
||||
self.aceEditor.setValue(viewXML);
|
||||
self.aceEditor.clearSelection();
|
||||
self.aceEditor.navigateTo(0, 0);
|
||||
});
|
||||
},
|
||||
saveView: function () {
|
||||
var self = this;
|
||||
var viewId = self.$viewList.val();
|
||||
var viewXML = self.aceEditor.getValue();
|
||||
openerp.jsonRpc('/web/dataset/call', 'call', {
|
||||
model: 'ir.ui.view',
|
||||
method: 'write',
|
||||
args: [[viewId], { 'arch': viewId }]
|
||||
}).then(function(result) {
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
hide: function () {
|
||||
// TODO Finish
|
||||
},
|
||||
show: function () {
|
||||
// TODO Finish
|
||||
},
|
||||
destroy: function () {
|
||||
editor = null;
|
||||
this._super();
|
||||
},
|
||||
});
|
||||
|
||||
})();
|
|
@ -148,10 +148,11 @@
|
|||
});
|
||||
// Adding Static Menus
|
||||
menu.append('<li class="divider"></li><li><a href="/page/website.themes">Change Theme</a></li>');
|
||||
menu.append('<li class="divider"></li><li><a data-action="ace" href="#">Ace</a></li>');
|
||||
}
|
||||
);
|
||||
});
|
||||
menu.on('click', 'a', function (event) {
|
||||
menu.on('click', 'a[data-action!=ace]', function (event) {
|
||||
var view_id = $(event.currentTarget).data('view-id');
|
||||
openerp.jsonRpc('/website/customize_template_toggle', 'call', {
|
||||
'view_id': view_id
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-name="website.ace_view_editor">
|
||||
<div class="oe_ace_view_editor">
|
||||
<div class="oe_ace_view_editor_title">
|
||||
<button type="button" class="btn btn-default btn-small">Close</button>
|
||||
<button data-action="save-view" type="button" class="btn btn-default btn-small">Save</button>
|
||||
<select id="ace-view-list">
|
||||
<!-- filled in JS -->
|
||||
</select>
|
||||
</div>
|
||||
<div id="ace-view-editor"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="website.ace_view_option">
|
||||
<option t-att-value="widget.view_id"><t t-esc="widget.view_name"/></option>
|
||||
</t>
|
||||
</templates>
|
|
@ -30,6 +30,7 @@
|
|||
<link rel='stylesheet' href='/website/static/src/css/editor.css'/>
|
||||
|
||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/ckeditor/4.2/ckeditor.js"></script>
|
||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/ace.js"></script>
|
||||
<script type="text/javascript" src="/website/static/lib/ckeditor.sharedspace/plugin.js"></script>
|
||||
<script type="text/javascript">
|
||||
CKEDITOR.disableAutoInline = true;
|
||||
|
@ -47,6 +48,7 @@
|
|||
<script type="text/javascript" src="/website/static/src/js/website.mobile.js"></script>
|
||||
<script type="text/javascript" src="/website/static/src/js/website.seo.js"></script>
|
||||
<script type="text/javascript" src="/website/static/src/js/website.snippets.js"></script>
|
||||
<script type="text/javascript" src="/website/static/src/js/website.ace.js"></script>
|
||||
<t t-raw="head or ''"/>
|
||||
<t t-call="website.theme"/>
|
||||
|
||||
|
|
Loading…
Reference in New Issue