Вход Регистрация
Файл: wordpress/wp-includes/js/tinymce/plugins/image/plugin.js
Строк: 469
<?php
/**
 * plugin.js
 *
 * Copyright, Moxiecode Systems AB
 * Released under LGPL License.
 *
 * License: http://www.tinymce.com/license
 * Contributing: http://www.tinymce.com/contributing
 */

/*global tinymce:true */

tinymce.PluginManager.add('image', function(editor) {
    function 
getImageSize(urlcallback) {
        var 
img document.createElement('img');

        function 
done(widthheight) {
            if (
img.parentNode) {
                
img.parentNode.removeChild(img);
            }

            
callback({widthwidthheightheight});
        }

        
img.onload = function() {
            
done(img.clientWidthimg.clientHeight);
        };

        
img.onerror = function() {
            
done();
        };

        var 
style img.style;
        
style.visibility 'hidden';
        
style.position 'fixed';
        
style.bottom style.left 0;
        
style.width style.height 'auto';

        
document.body.appendChild(img);
        
img.src url;
    }

    function 
buildListItems(inputListitemCallbackstartItems) {
        function 
appendItems(valuesoutput) {
            
output output || [];

            
tinymce.each(values, function(item) {
                var 
menuItem = {textitem.text || item.title};

                if (
item.menu) {
                    
menuItem.menu appendItems(item.menu);
                } else {
                    
menuItem.value item.value;
                    
itemCallback(menuItem);
                }

                
output.push(menuItem);
            });

            return 
output;
        }

        return 
appendItems(inputListstartItems || []);
    }

    function 
createImageList(callback) {
        return function() {
            var 
imageList editor.settings.image_list;

            if (
typeof imageList == "string") {
                
tinymce.util.XHR.send({
                    
urlimageList,
                    
success: function(text) {
                        
callback(tinymce.util.JSON.parse(text));
                    }
                });
            } else if (
typeof imageList == "function") {
                
imageList(callback);
            } else {
                
callback(imageList);
            }
        };
    }

    function 
showDialog(imageList) {
        var 
windata = {}, dom editor.domimgElm editor.selection.getNode();
        var 
widthheightimageListCtrlclassListCtrlimageDimensions editor.settings.image_dimensions !== false;

        function 
recalcSize() {
            var 
widthCtrlheightCtrlnewWidthnewHeight;

            
widthCtrl win.find('#width')[0];
            
heightCtrl win.find('#height')[0];

            if (!
widthCtrl || !heightCtrl) {
                return;
            }

            
newWidth widthCtrl.value();
            
newHeight heightCtrl.value();

            if (
win.find('#constrain')[0].checked() && width && height && newWidth && newHeight) {
                if (
width != newWidth) {
                    
newHeight Math.round((newWidth width) * newHeight);

                    if (!
isNaN(newHeight)) {
                        
heightCtrl.value(newHeight);
                    }
                } else {
                    
newWidth Math.round((newHeight height) * newWidth);

                    if (!
isNaN(newWidth)) {
                        
widthCtrl.value(newWidth);
                    }
                }
            }

            
width newWidth;
            
height newHeight;
        }

        function 
onSubmitForm() {
            function 
waitLoad(imgElm) {
                function 
selectImage() {
                    
imgElm.onload imgElm.onerror null;

                    if (
editor.selection) {
                        
editor.selection.select(imgElm);
                        
editor.nodeChanged();
                    }
                }

                
imgElm.onload = function() {
                    if (!
data.width && !data.height && imageDimensions) {
                        
dom.setAttribs(imgElm, {
                            
widthimgElm.clientWidth,
                            
heightimgElm.clientHeight
                        
});
                        
//WP
                        
editor.fire'wpNewImageRefresh', { nodeimgElm } );
                    }

                    
selectImage();
                };

                
imgElm.onerror selectImage;
            }

            
updateStyle();
            
recalcSize();

            
data tinymce.extend(datawin.toJSON());
            var 
caption data.caption// WP

            
if (!data.alt) {
                
data.alt '';
            }

            if (!
data.title) {
                
data.title '';
            }

            if (
data.width === '') {
                
data.width null;
            }

            if (
data.height === '') {
                
data.height null;
            }

            if (!
data.style) {
                
data.style null;
            }

            
// Setup new data excluding style properties
            /*eslint dot-notation: 0*/
            
data = {
                
srcdata.src,
                
altdata.alt,
                
titledata.title,
                
widthdata.width,
                
heightdata.height,
                
styledata.style,
                
"class"data["class"]
            };

            
editor.undoManager.transact(function() {
                
// WP
                
var eventData = { nodeimgElmdatadatacaptioncaption };

                
editor.fire'wpImageFormSubmit', { imgDataeventData } );

                if ( 
eventData.cancel ) {
                    
waitLoadeventData.node );
                    return;
                }
                
// WP end

                
if (!data.src) {
                    if (
imgElm) {
                        
dom.remove(imgElm);
                        
editor.focus();
                        
editor.nodeChanged();
                    }

                    return;
                }

                if (
data.title === "") {
                    
data.title null;
                }

                if (!
imgElm) {
                    
data.id '__mcenew';
                    
editor.focus();
                    
editor.selection.setContent(dom.createHTML('img'data));
                    
imgElm dom.get('__mcenew');
                    
dom.setAttrib(imgElm'id'null);
                } else {
                    
dom.setAttribs(imgElmdata);
                }

                
waitLoad(imgElm);
            });
        }

        function 
