CMS basic view editing

bzr revid: ddm@openerp.com-20130909214626-51zfydwbw624heqz
This commit is contained in:
ddm 2013-09-09 23:46:26 +02:00
parent bf09524def
commit 7c45e5976e
7 changed files with 161 additions and 3 deletions

View File

@ -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
})

View File

@ -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;
}

View File

@ -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

View File

@ -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();
},
});
})();

View File

@ -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

View File

@ -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>

View File

@ -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"/>