Вход Регистрация
Файл: js/editor/jscripts/tiny_mce/plugins/advimage/js/image.js
Строк: 408
<?php
var ImageDialog = {
    
preInit : function() {
        var 
url;

        
tinyMCEPopup.requireLangPack();

        if (
url = tinyMCEPopup.getParam("external_image_list_url"))
            
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
    },

    
init : function(ed) {
        var 
f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode();

        
tinyMCEPopup.resizeToInnerSize();
        
this.fillClassList('class_list');
        
this.fillFileList('src_list', 'tinyMCEImageList');
        
this.fillFileList('over_list', 'tinyMCEImageList');
        
this.fillFileList('out_list', 'tinyMCEImageList');
        
TinyMCE_EditableSelects.init();

        if (
n.nodeName == 'IMG') {
            
nl.src.value = dom.getAttrib(n, 'src');
            
nl.width.value = dom.getAttrib(n, 'width');
            
nl.height.value = dom.getAttrib(n, 'height');
            
nl.alt.value = dom.getAttrib(n, 'alt');
            
nl.title.value = dom.getAttrib(n, 'title');
            
nl.vspace.value = this.getAttrib(n, 'vspace');
            
nl.hspace.value = this.getAttrib(n, 'hspace');
            
nl.border.value = this.getAttrib(n, 'border');
            
selectByValue(f, 'align', this.getAttrib(n, 'align'));
            
selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);
            
nl.style.value = dom.getAttrib(n, 'style');
            
nl.id.value = dom.getAttrib(n, 'id');
            
nl.dir.value = dom.getAttrib(n, 'dir');
            
nl.lang.value = dom.getAttrib(n, 'lang');
            
nl.usemap.value = dom.getAttrib(n, 'usemap');
            
nl.longdesc.value = dom.getAttrib(n, 'longdesc');
            
nl.insert.value = ed.getLang('update');

            if (/^
s*this.srcs*=s*'([^']+)';?s*$/.test(dom.getAttrib(n, 'onmouseover')))
                nl.onmouseoversrc.value = dom.getAttrib(n, '
onmouseover').replace(/^s*this.srcs*=s*'([^']+)';?s*$/, '$1');

            if (/^
s*this.srcs*=s*'([^']+)';?s*$/.test(dom.getAttrib(n, 'onmouseout')))
                nl.onmouseoutsrc.value = dom.getAttrib(n, '
onmouseout').replace(/^s*this.srcs*=s*'([^']+)';?s*$/, '$1');

            if (
ed.settings.inline_styles) {
                
// Move attribs to styles
                
if (dom.getAttrib(n, 'align'))
                    
this.updateStyle('align');

                if (
dom.getAttrib(n, 'hspace'))
                    
this.updateStyle('hspace');

                if (
dom.getAttrib(n, 'border'))
                    
this.updateStyle('border');

                if (
dom.getAttrib(n, 'vspace'))
                    
this.updateStyle('vspace');
            }
        }

        
// Setup browse button
        
document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
        if (
isVisible('srcbrowser'))
            
document.getElementById('src').style.width = '260px';

        
// Setup browse button
        
document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');
        if (
isVisible('overbrowser'))
            
document.getElementById('onmouseoversrc').style.width = '260px';

        
// Setup browse button
        
document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');
        if (
isVisible('outbrowser'))
            
document.getElementById('onmouseoutsrc').style.width = '260px';

        
// If option enabled default contrain proportions to checked
        
if (ed.getParam("advimage_constrain_proportions", true))
            
f.constrain.checked = true;

        
// Check swap image if valid data
        
if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)
            
this.setSwapImage(true);
        else
            
this.setSwapImage(false);

        
this.changeAppearance();
        
this.showPreviewImage(nl.src.value, 1);
    },

    
insert : function(file, title) {
        var 
ed = tinyMCEPopup.editor, t = this, f = document.forms[0];

        if (
f.src.value === '') {
            if (
ed.selection.getNode().nodeName == 'IMG') {
                
ed.dom.remove(ed.selection.getNode());
                
ed.execCommand('mceRepaint');
            }

            
tinyMCEPopup.close();
            return;
        }

        if (
tinyMCEPopup.getParam("accessibility_warnings", 1)) {
            if (!
f.alt.value) {
                
tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {
                    if (
s)
                        
t.insertAndClose();
                });

                return;
            }
        }

        
t.insertAndClose();
    },

    
