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 | } |