mirror of
https://github.com/codex-team/editor.js
synced 2024-06-02 22:12:27 +02:00
image module hotfix (#126)
* image module hotfix * image improved configurations * Image plugin updated - add border settings - show selected settings - stretched setting
This commit is contained in:
parent
cefa27971e
commit
d1a04fc454
4623
codex-editor.js
4623
codex-editor.js
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -313,7 +313,10 @@ var callbacks = (function(callbacks) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var inputIsEmpty = !codex.content.currentNode.textContent.trim();
|
var inputIsEmpty = !codex.content.currentNode.textContent.trim(),
|
||||||
|
currentNodeType = codex.content.currentNode.dataset.tool,
|
||||||
|
isInitialType = currentNodeType == codex.settings.initialBlockPlugin;
|
||||||
|
|
||||||
|
|
||||||
if (inputIsEmpty) {
|
if (inputIsEmpty) {
|
||||||
|
|
||||||
|
@ -325,13 +328,7 @@ var callbacks = (function(callbacks) {
|
||||||
/** Hide plus buttons */
|
/** Hide plus buttons */
|
||||||
codex.toolbar.hidePlusButton();
|
codex.toolbar.hidePlusButton();
|
||||||
|
|
||||||
}
|
/** Mark current block */
|
||||||
|
|
||||||
var currentNodeType = codex.content.currentNode.dataset.tool;
|
|
||||||
|
|
||||||
/** Mark current block*/
|
|
||||||
if (currentNodeType != codex.settings.initialBlockPlugin || !inputIsEmpty) {
|
|
||||||
|
|
||||||
codex.content.markBlock();
|
codex.content.markBlock();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,9 +259,9 @@ var ui = (function(ui){
|
||||||
|
|
||||||
codex.core.log('ui.bindEvents fired', 'info');
|
codex.core.log('ui.bindEvents fired', 'info');
|
||||||
|
|
||||||
window.addEventListener('error', function (errorMsg, url, lineNumber) {
|
// window.addEventListener('error', function (errorMsg, url, lineNumber) {
|
||||||
codex.notifications.errorThrown(errorMsg, event);
|
// codex.notifications.errorThrown(errorMsg, event);
|
||||||
}, false );
|
// }, false );
|
||||||
|
|
||||||
/** All keydowns on Document */
|
/** All keydowns on Document */
|
||||||
document.addEventListener('keydown', codex.callback.globalKeydown, false );
|
document.addEventListener('keydown', codex.callback.globalKeydown, false );
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "codex.editor",
|
"name": "codex.editor",
|
||||||
"version": "1.3.5",
|
"version": "1.3.6",
|
||||||
"description": "Codex Editor. Native JS, based on API and Open Source",
|
"description": "Codex Editor. Native JS, based on API and Open Source",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
|
@ -15,6 +15,18 @@
|
||||||
filter: blur(1.7px) grayscale(1);
|
filter: blur(1.7px) grayscale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ce-image__wrapper img {
|
||||||
|
transition: all 500ms ease-in;
|
||||||
|
will-change: opacity, filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-image__preview img {
|
||||||
|
opacity: .5;
|
||||||
|
filter: blur(1.7px) grayscale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** upload image form */
|
/** upload image form */
|
||||||
.ce-plugin-image__holder{
|
.ce-plugin-image__holder{
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -67,10 +79,18 @@
|
||||||
color: #393F52;
|
color: #393F52;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Uploaded image */
|
/** Uploaded image */
|
||||||
.ce-plugin-image__wrapper {
|
.ce-plugin-image__wrapper {
|
||||||
padding: 1em 0;
|
padding: 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ce-image__wrapper--bordered {
|
||||||
|
border: 1px solid #eee;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
.ce-plugin-image__uploaded--centered {
|
.ce-plugin-image__uploaded--centered {
|
||||||
display: block;
|
display: block;
|
||||||
max-width: 600px;
|
max-width: 600px;
|
||||||
|
@ -95,6 +115,7 @@
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 1px solid #ebeef3;
|
border: 1px solid #ebeef3;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ce-plugin-image__caption:empty::before {
|
.ce-plugin-image__caption:empty::before {
|
||||||
|
@ -124,3 +145,49 @@
|
||||||
.ce_plugin_image--select_button:hover{
|
.ce_plugin_image--select_button:hover{
|
||||||
color: #a1b4ec;
|
color: #a1b4ec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ce-image-settings__item {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-image-settings__item:not(:last-of-type){
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-settings-checkbox {
|
||||||
|
display: inline-block;
|
||||||
|
width: 17px;
|
||||||
|
background: #494361;
|
||||||
|
line-height: 0px;
|
||||||
|
border-radius: 14px;
|
||||||
|
padding: 2px;
|
||||||
|
vertical-align: text-top;
|
||||||
|
margin-right: 16px;
|
||||||
|
transition: background-color 200ms ease-out;
|
||||||
|
will-change: background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-settings-checkbox__toggler {
|
||||||
|
display: inline-block;
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #fff;
|
||||||
|
transition: margin 200ms ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setting is active
|
||||||
|
*/
|
||||||
|
.ce-image-settings__item--toggled {
|
||||||
|
color: #1FAA7E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-image-settings__item--toggled .ce-settings-checkbox {
|
||||||
|
background-color: #14DC9E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ce-image-settings__item--toggled .ce-settings-checkbox__toggler {
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
|
@ -24,10 +24,27 @@ var image = (function(image) {
|
||||||
imageWrapper : 'ce-plugin-image__wrapper',
|
imageWrapper : 'ce-plugin-image__wrapper',
|
||||||
formHolder : 'ce-plugin-image__holder',
|
formHolder : 'ce-plugin-image__holder',
|
||||||
uploadButton : 'ce-plugin-image__button',
|
uploadButton : 'ce-plugin-image__button',
|
||||||
imagePreview : 'ce-image__preview'
|
imagePreview : 'ce-image__preview',
|
||||||
|
selectorHolder: 'ce-settings-checkbox',
|
||||||
|
selectorButton: 'ce-settings-checkbox__toggler',
|
||||||
|
settingsItem: 'ce-image-settings__item',
|
||||||
|
imageWrapperBordered : 'ce-image__wrapper--bordered',
|
||||||
|
toggled : 'ce-image-settings__item--toggled'
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cache settings
|
||||||
|
* @type {null}
|
||||||
|
*/
|
||||||
|
image.cachedSettings = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of configurations
|
||||||
|
* Need to change statement
|
||||||
|
*/
|
||||||
|
image.configurations = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
|
@ -64,11 +81,13 @@ var image = (function(image) {
|
||||||
* @param {string} style - css class
|
* @param {string} style - css class
|
||||||
* @return {object} image - document IMG tag
|
* @return {object} image - document IMG tag
|
||||||
*/
|
*/
|
||||||
image : function(file, style) {
|
image : function(file, styles) {
|
||||||
|
|
||||||
var image = document.createElement('IMG');
|
var image = document.createElement('IMG');
|
||||||
|
|
||||||
image.classList.add(style);
|
styles.map(function(item) {
|
||||||
|
image.classList.add(item);
|
||||||
|
});
|
||||||
|
|
||||||
image.src = file.url;
|
image.src = file.url;
|
||||||
image.dataset.bigUrl = file.bigUrl;
|
image.dataset.bigUrl = file.bigUrl;
|
||||||
|
@ -119,18 +138,20 @@ var image = (function(image) {
|
||||||
* @param {boolean} stretched - stretched or not
|
* @param {boolean} stretched - stretched or not
|
||||||
* @return wrapped block with image and caption
|
* @return wrapped block with image and caption
|
||||||
*/
|
*/
|
||||||
makeImage : function(data, imageTypeClass, stretched) {
|
makeImage : function(data, imageTypeClasses, stretched, bordered) {
|
||||||
|
|
||||||
var file = data.file,
|
var file = data.file,
|
||||||
text = data.caption,
|
text = data.caption,
|
||||||
type = data.type,
|
type = data.type,
|
||||||
image = ui_.image(file, imageTypeClass),
|
image = ui_.image(file, imageTypeClasses),
|
||||||
caption = ui_.caption(),
|
caption = ui_.caption(),
|
||||||
wrapper = ui_.wrapper();
|
wrapper = ui_.wrapper();
|
||||||
|
|
||||||
caption.textContent = text;
|
caption.textContent = text;
|
||||||
|
|
||||||
wrapper.dataset.stretched = stretched;
|
wrapper.dataset.stretched = stretched;
|
||||||
|
wrapper.dataset.bordered = bordered;
|
||||||
|
|
||||||
/** Appeding to the wrapper */
|
/** Appeding to the wrapper */
|
||||||
wrapper.appendChild(image);
|
wrapper.appendChild(image);
|
||||||
wrapper.appendChild(caption);
|
wrapper.appendChild(caption);
|
||||||
|
@ -229,51 +250,84 @@ var image = (function(image) {
|
||||||
|
|
||||||
el.addEventListener('click', function() {
|
el.addEventListener('click', function() {
|
||||||
|
|
||||||
methods_.selectTypeClicked(type);
|
// el - settings element
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case 'bordered':
|
||||||
|
methods_.toggleBordered(type, this); break;
|
||||||
|
case 'stretched':
|
||||||
|
methods_.toggleStretched(type, this); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
selectTypeClicked : function(type) {
|
toggleBordered : function(type, clickedSettingsItem ) {
|
||||||
|
|
||||||
var current = codex.content.currentNode,
|
var current = codex.content.currentNode,
|
||||||
blockContent = current.childNodes[0],
|
blockContent = current.childNodes[0],
|
||||||
image = ui_.getImage(current),
|
img = ui_.getImage(current),
|
||||||
inFeed = false,
|
|
||||||
wrapper = current.querySelector('.' + elementClasses_.imageWrapper);
|
wrapper = current.querySelector('.' + elementClasses_.imageWrapper);
|
||||||
|
|
||||||
if (!image) {
|
if (!img) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add classes to the IMG tag and to the Settings element
|
||||||
|
*/
|
||||||
|
img.classList.toggle(elementClasses_.imageWrapperBordered);
|
||||||
|
clickedSettingsItem.classList.toggle(elementClasses_.toggled);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save settings in dataset
|
||||||
|
*/
|
||||||
|
if (img.classList.contains(elementClasses_.imageWrapperBordered)) {
|
||||||
|
wrapper.dataset.bordered = true;
|
||||||
|
} else {
|
||||||
|
wrapper.dataset.bordered = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
codex.toolbar.settings.close();
|
||||||
|
}, 200);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleStretched : function( type, clickedSettingsItem ) {
|
||||||
|
|
||||||
|
var current = codex.content.currentNode,
|
||||||
|
blockContent = current.childNodes[0],
|
||||||
|
img = ui_.getImage(current),
|
||||||
|
wrapper = current.querySelector('.' + elementClasses_.imageWrapper);
|
||||||
|
|
||||||
|
if (!img) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clear classList */
|
/** Clear classList */
|
||||||
current.className = '';
|
blockContent.classList.add(elementClasses_.blockStretched);
|
||||||
image.className = '';
|
img.classList.toggle(elementClasses_.uploadedImage.stretched);
|
||||||
|
img.classList.toggle(elementClasses_.uploadedImage.centered);
|
||||||
|
|
||||||
/** Add important first-level class ce_block */
|
clickedSettingsItem.classList.toggle(elementClasses_.toggled);
|
||||||
current.classList.add(codex.ui.className.BLOCK_CLASSNAME);
|
|
||||||
|
|
||||||
if (type === 'stretched') {
|
if (img.classList.contains(elementClasses_.uploadedImage.stretched)) {
|
||||||
|
|
||||||
image.classList.add(elementClasses_.uploadedImage.stretched);
|
|
||||||
|
|
||||||
blockContent.classList.add(elementClasses_.blockStretched);
|
|
||||||
|
|
||||||
/** Setting dataset for saver */
|
|
||||||
wrapper.dataset.stretched = true;
|
wrapper.dataset.stretched = true;
|
||||||
|
|
||||||
} else if (type === 'centered') {
|
} else {
|
||||||
|
|
||||||
image.classList.add(elementClasses_.uploadedImage.centered);
|
|
||||||
|
|
||||||
blockContent.classList.remove(elementClasses_.blockStretched);
|
|
||||||
|
|
||||||
/** Setting dataset for saver */
|
|
||||||
wrapper.dataset.stretched = false;
|
wrapper.dataset.stretched = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
codex.toolbar.settings.close();
|
setTimeout(function() {
|
||||||
|
codex.toolbar.settings.close();
|
||||||
|
}, 200);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -458,12 +512,6 @@ var image = (function(image) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Default image holder which will be replaced after image upload
|
|
||||||
* @type {null}
|
|
||||||
*/
|
|
||||||
image.holder = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Image path
|
* Image path
|
||||||
* @type {null}
|
* @type {null}
|
||||||
|
@ -485,17 +533,24 @@ var image = (function(image) {
|
||||||
*/
|
*/
|
||||||
var make_ = function ( data ) {
|
var make_ = function ( data ) {
|
||||||
|
|
||||||
var holder;
|
var holder,
|
||||||
|
classes = [];
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
|
||||||
|
if (data.border) {
|
||||||
|
classes.push(elementClasses_.imageWrapperBordered);
|
||||||
|
}
|
||||||
|
|
||||||
if ( data.isstretch || data.isstretch === 'true') {
|
if ( data.isstretch || data.isstretch === 'true') {
|
||||||
|
|
||||||
holder = ui_.makeImage(data, elementClasses_.uploadedImage.stretched, 'true');
|
classes.push(elementClasses_.uploadedImage.stretched);
|
||||||
|
holder = ui_.makeImage(data, classes, 'true', data.border);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
holder = ui_.makeImage(data, elementClasses_.uploadedImage.centered, 'false');
|
classes.push(elementClasses_.uploadedImage.centered);
|
||||||
|
holder = ui_.makeImage(data, classes, 'false', data.border);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,7 +620,7 @@ var image = (function(image) {
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
background : false,
|
background : false,
|
||||||
border : false,
|
border : content.dataset.bordered === 'true' ? true : false,
|
||||||
isstretch : content.dataset.stretched === 'true' ? true : false,
|
isstretch : content.dataset.stretched === 'true' ? true : false,
|
||||||
file : {
|
file : {
|
||||||
url : image.dataset.src || image.src,
|
url : image.dataset.src || image.src,
|
||||||
|
@ -581,7 +636,6 @@ var image = (function(image) {
|
||||||
return data;
|
return data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
*
|
*
|
||||||
|
@ -590,12 +644,15 @@ var image = (function(image) {
|
||||||
*/
|
*/
|
||||||
image.makeSettings = function () {
|
image.makeSettings = function () {
|
||||||
|
|
||||||
var holder = document.createElement('DIV'),
|
var currentNode = codex.content.currentNode,
|
||||||
|
wrapper = currentNode.querySelector('.' + elementClasses_.imageWrapper),
|
||||||
|
holder = document.createElement('DIV'),
|
||||||
types = {
|
types = {
|
||||||
centered : 'По центру',
|
stretched : "На всю ширину",
|
||||||
stretched : 'На всю ширину'
|
bordered : "Добавить рамку"
|
||||||
},
|
},
|
||||||
selectTypeButton;
|
currentImageWrapper = currentNode.querySelector('.' + elementClasses_.imageWrapper ),
|
||||||
|
currentImageSettings = currentImageWrapper.dataset;
|
||||||
|
|
||||||
/** Add holder classname */
|
/** Add holder classname */
|
||||||
holder.className = 'ce_plugin_image--settings';
|
holder.className = 'ce_plugin_image--settings';
|
||||||
|
@ -603,14 +660,33 @@ var image = (function(image) {
|
||||||
/** Now add type selectors */
|
/** Now add type selectors */
|
||||||
for (var type in types){
|
for (var type in types){
|
||||||
|
|
||||||
selectTypeButton = document.createElement('SPAN');
|
/**
|
||||||
|
* Settings template
|
||||||
|
*/
|
||||||
|
var settingsItem = document.createElement('DIV'),
|
||||||
|
selectorsHolder = document.createElement('SPAN'),
|
||||||
|
selectorsButton = document.createElement('SPAN');
|
||||||
|
|
||||||
selectTypeButton.textContent = types[type];
|
settingsItem.classList.add(elementClasses_.settingsItem);
|
||||||
selectTypeButton.className = 'ce_plugin_image--select_button';
|
selectorsHolder.classList.add(elementClasses_.selectorHolder);
|
||||||
|
selectorsButton.classList.add(elementClasses_.selectorButton);
|
||||||
|
|
||||||
methods_.addSelectTypeClickListener(selectTypeButton, type);
|
selectorsHolder.appendChild(selectorsButton);
|
||||||
|
settingsItem.appendChild(selectorsHolder);
|
||||||
|
|
||||||
holder.appendChild(selectTypeButton);
|
selectTypeButton = document.createTextNode(types[type]);
|
||||||
|
settingsItem.appendChild(selectTypeButton);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate previously selected settings
|
||||||
|
*/
|
||||||
|
if ( currentImageSettings[type] == 'true' ){
|
||||||
|
settingsItem.classList.add(elementClasses_.toggled);
|
||||||
|
}
|
||||||
|
|
||||||
|
methods_.addSelectTypeClickListener(settingsItem, type);
|
||||||
|
|
||||||
|
holder.appendChild(settingsItem);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,85 +699,6 @@ var image = (function(image) {
|
||||||
*/
|
*/
|
||||||
image.uploadImageFromUri = uploadingCallbacks_.ByPaste.uploadImageFromUrl;
|
image.uploadImageFromUri = uploadingCallbacks_.ByPaste.uploadImageFromUrl;
|
||||||
|
|
||||||
image.urlPastedCallbacks = {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Upload image by URL
|
|
||||||
*
|
|
||||||
* @uses codex Image tool
|
|
||||||
* @param filename
|
|
||||||
* @returns {Element}
|
|
||||||
*/
|
|
||||||
uploadedImage : function(filename) {
|
|
||||||
|
|
||||||
var data = {
|
|
||||||
background: false,
|
|
||||||
border: false,
|
|
||||||
isStretch: false,
|
|
||||||
file: {
|
|
||||||
url: "upload/redactor_images/" + filename,
|
|
||||||
bigUrl: "upload/redactor_images/" + filename,
|
|
||||||
width: null,
|
|
||||||
height: null,
|
|
||||||
additionalData: "null"
|
|
||||||
},
|
|
||||||
caption: '',
|
|
||||||
cover: null
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Using Image plugin make method */
|
|
||||||
var image = ceImage.make(data);
|
|
||||||
|
|
||||||
return image;
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Direct upload from pasted path
|
|
||||||
* @param path
|
|
||||||
*/
|
|
||||||
uploadImage : function(path) {
|
|
||||||
|
|
||||||
var ajaxUrl = location.protocol + '//' + location.hostname + ':32769',
|
|
||||||
file,
|
|
||||||
image,
|
|
||||||
current = codex.content.currentNode,
|
|
||||||
beforeSend,
|
|
||||||
success_callback;
|
|
||||||
|
|
||||||
/** When image is uploaded to redactors folder */
|
|
||||||
success_callback = function(data) {
|
|
||||||
|
|
||||||
console.log(data);
|
|
||||||
return;
|
|
||||||
var file = JSON.parse(data);
|
|
||||||
image = ceImage.urlPastedCallbacks.uploadedImage(file.filename);
|
|
||||||
codex.content.switchBlock(current, image, 'image');
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Before sending XMLHTTP request */
|
|
||||||
beforeSend = function() {
|
|
||||||
var content = current.querySelector('.ce-block__content');
|
|
||||||
content.classList.add('ce-plugin-image__loader');
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Preparing data for XMLHTTP */
|
|
||||||
var data = {
|
|
||||||
url: '/club/fetchImage',
|
|
||||||
type: "POST",
|
|
||||||
data : {
|
|
||||||
url: path
|
|
||||||
},
|
|
||||||
beforeSend : beforeSend,
|
|
||||||
success : success_callback
|
|
||||||
};
|
|
||||||
|
|
||||||
codex.core.ajax(data);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return image;
|
return image;
|
||||||
|
|
||||||
})({});
|
})({});
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue