PHP Classes

File: public/js/tinymce/src/core/src/main/js/newline/NewLineUtils.js

Recommend this page to a friend!
  Classes of Abed Nego Ragil Putra  >  GoLavaCMS  >  public/js/tinymce/src/core/src/main/js/newline/NewLineUtils.js  >  Download  
File: public/js/tinymce/src/core/src/main/js/newline/NewLineUtils.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: GoLavaCMS
Publish content on Web pages with SEO support
Author: By
Last change:
Date: 4 years ago
Size: 3,924 bytes
 

Contents

Class file image Download
/**
 * NewLineUtils.js
 *
 * Released under LGPL License.
 * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

define(
  'tinymce.core.newline.NewLineUtils',
  [
    'ephox.katamari.api.Fun',
    'ephox.katamari.api.Option',
    'ephox.sugar.api.node.Element',
    'tinymce.core.dom.ElementType',
    'tinymce.core.dom.NodeType',
    'tinymce.core.dom.TreeWalker'
  ],
  function (Fun, Option, Element, ElementType, NodeType, TreeWalker) {
    var firstNonWhiteSpaceNodeSibling = function (node) {
      while (node) {
        if (node.nodeType === 1 || (node.nodeType === 3 && node.data && /[\r\n\s]/.test(node.data))) {
          return node;
        }

        node = node.nextSibling;
      }
    };

    var moveToCaretPosition = function (editor, root) {
      var walker, node, rng, lastNode = root, tempElm, dom = editor.dom;
      var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();

      if (!root) {
        return;
      }

      if (/^(LI|DT|DD)$/.test(root.nodeName)) {
        var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);

        if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {
          root.insertBefore(dom.doc.createTextNode('\u00a0'), root.firstChild);
        }
      }

      rng = dom.createRng();
      root.normalize();

      if (root.hasChildNodes()) {
        walker = new TreeWalker(root, root);

        while ((node = walker.current())) {
          if (NodeType.isText(node)) {
            rng.setStart(node, 0);
            rng.setEnd(node, 0);
            break;
          }

          if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {
            rng.setStartBefore(node);
            rng.setEndBefore(node);
            break;
          }

          lastNode = node;
          node = walker.next();
        }

        if (!node) {
          rng.setStart(lastNode, 0);
          rng.setEnd(lastNode, 0);
        }
      } else {
        if (NodeType.isBr(root)) {
          if (root.nextSibling && dom.isBlock(root.nextSibling)) {
            rng.setStartBefore(root);
            rng.setEndBefore(root);
          } else {
            rng.setStartAfter(root);
            rng.setEndAfter(root);
          }
        } else {
          rng.setStart(root, 0);
          rng.setEnd(root, 0);
        }
      }

      editor.selection.setRng(rng);

      // Remove tempElm created for old IE:s
      dom.remove(tempElm);
      editor.selection.scrollIntoView(root);
    };

    var getEditableRoot = function (dom, node) {
      var root = dom.getRoot(), parent, editableRoot;

      // Get all parents until we hit a non editable parent or the root
      parent = node;
      while (parent !== root && dom.getContentEditable(parent) !== "false") {
        if (dom.getContentEditable(parent) === "true") {
          editableRoot = parent;
        }

        parent = parent.parentNode;
      }

      return parent !== root ? editableRoot : root;
    };

    var getParentBlock = function (editor) {
      return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));
    };

    var getParentBlockName = function (editor) {
      return getParentBlock(editor).fold(
        Fun.constant(''),
        function (parentBlock) {
          return parentBlock.nodeName.toUpperCase();
        }
      );
    };

    var isListItemParentBlock = function (editor) {
      return getParentBlock(editor).filter(function (elm) {
        return ElementType.isListItem(Element.fromDom(elm));
      }).isSome();
    };

    return {
      moveToCaretPosition: moveToCaretPosition,
      getEditableRoot: getEditableRoot,
      getParentBlock: getParentBlock,
      getParentBlockName: getParentBlockName,
      isListItemParentBlock: isListItemParentBlock
    };
  }
);
For more information send a message to info at phpclasses dot org.