[IMP] summernote: change lib for overwrite method

This commit is contained in:
Christophe Matthieu
2015-01-05 10:17:10 +01:00
parent 1596e45e81
commit 685d447892
7 changed files with 91 additions and 40 deletions
@@ -248,6 +248,13 @@ define([
}
};
this.commands = commands; // odoo change for overwrite
this.editor = editor; // odoo change for overwrite
this.toolbar = toolbar; // odoo change for overwrite
this.popover = popover; // odoo change for overwrite
this.handle = handle; // odoo change for overwrite
this.dialog = dialog; // odoo change for overwrite
var hMousedown = function (event) {
//preventDefault Selection for FF, IE8+
if (dom.isImg(event.target)) {
@@ -564,6 +571,19 @@ define([
if (keyName) { aKey.push(keyName); }
var eventName = keyMap[aKey.join('+')];
// odoo change: add visible event to overwrite the browser comportment
var keycode = event.keyCode;
if (!eventName &&
!event.ctrlKey && !event.metaKey && ( // special code/command
(keycode > 47 && keycode < 58) || // number keys
keycode == 32 || keycode == 13 || // spacebar & return
(keycode > 64 && keycode < 91) || // letter keys
(keycode > 95 && keycode < 112) || // numpad keys
(keycode > 185 && keycode < 193) || // ;=,-./` (in order)
(keycode > 218 && keycode < 223))) { // [\]' (in order))
eventName = 'visible';
}
if (eventName) {
event.preventDefault();
@@ -434,6 +434,9 @@ define([
'</div>';
};
this.tplButtonInfo = tplButtonInfo; // odoo change for overwrite
this.tplPopovers = tplPopovers; // odoo change for overwrite
var tplHandles = function () {
return '<div class="note-handle">' +
'<div class="note-control-selection">' +
@@ -691,6 +694,8 @@ define([
});
};
this.createPalette = createPalette; // odoo change for overwrite
/**
* create summernote layout (air mode)
*
@@ -711,12 +716,12 @@ define([
var body = document.body;
// create Popover
var $popover = $(tplPopovers(langInfo, options));
var $popover = $(this.tplPopovers(langInfo, options)); // odoo change for overwrite
$popover.addClass('note-air-layout');
$popover.attr('id', 'note-popover-' + id);
$popover.appendTo(body);
createTooltip($popover, keyMap);
createPalette($popover, options);
this.createPalette($popover, options); // odoo change for overwrite
// create Handle
var $handle = $(tplHandles());
@@ -793,12 +798,12 @@ define([
var $toolbar = $(toolbarHTML).prependTo($editor);
var keyMap = options.keyMap[agent.isMac ? 'mac' : 'pc'];
createPalette($toolbar, options);
this.createPalette($toolbar, options); // odoo change for overwrite
createTooltip($toolbar, keyMap, 'bottom');
//05. create Popover
var $popover = $(tplPopovers(langInfo, options)).prependTo($editor);
createPalette($popover, options);
var $popover = $(this.tplPopovers(langInfo, options)).prependTo($editor); // odoo change for overwrite
this.createPalette($popover, options); // odoo change for overwrite
createTooltip($popover, keyMap);
//06. handle(control selection, ...)
@@ -353,42 +353,42 @@ define([
* delete contents on range
* @return {WrappedRange}
*/
this.deleteContents = function () {
if (this.isCollapsed()) {
return this;
}
// this.deleteContents = function () {
// if (this.isCollapsed()) {
// return this;
// }
var rng = this.splitText();
var nodes = rng.nodes(null, {
fullyContains: true
});
// var rng = this.splitText();
// var nodes = rng.nodes(null, {
// fullyContains: true
// });
var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {
return !list.contains(nodes, point.node);
});
// var point = dom.prevPointUntil(rng.getStartPoint(), function (point) {
// return !list.contains(nodes, point.node);
// });
var emptyParents = [];
$.each(nodes, function (idx, node) {
// find empty parents
var parent = node.parentNode;
if (point.node !== parent && dom.nodeLength(parent) === 1) {
emptyParents.push(parent);
}
dom.remove(node, false);
});
// var emptyParents = [];
// $.each(nodes, function (idx, node) {
// // find empty parents
// var parent = node.parentNode;
// if (point.node !== parent && dom.nodeLength(parent) === 1) {
// emptyParents.push(parent);
// }
// dom.remove(node, false);
// });
// remove empty parents
$.each(emptyParents, function (idx, node) {
dom.remove(node, false);
});
// // remove empty parents
// $.each(emptyParents, function (idx, node) {
// dom.remove(node, false);
// });
return new WrappedRange(
point.node,
point.offset,
point.node,
point.offset
);
};
// return new WrappedRange(
// point.node,
// point.offset,
// point.node,
// point.offset
// );
// };
/**
* makeIsOn: return isOn(pred) function
@@ -545,6 +545,9 @@ define([
};
return {
WrappedRange: WrappedRange, // odoo change for overwrite
/**
* create Range Object From arguments or Browser Selection
*
@@ -563,7 +566,7 @@ define([
// Firefox: returns entire body as range on initialization. We won't never need it.
return null;
}
var nativeRng = selection.getRangeAt(0);
sc = nativeRng.startContainer;
so = nativeRng.startOffset;
@@ -591,6 +594,16 @@ define([
ec = endPoint.cont;
eo = endPoint.offset;
}
/* fir for some browser like PhantomJS
* if you select a span with PhantomJS put the carret on the last char of the previous text node
* instead of put the caret on the parent node with the the ofset to target the node
*/
if (sc.nodeType === 3 && sc.nextSibling && sc.nextSibling.tagName && dom.nodeLength(sc) === so) {
so = dom.listPrev(ec).length-1;
sc = sc.parentNode;
}
} else if (arguments.length === 2) { //collapsed
ec = sc;
eo = so;
@@ -22,6 +22,11 @@ define([
var typing = new Typing();
var bullet = new Bullet();
this.style = style; // odoo change for overwrite
this.table = table; // odoo change for overwrite
this.typing = typing; // odoo change for overwrite
this.bullet = bullet; // odoo change for overwrite
/**
* create range
*/
@@ -9,6 +9,8 @@ define([
var Popover = function () {
var button = new Button();
this.button = button; // odoo change for overwrite
/**
* returns position from placeholder
* @param {Node} placeholder
@@ -8,6 +8,8 @@ define([
var Toolbar = function () {
var button = new Button();
this.button = button; // odoo change for overwrite
this.update = function ($toolbar, styleInfo) {
button.update($toolbar, styleInfo);
};
@@ -2,8 +2,10 @@ define([
'summernote/core/agent', 'summernote/core/dom',
'summernote/core/range',
'summernote/settings',
'summernote/EventHandler', 'summernote/Renderer'
], function (agent, dom, range, settings, EventHandler, Renderer) {
'summernote/EventHandler', 'summernote/Renderer',
'summernote/core/list', // odoo change for overwrite
'summernote/core/key' // odoo change for overwrite
], function (agent, dom, range, settings, EventHandler, Renderer, list, key) { // odoo change for overwrite
// jQuery namespace for summernote
$.summernote = $.summernote || {};
@@ -19,7 +21,9 @@ define([
core: {
agent: agent,
dom: dom,
range: range
range: range,
list: list, // odoo change for overwrite
key: key // odoo change for overwrite
},
pluginEvents: {}
});