removePixelSuffix(value) {
            if (
value) {
                
value value.replace(/px$/, '');
            }

            return 
value;
        }

        function 
srcChange(e) {
            var 
srcURLprependURLabsoluteURLPatternmeta e.meta || {};

            if (
imageListCtrl) {
                
imageListCtrl.value(editor.convertURL(this.value(), 'src'));
            }

            
tinymce.each(meta, function(valuekey) {
                
win.find('#' key).value(value);
            });

            if (!
meta.width && !meta.height) {
                
srcURL editor.convertURL(this.value(), 'src');

                
// Pattern test the src url and make sure we haven't already prepended the url
                
prependURL editor.settings.image_prepend_url;
                
absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//''i');
                if (
prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0prependURL.length) !== prependURL) {
                    
srcURL prependURL srcURL;
                }

                
this.value(srcURL);

                
getImageSize(editor.documentBaseURI.toAbsolute(this.value()), function(data) {
                    if (
data.width && data.height && imageDimensions) {
                        
width data.width;
                        
height data.height;

                        
win.find('#width').value(width);
                        
win.find('#height').value(height);
                    }
                });
            }
        }

        
width dom.getAttrib(imgElm'width');
        
height dom.getAttrib(imgElm'height');

        if (
imgElm.nodeName == 'IMG' && !imgElm.getAttribute('data-mce-object') && !imgElm.getAttribute('data-mce-placeholder')) {
            
data = {
                
srcdom.getAttrib(imgElm'src'),
                
altdom.getAttrib(imgElm'alt'),
                
titledom.getAttrib(imgElm'title'),
                
"class"dom.getAttrib(imgElm'class'),
                
widthwidth,
                
heightheight
            
};

            
// WP
            
editor.fire'wpLoadImageData', { imgData: { datadatanodeimgElm } } );
        } else {
            
imgElm null;
        }

        if (
imageList) {
            
imageListCtrl = {
                
type'listbox',
                
label'Image list',
                
valuesbuildListItems(
                    
imageList,
                    function(
item) {
                        
item.value editor.convertURL(item.value || item.url'src');
                    },
                    [{
text'None'value''}]
                ),
                
valuedata.src && editor.convertURL(data.src'src'),
                
onselect: function(e) {
                    var 
altCtrl win.find('#alt');

                    if (!
altCtrl.value() || (e.lastControl && altCtrl.value() == e.lastControl.text())) {
                        
altCtrl.value(e.control.text());
                    }

                    
win.find('#src').value(e.control.value()).fire('change');
                },
                
onPostRender: function() {
                    
imageListCtrl this;
                }
            };
        }

        if (
editor.settings.image_class_list) {
            
classListCtrl = {
                
name'class',
                
type'listbox',
                
label'Class',
                
valuesbuildListItems(
                    
editor.settings.image_class_list,
                    function(
item) {
                        if (
item.value) {
                            
item.textStyle = function() {
                                return 
editor.formatter.getCssText({inline'img'classes: [item.value]});
                            };
                        }
                    }
                )
            };
        }

        