insertAndClose : function() {
        var 
ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;

        
tinyMCEPopup.restoreSelection();

        
// Fixes crash in Safari
        
if (tinymce.isWebKit)
            
ed.getWin().focus();

        if (!
ed.settings.inline_styles) {
            
args = {
                
vspace : nl.vspace.value,
                
hspace : nl.hspace.value,
                
border : nl.border.value,
                
align : getSelectValue(f, 'align')
            };
        } else {
            
// Remove deprecated values
            
args = {
                
vspace : '',
                
hspace : '',
                
border : '',
                
align : ''
            
};
        }

        
tinymce.extend(args, {
            
src : nl.src.value,
            
width : nl.width.value,
            
height : nl.height.value,
            
alt : nl.alt.value,
            
title : nl.title.value,
            
'class' : getSelectValue(f, 'class_list'),
            
style : nl.style.value,
            
id : nl.id.value,
            
dir : nl.dir.value,
            
lang : nl.lang.value,
            
usemap : nl.usemap.value,
            
longdesc : nl.longdesc.value
        
});

        
args.onmouseover = args.onmouseout = '';

        if (
f.onmousemovecheck.checked) {
            if (
nl.onmouseoversrc.value)
                
args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";

            if (
nl.onmouseoutsrc.value)
                
args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";
        }

        
el = ed.selection.getNode();

        if (
el && el.nodeName == 'IMG') {
            
ed.dom.setAttribs(el, args);
        } else {
            
ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
            
ed.dom.setAttribs('__mce_tmp', args);
            
ed.dom.setAttrib('__mce_tmp', 'id', '');
            
ed.undoManager.add();
        }

        
tinyMCEPopup.close();
    },

    
getAttrib : function(e, at) {
        var 
ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;

        if (
ed.settings.inline_styles) {
            switch (
at) {
                case 
'align':
                    if (
v = dom.getStyle(e, 'float'))
                        return 
v;

                    if (
v = dom.getStyle(e, 'vertical-align'))
                        return 
v;

                    break;

                case 
'hspace':
                    
v = dom.getStyle(e, 'margin-left')
                    
v2 = dom.getStyle(e, 'margin-right');

                    if (
v && v == v2)
                        return 
parseInt(v.replace(/[^0-9]/g, ''));

                    break;

                case 
'vspace':
                    
v = dom.getStyle(e, 'margin-top')
                    
v2 = dom.getStyle(e, 'margin-bottom');
                    if (
v && v == v2)
                        return 
parseInt(v.replace(/[^0-9]/g, ''));

                    break;

                case 
'border':
                    
v = 0;

                    
tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
                        
sv = dom.getStyle(e, 'border-' + sv + '-width');

                        
// False or not the same as prev
                        
if (!sv || (sv != v && v !== 0)) {
                            
v = 0;
                            return 
false;
                        }

                        if (
sv)
                            
v = sv;
                    });

                    if (
v)
                        return 
parseInt(v.replace(/[^0-9]/g, ''));

                    break;
            }
        }

        if (
v = dom.getAttrib(e, at))
            return 
v;

        return 
'';
    },

    
setSwapImage : function(st) {
        var 
f = document.forms[0];

        
f.onmousemovecheck.checked = st;
        
setBrowserDisabled('overbrowser', !st);
        
setBrowserDisabled('outbrowser', !st);

        if (
f.over_list)
            
f.over_list.disabled = !st;

        if (
f.out_list)
            
f.out_list.disabled = !st;

        
f.onmouseoversrc.disabled = !st;
        
f.onmouseoutsrc.disabled  = !st;
    },

    
