Вход Регистрация
Файл: Just Wallet 2.0.4/assets/themes/admin/js/plugin/specialchars/summernote-ext-specialchars.js
Строк: 339
<?php
(function (factory) {
  
/* global define */
  
if (typeof define === 'function' && define.amd) {
    
// AMD. Register as an anonymous module.
    
define(['jquery'], factory);
  } else if (
typeof module === 'object' && module.exports) {
    
// Node/CommonJS
    
module.exports factory(require('jquery'));
  } else {
    
// Browser globals
    
factory(window.jQuery);
  }
}(function ($) {
  $.
extend($.summernote.plugins, {
    
'specialchars': function (context) {
      var 
self this;
      var 
ui = $.summernote.ui;

      var 
$editor context.layoutInfo.editor;
      var 
options context.options;
      var 
lang options.langInfo;

      var 
KEY = {
        
UP38,
        
DOWN40,
        
LEFT37,
        
RIGHT39,
        
ENTER13
      
};
      var 
COLUMN_LENGTH 15;
      var 
COLUMN_WIDTH 35;

      var 
currentColumncurrentRowtotalColumntotalRow 0;

      
// special characters data set
      
var specialCharDataSet = [
        
'&quot;''&amp;''&lt;''&gt;''&iexcl;''&cent;',
        
'&pound;''&curren;''&yen;''&brvbar;''&sect;',
        
'&uml;''&copy;''&ordf;''&laquo;''&not;',
        
'&reg;''&macr;''&deg;''&plusmn;''&sup2;',
        
'&sup3;''&acute;''&micro;''&para;''&middot;',
        
'&cedil;''&sup1;''&ordm;''&raquo;''&frac14;',
        
'&frac12;''&frac34;''&iquest;''&times;''&divide;',
        
'&fnof;''&circ;''&tilde;''&ndash;''&mdash;',
        
'&lsquo;''&rsquo;''&sbquo;''&ldquo;''&rdquo;',
        
'&bdquo;''&dagger;''&Dagger;''&bull;''&hellip;',
        
'&permil;''&prime;''&Prime;''&lsaquo;''&rsaquo;',
        
'&oline;''&frasl;''&euro;''&image;''&weierp;',
        
'&real;''&trade;''&alefsym;''&larr;''&uarr;',
        
'&rarr;''&darr;''&harr;''&crarr;''&lArr;',
        
'&uArr;''&rArr;''&dArr;''&hArr;''&forall;',
        
'&part;''&exist;''&empty;''&nabla;''&isin;',
        
'&notin;''&ni;''&prod;''&sum;''&minus;',
        
'&lowast;''&radic;''&prop;''&infin;''&ang;',
        
'&and;''&or;''&cap;''&cup;''&int;',
        
'&there4;''&sim;''&cong;''&asymp;''&ne;',
        
'&equiv;''&le;''&ge;''&sub;''&sup;',
        
'&nsub;''&sube;''&supe;''&oplus;''&otimes;',
        
'&perp;''&sdot;''&lceil;''&rceil;''&lfloor;',
        
'&rfloor;''&loz;''&spades;''&clubs;''&hearts;',
        
'&diams;'
      
];

      
context.memo('button.specialCharacter', function () {
        return 
ui.button({
          
contents'<i class="fa fa-font fa-flip-vertical">',
          
tooltiplang.specialChar.specialChar,
          
click: function () {
            
self.show();
          }
        }).
render();
      });

      
/**
       * Make Special Characters Table
       *
       * @member plugin.specialChar
       * @private
       * @return {jQuery}
       */
      
this.makeSpecialCharSetTable = function () {
        var 
$table = $('<table/>');
        $.
each(specialCharDataSet, function (idxtext) {
          var 
$td = $('<td/>').addClass('note-specialchar-node');
          var 
$tr = (idx COLUMN_LENGTH === 0) ? $('<tr/>') : $table.find('tr').last();

          var 
$button ui.button({
            
callback: function ($node) {
              
$node.html(text);
              
$node.attr('title'text);
              
$node.attr('data-value'encodeURIComponent(text));
              
$node.css({
                
widthCOLUMN_WIDTH,
                
'margin-right''2px',
                
'margin-bottom''2px'
              
});
            }
          }).
render();

          
$td.append($button);

          
$tr.append($td);
          if (
idx COLUMN_LENGTH === 0) {
            
$table.append($tr);
          }
        });

        
totalRow $table.find('tr').length;
        
totalColumn COLUMN_LENGTH;

        return 
$table;
      };

      
this.initialize = function () {
        var 
$container options.dialogsInBody ? $(document.body) : $editor;

        var 
body '<div class="form-group row-fluid">' this.makeSpecialCharSetTable()[0].outerHTML '</div>';

        
this.$dialog ui.dialog({
          
titlelang.specialChar.select,
          
bodybody
        
}).render().appendTo($container);
      };

      
this.show = function () {
        var 
text context.invoke('editor.getSelectedText');
        
context.invoke('editor.saveRange');
        
this.showSpecialCharDialog(text).then(function (selectChar) {
          
context.invoke('editor.restoreRange');

          
// build node
          
var $node = $('<span></span>').html(selectChar)[0];

          if (
$node) {
            
// insert video node
            
context.invoke('editor.insertNode'$node);
          }
        }).
fail(function () {
          
context.invoke('editor.restoreRange');
        });
      };

      
/**
       * show image dialog
       *
       * @param {jQuery} $dialog
       * @return {Promise}
       */
      
this.showSpecialCharDialog = function (text) {
        return $.
Deferred(function (deferred) {
          var 
$specialCharDialog self.$dialog;
          var 
$specialCharNode $specialCharDialog.find('.note-specialchar-node');
          var 
$selectedNode null;
          var 
ARROW_KEYS = [KEY.UPKEY.DOWNKEY.LEFTKEY.RIGHT];
          var 
ENTER_KEY KEY.ENTER;

          function 
addActiveClass($target) {
            if (!
$target) {
              return;
            }
            
$target.find('button').addClass('active');
            
$selectedNode $target;
          }

          function 
removeActiveClass($target) {
            
$target.find('button').removeClass('active');
            
$selectedNode null;
          }

          
// find next node
          
function findNextNode(rowcolumn) {
            var 
findNode null;
            $.
each($specialCharNode, function (idx$node) {
              var 
findRow Math.ceil((idx 1) / COLUMN_LENGTH);
              var 
findColumn = ((idx 1) % COLUMN_LENGTH === 0) ? COLUMN_LENGTH : (idx 1) % COLUMN_LENGTH;
              if (
findRow === row && findColumn === column) {
                
findNode $node;
                return 
false;
              }
            });
            return $(
findNode);
          }

          function 
arrowKeyHandler(keyCode) {
            
// left, right, up, down key
            
var $nextNode;
            var 
lastRowColumnLength $specialCharNode.length totalColumn;

            if (
KEY.LEFT === keyCode) {

              if (
currentColumn 1) {
                
currentColumn currentColumn 1;
              } else if (
currentRow === && currentColumn === 1) {
                
currentColumn lastRowColumnLength;
                
currentRow totalRow;
              } else {
                
currentColumn totalColumn;
                
currentRow currentRow 1;
              }

            } else if (
KEY.RIGHT === keyCode) {

              if (
currentRow === totalRow && lastRowColumnLength === currentColumn) {
                
currentColumn 1;
                
currentRow 1;
              } else if (
currentColumn totalColumn) {
                
currentColumn currentColumn 1;
              } else {
                
currentColumn 1;
                
currentRow currentRow 1;
              }

            } else if (
KEY.UP === keyCode) {
              if (
currentRow === && lastRowColumnLength currentColumn) {
                
currentRow totalRow 1;
              } else {
                
currentRow currentRow 1;
              }
            } else if (
KEY.DOWN === keyCode) {
              
currentRow currentRow 1;
            }

            if (
currentRow === totalRow && currentColumn lastRowColumnLength) {
              
currentRow 1;
            } else if (
currentRow totalRow) {
              
currentRow 1;
            } else if (
currentRow 1) {
              
currentRow totalRow;
            }

            
$nextNode findNextNode(currentRowcurrentColumn);

            if (
$nextNode) {
              
removeActiveClass($selectedNode);
              
addActiveClass($nextNode);
            }
          }

          function 
enterKeyHandler() {
            if (!
$selectedNode) {
              return;
            }

            
deferred.resolve(decodeURIComponent($selectedNode.find('button').attr('data-value')));
            
$specialCharDialog.modal('hide');
          }

          function 
keyDownEventHandler(event) {
            
event.preventDefault();
            var 
keyCode event.keyCode;
            if (
keyCode === undefined || keyCode === null) {
              return;
            }
            
// check arrowKeys match
            
if (ARROW_KEYS.indexOf(keyCode) > -1) {
              if (
$selectedNode === null) {
                
addActiveClass($specialCharNode.eq(0));
                
currentColumn 1;
                
currentRow 1;
                return;
              }
              
arrowKeyHandler(keyCode);
            } else if (
keyCode === ENTER_KEY) {
              
enterKeyHandler();
            }
            return 
false;
          }

          
// remove class
          
removeActiveClass($specialCharNode);

          
// find selected node
          
if (text) {
            for (var 
0$specialCharNode.lengthi++) {
              var 
$checkNode = $($specialCharNode[i]);
              if (
$checkNode.text() === text) {
                
addActiveClass($checkNode);
                
currentRow Math.ceil((1) / COLUMN_LENGTH);
                
currentColumn = (1) % COLUMN_LENGTH;
              }
            }
          }

          
ui.onDialogShown(self.$dialog, function () {

            $(
document).on('keydown'keyDownEventHandler);

            
self.$dialog.find('button').tooltip();

            
$specialCharNode.on('click', function (event) {
              
event.preventDefault();
              
deferred.resolve(decodeURIComponent($(event.currentTarget).find('button').attr('data-value')));
              
ui.hideDialog(self.$dialog);
            });

          });

          
ui.onDialogHidden(self.$dialog, function () {
            
$specialCharNode.off('click');

            
self.$dialog.find('button').tooltip('destroy');

            $(
document).off('keydown'keyDownEventHandler);

            if (
deferred.state() === 'pending') {
              
deferred.reject();
            }
          });

          
ui.showDialog(self.$dialog);
        });
      };
    }
  });
}));
?>
Онлайн: 0
Реклама