// General settings shared between simple and advanced dialogs
        
var generalFormItems = [
            {
                
name'src',
                
type'filepicker',
                
filetype'image',
                
label'Source',
                
autofocustrue,
                
onchangesrcChange
            
},
            
imageListCtrl
        
];

        if (
editor.settings.image_description !== false) {
            
generalFormItems.push({name'alt'type'textbox'label'Image description'});
        }

        if (
editor.settings.image_title) {
            
generalFormItems.push({name'title'type'textbox'label'Image Title'});
        }

        if (
imageDimensions) {
            
generalFormItems.push({
                
type'container',
                
label'Dimensions',
                
layout'flex',
                
direction'row',
                
align'center',
                
spacing5,
                
items: [
                    {
name'width'type'textbox'maxLength5size3onchangerecalcSizeariaLabel'Width'},
                    {
type'label'text'x'},
                    {
name'height'type'textbox'maxLength5size3onchangerecalcSizeariaLabel'Height'},
                    {
name'constrain'type'checkbox'checkedtruetext'Constrain proportions'}
                ]
            });
        }

        
generalFormItems.push(classListCtrl);

        
// WP
        
editor.fire'wpLoadImageForm', { datageneralFormItems } );

        function 
mergeMargins(css) {
            if (
css.margin) {

                var 
splitMargin css.margin.split(" ");

                switch (
splitMargin.length) {
                    case 
1//margin: toprightbottomleft;
                        
css['margin-top'] = css['margin-top'] || splitMargin[0];
                        
css['margin-right'] = css['margin-right'] || splitMargin[0];
                        
css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
                        
css['margin-left'] = css['margin-left'] || splitMargin[0];
                        break;
                    case 
2//margin: topbottom rightleft;
                        
css['margin-top'] = css['margin-top'] || splitMargin[0];
                        
css['margin-right'] = css['margin-right'] || splitMargin[1];
                        
css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
                        
css['margin-left'] = css['margin-left'] || splitMargin[1];
                        break;
                    case 
3//margin: top rightleft bottom;
                        
css['margin-top'] = css['margin-top'] || splitMargin[0];
                        
css['margin-right'] = css['margin-right'] || splitMargin[1];
                        
css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
                        
css['margin-left'] = css['margin-left'] || splitMargin[1];
                        break;
                    case 
4//margin: top right bottom left;
                        
css['margin-top'] = css['margin-top'] || splitMargin[0];
                        
css['margin-right'] = css['margin-right'] || splitMargin[1];
                        
css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
                        
css['margin-left'] = css['margin-left'] || splitMargin[3];
                }
                
delete css.margin;
            }
            return 
css;
        }

        function 
updateStyle() {
            function 
addPixelSuffix(value) {
                if (
value.length && /^[0-9]+$/.test(value)) {
                    
value += 'px';
                }

                return 
value;
            }

            if (!
editor.settings.image_advtab) {
                return;
            }

            var 
data win.toJSON(),
                
css dom.parseStyle(data.style);

            
css mergeMargins(css);

            if (
data.vspace) {
                
css['margin-top'] = css['margin-bottom'] = addPixelSuffix(data.vspace);
            }
            if (
data.hspace) {
                
css['margin-left'] = css['margin-right'] = addPixelSuffix(data.hspace);
            }
            if (
data.border) {
                
css['border-width'] = addPixelSuffix(data.border);
            }

            
win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
        }

        function 
