Subversion Repositories oidplus

Rev

Rev 1422 | View as "text/javascript" | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /**
  2.  * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3.  * Licensed under the LGPL or a commercial license.
  4.  * For LGPL see License.txt in the project root for license information.
  5.  * For commercial licenses see https://www.tiny.cloud/
  6.  *
  7.  * Version: 5.10.9 (2023-11-15)
  8.  */
  9. (function () {
  10.     'use strict';
  11.  
  12.     var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
  13.  
  14.     var getKeyboardSpaces = function (editor) {
  15.       var spaces = editor.getParam('nonbreaking_force_tab', 0);
  16.       if (typeof spaces === 'boolean') {
  17.         return spaces === true ? 3 : 0;
  18.       } else {
  19.         return spaces;
  20.       }
  21.     };
  22.     var wrapNbsps = function (editor) {
  23.       return editor.getParam('nonbreaking_wrap', true, 'boolean');
  24.     };
  25.  
  26.     var stringRepeat = function (string, repeats) {
  27.       var str = '';
  28.       for (var index = 0; index < repeats; index++) {
  29.         str += string;
  30.       }
  31.       return str;
  32.     };
  33.     var isVisualCharsEnabled = function (editor) {
  34.       return editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;
  35.     };
  36.     var insertNbsp = function (editor, times) {
  37.       var classes = function () {
  38.         return isVisualCharsEnabled(editor) ? 'mce-nbsp-wrap mce-nbsp' : 'mce-nbsp-wrap';
  39.       };
  40.       var nbspSpan = function () {
  41.         return '<span class="' + classes() + '" contenteditable="false">' + stringRepeat('&nbsp;', times) + '</span>';
  42.       };
  43.       var shouldWrap = wrapNbsps(editor);
  44.       var html = shouldWrap || editor.plugins.visualchars ? nbspSpan() : stringRepeat('&nbsp;', times);
  45.       editor.undoManager.transact(function () {
  46.         return editor.insertContent(html);
  47.       });
  48.     };
  49.  
  50.     var register$1 = function (editor) {
  51.       editor.addCommand('mceNonBreaking', function () {
  52.         insertNbsp(editor, 1);
  53.       });
  54.     };
  55.  
  56.     var global = tinymce.util.Tools.resolve('tinymce.util.VK');
  57.  
  58.     var setup = function (editor) {
  59.       var spaces = getKeyboardSpaces(editor);
  60.       if (spaces > 0) {
  61.         editor.on('keydown', function (e) {
  62.           if (e.keyCode === global.TAB && !e.isDefaultPrevented()) {
  63.             if (e.shiftKey) {
  64.               return;
  65.             }
  66.             e.preventDefault();
  67.             e.stopImmediatePropagation();
  68.             insertNbsp(editor, spaces);
  69.           }
  70.         });
  71.       }
  72.     };
  73.  
  74.     var register = function (editor) {
  75.       var onAction = function () {
  76.         return editor.execCommand('mceNonBreaking');
  77.       };
  78.       editor.ui.registry.addButton('nonbreaking', {
  79.         icon: 'non-breaking',
  80.         tooltip: 'Nonbreaking space',
  81.         onAction: onAction
  82.       });
  83.       editor.ui.registry.addMenuItem('nonbreaking', {
  84.         icon: 'non-breaking',
  85.         text: 'Nonbreaking space',
  86.         onAction: onAction
  87.       });
  88.     };
  89.  
  90.     function Plugin () {
  91.       global$1.add('nonbreaking', function (editor) {
  92.         register$1(editor);
  93.         register(editor);
  94.         setup(editor);
  95.       });
  96.     }
  97.  
  98.     Plugin();
  99.  
  100. }());
  101.