Typing.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. define([
  2. 'summernote/core/dom',
  3. 'summernote/core/range',
  4. 'summernote/editing/Bullet'
  5. ], function (dom, range, Bullet) {
  6. /**
  7. * @class editing.Typing
  8. *
  9. * Typing
  10. *
  11. */
  12. var Typing = function () {
  13. // a Bullet instance to toggle lists off
  14. var bullet = new Bullet();
  15. /**
  16. * insert tab
  17. *
  18. * @param {jQuery} $editable
  19. * @param {WrappedRange} rng
  20. * @param {Number} tabsize
  21. */
  22. this.insertTab = function ($editable, rng, tabsize) {
  23. var tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));
  24. rng = rng.deleteContents();
  25. rng.insertNode(tab, true);
  26. rng = range.create(tab, tabsize);
  27. rng.select();
  28. };
  29. /**
  30. * insert paragraph
  31. */
  32. this.insertParagraph = function () {
  33. var rng = range.create();
  34. // deleteContents on range.
  35. rng = rng.deleteContents();
  36. // Wrap range if it needs to be wrapped by paragraph
  37. rng = rng.wrapBodyInlineWithPara();
  38. // finding paragraph
  39. var splitRoot = dom.ancestor(rng.sc, dom.isPara);
  40. var nextPara;
  41. // on paragraph: split paragraph
  42. if (splitRoot) {
  43. // if it is an empty line with li
  44. if (dom.isEmpty(splitRoot) && dom.isLi(splitRoot)) {
  45. // disable UL/OL and escape!
  46. bullet.toggleList(splitRoot.parentNode.nodeName);
  47. return;
  48. // if new line has content (not a line break)
  49. } else {
  50. nextPara = dom.splitTree(splitRoot, rng.getStartPoint());
  51. var emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);
  52. emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));
  53. $.each(emptyAnchors, function (idx, anchor) {
  54. dom.remove(anchor);
  55. });
  56. }
  57. // no paragraph: insert empty paragraph
  58. } else {
  59. var next = rng.sc.childNodes[rng.so];
  60. nextPara = $(dom.emptyPara)[0];
  61. if (next) {
  62. rng.sc.insertBefore(nextPara, next);
  63. } else {
  64. rng.sc.appendChild(nextPara);
  65. }
  66. }
  67. range.create(nextPara, 0).normalize().select();
  68. };
  69. };
  70. return Typing;
  71. });