updateVSpaceHSpaceBorder() {
            if (!
editor.settings.image_advtab) {
                return;
            }

            var 
data win.toJSON(),
                
css dom.parseStyle(data.style);

            
win.find('#vspace').value("");
            
win.find('#hspace').value("");

            
css mergeMargins(css);

            
//Move opposite equal margins to vspace/hspace field
            
if ((css['margin-top'] && css['margin-bottom']) || (css['margin-right'] && css['margin-left'])) {
                if (
css['margin-top'] === css['margin-bottom']) {
                    
win.find('#vspace').value(removePixelSuffix(css['margin-top']));
                } else {
                    
win.find('#vspace').value('');
                }
                if (
css['margin-right'] === css['margin-left']) {
                    
win.find('#hspace').value(removePixelSuffix(css['margin-right']));
                } else {
                    
win.find('#hspace').value('');
                }
            }

            
//Move border-width
            
if (css['border-width']) {
                
win.find('#border').value(removePixelSuffix(css['border-width']));
            }

            
win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));

        }

        if (
editor.settings.image_advtab) {
            
// Parse styles from img
            
if (imgElm) {
                if (
imgElm.style.marginLeft && imgElm.style.marginRight && imgElm.style.marginLeft === imgElm.style.marginRight) {
                    
data.hspace removePixelSuffix(imgElm.style.marginLeft);
                }
                if (
imgElm.style.marginTop && imgElm.style.marginBottom && imgElm.style.marginTop === imgElm.style.marginBottom) {
                    
data.vspace removePixelSuffix(imgElm.style.marginTop);
                }
                if (
imgElm.style.borderWidth) {
                    
data.border removePixelSuffix(imgElm.style.borderWidth);
                }

                
data.style editor.dom.serializeStyle(editor.dom.parseStyle(editor.dom.getAttrib(imgElm'style')));
            }

            
// Advanced dialog shows general+advanced tabs
            
win editor.windowManager.open({
                
title'Insert/edit image',
                
datadata,
                
bodyType'tabpanel',
                
body: [
                    {
                        
title'General',
                        
type'form',
                        
itemsgeneralFormItems
                    
},

                    {
                        
title'Advanced',
                        
type'form',
                        
pack'start',
                        
items: [
                            {
                                
label'Style',
                                
name'style',
                                
type'textbox',
                                
onchangeupdateVSpaceHSpaceBorder
                            
},
                            {
                                
type'form',
                                
layout'grid',
                                
packV'start',
                                
columns2,
                                
padding0,
                                
alignH: ['left''right'],
                                
defaults: {
                                    
type'textbox',
                                    
maxWidth50,
                                    
onchangeupdateStyle
                                
},
                                
items: [
                                    {
label'Vertical space'name'vspace'},
                                    {
label'Horizontal space'name'hspace'},
                                    {
label'Border'name'border'}
                                ]
                            }
                        ]
                    }
                ],
                
onSubmitonSubmitForm
            
});
        } else {
            
// Simple default dialog
            
win editor.windowManager.open({
                
title'Insert/edit image',
                
datadata,
                
bodygeneralFormItems,
                
onSubmitonSubmitForm
            
});
        }
    }

    
editor.addButton('image', {
        
icon'image',
        
tooltip'Insert/edit image',
        
onclickcreateImageList(showDialog),
        
stateSelector'img:not([data-mce-object],[data-mce-placeholder])'
    
});

    
editor.addMenuItem('image', {
        
icon'image',
        
text'Insert/edit image',
        
onclickcreateImageList(showDialog),
        
context'insert',
        
prependToContexttrue
    
});

    
editor.addCommand('mceImage'createImageList(showDialog));
});
?>
Онлайн: 1
Реклама