fillClassList : function(id) {
        var 
dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

        if (
v = tinyMCEPopup.getParam('theme_advanced_styles')) {
            
cl = [];

            
tinymce.each(v.split(';'), function(v) {
                var 
p = v.split('=');

                
cl.push({'title' : p[0], 'class' : p[1]});
            });
        } else
            
cl = tinyMCEPopup.editor.dom.getClasses();

        if (
cl.length > 0) {
            
lst.options.length = 0;
            
lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

            
tinymce.each(cl, function(o) {
                
lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
            });
        } else
            
dom.remove(dom.getParent(id, 'tr'));
    },

    
fillFileList : function(id, l) {
        var 
dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

        
l = window[l];
        
lst.options.length = 0;

        if (
l && l.length > 0) {
            
lst.options[lst.options.length] = new Option('', '');

            
tinymce.each(l, function(o) {
                
lst.options[lst.options.length] = new Option(o[0], o[1]);
            });
        } else
            
dom.remove(dom.getParent(id, 'tr'));
    },

    
resetImageData : function() {
        var 
f = document.forms[0];

        
f.elements.width.value = f.elements.height.value = '';
    },

    
updateImageData : function(img, st) {
        var 
f = document.forms[0];

        if (!
st) {
            
f.elements.width.value = img.width;
            
f.elements.height.value = img.height;
        }

        
this.preloadImg = img;
    },

    
changeAppearance : function() {
        var 
ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');

        if (
img) {
            if (
ed.getParam('inline_styles')) {
                
ed.dom.setAttrib(img, 'style', f.style.value);
            } else {
                
img.align = f.align.value;
                
img.border = f.border.value;
                
img.hspace = f.hspace.value;
                
img.vspace = f.vspace.value;
            }
        }
    },

    
changeHeight : function() {
        var 
f = document.forms[0], tp, t = this;

        if (!
f.constrain.checked || !t.preloadImg) {
            return;
        }

        if (
f.width.value == "" || f.height.value == "")
            return;

        
tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;
        
f.height.value = tp.toFixed(0);
    },

    
changeWidth : function() {
        var 
f = document.forms[0], tp, t = this;

        if (!
f.constrain.checked || !t.preloadImg) {
            return;
        }

        if (
f.width.value == "" || f.height.value == "")
            return;

        
tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;
        
f.width.value = tp.toFixed(0);
    },

    
updateStyle : function(ty) {
        var 
dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});

        if (
tinyMCEPopup.editor.settings.inline_styles) {
            
// Handle align
            
if (ty == 'align') {
                
dom.setStyle(img, 'float', '');
                
dom.setStyle(img, 'vertical-align', '');

                
v = getSelectValue(f, 'align');
                if (
v) {
                    if (
v == 'left' || v == 'right')
                        
dom.setStyle(img, 'float', v);
                    else
                        
img.style.verticalAlign = v;
                }
            }

            
// Handle border
            
if (ty == 'border') {
                
dom.setStyle(img, 'border', '');

                
v = f.border.value;
                if (
v || v == '0') {
                    if (
v == '0')
                        
img.style.border = '0';
                    else
                        
img.style.border = v + 'px solid black';
                }
            }

            
// Handle hspace
            
if (ty == 'hspace') {
                
dom.setStyle(img, 'marginLeft', '');
                
dom.setStyle(img, 'marginRight', '');

                
v = f.hspace.value;
                if (
v) {
                    
img.style.marginLeft = v + 'px';
                    
img.style.marginRight = v + 'px';
                }
            }

            
// Handle vspace
            
if (ty == 'vspace') {
                
dom.setStyle(img, 'marginTop', '');
                
dom.setStyle(img, 'marginBottom', '');

                
v = f.vspace.value;
                if (
v) {
                    
img.style.marginTop = v + 'px';
                    
img.style.marginBottom = v + 'px';
                }
            }

            
// Merge
            
dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');
        }
    },

    
changeMouseMove : function() {
    },

    
showPreviewImage : function(u, st) {
        if (!
u) {
            
tinyMCEPopup.dom.setHTML('prev', '');
            return;
        }

        if (!
st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))
            
this.resetImageData();

        
u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);

        if (!
st)
            
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');
        else
            
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');
    }
};

ImageDialog.preInit();
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
?>
Онлайн: 2
Реклама