/src/js/module/Popover.js

https://github.com/JohnRandom/summernote · JavaScript · 89 lines · 57 code · 12 blank · 20 comment · 7 complexity · 9d0a13bcad547b061f9625f257019bca MD5 · raw file

  1. define([
  2. 'summernote/core/func',
  3. 'summernote/core/list',
  4. 'summernote/module/Button'
  5. ], function (func, list, Button) {
  6. /**
  7. * Popover (http://getbootstrap.com/javascript/#popovers)
  8. */
  9. var Popover = function () {
  10. var button = new Button();
  11. /**
  12. * show popover
  13. * @param {jQuery} popover
  14. * @param {Element} elPlaceholder - placeholder for popover
  15. */
  16. var showPopover = function ($popover, elPlaceholder) {
  17. var $placeholder = $(elPlaceholder);
  18. var pos = $placeholder.offset();
  19. // include margin
  20. var height = $placeholder.outerHeight(true);
  21. // display popover below placeholder.
  22. $popover.css({
  23. display: 'block',
  24. left: pos.left,
  25. top: pos.top + height
  26. });
  27. };
  28. var PX_POPOVER_ARROW_OFFSET_X = 20;
  29. /**
  30. * update current state
  31. * @param {jQuery} $popover - popover container
  32. * @param {Object} oStyle - style object
  33. * @param {Boolean} isAirMode
  34. */
  35. this.update = function ($popover, oStyle, isAirMode) {
  36. button.update($popover, oStyle);
  37. var $linkPopover = $popover.find('.note-link-popover');
  38. if (oStyle.anchor) {
  39. var $anchor = $linkPopover.find('a');
  40. $anchor.attr('href', oStyle.anchor.href).html(oStyle.anchor.href);
  41. showPopover($linkPopover, oStyle.anchor);
  42. } else {
  43. $linkPopover.hide();
  44. }
  45. var $imagePopover = $popover.find('.note-image-popover');
  46. if (oStyle.image) {
  47. showPopover($imagePopover, oStyle.image);
  48. } else {
  49. $imagePopover.hide();
  50. }
  51. if (isAirMode) {
  52. var $airPopover = $popover.find('.note-air-popover');
  53. if (!oStyle.range.isCollapsed()) {
  54. var bnd = func.rect2bnd(list.last(oStyle.range.getClientRects()));
  55. $airPopover.css({
  56. display: 'block',
  57. left: Math.max(bnd.left + bnd.width / 2 - PX_POPOVER_ARROW_OFFSET_X, 0),
  58. top: bnd.top + bnd.height
  59. });
  60. } else {
  61. $airPopover.hide();
  62. }
  63. }
  64. };
  65. this.updateRecentColor = function (elBtn, sEvent, sValue) {
  66. button.updateRecentColor(elBtn, sEvent, sValue);
  67. };
  68. /**
  69. * hide all popovers
  70. * @param {jQuery} $popover - popover contaienr
  71. */
  72. this.hide = function ($popover) {
  73. $popover.children().hide();
  74. };
  75. };
  76. return Popover;
  77. });