Вход Регистрация
Файл: library/wysihtml5/src/commands/createLink.js
Строк: 151
<?php
(function(wysihtml5) {
  var 
undef,
      
NODE_NAME "A",
      
dom       wysihtml5.dom;
  
  function 
_removeFormat(composeranchors) {
    var 
length  anchors.length,
        
i       0,
        
anchor,
        
codeElement,
        
textContent;
    for (; 
i<lengthi++) {
      
anchor      anchors[i];
      
codeElement dom.getParentElement(anchor, { nodeName"code" });
      
textContent dom.getTextContent(anchor);

      
// if <a> contains url-like text content, rename it to <code> to prevent re-autolinking
      // else replace <a> with its childNodes
      
if (textContent.match(dom.autoLink.URL_REG_EXP) && !codeElement) {
        
// <code> element is used to prevent later auto-linking of the content
        
codeElement dom.renameElement(anchor"code");
      } else {
        
dom.replaceWithChildNodes(anchor);
      }
    }
  }

  function 
_format(composerattributes) {
    var 
doc             composer.doc,
        
tempClass       "_wysihtml5-temp-" + (+new Date()),
        
tempClassRegExp = /non-matching-class/g,
        
i               0,
        
length,
        
anchors,
        
anchor,
        
hasElementChild,
        
isEmpty,
        
elementToSetCaretAfter,
        
textContent,
        
whiteSpace,
        
j;
    
wysihtml5.commands.formatInline.exec(composerundefNODE_NAMEtempClasstempClassRegExp);
    
anchors doc.querySelectorAll(NODE_NAME "." tempClass);
    
length  anchors.length;
    for (; 
i<lengthi++) {
      
anchor anchors[i];
      
anchor.removeAttribute("class");
      for (
j in attributes) {
        
anchor.setAttribute(jattributes[j]);
      }
    }

    
elementToSetCaretAfter anchor;
    if (
length === 1) {
      
textContent dom.getTextContent(anchor);
      
hasElementChild = !!anchor.querySelector("*");
      
isEmpty textContent === "" || textContent === wysihtml5.INVISIBLE_SPACE;
      if (!
hasElementChild && isEmpty) {
        
dom.setTextContent(anchorattributes.text || anchor.href);
        
whiteSpace doc.createTextNode(" ");
        
composer.selection.setAfter(anchor);
        
dom.insert(whiteSpace).after(anchor);
        
elementToSetCaretAfter whiteSpace;
      }
    }
    
composer.selection.setAfter(elementToSetCaretAfter);
  }
  
  
wysihtml5.commands.createLink = {
    
/**
     * TODO: Use HTMLApplier or formatInline here
     *
     * Turns selection into a link
     * If selection is already a link, it removes the link and wraps it with a <code> element
     * The <code> element is needed to avoid auto linking
     * 
     * @example
     *    // either ...
     *    wysihtml5.commands.createLink.exec(composer, "createLink", "http://www.google.de");
     *    // ... or ...
     *    wysihtml5.commands.createLink.exec(composer, "createLink", { href: "http://www.google.de", target: "_blank" });
     */
    
exec: function(composercommandvalue) {
      var 
anchors this.state(composercommand);
      if (
anchors) {
        
// Selection contains links
        
composer.selection.executeAndRestore(function() {
          
_removeFormat(composeranchors);
        });
      } else {
        
// Create links
        
value typeof(value) === "object" value : { hrefvalue };
        
_format(composervalue);
      }
    },

    
state: function(composercommand) {
      return 
wysihtml5.commands.formatInline.state(composercommand"A");
    }
  };
})(
wysihtml5);
?>
Онлайн: 0
Реклама