Subversion Repositories oidplus

Rev

Rev 637 | Rev 759 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 637 Rev 679
Line 2... Line 2...
2
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
2
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3
 * Licensed under the LGPL or a commercial license.
3
 * Licensed under the LGPL or a commercial license.
4
 * For LGPL see License.txt in the project root for license information.
4
 * For LGPL see License.txt in the project root for license information.
5
 * For commercial licenses see https://www.tiny.cloud/
5
 * For commercial licenses see https://www.tiny.cloud/
6
 *
6
 *
7
 * Version: 5.9.2 (2021-09-08)
7
 * Version: 5.10.2 (2021-11-17)
8
 */
8
 */
9
(function () {
9
(function () {
10
    'use strict';
10
    'use strict';
11
 
11
 
12
    var global$5 = tinymce.util.Tools.resolve('tinymce.PluginManager');
12
    var global$6 = tinymce.util.Tools.resolve('tinymce.PluginManager');
13
 
13
 
14
    var __assign = function () {
14
    var __assign = function () {
15
      __assign = Object.assign || function __assign(t) {
15
      __assign = Object.assign || function __assign(t) {
16
        for (var s, i = 1, n = arguments.length; i < n; i++) {
16
        for (var s, i = 1, n = arguments.length; i < n; i++) {
17
          s = arguments[i];
17
          s = arguments[i];
Line 280... Line 280...
280
      fromText: fromText,
280
      fromText: fromText,
281
      fromDom: fromDom,
281
      fromDom: fromDom,
282
      fromPoint: fromPoint
282
      fromPoint: fromPoint
283
    };
283
    };
284
 
284
 
285
    var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
285
    var global$5 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
286
 
286
 
287
    var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');
287
    var global$4 = tinymce.util.Tools.resolve('tinymce.util.Promise');
-
 
288
 
-
 
289
    var global$3 = tinymce.util.Tools.resolve('tinymce.util.URI');
288
 
290
 
289
    var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');
291
    var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');
290
 
292
 
291
    var hasDimensions = function (editor) {
293
    var hasDimensions = function (editor) {
292
      return editor.getParam('image_dimensions', true, 'boolean');
294
      return editor.getParam('image_dimensions', true, 'boolean');
Line 330... Line 332...
330
 
332
 
331
    var parseIntAndGetMax = function (val1, val2) {
333
    var parseIntAndGetMax = function (val1, val2) {
332
      return Math.max(parseInt(val1, 10), parseInt(val2, 10));
334
      return Math.max(parseInt(val1, 10), parseInt(val2, 10));
333
    };
335
    };
334
    var getImageSize = function (url) {
336
    var getImageSize = function (url) {
335
      return new global$3(function (callback) {
337
      return new global$4(function (callback) {
336
        var img = document.createElement('img');
338
        var img = document.createElement('img');
337
        var done = function (dimensions) {
339
        var done = function (dimensions) {
338
          img.onload = img.onerror = null;
340
          img.onload = img.onerror = null;
339
          if (img.parentNode) {
341
          if (img.parentNode) {
340
            img.parentNode.removeChild(img);
342
            img.parentNode.removeChild(img);
Line 346... Line 348...
346
          var height = parseIntAndGetMax(img.height, img.clientHeight);
348
          var height = parseIntAndGetMax(img.height, img.clientHeight);
347
          var dimensions = {
349
          var dimensions = {
348
            width: width,
350
            width: width,
349
            height: height
351
            height: height
350
          };
352
          };
351
          done(global$3.resolve(dimensions));
353
          done(global$4.resolve(dimensions));
352
        };
354
        };
353
        img.onerror = function () {
355
        img.onerror = function () {
354
          done(global$3.reject('Failed to get image dimensions for: ' + url));
356
          done(global$4.reject('Failed to get image dimensions for: ' + url));
355
        };
357
        };
356
        var style = img.style;
358
        var style = img.style;
357
        style.visibility = 'hidden';
359
        style.visibility = 'hidden';
358
        style.position = 'fixed';
360
        style.position = 'fixed';
359
        style.bottom = style.left = '0px';
361
        style.bottom = style.left = '0px';
Line 439... Line 441...
439
        selectImage();
441
        selectImage();
440
      };
442
      };
441
      imgElm.onerror = selectImage;
443
      imgElm.onerror = selectImage;
442
    };
444
    };
443
    var blobToDataUri = function (blob) {
445
    var blobToDataUri = function (blob) {
444
      return new global$3(function (resolve, reject) {
446
      return new global$4(function (resolve, reject) {
445
        var reader = new FileReader();
447
        var reader = new FileReader();
446
        reader.onload = function () {
448
        reader.onload = function () {
447
          resolve(reader.result);
449
          resolve(reader.result);
448
        };
450
        };
449
        reader.onerror = function () {
451
        reader.onerror = function () {
Line 453... Line 455...
453
      });
455
      });
454
    };
456
    };
455
    var isPlaceholderImage = function (imgElm) {
457
    var isPlaceholderImage = function (imgElm) {
456
      return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));
458
      return imgElm.nodeName === 'IMG' && (imgElm.hasAttribute('data-mce-object') || imgElm.hasAttribute('data-mce-placeholder'));
457
    };
459
    };
-
 
460
    var isSafeImageUrl = function (editor, src) {
-
 
461
      return global$3.isDomSafe(src, 'img', editor.settings);
-
 
462
    };
458
 
463
 
459
    var DOM = global$4.DOM;
464
    var DOM = global$5.DOM;
460
    var getHspace = function (image) {
465
    var getHspace = function (image) {
461
      if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
466
      if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
462
        return removePixelSuffix(image.style.marginLeft);
467
        return removePixelSuffix(image.style.marginLeft);
463
      } else {
468
      } else {
464
        return '';
469
        return '';
Line 780... Line 785...
780
      } else {
785
      } else {
781
        editor.selection.select(image);
786
        editor.selection.select(image);
782
        waitLoadImage(editor, data, image);
787
        waitLoadImage(editor, data, image);
783
      }
788
      }
784
    };
789
    };
-
 
790
    var sanitizeImageData = function (editor, data) {
-
 
791
      var src = data.src;
-
 
792
      return __assign(__assign({}, data), { src: isSafeImageUrl(editor, src) ? src : '' });
-
 
793
    };
785
    var insertOrUpdateImage = function (editor, partialData) {
794
    var insertOrUpdateImage = function (editor, partialData) {
786
      var image = getSelectedImage(editor);
795
      var image = getSelectedImage(editor);
787
      if (image) {
796
      if (image) {
788
        var selectedImageData = read(function (css) {
797
        var selectedImageData = read(function (css) {
789
          return normalizeCss$1(editor, css);
798
          return normalizeCss$1(editor, css);
790
        }, image);
799
        }, image);
791
        var data = __assign(__assign({}, selectedImageData), partialData);
800
        var data = __assign(__assign({}, selectedImageData), partialData);
-
 
801
        var sanitizedData = sanitizeImageData(editor, data);
792
        if (data.src) {
802
        if (data.src) {
793
          writeImageDataToSelection(editor, data);
803
          writeImageDataToSelection(editor, sanitizedData);
794
        } else {
804
        } else {
795
          deleteImage(editor, image);
805
          deleteImage(editor, image);
796
        }
806
        }
797
      } else if (partialData.src) {
807
      } else if (partialData.src) {
798
        insertImageAtCaret(editor, __assign(__assign({}, defaultData()), partialData));
808
        insertImageAtCaret(editor, __assign(__assign({}, defaultData()), partialData));
Line 1000... Line 1010...
1000
 
1010
 
1001
    var collect = function (editor) {
1011
    var collect = function (editor) {
1002
      var urlListSanitizer = ListUtils.sanitizer(function (item) {
1012
      var urlListSanitizer = ListUtils.sanitizer(function (item) {
1003
        return editor.convertURL(item.value || item.url, 'src');
1013
        return editor.convertURL(item.value || item.url, 'src');
1004
      });
1014
      });
1005
      var futureImageList = new global$3(function (completer) {
1015
      var futureImageList = new global$4(function (completer) {
1006
        createImageList(editor, function (imageList) {
1016
        createImageList(editor, function (imageList) {
1007
          completer(urlListSanitizer(imageList).map(function (items) {
1017
          completer(urlListSanitizer(imageList).map(function (items) {
1008
            return flatten([
1018
            return flatten([
1009
              [{
1019
              [{
1010
                  text: 'None',
1020
                  text: 'None',
Line 1502... Line 1512...
1502
        };
1512
        };
1503
      };
1513
      };
1504
    };
1514
    };
1505
    var imageSize = function (editor) {
1515
    var imageSize = function (editor) {
1506
      return function (url) {
1516
      return function (url) {
-
 
1517
        if (!isSafeImageUrl(editor, url)) {
-
 
1518
          return global$4.resolve({
-
 
1519
            width: '',
-
 
1520
            height: ''
-
 
1521
          });
-
 
1522
        } else {
1507
        return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(function (dimensions) {
1523
          return getImageSize(editor.documentBaseURI.toAbsolute(url)).then(function (dimensions) {
1508
          return {
1524
            return {
1509
            width: String(dimensions.width),
1525
              width: String(dimensions.width),
1510
            height: String(dimensions.height)
1526
              height: String(dimensions.height)
1511
          };
1527
            };
1512
        });
1528
          });
-
 
1529
        }
1513
      };
1530
      };
1514
    };
1531
    };
1515
    var createBlobCache = function (editor) {
1532
    var createBlobCache = function (editor) {
1516
      return function (file, blobUri, dataUrl) {
1533
      return function (file, blobUri, dataUrl) {
1517
        return editor.editorUpload.blobCache.create({
1534
        return editor.editorUpload.blobCache.create({
Line 1550... Line 1567...
1550
    };
1567
    };
1551
    var uploadImage = function (editor) {
1568
    var uploadImage = function (editor) {
1552
      return function (blobInfo) {
1569
      return function (blobInfo) {
1553
        return global$1(editor).upload([blobInfo], false).then(function (results) {
1570
        return global$1(editor).upload([blobInfo], false).then(function (results) {
1554
          if (results.length === 0) {
1571
          if (results.length === 0) {
1555
            return global$3.reject('Failed to upload image');
1572
            return global$4.reject('Failed to upload image');
1556
          } else if (results[0].status === false) {
1573
          } else if (results[0].status === false) {
1557
            return global$3.reject(results[0].error.message);
1574
            return global$4.reject(results[0].error.message);
1558
          } else {
1575
          } else {
1559
            return results[0];
1576
            return results[0];
1560
          }
1577
          }
1561
        });
1578
        });
1562
      };
1579
      };
Line 1618... Line 1635...
1618
      editor.ui.registry.addToggleButton('image', {
1635
      editor.ui.registry.addToggleButton('image', {
1619
        icon: 'image',
1636
        icon: 'image',
1620
        tooltip: 'Insert/edit image',
1637
        tooltip: 'Insert/edit image',
1621
        onAction: Dialog(editor).open,
1638
        onAction: Dialog(editor).open,
1622
        onSetup: function (buttonApi) {
1639
        onSetup: function (buttonApi) {
-
 
1640
          buttonApi.setActive(isNonNullable(getSelectedImage(editor)));
1623
          return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;
1641
          return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object],[data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;
1624
        }
1642
        }
1625
      });
1643
      });
1626
      editor.ui.registry.addMenuItem('image', {
1644
      editor.ui.registry.addMenuItem('image', {
1627
        icon: 'image',
1645
        icon: 'image',
Line 1634... Line 1652...
1634
        }
1652
        }
1635
      });
1653
      });
1636
    };
1654
    };
1637
 
1655
 
1638
    function Plugin () {
1656
    function Plugin () {
1639
      global$5.add('image', function (editor) {
1657
      global$6.add('image', function (editor) {
1640
        setup(editor);
1658
        setup(editor);
1641
        register(editor);
1659
        register(editor);
1642
        register$1(editor);
1660
        register$1(editor);
1643
      });
1661
      });
1644
    }
1662
    }