[FIX] website: fix editor

This commit is contained in:
Jeremy Kersten
2015-07-17 17:24:38 +02:00
8 changed files with 108 additions and 61 deletions
@@ -1,3 +1,4 @@
@charset "UTF-8";
/* ---- SNIPPET EDITOR ---- {{{ */
#oe_snippets #o_left_bar, #oe_snippets #o_arrow {
position: fixed;
@@ -870,3 +871,12 @@ table.table_desc tr td:last-child {
.s_features_grid {
margin-bottom: 16px;
}
/* other snippet styles */
.s_comparisons .panel .list-group-item:not(.active) {
color: #666;
}
.s_references .img-thumbnail {
border: none;
}
+13 -1
View File
@@ -81,7 +81,7 @@
.oe_snippet
display: inline-block
vertical-align: top
width: 93px
width: 92px
margin-left: 3px
margin-right: 3px
margin-top: 1px
@@ -701,3 +701,15 @@ table.table_desc tr td
.s_features_grid
margin-bottom: 16px
/* other snippet styles */
.s_comparisons
.panel
.list-group-item:not(.active)
color: #666
.s_references
.img-thumbnail
border: none
+13 -11
View File
@@ -920,19 +920,21 @@ define(['summernote/editing/Editor', 'summernote/summernote'], function (Editor)
options.keyMap.mac['ESCAPE'] = 'cancel';
$.summernote.pluginEvents.insertTable = function (event, editor, layoutInfo, sDim) {
var $editable = layoutInfo.editable();
var dimension = sDim.split('x');
var rng = range.create();
rng = rng.deleteContents();
var $editable = layoutInfo.editable();
$editable.data('NoteHistory').recordUndo($editable, 'enter');
var isBodyContainer = dom.isBodyContainer;
dom.isBodyContainer = dom.isNotBreakable;
rng.insertNode(editor.table.createTable(dimension[0], dimension[1]));
dom.isBodyContainer = isBodyContainer;
var dimension = sDim.split('x');
var rng = range.create();
rng = rng.deleteContents();
editor.afterCommand($editable);
event.preventDefault();
return false;
var isBodyContainer = dom.isBodyContainer;
dom.isBodyContainer = dom.isNotBreakable;
rng.insertNode(editor.table.createTable(dimension[0], dimension[1]));
dom.isBodyContainer = isBodyContainer;
editor.afterCommand($editable);
event.preventDefault();
return false;
};
$.summernote.pluginEvents.tab = function (event, editor, layoutInfo, outdent) {
var $editable = layoutInfo.editable();
+43 -30
View File
@@ -366,9 +366,9 @@ define(['summernote/summernote'], function () {
var def = new $.Deferred();
editor.on("save", this, function (linkInfo) {
linkInfo.range.select();
$editable.data('range', linkInfo.range);
def.resolve(linkInfo);
$editable.data('range', range.create());
$('.note-popover .note-link-popover').show();
});
editor.on("cancel", this, function () {
@@ -410,7 +410,7 @@ define(['summernote/summernote'], function () {
if (node && (nodeName === "SPAN" || nodeName === "I") && className.length) {
var classNames = className.split(/\s+/);
for (var k=0; k<website.editor.fontIcons.length; k++) {
if (_.intersection(website.editor.fontIcons[k].icons, classNames).length) {
if (_.intersection(website.editor.fontIcons[k].alias, classNames).length) {
return true;
}
}
@@ -1207,8 +1207,6 @@ define(['summernote/summernote'], function () {
this.EditorBar = EditorBar;
$('.inline-media-link').remove();
this._super.apply(this, arguments);
computeFonts();
},
/**
* Add a record undo to history
@@ -1342,6 +1340,8 @@ define(['summernote/summernote'], function () {
$(document).trigger('mousedown');
if (!restart) {
computeFonts();
$('#wrapwrap, .o_editable').on('click', '*', function (event) {
event.preventDefault();
});
@@ -2188,9 +2188,21 @@ define(['summernote/summernote'], function () {
for(var r = 0; r < rules.length; r++) {
var selectorText = rules[r].selectorText;
if (selectorText) {
var match = selectorText.match(filter);
if (match) {
css.push([match[1], rules[r].cssText.replace(/(^.*\{\s*)|(\s*\}\s*$)/g, '')]);
selectorText = selectorText.split(/\s*,\s*/);
var data = null;
for(var s = 0; s < selectorText.length; s++) {
var match = selectorText[s].match(filter);
if (match) {
var clean = match[1].slice(1).replace(/::?before$/, '');
if (!data) {
data = [match[1], rules[r].cssText.replace(/(^.*\{\s*)|(\s*\}\s*$)/g, ''), clean, [clean]];
} else {
data[3].push(clean);
}
}
}
if (data) {
css.push(data);
}
}
}
@@ -2200,8 +2212,11 @@ define(['summernote/summernote'], function () {
};
function computeFonts() {
_.each(website.editor.fontIcons, function (data) {
data.icons = _.map(website.editor.getCssSelectors(data.parser), function (css) {
return css[0].slice(1, css[0].length).replace(/::?before$/, '');
data.cssData = website.editor.getCssSelectors(data.parser);
data.alias = [];
data.icons = _.map(data.cssData, function (css) {
data.alias.push.apply(data.alias, css[3]);
return css[2];
});
});
}
@@ -2252,22 +2267,20 @@ define(['summernote/summernote'], function () {
search: function (needle) {
var iconsParser = this.iconsParser;
if (needle) {
var parser = [];
var fontIcons = website.editor.fontIcons, fontIcon;
for (var k=0; k<fontIcons.length; k++) {
fontIcon = fontIcons[k];
var icons = _(fontIcon.icons).filter(function (icon) {
return icon.indexOf(needle) !== -1;
var iconsParser = [];
_.filter(this.iconsParser, function (data) {
var cssData = _.filter(data.cssData, function (cssData) {
return _.find(cssData[3], function (alias) {
return alias.indexOf(needle) !== -1;
});
});
if (icons.length) {
parser.push({
base: fontIcon.base,
icons: icons
if (cssData.length) {
iconsParser.push({
base: data.base,
cssData: cssData
});
}
}
iconsParser = parser;
});
}
this.$('div.font-icons-icons').html(
openerp.qweb.render('website.editor.dialog.font-icons.icons', {'iconsParser': iconsParser}));
@@ -2301,17 +2314,17 @@ define(['summernote/summernote'], function () {
if (!(classNames instanceof Array)) {
classNames = (classNames||"").split(/\s+/);
}
var fontIcons = website.editor.fontIcons, fontIcon, className;
for (var i=0; i<classNames.length; i++) {
className = classNames[i];
for (var k=0; k<fontIcons.length; k++) {
fontIcon = fontIcons[k];
if (className === fontIcon.base || fontIcon.icons.indexOf(className) !== -1) {
var fontIcon, cssData;
for (var k=0; k<this.iconsParser.length; k++) {
fontIcon = this.iconsParser[k];
for (var s=0; s<fontIcon.cssData.length; s++) {
cssData = fontIcon.cssData[s];
if (_.intersection(classNames, cssData[3]).length) {
return {
'base': fontIcon.base,
'parser': fontIcon.parser,
'icons': fontIcon.icons,
'font': className
'font': cssData[2]
};
}
}
@@ -2347,7 +2360,7 @@ define(['summernote/summernote'], function () {
continue;
case '': continue;
default:
$(".font-icons-icon").removeClass("font-icons-selected").filter("."+cls).addClass("font-icons-selected");
$(".font-icons-icon").removeClass("font-icons-selected").filter("[data-alias*=',"+cls+",']").addClass("font-icons-selected");
for (var k=0; k<this.icons.length; k++) {
if (this.icons.indexOf(cls) !== -1) {
this.$('#fa-icon').val(cls);
@@ -1067,6 +1067,10 @@
this.$bg.removeClass("oe_img_bg").removeClass("oe_custom_bg");
}
},
select_class : function(type, value, $li) {
this.background(type, '', $li);
this._super(type, value, $li);
},
choose_image: function(type, value, $li) {
if(type !== "click") return;
@@ -1158,6 +1162,7 @@
.click(function () {
$td.removeClass("selected");
$(this).parent().addClass("selected");
self.$target.closest(".o_editable").trigger("content_changed");
});
}
});
@@ -368,9 +368,11 @@
</t>
<t t-name="website.editor.dialog.font-icons.icons">
<t t-foreach="iconsParser" t-as="data">
<span t-foreach="data.icons" t-as="icon"
t-attf-class="#{data.base} font-icons-icon #{icon}"
t-att-data-id="icon"/>
<span t-foreach="data.cssData" t-as="cssData"
t-attf-class="#{data.base} font-icons-icon #{cssData[2]}"
t-attf-data-alias=",#{cssData[3]},"
t-att-title="cssData[3].join(', ')"
t-att-data-id="cssData[2]"/>
</t>
</t>
+18 -15
View File
@@ -350,7 +350,7 @@
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="col-md-4 col-xs-12">
<div class="panel panel-info">
<div class="panel-heading text-center">
@@ -379,7 +379,7 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="col-md-4 col-xs-12">
<div class="panel panel-primary">
<div class="panel-heading text-center">
@@ -408,7 +408,7 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="col-md-4 col-xs-12">
<div class="panel panel-info">
<div class="panel-heading text-center">
@@ -519,7 +519,7 @@
More than 500 happy customers.
</h3>
</div>
<div class="col-md-4 col-md-offset-1 mt16 mb32">
<div class="col-md-4 col-xs-12 col-md-offset-1 mt16 mb32">
<blockquote>
<p>
Write a quote here from one of your customers. Quotes are a
@@ -528,7 +528,7 @@
<small>Author of this quote</small>
</blockquote>
</div>
<div class="col-md-4 col-md-offset-2 mt16 mb32">
<div class="col-md-4 col-xs-12 col-md-offset-2 mt16 mb32">
<blockquote>
<p>
Odoo provides essential platform for our project management.
@@ -537,20 +537,23 @@
<small>John Doe, CEO</small>
</blockquote>
</div>
<div class="col-md-2 col-md-offset-1">
<img src="/website/static/src/img/openerp_logo.png" class="img img-responsive img-thumbnail" alt="OpenERP logo"/>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
<div class="col-md-2">
<img src="/website/static/src/img/openerp_logo.png" class="img img-responsive img-thumbnail" alt="OpenERP logo"/>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
<div class="col-md-2">
<img src="/website/static/src/img/openerp_logo.png" class="img img-responsive img-thumbnail" alt="OpenERP logo"/>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
<div class="col-md-2">
<img src="/website/static/src/img/openerp_logo.png" class="img img-responsive img-thumbnail" alt="OpenERP logo"/>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
<div class="col-md-2">
<img src="/website/static/src/img/openerp_logo.png" class="img img-responsive img-thumbnail" alt="OpenERP logo"/>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
<div class="col-md-2 col-sm-4 col-xs-6">
<img src="/logo.png" class="img img-responsive img-thumbnail" alt="Logo"/>
</div>
</div>
</div>
@@ -326,7 +326,7 @@
var content;
_.find(website.editor.fontIcons, function (font) {
return _.find(website.editor.getCssSelectors(font.parser), function (css) {
if ($font.is(css[0].replace(/::?before$/, ''))) {
if ($font.is(css[2])) {
content = css[1].match(/content:\s*['"](.)['"]/)[1];
return true;
}