Вход Регистрация
Файл: js/editor/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
Строк: 529
<?php
/**
 * editor_plugin_src.js
 *
 * Copyright 2009, Moxiecode Systems AB
 * Released under LGPL License.
 *
 * License: http://tinymce.moxiecode.com/license
 * Contributing: http://tinymce.moxiecode.com/contributing
 */

(function() {
    var 
DOM tinymce.DOMElement tinymce.dom.ElementEvent tinymce.dom.Eventeach tinymce.eachis tinymce.is;

    
tinymce.create('tinymce.plugins.InlinePopups', {
        
init : function(edurl) {
            
// Replace window manager
            
ed.onBeforeRenderUI.add(function() {
                
ed.windowManager = new tinymce.InlineWindowManager(ed);
                
DOM.loadCSS(url '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");
            });
        },

        
getInfo : function() {
            return {
                
longname 'InlinePopups',
                
author 'Moxiecode Systems AB',
                
authorurl 'http://tinymce.moxiecode.com',
                
infourl 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',
                
version tinymce.majorVersion "." tinymce.minorVersion
            
};
        }
    });

    
tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {
        
InlineWindowManager : function(ed) {
            var 
this;

            
t.parent(ed);
            
t.zIndex 300000;
            
t.count 0;
            
t.windows = {};
        },

        
open : function(fp) {
            var 
thisidopt ''ed t.editordw 0dh 0vppomdfclfwewu;

            
|| {};
            
|| {};

            
// Run native windows
            
if (!f.inline)
                return 
t.parent(fp);

            
// Only store selection if the type is a normal window
            
if (!f.type)
                
t.bookmark ed.selection.getBookmark(1);

            
id DOM.uniqueId();
            
vp DOM.getViewPort();
            
f.width parseInt(f.width || 320);
            
f.height parseInt(f.height || 240) + (tinymce.isIE 0);
            
f.min_width parseInt(f.min_width || 150);
            
f.min_height parseInt(f.min_height || 100);
            
f.max_width parseInt(f.max_width || 2000);
            
f.max_height parseInt(f.max_height || 2000);
            
f.left f.left || Math.round(Math.max(vp.xvp.+ (vp.2.0) - (f.width 2.0)));
            
f.top f.top || Math.round(Math.max(vp.yvp.+ (vp.2.0) - (f.height 2.0)));
            
f.movable f.resizable true;
            
p.mce_width f.width;
            
p.mce_height f.height;
            
p.mce_inline true;
            
p.mce_window_id id;
            
p.mce_auto_focus f.auto_focus;

            
// Transpose
//            po = DOM.getPos(ed.getContainer());
//            f.left -= po.x;
//            f.top -= po.y;

            
t.features f;
            
t.params p;
            
t.onOpen.dispatch(tfp);

            if (
f.type) {
                
opt += ' mceModal';

                if (
f.type)
                    
opt += ' mce' f.type.substring(01).toUpperCase() + f.type.substring(1);

                
f.resizable false;
            }

            if (
f.statusbar)
                
opt += ' mceStatusbar';

            if (
f.resizable)
                
opt += ' mceResizable';

            if (
f.minimizable)
                
opt += ' mceMinimizable';

            if (
f.maximizable)
                
opt += ' mceMaximizable';

            if (
f.movable)
                
opt += ' mceMovable';

            
// Create DOM objects
            
t._addAll(DOM.doc.body
                [
'div', {id id'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ' ie9' ''), style 'width:100px;height:100px'}, 
                    [
'div', {id id '_wrapper''class' 'mceWrapper' opt},
                        [
'div', {id id '_top''class' 'mceTop'}, 
                            [
'div', {'class' 'mceLeft'}],
                            [
'div', {'class' 'mceCenter'}],
                            [
'div', {'class' 'mceRight'}],
                            [
'span', {id id '_title'}, f.title || '']
                        ],

                        [
'div', {id id '_middle''class' 'mceMiddle'}, 
                            [
'div', {id id '_left''class' 'mceLeft'}],
                            [
'span', {id id '_content'}],
                            [
'div', {id id '_right''class' 'mceRight'}]
                        ],

                        [
'div', {id id '_bottom''class' 'mceBottom'},
                            [
'div', {'class' 'mceLeft'}],
                            [
'div', {'class' 'mceCenter'}],
                            [
'div', {'class' 'mceRight'}],
                            [
'span', {id id '_status'}, 'Content']
                        ],

                        [
'a', {'class' 'mceMove'tabindex '-1'href 'javascript:;'}],
                        [
'a', {'class' 'mceMin'tabindex '-1'href 'javascript:;'onmousedown 'return false;'}],
                        [
'a', {'class' 'mceMax'tabindex '-1'href 'javascript:;'onmousedown 'return false;'}],
                        [
'a', {'class' 'mceMed'tabindex '-1'href 'javascript:;'onmousedown 'return false;'}],
                        [
'a', {'class' 'mceClose'tabindex '-1'href 'javascript:;'onmousedown 'return false;'}],
                        [
'a', {id id '_resize_n''class' 'mceResize mceResizeN'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_s''class' 'mceResize mceResizeS'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_w''class' 'mceResize mceResizeW'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_e''class' 'mceResize mceResizeE'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_nw''class' 'mceResize mceResizeNW'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_ne''class' 'mceResize mceResizeNE'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_sw''class' 'mceResize mceResizeSW'tabindex '-1'href 'javascript:;'}],
                        [
'a', {id id '_resize_se''class' 'mceResize mceResizeSE'tabindex '-1'href 'javascript:;'}]
                    ]
                ]
            );

            
DOM.setStyles(id, {top : -10000left : -10000});

            
// Fix gecko rendering bug, where the editors iframe messed with window contents
            
if (tinymce.isGecko)
                
DOM.setStyle(id'overflow''auto');

            
// Measure borders
            
if (!f.type) {
                
dw += DOM.get(id '_left').clientWidth;
                
dw += DOM.get(id '_right').clientWidth;
                
dh += DOM.get(id '_top').clientHeight;
                
dh += DOM.get(id '_bottom').clientHeight;
            }

            
// Resize window
            
DOM.setStyles(id, {top f.topleft f.leftwidth f.width dwheight f.height dh});

            
f.url || f.file;
            if (
u) {
                if (
tinymce.relaxedDomain)
                    
+= (u.indexOf('?') == -'?' '&') + 'mce_rdomain=' tinymce.relaxedDomain;

                
tinymce._addVer(u);
            }

            if (!
f.type) {
                
DOM.add(id '_content''iframe', {id id '_ifr'src 'javascript:""'frameBorder 0style 'border:0;width:10px;height:10px'});
                
DOM.setStyles(id '_ifr', {width f.widthheight f.height});
                
DOM.setAttrib(id '_ifr''src'u);
            } else {
                
DOM.add(id '_wrapper''a', {id id '_ok''class' 'mceButton mceOk'href 'javascript:;'onmousedown 'return false;'}, 'Ok');

                if (
f.type == 'confirm')
                    
DOM.add(id '_wrapper''a', {'class' 'mceButton mceCancel'href 'javascript:;'onmousedown 'return false;'}, 'Cancel');

                
DOM.add(id '_middle''div', {'class' 'mceIcon'});
                
DOM.setHTML(id '_content'f.content.replace('n''<br />'));
            }

            
// Register events
            
mdf Event.add(id'mousedown', function(e) {
                var 
e.targetwvp;

                
t.windows[id];
                
t.focus(id);

                if (
n.nodeName == 'A' || n.nodeName == 'a') {
                    if (
n.className == 'mceMax') {
                        
w.oldPos w.element.getXY();
                        
w.oldSize w.element.getSize();

                        
vp DOM.getViewPort();

                        
// Reduce viewport size to avoid scrollbars
                        
vp.-= 2;
                        
vp.-= 2;

                        
w.element.moveTo(vp.xvp.y);
                        
w.element.resizeTo(vp.wvp.h);
                        
DOM.setStyles(id '_ifr', {width vp.w.deltaWidthheight vp.w.deltaHeight});
                        
DOM.addClass(id '_wrapper''mceMaximized');
                    } else if (
n.className == 'mceMed') {
                        
// Reset to old size
                        
w.element.moveTo(w.oldPos.xw.oldPos.y);
                        
w.element.resizeTo(w.oldSize.ww.oldSize.h);
                        
w.iframeElement.resizeTo(w.oldSize.w.deltaWidthw.oldSize.w.deltaHeight);

                        
DOM.removeClass(id '_wrapper''mceMaximized');
                    } else if (
n.className == 'mceMove')
                        return 
t._startDrag(iden.className);
                    else if (
DOM.hasClass(n'mceResize'))
                        return 
t._startDrag(iden.className.substring(13));
                }
            });

            
clf Event.add(id'click', function(e) {
                var 
e.target;

                
t.focus(id);

                if (
n.nodeName == 'A' || n.nodeName == 'a') {
                    switch (
n.className) {
                        case 
'mceClose':
                            
t.close(nullid);
                            return 
Event.cancel(e);

                        case 
'mceButton mceOk':
                        case 
'mceButton mceCancel':
                            
f.button_func(n.className == 'mceButton mceOk');
                            return 
Event.cancel(e);
                    }
                }
            });

            
// Add window
            
t.windows[id] = {
                
id id,
                
mousedown_func mdf,
                
click_func clf,
                
element : new Element(id, {blocker 1container ed.getContainer()}),
                
iframeElement : new Element(id '_ifr'),
                
features f,
                
deltaWidth dw,
                
deltaHeight dh
            
};

            
w.iframeElement.on('focus', function() {
                
t.focus(id);
            });

            
// Setup blocker
            
if (t.count == && t.editor.getParam('dialog_type''modal') == 'modal') {
                
DOM.add(DOM.doc.body'div', {
                    
id 'mceModalBlocker',
                    
'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',
                    
style : {zIndex t.zIndex 1}
                });

                
DOM.show('mceModalBlocker'); // Reduces flicker in IE
            
} else
                
DOM.setStyle('mceModalBlocker''z-index't.zIndex 1);

            if (
tinymce.isIE6 || /Firefox/2./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))
                
DOM.setStyles('mceModalBlocker', {position 'absolute'left vp.xtop vp.ywidth vp.2height vp.2});

            
t.focus(id);
            
t._fixIELayout(id1);

            
// Focus ok button
            
if (DOM.get(id '_ok'))
                
DOM.get(id '_ok').focus();

            
t.count++;

            return 
w;
        },

        
focus : function(id) {
            var 
thisw;

            if (
t.windows[id]) {
                
w.zIndex this.zIndex++;
                
w.element.setStyle('zIndex'w.zIndex);
                
w.element.update();

                
id id '_wrapper';
                
DOM.removeClass(t.lastId'mceFocus');
                
DOM.addClass(id'mceFocus');
                
t.lastId id;
            }
        },

        
_addAll : function(tene) {
            var 
inthisdom tinymce.DOM;

            if (
is(ne'string'))
                
te.appendChild(dom.doc.createTextNode(ne));
            else if (
ne.length) {
                
te te.appendChild(dom.create(ne[0], ne[1]));

                for (
i=2i<ne.lengthi++)
                    
t._addAll(tene[i]);
            }
        },

        
_startDrag : function(idseac) {
            var 
thismummDOM.docebt.windows[id], we w.elementsp we.getXY(), pszphcpvpsxsysexseydxdydwdh;

            
// Get positons and sizes
//            cp = DOM.getPos(t.editor.getContainer());
            
cp = {00};
            
vp DOM.getViewPort();

            
// Reduce viewport size to avoid scrollbars while dragging
            
vp.-= 2;
            
vp.-= 2;

            
sex se.screenX;
            
sey se.screenY;
            
dx dy dw dh 0;

            
// Handle mouse up
            
mu Event.add(d'mouseup', function(e) {
                
Event.remove(d'mouseup'mu);
                
Event.remove(d'mousemove'mm);

                if (
eb)
                    
eb.remove();

                
we.moveBy(dxdy);
                
we.resizeBy(dwdh);
                
sz we.getSize();
                
DOM.setStyles(id '_ifr', {width sz.w.deltaWidthheight sz.w.deltaHeight});
                
t._fixIELayout(id1);

                return 
Event.cancel(e);
            });

            if (
ac != 'Move')
                
startMove();

            function 
startMove() {
                if (
eb)
                    return;

                
t._fixIELayout(id0);

                
// Setup event blocker
                
DOM.add(d.body'div', {
                    
id 'mceEventBlocker',
                    
'class' 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),
                    
style : {zIndex t.zIndex 1}
                });

                if (
tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))
                    
DOM.setStyles('mceEventBlocker', {position 'absolute'left vp.xtop vp.ywidth vp.2height vp.2});

                
eb = new Element('mceEventBlocker');
                
eb.update();

                
// Setup placeholder
                
we.getXY();
                
sz we.getSize();
                
sx cp.p.vp.x;
                
sy cp.p.vp.y;
                
DOM.add(eb.get(), 'div', {id 'mcePlaceHolder''class' 'mcePlaceHolder'style : {left sxtop sywidth sz.wheight sz.h}});
                
ph = new Element('mcePlaceHolder');
            };

            
// Handle mouse move/drag
            
mm Event.add(d'mousemove', function(e) {
                var 
xyv;

                
startMove();

                
e.screenX sex;
                
e.screenY sey;

                switch (
ac) {
                    case 
'ResizeW':
                        
dx x;
                        
dw x;
                        break;

                    case 
'ResizeE':
                        
dw x;
                        break;

                    case 
'ResizeN':
                    case 
'ResizeNW':
                    case 
'ResizeNE':
                        if (
ac == "ResizeNW") {
                            
dx x;
                            
dw x;
                        } else if (
ac == "ResizeNE")
                            
dw x;

                        
dy y;
                        
dh y;
                        break;

                    case 
'ResizeS':
                    case 
'ResizeSW':
                    case 
'ResizeSE':
                        if (
ac == "ResizeSW") {
                            
dx x;
                            
dw x;
                        } else if (
ac == "ResizeSE")
                            
dw x;

                        
dh y;
                        break;

                    case 
'mceMove':
                        
dx x;
                        
dy y;
                        break;
                }

                
// Boundary check
                
if (dw < (w.features.min_width sz.w)) {
                    if (
dx !== 0)
                        
dx += dw v;

                    
dw v;
                }
    
                if (
dh < (w.features.min_height sz.h)) {
                    if (
dy !== 0)
                        
dy += dh v;

                    
dh v;
                }

                
dw Math.min(dww.features.max_width sz.w);
                
dh Math.min(dhw.features.max_height sz.h);
                
dx Math.max(dxvp.- (sx vp.x));
                
dy Math.max(dyvp.- (sy vp.y));
                
dx Math.min(dx, (vp.vp.x) - (sx sz.vp.x));
                
dy Math.min(dy, (vp.vp.y) - (sy sz.vp.y));

                
// Move if needed
                
if (dx dy !== 0) {
                    if (
sx dx 0)
                        
dx 0;
    
                    if (
sy dy 0)
                        
dy 0;

                    
ph.moveTo(sx dxsy dy);
                }

                
// Resize if needed
                
if (dw dh !== 0)
                    
ph.resizeTo(sz.dwsz.dh);

                return 
Event.cancel(e);
            });

            return 
Event.cancel(se);
        },

        
resizeBy : function(dwdhid) {
            var 
this.windows[id];

            if (
w) {
                
w.element.resizeBy(dwdh);
                
w.iframeElement.resizeBy(dwdh);
            }
        },

        
close : function(winid) {
            var 
thiswDOM.docix 0fwid;

            
id t._findId(id || win);

            
// Probably not inline
            
if (!t.windows[id]) {
                
t.parent(win);
                return;
            }

            
t.count--;

            if (
t.count == 0)
                
DOM.remove('mceModalBlocker');

            if (
t.windows[id]) {
                
t.onClose.dispatch(t);
                
Event.remove(d'mousedown'w.mousedownFunc);
                
Event.remove(d'click'w.clickFunc);
                
Event.clear(id);
                
Event.clear(id '_ifr');

                
DOM.setAttrib(id '_ifr''src''javascript:""'); // Prevent leak
                
w.element.remove();
                
delete t.windows[id];

                
// Find front most window and focus that
                
each (t.windows, function(w) {
                    if (
w.zIndex ix) {
                        
fw w;
                        
ix w.zIndex;
                    }
                });

                if (
fw)
                    
t.focus(fw.id);
            }
        },

        
setTitle : function(wti) {
            var 
e;

            
this._findId(w);

            if (
DOM.get('_title'))
                
e.innerHTML DOM.encode(ti);
        },

        
alert : function(txtcbs) {
            var 
thisw;

            
t.open({
                
title t,
                
type 'alert',
                
button_func : function(s) {
                    if (
cb)
                        
cb.call(|| ts);

                    
t.close(nullw.id);
                },
                
content DOM.encode(t.editor.getLang(txttxt)),
                
inline 1,
                
width 400,
                
height 130
            
});
        },

        
confirm : function(txtcbs) {
            var 
thisw;

            
t.open({
                
title t,
                
type 'confirm',
                
button_func : function(s) {
                    if (
cb)
                        
cb.call(|| ts);

                    
t.close(nullw.id);
                },
                
content DOM.encode(t.editor.getLang(txttxt)),
                
inline 1,
                
width 400,
                
height 130
            
});
        },

        
// Internal functions

        
_findId : function(w) {
            var 
this;

            if (
typeof(w) == 'string')
                return 
w;

            
each(t.windows, function(wo) {
                var 
ifr DOM.get(wo.id '_ifr');

                if (
ifr && == ifr.contentWindow) {
                    
wo.id;
                    return 
false;
                }
            });

            return 
w;
        },

        
_fixIELayout : function(ids) {
            var 
wimg;

            if (!
tinymce.isIE6)
                return;

            
// Fixes the bug where hover flickers and does odd things in IE6
            
each(['n','s','w','e','nw','ne','sw','se'], function(v) {
                var 
DOM.get(id '_resize_' v);

                
DOM.setStyles(e, {
                    
width e.clientWidth '',
                    
height e.clientHeight '',
                    
cursor DOM.getStyle(e'cursor'1)
                });

                
DOM.setStyle(id "_bottom"'bottom''-1px');

                
0;
            });

            
// Fixes graphics glitch
            
if (this.windows[id]) {
                
// Fixes rendering bug after resize
                
w.element.hide();
                
w.element.show();

                
// Forced a repaint of the window
                //DOM.get(id).style.filter = '';

                // IE has a bug where images used in CSS won't get loaded
                // sometimes when the cache in the browser is disabled
                // This fix tries to solve it by loading the images using the image object
                
each(DOM.select('div,a'id), function(ei) {
                    if (
e.currentStyle.backgroundImage != 'none') {
                        
img = new Image();
                        
img.src e.currentStyle.backgroundImage.replace(/url("(.+)")/, '$1');
                    }
                });

                
DOM.get(id).style.filter '';
            }
        }
    });

    
// Register plugin
    
tinymce.PluginManager.add('inlinepopups'tinymce.plugins.InlinePopups);
})();
?>
Онлайн: 2
Реклама