summaryrefslogtreecommitdiff
path: root/addons/website/static/lib/summernote/src/js/module/Popover.js
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2014-12-10 15:59:48 +0100
committerChristophe Matthieu <chm@odoo.com>2015-01-05 10:17:10 +0100
commit1596e45e8174cd736d4f7c78f85ec76a8e34888d (patch)
tree4ff318ee78bccc6c0bb6253670e85977f8f5a643 /addons/website/static/lib/summernote/src/js/module/Popover.js
parentf9a7ed6b9406d657fda33ec55c4e237576b77a42 (diff)
[IMP] website: add summernote lib
Diffstat (limited to 'addons/website/static/lib/summernote/src/js/module/Popover.js')
-rw-r--r--addons/website/static/lib/summernote/src/js/module/Popover.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/addons/website/static/lib/summernote/src/js/module/Popover.js b/addons/website/static/lib/summernote/src/js/module/Popover.js
new file mode 100644
index 00000000000..29d44666a23
--- /dev/null
+++ b/addons/website/static/lib/summernote/src/js/module/Popover.js
@@ -0,0 +1,101 @@
+define([
+ 'summernote/core/func',
+ 'summernote/core/list',
+ 'summernote/module/Button'
+], function (func, list, Button) {
+ /**
+ * Popover (http://getbootstrap.com/javascript/#popovers)
+ */
+ var Popover = function () {
+ var button = new Button();
+
+ /**
+ * returns position from placeholder
+ * @param {Node} placeholder
+ * @param {Boolean} isAirMode
+ */
+ var posFromPlaceholder = function (placeholder, isAirMode) {
+ var $placeholder = $(placeholder);
+ var pos = isAirMode ? $placeholder.offset() : $placeholder.position();
+ var height = $placeholder.outerHeight(true); // include margin
+
+ // popover below placeholder.
+ return {
+ left: pos.left,
+ top: pos.top + height
+ };
+ };
+
+ /**
+ * show popover
+ * @param {jQuery} popover
+ * @param {Position} pos
+ */
+ var showPopover = function ($popover, pos) {
+ $popover.css({
+ display: 'block',
+ left: pos.left,
+ top: pos.top
+ });
+ };
+
+ var PX_POPOVER_ARROW_OFFSET_X = 20;
+
+ /**
+ * update current state
+ * @param {jQuery} $popover - popover container
+ * @param {Object} styleInfo - style object
+ * @param {Boolean} isAirMode
+ */
+ this.update = function ($popover, styleInfo, isAirMode) {
+ button.update($popover, styleInfo);
+
+ var $linkPopover = $popover.find('.note-link-popover');
+ if (styleInfo.anchor) {
+ var $anchor = $linkPopover.find('a');
+ var href = $(styleInfo.anchor).attr('href');
+ $anchor.attr('href', href).html(href);
+ showPopover($linkPopover, posFromPlaceholder(styleInfo.anchor, isAirMode));
+ } else {
+ $linkPopover.hide();
+ }
+
+ var $imagePopover = $popover.find('.note-image-popover');
+ if (styleInfo.image) {
+ showPopover($imagePopover, posFromPlaceholder(styleInfo.image, isAirMode));
+ } else {
+ $imagePopover.hide();
+ }
+
+ var $airPopover = $popover.find('.note-air-popover');
+ if (isAirMode && !styleInfo.range.isCollapsed()) {
+ var bnd = func.rect2bnd(list.last(styleInfo.range.getClientRects()));
+ showPopover($airPopover, {
+ left: Math.max(bnd.left + bnd.width / 2 - PX_POPOVER_ARROW_OFFSET_X, 0),
+ top: bnd.top + bnd.height
+ });
+ } else {
+ $airPopover.hide();
+ }
+ };
+
+ /**
+ * @param {Node} button
+ * @param {String} eventName
+ * @param {String} value
+ */
+ this.updateRecentColor = function (button, eventName, value) {
+ button.updateRecentColor(button, eventName, value);
+ };
+
+ /**
+ * hide all popovers
+ * @param {jQuery} $popover - popover container
+ */
+ this.hide = function ($popover) {
+ $popover.children().hide();
+ };
+ };
+
+ return Popover;
+});