?PNG  IHDR ? f ??C1 sRGB ?? gAMA ? a pHYs ? ??od GIDATx^LeY?a?("Bh?_????q5k?*:t0A-o??]VkJM??f?8\k2ll1]q????T
Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/user1137782/www/china1.by/classwithtostring.php on line 86

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 213

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 214

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/user1137782/www/china1.by/classwithtostring.php:6) in /home/user1137782/www/china1.by/classwithtostring.php on line 218
safari/editor_plugin.js000066600000014372150472616010011230 0ustar00(function(){var a=tinymce.dom.Event,c=tinymce.grep,d=tinymce.each,b=tinymce.inArray;function e(j,i,h){var g,k;g=j.createTreeWalker(i,NodeFilter.SHOW_ALL,null,false);while(k=g.nextNode()){if(h){if(!h(k)){return false}}if(k.nodeType==3&&k.nodeValue&&/[^\s\u00a0]+/.test(k.nodeValue)){return false}if(k.nodeType==1&&/^(HR|IMG|TABLE)$/.test(k.nodeName)){return false}}return true}tinymce.create("tinymce.plugins.Safari",{init:function(f){var g=this,h;if(!tinymce.isWebKit){return}g.editor=f;g.webKitFontSizes=["x-small","small","medium","large","x-large","xx-large","-webkit-xxx-large"];g.namedFontSizes=["xx-small","x-small","small","medium","large","x-large","xx-large"];f.addCommand("CreateLink",function(k,j){var m=f.selection.getNode(),l=f.dom,i;if(m&&(/^(left|right)$/i.test(l.getStyle(m,"float",1))||/^(left|right)$/i.test(l.getAttrib(m,"align")))){i=l.create("a",{href:j},m.cloneNode());m.parentNode.replaceChild(i,m);f.selection.select(i)}else{f.getDoc().execCommand("CreateLink",false,j)}});f.onKeyUp.add(function(j,o){var l,i,m,p,k;if(o.keyCode==46||o.keyCode==8){i=j.getBody();l=i.innerHTML;k=j.selection;if(i.childNodes.length==1&&!/<(img|hr)/.test(l)&&tinymce.trim(l.replace(/<[^>]+>/g,"")).length==0){j.setContent('


',{format:"raw"});p=i.firstChild;m=k.getRng();m.setStart(p,0);m.setEnd(p,0);k.setRng(m)}}});f.addCommand("FormatBlock",function(j,i){var l=f.dom,k=l.getParent(f.selection.getNode(),l.isBlock);if(k){l.replace(l.create(i),k,1)}else{f.getDoc().execCommand("FormatBlock",false,i)}});f.addCommand("mceInsertContent",function(j,i){f.getDoc().execCommand("InsertText",false,"mce_marker");f.getBody().innerHTML=f.getBody().innerHTML.replace(/mce_marker/g,f.dom.processHTML(i)+'XX');f.selection.select(f.dom.get("_mce_tmp"));f.getDoc().execCommand("Delete",false," ")});f.onKeyPress.add(function(o,p){var q,v,r,l,j,k,i,u,m,t,s;if(p.keyCode==13){i=o.selection;q=i.getNode();if(p.shiftKey||o.settings.force_br_newlines&&q.nodeName!="LI"){g._insertBR(o);a.cancel(p)}if(v=h.getParent(q,"LI")){r=h.getParent(v,"OL,UL");u=o.getDoc();s=h.create("p");h.add(s,"br",{mce_bogus:"1"});if(e(u,v)){if(k=h.getParent(r.parentNode,"LI,OL,UL")){return}k=h.getParent(r,"p,h1,h2,h3,h4,h5,h6,div")||r;l=u.createRange();l.setStartBefore(k);l.setEndBefore(v);j=u.createRange();j.setStartAfter(v);j.setEndAfter(k);m=l.cloneContents();t=j.cloneContents();if(!e(u,t)){h.insertAfter(t,k)}h.insertAfter(s,k);if(!e(u,m)){h.insertAfter(m,k)}h.remove(k);k=s.firstChild;l=u.createRange();l.setStartBefore(k);l.setEndBefore(k);i.setRng(l);return a.cancel(p)}}}});f.onExecCommand.add(function(i,k){var j,m,n,l;if(k=="InsertUnorderedList"||k=="InsertOrderedList"){j=i.selection;m=i.dom;if(n=m.getParent(j.getNode(),function(o){return/^(H[1-6]|P|ADDRESS|PRE)$/.test(o.nodeName)})){l=j.getBookmark();m.remove(n,1);j.moveToBookmark(l)}}});f.onClick.add(function(i,j){j=j.target;if(j.nodeName=="IMG"){g.selElm=j;i.selection.select(j)}else{g.selElm=null}});f.onInit.add(function(){g._fixWebKitSpans()});f.onSetContent.add(function(){h=f.dom;d(["strong","b","em","u","strike","sub","sup","a"],function(i){d(c(h.select(i)).reverse(),function(l){var k=l.nodeName.toLowerCase(),j;if(k=="a"){if(l.name){h.replace(h.create("img",{mce_name:"a",name:l.name,"class":"mceItemAnchor"}),l)}return}switch(k){case"b":case"strong":if(k=="b"){k="strong"}j="font-weight: bold;";break;case"em":j="font-style: italic;";break;case"u":j="text-decoration: underline;";break;case"sub":j="vertical-align: sub;";break;case"sup":j="vertical-align: super;";break;case"strike":j="text-decoration: line-through;";break}h.replace(h.create("span",{mce_name:k,style:j,"class":"Apple-style-span"}),l,1)})})});f.onPreProcess.add(function(i,j){h=i.dom;d(c(j.node.getElementsByTagName("span")).reverse(),function(m){var k,l;if(j.get){if(h.hasClass(m,"Apple-style-span")){l=m.style.backgroundColor;switch(h.getAttrib(m,"mce_name")){case"font":if(!i.settings.convert_fonts_to_spans){h.setAttrib(m,"style","")}break;case"strong":case"em":case"sub":case"sup":h.setAttrib(m,"style","");break;case"strike":case"u":if(!i.settings.inline_styles){h.setAttrib(m,"style","")}else{h.setAttrib(m,"mce_name","")}break;default:if(!i.settings.inline_styles){h.setAttrib(m,"style","")}}if(l){m.style.backgroundColor=l}}}if(h.hasClass(m,"mceItemRemoved")){h.remove(m,1)}})});f.onPostProcess.add(function(i,j){j.content=j.content.replace(/
<\/(h[1-6]|div|p|address|pre)>/g,"");j.content=j.content.replace(/ id=\"undefined\"/g,"")})},getInfo:function(){return{longname:"Safari compatibility",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_fixWebKitSpans:function(){var g=this,f=g.editor;a.add(f.getDoc(),"DOMNodeInserted",function(h){h=h.target;if(h&&h.nodeType==1){g._fixAppleSpan(h)}})},_fixAppleSpan:function(l){var g=this.editor,m=g.dom,i=this.webKitFontSizes,f=this.namedFontSizes,j=g.settings,h,k;if(m.getAttrib(l,"mce_fixed")){return}if(l.nodeName=="SPAN"&&l.className=="Apple-style-span"){h=l.style;if(!j.convert_fonts_to_spans){if(h.fontSize){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"size",b(i,h.fontSize)+1)}if(h.fontFamily){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"face",h.fontFamily)}if(h.color){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"color",m.toHex(h.color))}if(h.backgroundColor){m.setAttrib(l,"mce_name","font");m.setStyle(l,"background-color",h.backgroundColor)}}else{if(h.fontSize){m.setStyle(l,"fontSize",f[b(i,h.fontSize)])}}if(h.fontWeight=="bold"){m.setAttrib(l,"mce_name","strong")}if(h.fontStyle=="italic"){m.setAttrib(l,"mce_name","em")}if(h.textDecoration=="underline"){m.setAttrib(l,"mce_name","u")}if(h.textDecoration=="line-through"){m.setAttrib(l,"mce_name","strike")}if(h.verticalAlign=="super"){m.setAttrib(l,"mce_name","sup")}if(h.verticalAlign=="sub"){m.setAttrib(l,"mce_name","sub")}m.setAttrib(l,"mce_fixed","1")}},_insertBR:function(f){var j=f.dom,h=f.selection,i=h.getRng(),g;i.insertNode(g=j.create("br"));i.setStartAfter(g);i.setEndAfter(g);h.setRng(i);if(h.getSel().focusNode==g.previousSibling){h.select(j.insertAfter(j.doc.createTextNode("\u00a0"),g));h.collapse(1)}f.getWin().scrollTo(0,j.getPos(h.getRng().startContainer).y)}});tinymce.PluginManager.add("safari",tinymce.plugins.Safari)})();safari/blank.htm000066600000000017150472616010007616 0ustar00safari/editor_plugin_src.js000066600000026755150472616010012107 0ustar00/** * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function() { var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray; function isEmpty(d, e, f) { var w, n; w = d.createTreeWalker(e, NodeFilter.SHOW_ALL, null, false); while (n = w.nextNode()) { // Filter func if (f) { if (!f(n)) return false; } // Non whitespace text node if (n.nodeType == 3 && n.nodeValue && /[^\s\u00a0]+/.test(n.nodeValue)) return false; // Is non text element byt still content if (n.nodeType == 1 && /^(HR|IMG|TABLE)$/.test(n.nodeName)) return false; } return true; }; tinymce.create('tinymce.plugins.Safari', { init : function(ed) { var t = this, dom; // Ignore on non webkit if (!tinymce.isWebKit) return; t.editor = ed; t.webKitFontSizes = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large']; t.namedFontSizes = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large']; // Safari CreateLink command will not work correctly on images that is aligned ed.addCommand('CreateLink', function(u, v) { var n = ed.selection.getNode(), dom = ed.dom, a; if (n && (/^(left|right)$/i.test(dom.getStyle(n, 'float', 1)) || /^(left|right)$/i.test(dom.getAttrib(n, 'align')))) { a = dom.create('a', {href : v}, n.cloneNode()); n.parentNode.replaceChild(a, n); ed.selection.select(a); } else ed.getDoc().execCommand("CreateLink", false, v); }); /* // WebKit generates spans out of thin air this patch used to remove them but it will also remove styles we want so it's disabled for now ed.onPaste.add(function(ed, e) { function removeStyles(e) { e = e.target; if (e.nodeType == 1) { e.style.cssText = ''; each(ed.dom.select('*', e), function(e) { e.style.cssText = ''; }); } }; Event.add(ed.getDoc(), 'DOMNodeInserted', removeStyles); window.setTimeout(function() { Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles); }, 0); }); */ ed.onKeyUp.add(function(ed, e) { var h, b, r, n, s; // If backspace or delete key if (e.keyCode == 46 || e.keyCode == 8) { b = ed.getBody(); h = b.innerHTML; s = ed.selection; // If there is no text content or images or hr elements then remove everything if (b.childNodes.length == 1 && !/<(img|hr)/.test(h) && tinymce.trim(h.replace(/<[^>]+>/g, '')).length == 0) { // Inject paragrah and bogus br ed.setContent('


', {format : 'raw'}); // Move caret before bogus br n = b.firstChild; r = s.getRng(); r.setStart(n, 0); r.setEnd(n, 0); s.setRng(r); } } }); // Workaround for FormatBlock bug, http://bugs.webkit.org/show_bug.cgi?id=16004 ed.addCommand('FormatBlock', function(u, v) { var dom = ed.dom, e = dom.getParent(ed.selection.getNode(), dom.isBlock); if (e) dom.replace(dom.create(v), e, 1); else ed.getDoc().execCommand("FormatBlock", false, v); }); // Workaround for InsertHTML bug, http://bugs.webkit.org/show_bug.cgi?id=16382 ed.addCommand('mceInsertContent', function(u, v) { ed.getDoc().execCommand("InsertText", false, 'mce_marker'); ed.getBody().innerHTML = ed.getBody().innerHTML.replace(/mce_marker/g, ed.dom.processHTML(v) + 'XX'); ed.selection.select(ed.dom.get('_mce_tmp')); ed.getDoc().execCommand("Delete", false, ' '); }); /* ed.onKeyDown.add(function(ed, e) { // Ctrl+A select all will fail on WebKit since if you paste the contents you selected it will produce a odd div wrapper if ((e.ctrlKey || e.metaKey) && e.keyCode == 65) { ed.selection.select(ed.getBody(), 1); return Event.cancel(e); } });*/ ed.onKeyPress.add(function(ed, e) { var se, li, lic, r1, r2, n, sel, doc, be, af, pa; if (e.keyCode == 13) { sel = ed.selection; se = sel.getNode(); // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973 if (e.shiftKey || ed.settings.force_br_newlines && se.nodeName != 'LI') { t._insertBR(ed); Event.cancel(e); } // Workaround for DIV elements produced by Safari if (li = dom.getParent(se, 'LI')) { lic = dom.getParent(li, 'OL,UL'); doc = ed.getDoc(); pa = dom.create('p'); dom.add(pa, 'br', {mce_bogus : "1"}); if (isEmpty(doc, li)) { // If list in list then use browser default behavior if (n = dom.getParent(lic.parentNode, 'LI,OL,UL')) return; n = dom.getParent(lic, 'p,h1,h2,h3,h4,h5,h6,div') || lic; // Create range from the start of block element to the list item r1 = doc.createRange(); r1.setStartBefore(n); r1.setEndBefore(li); // Create range after the list to the end of block element r2 = doc.createRange(); r2.setStartAfter(li); r2.setEndAfter(n); be = r1.cloneContents(); af = r2.cloneContents(); if (!isEmpty(doc, af)) dom.insertAfter(af, n); dom.insertAfter(pa, n); if (!isEmpty(doc, be)) dom.insertAfter(be, n); dom.remove(n); n = pa.firstChild; r1 = doc.createRange(); r1.setStartBefore(n); r1.setEndBefore(n); sel.setRng(r1); return Event.cancel(e); } } } }); // Safari doesn't place lists outside block elements ed.onExecCommand.add(function(ed, cmd) { var sel, dom, bl, bm; if (cmd == 'InsertUnorderedList' || cmd == 'InsertOrderedList') { sel = ed.selection; dom = ed.dom; if (bl = dom.getParent(sel.getNode(), function(n) {return /^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName);})) { bm = sel.getBookmark(); dom.remove(bl, 1); sel.moveToBookmark(bm); } } }); // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250 ed.onClick.add(function(ed, e) { e = e.target; if (e.nodeName == 'IMG') { t.selElm = e; ed.selection.select(e); } else t.selElm = null; }); ed.onInit.add(function() { t._fixWebKitSpans(); }); ed.onSetContent.add(function() { dom = ed.dom; // Convert strong,b,em,u,strike to spans each(['strong','b','em','u','strike','sub','sup','a'], function(v) { each(grep(dom.select(v)).reverse(), function(n) { var nn = n.nodeName.toLowerCase(), st; // Convert anchors into images if (nn == 'a') { if (n.name) dom.replace(dom.create('img', {mce_name : 'a', name : n.name, 'class' : 'mceItemAnchor'}), n); return; } switch (nn) { case 'b': case 'strong': if (nn == 'b') nn = 'strong'; st = 'font-weight: bold;'; break; case 'em': st = 'font-style: italic;'; break; case 'u': st = 'text-decoration: underline;'; break; case 'sub': st = 'vertical-align: sub;'; break; case 'sup': st = 'vertical-align: super;'; break; case 'strike': st = 'text-decoration: line-through;'; break; } dom.replace(dom.create('span', {mce_name : nn, style : st, 'class' : 'Apple-style-span'}), n, 1); }); }); }); ed.onPreProcess.add(function(ed, o) { dom = ed.dom; each(grep(o.node.getElementsByTagName('span')).reverse(), function(n) { var v, bg; if (o.get) { if (dom.hasClass(n, 'Apple-style-span')) { bg = n.style.backgroundColor; switch (dom.getAttrib(n, 'mce_name')) { case 'font': if (!ed.settings.convert_fonts_to_spans) dom.setAttrib(n, 'style', ''); break; case 'strong': case 'em': case 'sub': case 'sup': dom.setAttrib(n, 'style', ''); break; case 'strike': case 'u': if (!ed.settings.inline_styles) dom.setAttrib(n, 'style', ''); else dom.setAttrib(n, 'mce_name', ''); break; default: if (!ed.settings.inline_styles) dom.setAttrib(n, 'style', ''); } if (bg) n.style.backgroundColor = bg; } } if (dom.hasClass(n, 'mceItemRemoved')) dom.remove(n, 1); }); }); ed.onPostProcess.add(function(ed, o) { // Safari adds BR at end of all block elements o.content = o.content.replace(/
<\/(h[1-6]|div|p|address|pre)>/g, ''); // Safari adds id="undefined" to HR elements o.content = o.content.replace(/ id=\"undefined\"/g, ''); }); }, getInfo : function() { return { longname : 'Safari compatibility', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Internal methods _fixWebKitSpans : function() { var t = this, ed = t.editor; // Use mutator events on new WebKit Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) { e = e.target; if (e && e.nodeType == 1) t._fixAppleSpan(e); }); }, _fixAppleSpan : function(e) { var ed = this.editor, dom = ed.dom, fz = this.webKitFontSizes, fzn = this.namedFontSizes, s = ed.settings, st, p; if (dom.getAttrib(e, 'mce_fixed')) return; // Handle Apple style spans if (e.nodeName == 'SPAN' && e.className == 'Apple-style-span') { st = e.style; if (!s.convert_fonts_to_spans) { if (st.fontSize) { dom.setAttrib(e, 'mce_name', 'font'); dom.setAttrib(e, 'size', inArray(fz, st.fontSize) + 1); } if (st.fontFamily) { dom.setAttrib(e, 'mce_name', 'font'); dom.setAttrib(e, 'face', st.fontFamily); } if (st.color) { dom.setAttrib(e, 'mce_name', 'font'); dom.setAttrib(e, 'color', dom.toHex(st.color)); } if (st.backgroundColor) { dom.setAttrib(e, 'mce_name', 'font'); dom.setStyle(e, 'background-color', st.backgroundColor); } } else { if (st.fontSize) dom.setStyle(e, 'fontSize', fzn[inArray(fz, st.fontSize)]); } if (st.fontWeight == 'bold') dom.setAttrib(e, 'mce_name', 'strong'); if (st.fontStyle == 'italic') dom.setAttrib(e, 'mce_name', 'em'); if (st.textDecoration == 'underline') dom.setAttrib(e, 'mce_name', 'u'); if (st.textDecoration == 'line-through') dom.setAttrib(e, 'mce_name', 'strike'); if (st.verticalAlign == 'super') dom.setAttrib(e, 'mce_name', 'sup'); if (st.verticalAlign == 'sub') dom.setAttrib(e, 'mce_name', 'sub'); dom.setAttrib(e, 'mce_fixed', '1'); } }, _insertBR : function(ed) { var dom = ed.dom, s = ed.selection, r = s.getRng(), br; // Insert BR element r.insertNode(br = dom.create('br')); // Place caret after BR r.setStartAfter(br); r.setEndAfter(br); s.setRng(r); // Could not place caret after BR then insert an nbsp entity and move the caret if (s.getSel().focusNode == br.previousSibling) { s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br)); s.collapse(1); } // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117 ed.getWin().scrollTo(0, dom.getPos(s.getRng().startContainer).y); } }); // Register plugin tinymce.PluginManager.add('safari', tinymce.plugins.Safari); })(); jaretypograph/readme.txt000066600000001006150472616010011424 0ustar00Типограф студии Евгения Муравьёва для Tinymce Инструкция по установке: 1. Скопировать папку jaretypograph в tiny_mce/plugins 2. Подключить плагин при инициализации Tinymce. Пример: tinyMCE.init({ ... plugins : "jaretypograph", ... }); 3. Вывести на тулбар редактора кнопку плагина. Пример: tinyMCE.init({ ... theme_advanced_buttons1 : "jaretypograph", ... });jaretypograph/editor_plugin.js000066600000011444150472616010012637 0ustar00/** * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $ * * @author Denis Pikusov * @copyright Copyright 2009 */ (function() { // Load plugin specific language pack tinymce.PluginManager.requireLangPack('jaretypograph'); tinymce.create('tinymce.plugins.JareTypograph', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { // Register commands ed.addCommand('mceJareTypograph', function() { ed.setProgressState(1); var request = null; if(!request) try { request=new ActiveXObject('Msxml2.XMLHTTP'); } catch (e){} if(!request) try { request=new ActiveXObject('Microsoft.XMLHTTP'); } catch (e){} if(!request) try { request=new XMLHttpRequest(); } catch (e){} request.open("POST", url+'/handler.php'); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset:UTF-8'); request.onreadystatechange = function(aEvt){ if (request.readyState == 4){ ed.setProgressState(0); if(request.status == 200 && request.responseText!=''){ var response_text = request.responseText.replace(/^[\ufeff]+/g, ''); var sel = ed.selection.getContent().length==0?false:true; if(sel) ed.selection.setContent(response_text); else ed.setContent(response_text); } } } var sel = ed.selection.getContent().length==0?false:true; var anchorStart = "{mceTypograf-selection-start}"; // This is pretty unique ;) var anchorEnd = "{mceTypograf-selection-end}"; // Remember current state of content and selection var orig = ed.getContent(); var mark = ed.selection.getBookmark(); // Handle selection if (sel) { var range = ed.selection.getRng() var h1 = 0, h2 = 0, text = ""; // Range object has two parts, we will parse them separately // Known issues script can die here if selection goes through the table, we should handle it somehow // Start anchor start_offset = range.startOffset; end_offset = range.endOffset; text = range.startContainer.data; h1 = text.substr(0, start_offset); h2 = text.substr(start_offset); text = h1 + anchorStart + h2; range.startContainer.data = text; // Replace original content with anchored one // End anchor text = range.endContainer.data; h1 = text.substr(0, end_offset+anchorStart.length); h2 = text.substr(end_offset+anchorStart.length); text = h1 + anchorEnd + h2; range.endContainer.data = text; // Replace original content with anchored one var alltext = ed.getContent({format: 'raw'}); var send = alltext.substring(alltext.indexOf(anchorStart)+anchorStart.length, alltext.indexOf(anchorEnd)); // Put back original content while transaction. Sometimes content may twitch ed.setContent(orig); ed.selection.moveToBookmark(mark); } else { send = ed.getContent({format: 'raw'}); } request.send('text='+encodeURIComponent(send)); }); // Register example button ed.addButton('jaretypograph', { title : '', cmd : 'mceJareTypograph', image : url + '/img/typograph.png' }); }, /** * Creates control instances based in the incomming name. This method is normally not * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons * but you sometimes need to create more complex controls like listboxes, split buttons etc then this * method can be used to create those. * * @param {String} n Name of the control to create. * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. * @return {tinymce.ui.Control} New control instance or null if no control was created. */ createControl : function(n, cm) { return null; }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Jare Typograph', author : 'Denis Pikusov', authorurl : 'http://pikusov.kiev.ua', infourl : 'http://emuravjev.ru/works/tg/', version : "2.0" }; } }); // Register plugin tinymce.PluginManager.add('jaretypograph', tinymce.plugins.JareTypograph); })();jaretypograph/Jare/Exception.php000066600000000501150472616010012755 0ustar00 * @category Jare * @package Jare_Typograph */ class Jare_Exception extends Exception { }jaretypograph/Jare/Typograph.php000066600000011613150472616010013002 0ustar00 * @category Jare * @package Jare_Typograph */ class Jare_Typograph { /** * Перечень названий тофов, идущих с дистрибутивом * * @var array */ protected $_baseTof = array('quote', 'dash', 'punctmark', 'number', 'space', 'etc'); /** * Массив из тофов, где каждой паре-ключ соответствует название тофа * и его объект * * @var array */ protected $_tof = array(); /** * Конструктор * * @param string $text строка для типографирования * @return void */ public function __construct($text) { $this->_text = $text; $this->_text = trim($this->_text); } /** * Метод для быстрого типографирования текста, при котором не нужно * делать настройки тофов, их базовых параметров и т.п. * * @param string $text строка для типографирования * @return string */ public static function quickParse($text) { $typograph = new self($text); return $typograph->parse($typograph->getBaseTofsNames()); } /** * Возвращает массив из названий тофов, которые идут вместе с дистрибутивом * * @return array */ public function getBaseTofsNames() { return $this->_baseTof; } /** * Добавление тофа в очередь на обработку текста * * @param string $name название тофа * @param Jare_Typograph_Tof $object экземляр класса, унаследованного от 'Jare_Typograph_Tof' * @throws Jare_Typograph_Exception * @return void */ public function setTof($name, $object) { $name = strtolower($name); if (!$object instanceof Jare_Typograph_Tof) { require_once 'Pride/Typograph/Exception.php'; throw new Pride_Typograph_Exception("Tof '$name' class must be extend Jare_Typograph_Tof"); } $this->_tof[$name] = $object; $this->_tof[$name]->setStringToParse(&$this->_text); } /** * Получение объекта тофа * * Если тоф не был раннее добавлен и при этом он является базовым, экземляр его класса * будет создан автоматически * * @param string $name * @throws Jare_Typograph_Exception * @return Jare_Typograph_Tof */ public function getTof($name) { $name = strtolower($name); if (!isset($this->_tof[$name])) { if (!in_array($name, $this->_baseTof)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception('Incorrect name of tof'); } $fileName = 'Jare/Typograph/Tof/' . ucfirst($name) . '.php'; $className = 'Jare_Typograph_Tof_' . ucfirst($name); require_once $fileName; if (!class_exists($className, false)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception('Class not exists'); } $this->setTof($name, new $className); } return $this->_tof[$name]; } /** * Типографирование текста * * @param mixed $tofs строка или массив из названий тофов, которые будут применены при типографирование текста * @throws Jare_Typograph_Exception * @return string */ public function parse($tofs) { if (is_string($tofs)) { $tofs = array($tofs); } if (!is_array($tofs)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception('Incorrect type of tof-variable - try set array or string'); } if (!count($tofs)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception('You must set 1 or more tofs; your array is empty!'); } require_once 'Jare/Typograph/Tool.php'; Jare_Typograph_Tool::addCustomBlocks('
', '
'); Jare_Typograph_Tool::addCustomBlocks(''); Jare_Typograph_Tool::addCustomBlocks(''); $this->_text = Jare_Typograph_Tool::safeCustomBlocks($this->_text, true); $this->_text = Jare_Typograph_Tool::safeTagChars($this->_text, true); $this->_text = Jare_Typograph_Tool::clearSpecialChars($this->_text, Jare_Typograph_Tool::CLEAR_MODE_UTF8_NATIVE | Jare_Typograph_Tool::CLEAR_MODE_HTML_MATTER); foreach ($tofs as $tofName) { $this->getTof($tofName)->parse(); } $this->_text = Jare_Typograph_Tool::safeTagChars($this->_text, false); $this->_text = Jare_Typograph_Tool::safeCustomBlocks($this->_text, false); return $this->_text; } }jaretypograph/Jare/Typograph/Param.php000066600000010062150472616010014037 0ustar00 * @category Jare * @package Jare_Typograph */ class Jare_Typograph_Param { /** * Ключи настроек */ const KEY_DISABLE_DEFAULT = '_disable'; const KEY_DISABLE_USER = 'user_disable'; const KEY_PARSE_PATTERN = 'pattern'; const KEY_PARSE_REPLACE = 'replacement'; const KEY_FUNCTION_LINK = 'function_link'; const KEY_POSITION = 'position'; /** * Настройки * * @var array */ protected $_option = array(); /** * Настройки, которые были заданы по умолчанию при создание экземпляра класса; невозможно изменить * * @var array */ protected $_defaultOption = array(); /** * Конструктор * * @param array $option массив из настроек, которые будут заданы по умолчанию * @return void */ public function __construct($option = array()) { $this->_defaultOption = $option; $this->_option = $option; } /** * Отключение параметра * * @param bool $status * @return Jare_Typograph_Param */ public function disable($status) { $this->_option[self::KEY_DISABLE_USER] = (bool) $status; return $this; } /** * Сброс заданных настроек к тем, которые были заданы при создание экземпляра класса * * @throws Jare_Typograph_Param_Exception * @return Jare_Typograph_Param */ public function reset() { if (!count($this->_defaultOption)) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception('This parameter does not have default options'); } $this->_option = $this->_defaultOption; return $this; } /** * Задание настройки * * @param string $name * @param string $value * @throws Jare_Typograph_Param_Exception * @return Jare_Typograph_Param */ public function setOption($name, $value) { $name = strtolower($name); $value = trim($value); if ('_' === substr($name, 0, 1)) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception('Prefix "_" reserved for system option'); } if (empty($value)) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception('Empty value. It\'s bad.'); } switch ($name) { case self::KEY_FUNCTION_LINK: $this->_option[self::KEY_PARSE_PATTERN] = ''; $this->_option[self::KEY_PARSE_REPLACE] = ''; case self::KEY_PARSE_PATTERN: case self::KEY_PARSE_REPLACE: $this->_option[self::KEY_FUNCTION_LINK] = ''; } $this->_option[$name] = $value; return $this; } /** * Возврат списка заданных настроек параметра * * @throws Jare_Typograph_Param_Exception * @return array */ public function getOptions() { if (!count($this->_option)) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception('This parameter does not have options!'); } if (!empty($this->_option[self::KEY_FUNCTION_LINK])) { return $this->_option; } if (empty($this->_option[self::KEY_PARSE_PATTERN]) && !empty($this->_option[self::KEY_PARSE_REPLACE])) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception('You must set up pattern and replacement or function link'); } return $this->_option; } /** * Получение значения настройки * * @param string $name * @throws Jare_Typograph_Param_Exception * @return string */ public function getOption($name) { if (!in_array($name, $this->option)) { require_once 'Jare/Typograph/Param/Exception.php'; throw new Jare_Typograph_Param_Exception("This option doesn't have value"); } return $this->_option[$name]; } }jaretypograph/Jare/Typograph/Param/Exception.php000066600000000736150472616010016004 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Param */ class Jare_Typograph_Param_Exception extends Jare_Typograph_Exception { }jaretypograph/Jare/Typograph/Tof/Etc.php000066600000011653150472616010014251 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Etc extends Jare_Typograph_Tof { /** * Защищенные теги * * @todo привязать к методам из Jare_Typograph_Tool */ const BASE64_PARAGRAPH_TAG = 'cA=='; // p const BASE64_BREAKLINE_TAG = 'YnIgLw=='; // br / (с пробелом и слэшем) /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'tm_replace' => array( '_disable' => false, 'pattern' => '/([\040\t])?\(tm\)/i', 'replacement' => '™'), 'r_sign_replace' => array( '_disable' => false, 'pattern' => '/\(r\)/ei', 'replacement' => '$this->_buildTag($this->_buildTag("®", "small"), "sup")'), 'copy_replace' => array( '_disable' => false, 'pattern' => '/\((c|с)\)\s+/iu', 'replacement' => '© '), 'acute_accent' => array( '_disable' => false, 'pattern' => '/(у|е|ы|а|о|э|я|и|ю|ё)\`(\w)/i', 'replacement' => '\1́\2'), 'auto_links' => array( '_disable' => false, 'pattern' => '/(\s|^)(http|ftp|mailto|https)(:\/\/)([\S]{4,})(\s|\.|\,|\!|\?|$)/ieu', 'replacement' => '"\1" . $this->_buildTag("\4", "a", array("href" => "\2\3\4")) . "\5"'), 'email' => array( '_disable' => false, 'pattern' => '/(\s|^)([a-z0-9\-\_\.]{3,})\@([a-z0-9\-\.]{2,})\.([a-z]{2,6})(\s|\.|\,|\!|\?|$|\<)/e', 'replacement' => '"\1" . $this->_buildTag("\2@\3.\4", "a", array("href" => "mailto:\2@\3.\4")) . "\5"'), 'hyphen_nowrap' => array( '_disable' => false, 'pattern' => '/(\ \;|\s|\>|^)([a-zа-я]+)\-([a-zа-я]+)(\s|\.|\,|\!|\?|\ \;|\&hellip\;|$)/uie', 'replacement' => '"\1" . $this->_buildTag("\2-\3", "span", array("style" => "word-spacing:nowrap;")) . "\4"'), 'simple_arrow' => array( '_disable' => false, 'function_link' => '_buildArrows'), 'ip_address' => array( '_disable' => false, 'pattern' => '/(\s|\ \;|^)(\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3})/ie', 'replacement' => '"\1" . $this->_nowrapIpAddress("\2")'), 'optical_alignment' => array( '_disable' => false, 'function_link' => '_buildOpticalAlignment'), 'paragraphs' => array( '_disable' => false, 'function_link' => '_buildParagraphs'), ); /** * Объединение IP-адрессов в неразрывные конструкции (IPv4 only) * * @param unknown_type $triads * @return unknown */ protected function _nowrapIpAddress($triads) { $triad = explode('.', $triads); $addTag = true; foreach ($triad as $value) { $value = (int) $value; if ($value > 255) { $addTag = false; break; } } if (true === $addTag) { $triads = $this->_buildTag($triads, 'span', array('style' => "word-spacing:nowrap;")); } return $triads; } /** * Оптическое выравнивание для пунктуации * * @return void */ protected function _buildOpticalAlignment() { $this->_text = preg_replace('/(\040|\ \;|\t)\(/ei', '$this->_buildTag("\1", "span", array("style" => "margin-right:0.3em;")) . $this->_buildTag("(", "span", array("style" => "margin-left:-0.3em;"))', $this->_text); $this->_text = preg_replace('/(\n|\r|^)\(/ei', '"\1" . $this->_buildTag("(", "span", array("style" => "margin-left:-0.3em;"))', $this->_text); $this->_text = preg_replace('/([а-яa-z0-9]+)\,(\040+)/iue', '"\1" . $this->_buildTag(",", "span", array("style" => "margin-right:-0.2em;")) . $this->_buildTag(" ", "span", array("style" => "margin-left:0.2em;"))', $this->_text); } /** * Расстановка защищенных тегов параграфа (

...

) и переноса строки * * @return void */ protected function _buildParagraphs() { if (!preg_match('/\<\/?' . self::BASE64_PARAGRAPH_TAG . '\>/', $this->_text)) { $this->_text = '<' . self::BASE64_PARAGRAPH_TAG . '>' . $this->_text . ''; $this->_text = preg_replace('/([\040\t]+)?(\n|\r){2,}/e', '"<" .self::BASE64_PARAGRAPH_TAG . ">"', $this->_text); } if (!preg_match('/\<' . self::BASE64_BREAKLINE_TAG . '\>/', $this->_text)) { $this->_text = preg_replace('/(\n|\r)/e', '"<" . self::BASE64_BREAKLINE_TAG . ">"', $this->_text); } } /** * Преобразование -> и <- в коды * * @return void */ protected function _buildArrows() { $this->_text = preg_replace('/(\s|\>|\ \;)\-\>(\s|\ \;|\<\/)/', '\1→\2', $this->_text); $this->_text = preg_replace('/(\s|\>|\ \;)\<\-(\s|\ \;)/', '\1←\2', $this->_text); } }jaretypograph/Jare/Typograph/Tof/Punctmark.php000066600000003742150472616010015502 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Punctmark extends Jare_Typograph_Tof { /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'auto_comma' => array( '_disable' => false, 'pattern' => '/([a-zа-я])(\s| )(но|а)(\s| )/iu', 'replacement' => '\1,\2\3\4'), 'punctuation_marks_limit' => array( '_disable' => false, 'pattern' => '/([\!\.\?]){4,}/', 'replacement' => '\1\1\1'), 'punctuation_marks_base_limit' => array( '_disable' => false, 'pattern' => '/([\,]|[\:]|[\;]]){2,}/', 'replacement' => '\1'), 'hellip' => array( '_disable' => false, 'function_link' => '_buildHellipTags'), 'eng_apostrophe' => array( '_disable' => false, 'pattern' => '/(\s|^|\>)([a-z]{2,})\'([a-z]+)/i', 'replacement' => '\1\2’\3'), 'fix_pmarks' => array( '_disable' => false, 'pattern' => '/([a-zа-я0-9])(\!|\.|\?){2}(\s|$|\<)/i', 'replacement' => '\1\2\3'), 'fix_brackets' => array( '_disable' => false, 'function_link' => '_fixBrackets'), ); /** * Расстановка многоточия вместо трех и двух точек * * @return void */ protected function _buildHellipTags() { $this->_text = str_replace(array('...', '..'), '…', $this->_text); } /** * Удаление лишних пробелов внутри скобок * * @return void */ protected function _fixBrackets() { $this->_text = preg_replace('/(\()(\040|\t)+/', '\1', $this->_text); $this->_text = preg_replace('/(\040|\t)+(\))/', '\2', $this->_text); } }jaretypograph/Jare/Typograph/Tof/Number.php000066600000004557150472616010014773 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Number extends Jare_Typograph_Tof { /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'auto_times_x' => array( '_disable' => false, 'function_link' => '_buildTimesx'), 'numeric_sub' => array( '_disable' => false, 'pattern' => '/([a-zа-я0-9])\_([\d]{1,3})([^а-яa-z0-9]|$)/ieu', 'replacement' => '"\1" . $this->_buildTag($this->_buildTag("\2","small"),"sub") . "\3"'), 'numeric_sup' => array( '_disable' => false, 'pattern' => '/([a-zа-я0-9])\^([\d]{1,3})([^а-яa-z0-9]|$)/ieu', 'replacement' => '"\1" . $this->_buildTag($this->_buildTag("\2","small"),"sup") . "\3"'), 'simple_fraction' => array( '_disable' => true, 'function_link' => '_buildSimpleFraction'), 'math_chars' => array( '_disable' => false, 'function_link' => '_buildMathChars'), ); /** * Преобразование простых дробей (1/2, 1/4 и 3/4) в HTML-коды * * @return void */ protected function _buildSimpleFraction() { $this->_text = preg_replace('/(\D)1\/(2|4)(\D)/', '\1&frac1\2\3', $this->_text); $this->_text = preg_replace('/(\D)3\/4(\D)/', '\1¾\2', $this->_text); } /** * Расстановка × между числами * * @return void */ protected function _buildTimesx() { $regExpMask = '/(\×\;)?(\d+)(\040*)(x|х)(\040*)(\d+)/u'; while(preg_match($regExpMask, $this->_text)) { $this->_text = preg_replace($regExpMask, '\1\2×\6', $this->_text); } } /** * Расстановка простейших математических знаков * * @return void */ protected function _buildMathChars() { $this->_text = str_replace('!=', '≠', $this->_text); $this->_text = str_replace('<=', '≤', $this->_text); $this->_text = str_replace('>=', '≥', $this->_text); $this->_text = str_replace('~=', '≅', $this->_text); $this->_text = str_replace('+-', '±', $this->_text); } }jaretypograph/Jare/Typograph/Tof/Quote.php000066600000005011150472616010014622 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Quote extends Jare_Typograph_Tof { /** * Типы кавычек */ const QUOTE_FIRS_OPEN = '«'; const QUOTE_FIRS_CLOSE = '»'; const QUOTE_CRAWSE_OPEN = '„'; const QUOTE_CRAWSE_CLOSE = '“'; /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'quotes_outside_a' => array( '_disable' => false, 'pattern' => '/(\<%%\_\_.+?\>)\"(.+?)\"(\<\/%%\_\_.+?\>)/s', 'replacement' => '"\1\2\3"'), 'open_quote' => array( '_disable' => false, 'function_link' => '_buildOpenQuote'), 'close_quote' => array( '_disable' => false, 'function_link' => '_buildCloseQuote'), 'optical_alignment' => array( '_disable' => false, 'function_link' => '_buildOpticalAlignment'), ); /** * Расстановка закрывающих кавычек * * @return void */ protected function _buildOpenQuote() { $regExpMask = '/(^|\(|\s|\>)(\"|\\\")(\S+)/iu'; while(preg_match($regExpMask, $this->_text)) { $this->_text = preg_replace($regExpMask . 'e', '"\1" . self::QUOTE_FIRS_OPEN . "\3"', $this->_text); } } /** * Расстановка закрывающих кавычек * * @return void */ protected function _buildCloseQuote() { $regExpMask = '/([a-zа-я0-9]|\.|\&hellip\;|\!|\?|\>)(\"|\\\")+(\.|\&hellip\;|\;|\:|\?|\!|\,|\s|\)|\<\/|$)/ui'; while(preg_match($regExpMask, $this->_text)) { $this->_text = preg_replace($regExpMask . 'e', '"\1" . self::QUOTE_FIRS_CLOSE . "\3"', $this->_text); } } /** * Оптическое выравнивание открывающей кавычки * * @return void */ protected function _buildOpticalAlignment() { $this->_text = preg_replace('/([a-zа-я\-]{3,})(\040|\ \;|\t)(\«\;)/uie', '"\1" . $this->_buildTag("\2", "span",array("style" => "margin-right:0.44em;")) . $this->_buildTag("\3", "span", array("style" => "margin-left:-0.44em;"))', $this->_text); $this->_text = preg_replace('/(\n|\r|^)(\«\;)/ei', '"\1" . $this->_buildTag("\2", "span", array("style" => "margin-left:-0.44em;"))', $this->_text); } }jaretypograph/Jare/Typograph/Tof/Dash.php000066600000005201150472616010014405 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Dash extends Jare_Typograph_Tof { /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'mdash' => array( '_disable' => false, 'pattern' => '/([a-zа-я0-9]+|\,|\:|\)|\»\;|\|\")(\040|\t)(\-|\&mdash\;)(\s|$|\<)/u', 'replacement' => '\1 —\4'), 'mdash_2' => array( '_disable' => false, 'pattern' => '/(\n|\r|^|\>)(\-|\&mdash\;)(\t|\040)/', 'replacement' => '\1— '), 'mdash_3' => array( '_disable' => false, 'pattern' => '/(\.|\!|\?|\&hellip\;)(\040|\t|\ \;)(\-|\&mdash\;)(\040|\t|\ \;)/', 'replacement' => '\1 — '), 'years' => array( '_disable' => false, 'pattern' => '/(с|по|период|середины|начала|начало|конца|конец|половины|в|между)(\s+|\ \;)([\d]{4})(-)([\d]{4})(г|гг)?/eui', 'replacement' => '"\1\2" . $this->_buildYears("\3","\5","\4") . "\6"'), 'iz_za_pod' => array( '_disable' => false, 'pattern' => '/(\s|\ \;|\>)(из)(\040|\t|\ \;)\-?(за|под)([\.\,\!\?\:\;]|\040|\ \;)/uie', 'replacement' => '("\1" == " " ? " " : "\1") . "\2-\4" . ("\5" == " "? " " : "\5")'), 'to_libo_nibud' => array( '_disable' => false, 'function_link' => '_buildToLiboNibud') ); /** * Расстановка короткого тире между годами * * @param string $start * @param string $end * @param string $sep * @return string */ protected function _buildYears($start, $end, $sep) { $start = (int) $start; $end = (int) $end; return ($start >= $end) ? "$start$sep$end" : "$start–$end"; } /** * Расстановка дефиса перед -то, -либо, -нибудь * * @return void */ protected function _buildToLiboNibud() { $regExpMask = '/(\s|^|\ \;|\>)(кто|кем|когда|зачем|почему|как|что|чем|где|чего|кого)\-?(\040|\t|\ \;)\-?(то|либо|нибудь)([\.\,\!\?\;]|\040|\ \;|$)/ui'; while( preg_match($regExpMask, $this->_text)) { $this->_text = preg_replace($regExpMask . 'e', '("\1" == " " ? " " : "\1") . "\2-\4" . ("\5" == " "? " " : "\5")', $this->_text); } } }jaretypograph/Jare/Typograph/Tof/Space.php000066600000005406150472616010014570 0ustar00 * @category Jare * @package Jare_Typograph * @subpackage Tof */ class Jare_Typograph_Tof_Space extends Jare_Typograph_Tof { /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array( 'nobr_abbreviation' => array( '_disable' => false, 'pattern' => '/(\s+|^|\>)(\d+)(\040|\t)*(dpi|lpi)([\s\;\.\?\!\:\(]|$)/i', 'replacement' => '\1\2 \4\5'), 'nobr_acronym' => array( '_disable' => false, 'pattern' => '/(\s|^|\>)(гл|стр|рис|ил)\.(\040|\t)*(\d+)(\s|\.|\,|\?|\!|$)/iu', 'replacement' => '\1\2. \4\5'), 'nobr_before_unit' => array( '_disable' => false, 'pattern' => '/(\s|^|\>)(\d+)(м|мм|см|км|гм|km|dm|cm|mm)(\s|\.|\!|\?|\,|$)/iu', 'replacement' => '\1\2 \3\4'), 'remove_space_before_punctuationmarks' => array( '_disable' => false, 'pattern' => '/(\040|\t|\ \;)([\,\:\.])(\s+)/', 'replacement' => '\2\3'), 'autospace_after_comma' => array( '_disable' => true, 'pattern' => '/(\040|\t|\ \;)?\,([а-яa-z0-9])/iu', 'replacement' => ', \2'), 'autospace_after_pmarks' => array( '_disable' => false, 'pattern' => '/(\040|\t|\ \;)([a-zа-я0-9]+)(\040|\t|\ \;)?(\:|\)|\,|\.|\&hellip\;|(?:\!|\?)+)([а-яa-z])/iu', 'replacement' => '\1\2\4 \5'), 'super_nbsp' => array( '_disable' => false, 'pattern' => '/(\s|^|\«\;|\>|\(|\&mdash\;\ \;)([a-zа-я]{1,2}\s+)([a-zа-я]{1,2}\s+)?([a-zа-я0-9\-]{2,})/ieu', 'replacement' => '"\1" . trim("\2") . " " . ("\3" ? trim("\3") . " " : "") . "\4"'), 'many_spaces_to_one' => array( '_disable' => false, 'pattern' => '/(\040|\t)+/', 'replacement' => ' '), 'clear_percent' => array( '_disable' => false, 'pattern' => '/(\d+)([\t\040]+)\%/', 'replacement' => '\1%'), 'nbsp_before_open_quote' => array( '_disable' => false, 'pattern' => '/(^|\040|\t|>)([a-zа-я]{1,2})\040(\«\;|\&bdquo\;)/u', 'replacement' => '\1\2 \3'), 'nbsp_before_particle' => array( '_disable' => false, 'pattern' => '/(\040|\t)+(ли|бы|б|же|ж)(\ \;|\.|\,|\:|\;|\&hellip\;|\s)/iue', 'replacement' => '" \2" . ("\3" == " " ? " " : "\3")'), 'ps_pps' => array( '_disable' => false, 'pattern' => '/(^|\040|\t|\>|\r|\n)(p\.\040?)(p\.\040?)?(s\.)/ie', 'replacement' => '"\1" . trim("\2") . " " . ("\3" ? trim("\3") . " " : "") . "\4"'), ); }jaretypograph/Jare/Typograph/Exception.php000066600000000635150472616010014742 0ustar00 * @category Jare * @package Jare_Typograph */ class Jare_Typograph_Exception extends Jare_Exception { }jaretypograph/Jare/Typograph/Tool.php000066600000027175150472616010013731 0ustar00 * @category Jare * @package Jare_Typograph */ class Jare_Typograph_Tool { /** * Режимы очистки текста */ const CLEAR_MODE_UTF8_NATIVE = 1; const CLEAR_MODE_HTML_MATTER = 2; /** * Таблица символов * * @var array */ protected static $_charsTable = array( '"' => array('html' => array('«', '»', '“', '‘', '„', '“', '"', '«', '»'), 'utf8' => array(0x201E, 0x201C, 0x201F, 0x201D, 0x00AB, 0x00BB)), ' ' => array('html' => array(' ', ' ', ' '), 'utf8' => array(0x00A0, 0x2002, 0x2003, 0x2008, 0x2009)), '-' => array('html' => array('—', '–', '−', '—', '—', '–'), 'utf8' => array(0x002D, 0x2014, 0x2010, 0x2012, 0x2013)), '==' => array('html' => array('≡'), 'utf8' => array(0x2261)), '...' => array('html' => array('…', '…'), 'utf8' => array(0x2026)), '!=' => array('html' => array('≠', '≠'), 'utf8' => array(0x2260)), '<=' => array('html' => array('≤', '≤'), 'utf8' => array(0x2264)), '>=' => array('html' => array('≥', '≥'), 'utf8' => array(0x2265)), '1/2' => array('html' => array('½', '½'), 'utf8' => array(0x00BD)), '1/4' => array('html' => array('¼', '¼'), 'utf8' => array(0x00BC)), '3/4' => array('html' => array('¾', '¾'), 'utf8' => array(0x00BE)), '+-' => array('html' => array('±', '±'), 'utf8' => array(0x00B1)), '&' => array('html' => array('&', '&')), '(tm)' => array('html' => array('™', '™'), 'utf8' => array(0x2122)), '(r)' => array('html' => array('®', '®'), 'utf8' => array(0x00AE)), '(c)' => array('html' => array('©', '©'), 'utf8' => array(0x00A9)), '`' => array('html' => array('́')), '\'' => array('html' => array('’', '’')), 'x' => array('html' => array('×', '×'), 'utf8' => array('×') /* какой же у него может быть код? */), ); /** * Список из элементов, в которых текст не будет типографироваться * * @var array */ protected static $_customBlocks = array(); /** * Добавление к тегам атрибута 'id', благодаря которому * при повторном типографирование текста будут удалены теги, * расставленные данным типографом * * @var array */ protected static $_typographSpecificTagId = false; /** * Удаление кодов HTML из текста * * * // Remove UTF-8 chars: * $str = Jare_Typograph_Tool::clearSpecialChars('your text', Jare_Typograph_Tool::CLEAR_MODE_UTF8_NATIVE); * // ... or HTML codes only: * $str = Jare_Typograph_Tool::clearSpecialChars('your text', Jare_Typograph_Tool::CLEAR_MODE_HTML_MATTER); * // ... or combo: * $str = Jare_Typograph_Tool::clearSpecialChars('your text', Jare_Typograph_Tool::CLEAR_MODE_UTF8_NATIVE|Jare_Typograph_Tool::CLEAR_MODE_HTML_MATTER); * * * @param string $text * @param int $mode * @return string */ public static function clearSpecialChars($text, $mode) { $mode = (int) $mode; switch($mode) { case self::CLEAR_MODE_UTF8_NATIVE: $mode = array('utf8'); break; case self::CLEAR_MODE_HTML_MATTER: $mode = array('html'); break; case self::CLEAR_MODE_UTF8_NATIVE | self::CLEAR_MODE_HTML_MATTER: $mode = array('utf8', 'html'); break; } if (!is_array($mode)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Incorrect mode"); } foreach (self::$_charsTable as $char => $vals) { foreach ($mode as $type) { if (isset($vals[$type])) { foreach ($vals[$type] as $v) { if ('utf8' === $type && is_int($v)) { $v = self::_getUnicodeChar($v); } $text = str_replace($v, $char, $text); } } } } return $text; } /** * Удаление тегов HTML из текста * Тег
будет преобразов в перенос строки \n, сочетание тегов

- * в двойной перенос * * @param string $text * @param array $allowableTag массив из тегов, которые будут проигнорированы * @return string */ public static function removeHtmlTags($text, $allowableTag = null) { $ignore = null; if (null !== $allowableTag) { if (is_string($allowableTag)) { $allowableTag = array($allowableTag); } if (is_array($allowableTag)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception('Bad type of param #2'); } foreach ($allowableTag as $tag) { if ('<' !== substr($tag, 0, 1) || '>' !== substr($tag, -1, 1)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Incorrect tag $tag"); } if ('/' === substr($tag, 1, 1)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Incorrect tag $tag"); } } $ignore = implode('', $allowableTag); } $text = preg_replace('/\/i', "\n", $text); $text = preg_replace('/\<\/p\>\s*\/', "\n\n", $text); $text = strip_tags($text, $ignore); return $text; } /** * Сохраняем содержимое тегов HTML * * Тег 'a' кодируется со специальным префиксом для дальнейшей * возможности выносить за него кавычки. * * @param string $text * @param bool $safe * @return string */ public static function safeTagChars($text, $safe) { $safe = (bool) $safe; if (true === $safe) { $text = preg_replace('/(\<\/?)(.+?)(\>)/se', '"\1" . ( substr(trim("\2"), 0, 1) === "a" ? "%%___" : "" ) . self::_encrypteContent(trim("\2")) . "\3"', $text); } else { $text = preg_replace('/(\<\/?)(.+?)(\>)/se', '"\1" . ( substr(trim("\2"), 0, 3) === "%%___" ? self::_decrypteContent(substr(trim("\2"), 4)) : self::_decrypteContent(trim("\2")) ) . "\3"', $text); } return $text; } /** * Создание тега с защищенным содержимым * * @param string $content текст, который будет обрамлен тегом * @param string $tag * @param array $attribute список атрибутов, где ключ - имя атрибута, а значение - само значение данного атрибута * @return string */ public static function buildSafedTag($content, $tag = 'span', $attribute = array()) { $htmlTag = $tag; if (self::$_typographSpecificTagId) { if(!isset($attribute['id'])) { $attribute['id'] = 'jt-2' . mt_rand(1000,9999); } } if (count($attribute)) { foreach ($attribute as $attr => $value) { $htmlTag .= " $attr=\"$value\""; } } return "<" . self::_encrypteContent($htmlTag) . ">$content"; } /** * Список защищенных блоков * * @return array */ public static function getCustomBlocks() { return self::$_customBlocks; } /** * Удаленного блока по его номеру ключа * * @param int $blockId * @return void */ public static function removeCustomBlock($blockId) { if (!is_int($blockId)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Incorrect type of value"); } if (!isset(self::$_customBlocks[$blockId])) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Incorrect index"); } unset(self::$_customBlocks[$blockId]); } /** * Добавление защищенного блока * * * Jare_Typograph_Tool::addCustomBlocks('', ''); * Jare_Typograph_Tool::addCustomBlocks('\', '\<\/span\>', true); * * * @param string $open начало блока * @param string $close конец защищенного блока * @param bool $quoted специальные символы в начале и конце блока экранированы * @return void */ public static function addCustomBlocks($open, $close, $quoted = false) { $open = trim($open); $close = trim($close); if (empty($open) || empty($close)) { require_once 'Jare/Typograph/Tool/Exception.php'; throw new Jare_Typograph_Tool_Exception("Bad value"); } if (false === $quoted) { $open = preg_quote($open, '/'); $close = preg_quote($close, '/'); } self::$_customBlocks[] = array($open, $close); } /** * Сохранение содержимого защищенных блоков * * @param string $text * @param bool $safe если true, то содержимое блоков будет сохранено, иначе - раскодировано. * @return string */ public static function safeCustomBlocks($text, $safe) { $safe = (bool) $safe; if (count(self::$_customBlocks)) { $safeType = true === $safe ? "self::_encrypteContent('\\2')" : "stripslashes(self::_decrypteContent('\\2'))"; foreach (self::$_customBlocks as $block) { $text = preg_replace("/({$block[0]})(.+?)({$block[1]})/se", "'\\1' . $safeType . '\\3'" , $text); } } return $text; } /** * Метод, осуществляющий кодирование (сохранение) информации * с целью невозможности типографировать ее * * @param string $text * @return string */ protected static function _encrypteContent($text) { return base64_encode($text); } /** * Метод, осуществляющий декодирование информации * * @param string $text * @return string */ protected static function _decrypteContent($text) { return base64_decode($text); } /** * Костыли для работы с символами UTF-8 * * @author somebody? * @param int $c код символа в кодировке UTF-8 (например, 0x00AB) * @return bool|string */ protected static function _getUnicodeChar($c) { if ($c <= 0x7F) { return chr($c); } else if ($c <= 0x7FF) { return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F); } else if ($c <= 0xFFFF) { return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F) . chr(0x80 | $c & 0x3F); } else if ($c <= 0x10FFFF) { return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F) . chr(0x80 | $c >> 6 & 0x3F) . chr(0x80 | $c & 0x3F); } else { return false; } } }jaretypograph/Jare/Typograph/Tof.php000066600000014002150472616010013525 0ustar00 * @category Jare * @package Jare_Typograph */ abstract class Jare_Typograph_Tof { /** * Отключение обработки текста тофом * * @var bool */ protected $_disableParsing = false; /** * Текст для типографирования * * @var string */ protected $_text = ''; /** * Базовые параметры тофа * * @var array */ protected $_baseParam = array(); /** * Установка базового параметра * * @param string $name * @param Jare_Typograph_Param $param * @return Jare_Typograph_Tof */ public function setBaseParam($name, Jare_Typograph_Param $param) { $this->_baseParam[$name] = $param->getOptions(); return $this; } /** * Получение экземпляра класса базового параметра * * @param string $name * @throws Jare_Typograph_Exception * @return Jare_Typograph_Param */ public function getBaseParam($name) { if(!isset($this->_baseParam[$name])) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception("Incorrect base parameter name"); } $param = new Jare_Typograph_Param($this->_baseParam[$name]); return $param; } /** * Установка текста для типографирования * * @param string $text * @return void */ public function setStringToParse($text) { $this->_text = &$text; } /** * Отключение типографирования текста данным тофом * * @param bool $status * @return Jare_Typograph_Tof */ public function disableParsing($status) { $this->_disableParsing = (bool) $status; return $this; } /** * Возврат статуса для типографирования данным тофом * * @return bool */ public function isDisabledParsing() { return $this->_disableParsing; } /** * Отключение базовых параметров тофа * * @param mixed $name массив или строка из названий параметров, которые необходимо отключить * @return Jare_Typograph_Tof */ public function disableBaseParam($name) { if (!is_array($this->_baseParam) || !count($this->_baseParam)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception("This tof dosn't have base parameters"); } if (is_string($name)) { $name = array($name); } if (!is_array($name)) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception("Incorrect var type"); } foreach ($name as $accessKey) { if (!isset($this->_baseParam[$accessKey])) { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception("Incorrect name of base param - '$accessKey'"); } else { $this->_baseParam[$accessKey][Jare_Typograph_Param::KEY_DISABLE_USER] = true; } } return $this; } /** * Стандартное типографирование текста тофом * * @throws Jare_Typograph_Exception * @return string */ public function parse() { $this->_preParse(); if (true === $this->_disableParsing) { return $this->_text; } if (is_array($this->_baseParam) || count($this->_baseParam)) { foreach ($this->_baseParam as $accessKey => $param) { $ignoreParsing = null; // Типографирование параметром отключено или включено пользователем if (isset($param[Jare_Typograph_Param::KEY_DISABLE_USER])) { $ignoreParsing = (bool) $param[Jare_Typograph_Param::KEY_DISABLE_USER]; } if (null === $ignoreParsing) { // Параметр отключен по умолчанию... if (isset($param[Jare_Typograph_Param::KEY_DISABLE_DEFAULT])) { $ignoreParsing = $param[Jare_Typograph_Param::KEY_DISABLE_DEFAULT]; } } if ($ignoreParsing) { continue; } // Ссылка на метод класса с правилами типографирования if (!empty($param[Jare_Typograph_Param::KEY_FUNCTION_LINK])) { $methodName = $param[Jare_Typograph_Param::KEY_FUNCTION_LINK]; if (method_exists($this, $methodName)) { $this->$methodName(); continue; } else { require_once 'Jare/Typograph/Exception.php'; throw new Jare_Typograph_Exception("Incorrect method name - '$methodName'"); } } // Классическое типографирование регулярными выражениями $this->_text = preg_replace($param[Jare_Typograph_Param::KEY_PARSE_PATTERN], $param[Jare_Typograph_Param::KEY_PARSE_REPLACE], $this->_text); } } $this->_postParse(); return $this->_text; } /** * Метод, который вызывается перед стандартным типографированием текста тофом * * @return void */ protected function _preParse() { } /** * Метод, который вызывается после стандартным типографированием текста тофом * * @return void */ protected function _postParse() { } /** * Создание защищенного тега с содержимым * * @see Jare_Typograph_Tool::buildSafeTag * @param string $content * @param string $tag * @param array $attribute * @return string */ protected function _buildTag($content, $tag = 'span', $attribute = array()) { require_once 'Jare/Typograph/Tool.php'; $html = Jare_Typograph_Tool::buildSafedTag($content, $tag, $attribute); return $html; } }jaretypograph/langs/ru.js000066600000000131150472616010011514 0ustar00tinyMCE.addI18n('ru.typograph',{ desc : 'Подтянуть типографику' }); jaretypograph/langs/en.js000066600000000072150472616010011474 0ustar00tinyMCE.addI18n('en.typograph',{ desc : 'Typography' }); jaretypograph/handler.php000066600000001550150472616010011560 0ustar00getTof('etc')->disableBaseParam('paragraphs'); $typograph->getTof('space')->disableBaseParam('many_spaces_to_one'); $text = $typograph->parse($typograph->getBaseTofsNames()); // Отдаем текст print $start_space.$text.$end_space; ?>jaretypograph/img/typograph.gif000066600000000231150472616010012705 0ustar00GIF89aDDDUUU333www"""fff!,FI8stR!JNo8A&:aNUX@ZG13 B.*-;;jaretypograph/img/typograph.png000066600000000506150472616010012731 0ustar00PNG  IHDR tEXtSoftwareAdobe ImageReadyqe<IDATxb?5} ddd@P@` b|zy hB ~AB.|'Xj?XAJ@eb%ab*P 1 j JBd8ʆ3E1p&C5!z@̏& B]YN A; q! D@ O-@-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;gh[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();layer/editor_plugin_src.js000066600000014526150472616010011747 0ustar00/** * 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() { function findParentLayer(node) { do { if (node.className && node.className.indexOf('mceItemLayer') != -1) { return node; } } while (node = node.parentNode); }; tinymce.create('tinymce.plugins.Layer', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceInsertLayer', t._insertLayer, t); ed.addCommand('mceMoveForward', function() { t._move(1); }); ed.addCommand('mceMoveBackward', function() { t._move(-1); }); ed.addCommand('mceMakeAbsolute', function() { t._toggleAbsolute(); }); // Register buttons ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'}); ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'}); ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'}); ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'}); ed.onInit.add(function() { var dom = ed.dom; if (tinymce.isIE) ed.getDoc().execCommand('2D-Position', false, true); }); // Remove serialized styles when selecting a layer since it might be changed by a drag operation ed.onMouseUp.add(function(ed, e) { var layer = findParentLayer(e.target); if (layer) { ed.dom.setAttrib(layer, 'data-mce-style', ''); } }); // Fixes edit focus issues with layers on Gecko // This will enable designMode while inside a layer and disable it when outside ed.onMouseDown.add(function(ed, e) { var node = e.target, doc = ed.getDoc(), parent; if (tinymce.isGecko) { if (findParentLayer(node)) { if (doc.designMode !== 'on') { doc.designMode = 'on'; // Repaint caret node = doc.body; parent = node.parentNode; parent.removeChild(node); parent.appendChild(node); } } else if (doc.designMode == 'on') { doc.designMode = 'off'; } } }); ed.onNodeChange.add(t._nodeChange, t); ed.onVisualAid.add(t._visualAid, t); }, getInfo : function() { return { longname : 'Layer', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods _nodeChange : function(ed, cm, n) { var le, p; le = this._getParentLayer(n); p = ed.dom.getParent(n, 'DIV,P,IMG'); if (!p) { cm.setDisabled('absolute', 1); cm.setDisabled('moveforward', 1); cm.setDisabled('movebackward', 1); } else { cm.setDisabled('absolute', 0); cm.setDisabled('moveforward', !le); cm.setDisabled('movebackward', !le); cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute"); } }, // Private methods _visualAid : function(ed, e, s) { var dom = ed.dom; tinymce.each(dom.select('div,p', e), function(e) { if (/^(absolute|relative|fixed)$/i.test(e.style.position)) { if (s) dom.addClass(e, 'mceItemVisualAid'); else dom.removeClass(e, 'mceItemVisualAid'); dom.addClass(e, 'mceItemLayer'); } }); }, _move : function(d) { var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl; nl = []; tinymce.walk(ed.getBody(), function(n) { if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position)) nl.push(n); }, 'childNodes'); // Find z-indexes for (i=0; i -1) { nl[ci].style.zIndex = z[fi]; nl[fi].style.zIndex = z[ci]; } else { if (z[ci] > 0) nl[ci].style.zIndex = z[ci] - 1; } } else { // Move forward // Try find a higher one for (i=0; i z[ci]) { fi = i; break; } } if (fi > -1) { nl[ci].style.zIndex = z[fi]; nl[fi].style.zIndex = z[ci]; } else nl[ci].style.zIndex = z[ci] + 1; } ed.execCommand('mceRepaint'); }, _getParentLayer : function(n) { return this.editor.dom.getParent(n, function(n) { return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position); }); }, _insertLayer : function() { var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody(); ed.dom.add(body, 'div', { style : { position : 'absolute', left : p.x, top : (p.y > 20 ? p.y : 20), width : 100, height : 100 }, 'class' : 'mceItemVisualAid mceItemLayer' }, ed.selection.getContent() || ed.getLang('layer.content')); // Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7 if (tinymce.isIE) dom.setHTML(body, body.innerHTML); }, _toggleAbsolute : function() { var ed = this.editor, le = this._getParentLayer(ed.selection.getNode()); if (!le) le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG'); if (le) { if (le.style.position.toLowerCase() == "absolute") { ed.dom.setStyles(le, { position : '', left : '', top : '', width : '', height : '' }); ed.dom.removeClass(le, 'mceItemVisualAid'); ed.dom.removeClass(le, 'mceItemLayer'); } else { if (le.style.left == "") le.style.left = 20 + 'px'; if (le.style.top == "") le.style.top = 20 + 'px'; if (le.style.width == "") le.style.width = le.width ? (le.width + 'px') : '100px'; if (le.style.height == "") le.style.height = le.height ? (le.height + 'px') : '100px'; le.style.position = "absolute"; ed.dom.setAttrib(le, 'data-mce-style', ''); ed.addVisual(ed.getBody()); } ed.execCommand('mceRepaint'); ed.nodeChanged(); } } }); // Register plugin tinymce.PluginManager.add('layer', tinymce.plugins.Layer); })();contextmenu/editor_plugin.js000066600000004746150472616010012340 0ustar00(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(e){var h=this,f,d,i;h.editor=e;d=e.settings.contextmenu_never_use_native;h.onContextMenu=new tinymce.util.Dispatcher(this);f=e.onContextMenu.add(function(j,k){if((i!==0?i:k.ctrlKey)&&!d){return}a.cancel(k);if(k.target.nodeName=="IMG"){j.selection.select(k.target)}h._getMenu(j).showMenu(k.clientX||k.pageX,k.clientY||k.pageY);a.add(j.getDoc(),"click",function(l){g(j,l)});j.nodeChanged()});e.onRemove.add(function(){if(h._menu){h._menu.removeAll()}});function g(j,k){i=0;if(k&&k.button==2){i=k.ctrlKey;return}if(h._menu){h._menu.removeAll();h._menu.destroy();a.remove(j.getDoc(),"click",g);h._menu=null}}e.onMouseDown.add(g);e.onKeyDown.add(g);e.onKeyDown.add(function(j,k){if(k.shiftKey&&!k.ctrlKey&&!k.altKey&&k.keyCode===121){a.cancel(k);f(j,k)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();contextmenu/editor_plugin_src.js000066600000011637150472616010013204 0ustar00/** * 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 Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM; /** * This plugin a context menu to TinyMCE editor instances. * * @class tinymce.plugins.ContextMenu */ tinymce.create('tinymce.plugins.ContextMenu', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @method init * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed) { var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey; t.editor = ed; contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native; /** * This event gets fired when the context menu is shown. * * @event onContextMenu * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event. * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed. */ t.onContextMenu = new tinymce.util.Dispatcher(this); showMenu = ed.onContextMenu.add(function(ed, e) { // Block TinyMCE menu on ctrlKey and work around Safari issue if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative) return; Event.cancel(e); // Select the image if it's clicked. WebKit would other wise expand the selection if (e.target.nodeName == 'IMG') ed.selection.select(e.target); t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY); Event.add(ed.getDoc(), 'click', function(e) { hide(ed, e); }); ed.nodeChanged(); }); ed.onRemove.add(function() { if (t._menu) t._menu.removeAll(); }); function hide(ed, e) { realCtrlKey = 0; // Since the contextmenu event moves // the selection we need to store it away if (e && e.button == 2) { realCtrlKey = e.ctrlKey; return; } if (t._menu) { t._menu.removeAll(); t._menu.destroy(); Event.remove(ed.getDoc(), 'click', hide); t._menu = null; } }; ed.onMouseDown.add(hide); ed.onKeyDown.add(hide); ed.onKeyDown.add(function(ed, e) { if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) { Event.cancel(e); showMenu(ed, e); } }); }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @method getInfo * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Contextmenu', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, _getMenu : function(ed) { var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p; if (m) { m.removeAll(); m.destroy(); } p = DOM.getPos(ed.getContentAreaContainer()); m = ed.controlManager.createDropMenu('contextmenu', { offset_x : p.x + ed.getParam('contextmenu_offset_x', 0), offset_y : p.y + ed.getParam('contextmenu_offset_y', 0), constrain : 1, keyboard_focus: true }); t._menu = m; m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col); m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col); m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'}); if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) { m.addSeparator(); m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); } m.addSeparator(); m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); m.addSeparator(); am = m.addMenu({title : 'contextmenu.align'}); am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'}); am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'}); am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'}); am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'}); t.onContextMenu.dispatch(t, m, el, col); return m; } }); // Register plugin tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu); })(); advlist/editor_plugin.js000066600000004424150472616010011426 0ustar00(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();advlist/editor_plugin_src.js000066600000010707150472616010012276 0ustar00/** * 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 each = tinymce.each; tinymce.create('tinymce.plugins.AdvListPlugin', { init : function(ed, url) { var t = this; t.editor = ed; function buildFormats(str) { var formats = []; each(str.split(/,/), function(type) { formats.push({ title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')), styles : { listStyleType : type == 'default' ? '' : type } }); }); return formats; }; // Setup number formats from config or default t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman"); t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square"); if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent)) t.isIE7 = true; }, createControl: function(name, cm) { var t = this, btn, format, editor = t.editor; if (name == 'numlist' || name == 'bullist') { // Default to first item if it's a default item if (t[name][0].title == 'advlist.def') format = t[name][0]; function hasFormat(node, format) { var state = true; each(format.styles, function(value, name) { // Format doesn't match if (editor.dom.getStyle(node, name) != value) { state = false; return false; } }); return state; }; function applyListFormat() { var list, dom = editor.dom, sel = editor.selection; // Check for existing list element list = dom.getParent(sel.getNode(), 'ol,ul'); // Switch/add list type if needed if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format)) editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList'); // Append styles to new list element if (format) { list = dom.getParent(sel.getNode(), 'ol,ul'); if (list) { dom.setStyles(list, format.styles); list.removeAttribute('data-mce-style'); } } editor.focus(); }; btn = cm.createSplitButton(name, { title : 'advanced.' + name + '_desc', 'class' : 'mce_' + name, onclick : function() { applyListFormat(); } }); btn.onRenderMenu.add(function(btn, menu) { menu.onHideMenu.add(function() { if (t.bookmark) { editor.selection.moveToBookmark(t.bookmark); t.bookmark = 0; } }); menu.onShowMenu.add(function() { var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList; if (list || format) { fmtList = t[name]; // Unselect existing items each(menu.items, function(item) { var state = true; item.setSelected(0); if (list && !item.isDisabled()) { each(fmtList, function(fmt) { if (fmt.id == item.id) { if (!hasFormat(list, fmt)) { state = false; return false; } } }); if (state) item.setSelected(1); } }); // Select the current format if (!list) menu.items[format.id].setSelected(1); } editor.focus(); // IE looses it's selection so store it away and restore it later if (tinymce.isIE) { t.bookmark = editor.selection.getBookmark(1); } }); menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1); each(t[name], function(item) { // IE<8 doesn't support lower-greek, skip it if (t.isIE7 && item.styles.listStyleType == 'lower-greek') return; item.id = editor.dom.uniqueId(); menu.add({id : item.id, title : item.title, onclick : function() { format = item; applyListFormat(); }}); }); }); return btn; } }, getInfo : function() { return { longname : 'Advanced lists', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin); })();pagebreak/css/content.css000066600000000251150472616010011445 0ustar00.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;} pagebreak/editor_plugin.js000066600000002572150472616010011703 0ustar00(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();pagebreak/editor_plugin_src.js000066600000004050150472616010012543 0ustar00/** * 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() { tinymce.create('tinymce.plugins.PageBreakPlugin', { init : function(ed, url) { var pb = '', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', ''), pbRE; pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g'); // Register commands ed.addCommand('mcePageBreak', function() { ed.execCommand('mceInsertContent', 0, pb); }); // Register buttons ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls}); ed.onInit.add(function() { if (ed.theme.onResolveName) { ed.theme.onResolveName.add(function(th, o) { if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls)) o.name = 'pagebreak'; }); } }); ed.onClick.add(function(ed, e) { e = e.target; if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls)) ed.selection.select(e); }); ed.onNodeChange.add(function(ed, cm, n) { cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls)); }); ed.onBeforeSetContent.add(function(ed, o) { o.content = o.content.replace(pbRE, pb); }); ed.onPostProcess.add(function(ed, o) { if (o.get) o.content = o.content.replace(/]+>/g, function(im) { if (im.indexOf('class="mcePageBreak') !== -1) im = sep; return im; }); }); }, getInfo : function() { return { longname : 'PageBreak', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin); })();pagebreak/img/trans.gif000066600000000053150472616010011063 0ustar00GIF89a!,D;pagebreak/img/pagebreak.gif000066600000000505150472616010011657 0ustar00GIF89ad t]Othh[QB!,d I8ͻ`(d Y8#9.aBp8Uck<AtBU5qC n`U8k u-z 0Ck S@BNNVf7NK_NhJ k =?h  {}ʇ:dYx&sH\ bRN OO 5@`@siL‡#J;fullpage/css/fullpage.css000066600000003776150472616010011467 0ustar00/* Hide the advanced tab */ #advanced_tab { display: none; } #metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright { width: 280px; } #doctype, #docencoding { width: 200px; } #langcode { width: 30px; } #bgimage { width: 220px; } #fontface { width: 240px; } #leftmargin, #rightmargin, #topmargin, #bottommargin { width: 50px; } .panel_wrapper div.current { height: 400px; } #stylesheet, #style { width: 240px; } #doctypes { width: 200px; } /* Head list classes */ .headlistwrapper { width: 100%; } .selected { border: 1px solid #0A246A; background-color: #B6BDD2; } .toolbar { width: 100%; } #headlist { width: 100%; margin-top: 3px; font-size: 11px; } #info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element { display: none; } #addmenu { position: absolute; border: 1px solid gray; display: none; z-index: 100; background-color: white; } #addmenu a { display: block; width: 100%; line-height: 20px; text-decoration: none; background-color: white; } #addmenu a:hover { background-color: #B6BDD2; color: black; } #addmenu span { padding-left: 10px; padding-right: 10px; } #updateElementPanel { display: none; } #script_element .panel_wrapper div.current { height: 108px; } #style_element .panel_wrapper div.current { height: 108px; } #link_element .panel_wrapper div.current { height: 140px; } #element_script_value { width: 100%; height: 100px; } #element_comment_value { width: 100%; height: 120px; } #element_style_value { width: 100%; height: 100px; } #element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title { width: 250px; } .updateElementButton { margin-top: 3px; } /* MSIE specific styles */ * html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton { width: 22px; height: 22px; } textarea { height: 55px; } .panel_wrapper div.current {height:420px;}fullpage/editor_plugin.js000066600000014262150472616010011560 0ustar00(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype=""}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();fullpage/js/fullpage.js000066600000017374150472616010011136 0ustar00/** * fullpage.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinyMCEPopup.requireLangPack(); var defaultDocTypes = 'XHTML 1.0 Transitional=,' + 'XHTML 1.0 Frameset=,' + 'XHTML 1.0 Strict=,' + 'XHTML 1.1=,' + 'HTML 4.01 Transitional=,' + 'HTML 4.01 Strict=,' + 'HTML 4.01 Frameset='; var defaultEncodings = 'Western european (iso-8859-1)=iso-8859-1,' + 'Central European (iso-8859-2)=iso-8859-2,' + 'Unicode (UTF-8)=utf-8,' + 'Chinese traditional (Big5)=big5,' + 'Cyrillic (iso-8859-5)=iso-8859-5,' + 'Japanese (iso-2022-jp)=iso-2022-jp,' + 'Greek (iso-8859-7)=iso-8859-7,' + 'Korean (iso-2022-kr)=iso-2022-kr,' + 'ASCII (us-ascii)=us-ascii'; var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px'; function setVal(id, value) { var elm = document.getElementById(id); if (elm) { value = value || ''; if (elm.nodeName == "SELECT") selectByValue(document.forms[0], id, value); else if (elm.type == "checkbox") elm.checked = !!value; else elm.value = value; } }; function getVal(id) { var elm = document.getElementById(id); if (elm.nodeName == "SELECT") return elm.options[elm.selectedIndex].value; if (elm.type == "checkbox") return elm.checked; return elm.value; }; window.FullPageDialog = { changedStyle : function() { var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style')); setVal('fontface', styles['font-face']); setVal('fontsize', styles['font-size']); setVal('textcolor', styles['color']); if (val = styles['background-image']) setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1")); else setVal('bgimage', ''); setVal('bgcolor', styles['background-color']); // Reset margin form elements setVal('topmargin', ''); setVal('rightmargin', ''); setVal('bottommargin', ''); setVal('leftmargin', ''); // Expand margin if (val = styles['margin']) { val = val.split(' '); styles['margin-top'] = val[0] || ''; styles['margin-right'] = val[1] || val[0] || ''; styles['margin-bottom'] = val[2] || val[0] || ''; styles['margin-left'] = val[3] || val[0] || ''; } if (val = styles['margin-top']) setVal('topmargin', val.replace(/px/, '')); if (val = styles['margin-right']) setVal('rightmargin', val.replace(/px/, '')); if (val = styles['margin-bottom']) setVal('bottommargin', val.replace(/px/, '')); if (val = styles['margin-left']) setVal('leftmargin', val.replace(/px/, '')); updateColor('bgcolor_pick', 'bgcolor'); updateColor('textcolor_pick', 'textcolor'); }, changedStyleProp : function() { var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style')); styles['font-face'] = getVal('fontface'); styles['font-size'] = getVal('fontsize'); styles['color'] = getVal('textcolor'); styles['background-color'] = getVal('bgcolor'); if (val = getVal('bgimage')) styles['background-image'] = "url('" + val + "')"; else styles['background-image'] = ''; delete styles['margin']; if (val = getVal('topmargin')) styles['margin-top'] = val + "px"; else styles['margin-top'] = ''; if (val = getVal('rightmargin')) styles['margin-right'] = val + "px"; else styles['margin-right'] = ''; if (val = getVal('bottommargin')) styles['margin-bottom'] = val + "px"; else styles['margin-bottom'] = ''; if (val = getVal('leftmargin')) styles['margin-left'] = val + "px"; else styles['margin-left'] = ''; // Serialize, parse and reserialize this will compress redundant styles setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles)))); this.changedStyle(); }, update : function() { var data = {}; tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) { data[node.id] = getVal(node.id); }); tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data); tinyMCEPopup.close(); } }; function init() { var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor; // Setup doctype select box list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(','); for (i = 0; i < list.length; i++) { item = list[i].split('='); if (item.length > 1) addSelectValue(form, 'doctype', item[0], item[1]); } // Setup fonts select box list = editor.getParam("fullpage_fonts", defaultFontNames).split(';'); for (i = 0; i < list.length; i++) { item = list[i].split('='); if (item.length > 1) addSelectValue(form, 'fontface', item[0], item[1]); } // Setup fontsize select box list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(','); for (i = 0; i < list.length; i++) addSelectValue(form, 'fontsize', list[i], list[i]); // Setup encodings select box list = editor.getParam("fullpage_encodings", defaultEncodings).split(','); for (i = 0; i < list.length; i++) { item = list[i].split('='); if (item.length > 1) addSelectValue(form, 'docencoding', item[0], item[1]); } // Setup color pickers document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color'); document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color'); document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color'); document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor'); document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage'); document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage'); // Resize some elements if (isVisible('stylesheetbrowser')) document.getElementById('stylesheet').style.width = '220px'; if (isVisible('link_href_browser')) document.getElementById('element_link_href').style.width = '230px'; if (isVisible('bgimage_browser')) document.getElementById('bgimage').style.width = '210px'; // Update form tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) { setVal(key, value); }); FullPageDialog.changedStyle(); // Update colors updateColor('textcolor_pick', 'textcolor'); updateColor('bgcolor_pick', 'bgcolor'); updateColor('visited_color_pick', 'visited_color'); updateColor('active_color_pick', 'active_color'); updateColor('link_color_pick', 'link_color'); }; tinyMCEPopup.onInit.add(init); })(); fullpage/fullpage.htm000066600000024377150472616010010677 0ustar00 {#fullpage_dlg.title}

{#fullpage_dlg.meta_props}
 
 
 
 
 
 
{#fullpage_dlg.langprops}
 
 
 
{#fullpage_dlg.appearance_textprops}
 
{#fullpage_dlg.appearance_bgprops}
 
 
{#fullpage_dlg.appearance_marginprops}
{#fullpage_dlg.appearance_linkprops}
 
 
   
{#fullpage_dlg.appearance_style}
 
fullpage/langs/ru_dlg.js000066600000012163150472616010011272 0ustar00tinyMCE.addI18n('ru.fullpage_dlg',{ title:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430", meta_tab:"\u041E\u0431\u0449\u0435\u0435", appearance_tab:"\u0412\u0438\u0434", advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E", meta_props:"\u0426\u0435\u043B\u044C \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438", langprops:"\u042F\u0437\u044B\u043A \u0438 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F", meta_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", meta_keywords:"\u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0441\u043B\u043E\u0432\u0430", meta_description:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", meta_robots:"\u0420\u0430\u0431\u043E\u0442\u044B", doctypes:"Doctype", langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430", langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u044F\u0437\u044B\u043A\u0430", ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", xml_pi:"XML declaration", encoding:"\u041A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430", appearance_bgprops:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0444\u043E\u043D\u0430", appearance_marginprops:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B", appearance_linkprops:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043E\u043A", appearance_textprops:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043A\u0441\u0442\u0430", bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430", bgimage:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", left_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043B\u0435\u0432\u0430", right_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043F\u0440\u0430\u0432\u0430", top_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u0432\u0435\u0440\u0445\u0443", bottom_margin:"\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043D\u0438\u0437\u0443", text_color:"\u0426\u0432\u0435\u0442 \u0442\u0435\u043A\u0441\u0442\u0430", font_size:"\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", font_face:"\u0428\u0440\u0438\u0444\u0442", link_color:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438", hover_color:"\u0426\u0432\u0435\u0442 \u0441\u0441\u044B\u043B\u043A\u0438 \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438", visited_color:"\u0426\u0432\u0435\u0442 \u043D\u0430\u0436\u0430\u0442\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438", active_color:"\u0426\u0432\u0435\u0442 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438", textcolor:"\u0426\u0432\u0435\u0442", fontsize:"\u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", fontface:"\u0421\u0435\u043C\u0435\u0439\u0441\u0442\u0432\u043E \u0448\u0440\u0438\u0444\u0442\u0430", meta_index_follow:"Index and follow the links", meta_index_nofollow:"Index and don't follow the links", meta_noindex_follow:"Do not index but follow the links", meta_noindex_nofollow:"Do not index and don \ 't follow the links", appearance_style:"Stylesheet and style properties", stylesheet:"Stylesheet", style:"\u0421\u0442\u0438\u043B\u044C", author:"\u0410\u0432\u0442\u043E\u0440", copyright:"\u041A\u043E\u043F\u0438\u0440\u0430\u0439\u0442", add:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442", remove:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442", moveup:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u0432\u0435\u0440\u0445", movedown:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0432\u043D\u0438\u0437", head_elements:"Head elements", info:"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F", add_title:"Title element", add_meta:"Meta element", add_script:"Script element", add_style:"Style element", add_link:"Link element", add_base:"Base element", add_comment:"Comment node", title_element:"Title element", script_element:"Script element", style_element:"Style element", base_element:"Base element", link_element:"Link element", meta_element:"Meta \u044D\u043B\u0435\u043C\u0435\u043D\u0442", comment_element:"\u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439", src:"Src", language:"\u042F\u0437\u044B\u043A", href:"Href", target:"Target", type:"Type", charset:"Charset", defer:"Defer", media:"Media", properties:"Properties", name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435", value:"\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435", content:"\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435", rel:"Rel", rev:"Rev", hreflang:"Href lang", general_props:"\u041E\u0431\u0449\u0435\u0435", advanced_props:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E" });fullpage/langs/en_dlg.js000066600000004371150472616010011250 0ustar00tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"});fullpage/editor_plugin_src.js000066600000025633150472616010012433 0ustar00/** * 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 each = tinymce.each, Node = tinymce.html.Node; tinymce.create('tinymce.plugins.FullPagePlugin', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceFullPageProperties', function() { ed.windowManager.open({ file : url + '/fullpage.htm', width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)), height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)), inline : 1 }, { plugin_url : url, data : t._htmlToData() }); }); // Register buttons ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'}); ed.onBeforeSetContent.add(t._setContent, t); ed.onGetContent.add(t._getContent, t); }, getInfo : function() { return { longname : 'Fullpage', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private plugin internal methods _htmlToData : function() { var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor; function getAttr(elm, name) { var value = elm.attr(name); return value || ''; }; // Default some values data.fontface = editor.getParam("fullpage_default_fontface", ""); data.fontsize = editor.getParam("fullpage_default_fontsize", ""); // Parse XML PI elm = headerFragment.firstChild; if (elm.type == 7) { data.xml_pi = true; matches = /encoding="([^"]+)"/.exec(elm.value); if (matches) data.docencoding = matches[1]; } // Parse doctype elm = headerFragment.getAll('#doctype')[0]; if (elm) data.doctype = '"; // Parse title element elm = headerFragment.getAll('title')[0]; if (elm && elm.firstChild) { data.metatitle = elm.firstChild.value; } // Parse meta elements each(headerFragment.getAll('meta'), function(meta) { var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches; if (name) data['meta' + name.toLowerCase()] = meta.attr('content'); else if (httpEquiv == "Content-Type") { matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content')); if (matches) data.docencoding = matches[1]; } }); // Parse html attribs elm = headerFragment.getAll('html')[0]; if (elm) data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang'); // Parse stylesheet elm = headerFragment.getAll('link')[0]; if (elm && elm.attr('rel') == 'stylesheet') data.stylesheet = elm.attr('href'); // Parse body parts elm = headerFragment.getAll('body')[0]; if (elm) { data.langdir = getAttr(elm, 'dir'); data.style = getAttr(elm, 'style'); data.visited_color = getAttr(elm, 'vlink'); data.link_color = getAttr(elm, 'link'); data.active_color = getAttr(elm, 'alink'); } return data; }, _dataToHtml : function(data) { var headerFragment, headElement, html, elm, value, dom = this.editor.dom; function setAttr(elm, name, value) { elm.attr(name, value ? value : undefined); }; function addHeadNode(node) { if (headElement.firstChild) headElement.insert(node, headElement.firstChild); else headElement.append(node); }; headerFragment = this._parseHeader(); headElement = headerFragment.getAll('head')[0]; if (!headElement) { elm = headerFragment.getAll('html')[0]; headElement = new Node('head', 1); if (elm.firstChild) elm.insert(headElement, elm.firstChild, true); else elm.append(headElement); } // Add/update/remove XML-PI elm = headerFragment.firstChild; if (data.xml_pi) { value = 'version="1.0"'; if (data.docencoding) value += ' encoding="' + data.docencoding + '"'; if (elm.type != 7) { elm = new Node('xml', 7); headerFragment.insert(elm, headerFragment.firstChild, true); } elm.value = value; } else if (elm && elm.type == 7) elm.remove(); // Add/update/remove doctype elm = headerFragment.getAll('#doctype')[0]; if (data.doctype) { if (!elm) { elm = new Node('#doctype', 10); if (data.xml_pi) headerFragment.insert(elm, headerFragment.firstChild); else addHeadNode(elm); } elm.value = data.doctype.substring(9, data.doctype.length - 1); } else if (elm) elm.remove(); // Add/update/remove title elm = headerFragment.getAll('title')[0]; if (data.metatitle) { if (!elm) { elm = new Node('title', 1); elm.append(new Node('#text', 3)).value = data.metatitle; addHeadNode(elm); } } // Add meta encoding if (data.docencoding) { elm = null; each(headerFragment.getAll('meta'), function(meta) { if (meta.attr('http-equiv') == 'Content-Type') elm = meta; }); if (!elm) { elm = new Node('meta', 1); elm.attr('http-equiv', 'Content-Type'); elm.shortEnded = true; addHeadNode(elm); } elm.attr('content', 'text/html; charset=' + data.docencoding); } // Add/update/remove meta each('keywords,description,author,copyright,robots'.split(','), function(name) { var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name]; for (i = 0; i < nodes.length; i++) { meta = nodes[i]; if (meta.attr('name') == name) { if (value) meta.attr('content', value); else meta.remove(); return; } } if (value) { elm = new Node('meta', 1); elm.attr('name', name); elm.attr('content', value); elm.shortEnded = true; addHeadNode(elm); } }); // Add/update/delete link elm = headerFragment.getAll('link')[0]; if (elm && elm.attr('rel') == 'stylesheet') { if (data.stylesheet) elm.attr('href', data.stylesheet); else elm.remove(); } else if (data.stylesheet) { elm = new Node('link', 1); elm.attr({ rel : 'stylesheet', text : 'text/css', href : data.stylesheet }); elm.shortEnded = true; addHeadNode(elm); } // Update body attributes elm = headerFragment.getAll('body')[0]; if (elm) { setAttr(elm, 'dir', data.langdir); setAttr(elm, 'style', data.style); setAttr(elm, 'vlink', data.visited_color); setAttr(elm, 'link', data.link_color); setAttr(elm, 'alink', data.active_color); // Update iframe body as well dom.setAttribs(this.editor.getBody(), { style : data.style, dir : data.dir, vLink : data.visited_color, link : data.link_color, aLink : data.active_color }); } // Set html attributes elm = headerFragment.getAll('html')[0]; if (elm) { setAttr(elm, 'lang', data.langcode); setAttr(elm, 'xml:lang', data.langcode); } // Serialize header fragment and crop away body part html = new tinymce.html.Serializer({ validate: false, indent: true, apply_source_formatting : true, indent_before: 'head,html,body,meta,title,script,link,style', indent_after: 'head,html,body,meta,title,script,link,style' }).serialize(headerFragment); this.head = html.substring(0, html.indexOf('')); }, _parseHeader : function() { // Parse the contents with a DOM parser return new tinymce.html.DomParser({ validate: false, root_name: '#document' }).parse(this.head); }, _setContent : function(ed, o) { var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm; function low(s) { return s.replace(/<\/?[A-Z]+/g, function(a) { return a.toLowerCase(); }) }; // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate if (o.format == 'raw' && self.head) return; if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) return; // Parse out head, body and footer content = content.replace(/<(\/?)BODY/gi, '<$1body'); startPos = content.indexOf('', startPos); self.head = low(content.substring(0, startPos + 1)); endPos = content.indexOf('\n'; header += editor.getParam('fullpage_default_doctype', ''); header += '\n\n\n'; if (value = editor.getParam('fullpage_default_title')) header += '' + value + '\n'; if (value = editor.getParam('fullpage_default_encoding')) header += '\n'; if (value = editor.getParam('fullpage_default_font_family')) styles += 'font-family: ' + value + ';'; if (value = editor.getParam('fullpage_default_font_size')) styles += 'font-size: ' + value + ';'; if (value = editor.getParam('fullpage_default_text_color')) styles += 'color: ' + value + ';'; header += '\n\n'; return header; }, _getContent : function(ed, o) { var self = this; if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot); } }); // Register plugin tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin); })(); xhtmlxtras/css/attributes.css000066600000000272150472616010012461 0ustar00.panel_wrapper div.current { height: 290px; } #id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey { width: 200px; } #events_panel input { width: 200px; } xhtmlxtras/css/popup.css000066600000000771150472616010011442 0ustar00input.field, select.field {width:200px;} input.picker {width:179px; margin-left: 5px;} input.disabled {border-color:#F2F2F2;} img.picker {vertical-align:text-bottom; cursor:pointer;} h1 {padding: 0 0 5px 0;} .panel_wrapper div.current {height:160px;} #xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;} a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;} #datetime {width:180px;} xhtmlxtras/editor_plugin.js000066600000005304150472616010012174 0ustar00(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();xhtmlxtras/ins.htm000066600000015741150472616010010303 0ustar00 {#xhtmlxtras_dlg.title_ins_element}
{#xhtmlxtras_dlg.fieldset_general_tab}
:
:
{#xhtmlxtras_dlg.fieldset_attrib_tab}
:
:
:
:
:
:
{#xhtmlxtras_dlg.fieldset_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
xhtmlxtras/js/ins.js000066600000002427150472616010010540 0ustar00/** * ins.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ function init() { SXE.initElementDialog('ins'); if (SXE.currentAction == "update") { setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime')); setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite')); SXE.showRemoveButton(); } } function setElementAttribs(elm) { setAllCommonAttribs(elm); setAttrib(elm, 'datetime'); setAttrib(elm, 'cite'); elm.removeAttribute('data-mce-new'); } function insertIns() { var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS'); if (elm == null) { var s = SXE.inst.selection.getContent(); if(s.length > 0) { insertInlineElement('ins'); var elementArray = SXE.inst.dom.select('ins[data-mce-new]'); for (var i=0; i 0) { insertInlineElement('del'); var elementArray = SXE.inst.dom.select('del[data-mce-new]'); for (var i=0; i 0) { tagName = element_name; insertInlineElement(element_name); var elementArray = tinymce.grep(SXE.inst.dom.select(element_name)); for (var i=0; i -1) ? true : false; } SXE.removeClass = function(elm,cl) { if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) { return true; } var classNames = elm.className.split(" "); var newClassNames = ""; for (var x = 0, cnl = classNames.length; x < cnl; x++) { if (classNames[x] != cl) { newClassNames += (classNames[x] + " "); } } elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end } SXE.addClass = function(elm,cl) { if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl; return true; } function insertInlineElement(en) { var ed = tinyMCEPopup.editor, dom = ed.dom; ed.getDoc().execCommand('FontName', false, 'mceinline'); tinymce.each(dom.select('span,font'), function(n) { if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1); }); } xhtmlxtras/js/abbr.js000066600000001001150472616010010640 0ustar00/** * abbr.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ function init() { SXE.initElementDialog('abbr'); if (SXE.currentAction == "update") { SXE.showRemoveButton(); } } function insertAbbr() { SXE.insertElement('abbr'); tinyMCEPopup.close(); } function removeAbbr() { SXE.removeElement('abbr'); tinyMCEPopup.close(); } tinyMCEPopup.onInit.add(init); xhtmlxtras/js/cite.js000066600000001001150472616010010656 0ustar00/** * cite.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ function init() { SXE.initElementDialog('cite'); if (SXE.currentAction == "update") { SXE.showRemoveButton(); } } function insertCite() { SXE.insertElement('cite'); tinyMCEPopup.close(); } function removeCite() { SXE.removeElement('cite'); tinyMCEPopup.close(); } tinyMCEPopup.onInit.add(init); xhtmlxtras/js/attributes.js000066600000006440150472616010012134 0ustar00/** * attributes.js * * Copyright 2009, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ function init() { tinyMCEPopup.resizeToInnerSize(); var inst = tinyMCEPopup.editor; var dom = inst.dom; var elm = inst.selection.getNode(); var f = document.forms[0]; var onclick = dom.getAttrib(elm, 'onclick'); setFormValue('title', dom.getAttrib(elm, 'title')); setFormValue('id', dom.getAttrib(elm, 'id')); setFormValue('style', dom.getAttrib(elm, "style")); setFormValue('dir', dom.getAttrib(elm, 'dir')); setFormValue('lang', dom.getAttrib(elm, 'lang')); setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); setFormValue('onfocus', dom.getAttrib(elm, 'onfocus')); setFormValue('onblur', dom.getAttrib(elm, 'onblur')); setFormValue('onclick', onclick); setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick')); setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown')); setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup')); setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover')); setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove')); setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout')); setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress')); setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown')); setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup')); className = dom.getAttrib(elm, 'class'); addClassesToList('classlist', 'advlink_styles'); selectByValue(f, 'classlist', className, true); TinyMCE_EditableSelects.init(); } function setFormValue(name, value) { if(value && document.forms[0].elements[name]){ document.forms[0].elements[name].value = value; } } function insertAction() { var inst = tinyMCEPopup.editor; var elm = inst.selection.getNode(); setAllAttribs(elm); tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); } function setAttrib(elm, attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib.toLowerCase()]; var inst = tinyMCEPopup.editor; var dom = inst.dom; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } dom.setAttrib(elm, attrib.toLowerCase(), value); } function setAllAttribs(elm) { var f = document.forms[0]; setAttrib(elm, 'title'); setAttrib(elm, 'id'); setAttrib(elm, 'style'); setAttrib(elm, 'class', getSelectValue(f, 'classlist')); setAttrib(elm, 'dir'); setAttrib(elm, 'lang'); setAttrib(elm, 'tabindex'); setAttrib(elm, 'accesskey'); setAttrib(elm, 'onfocus'); setAttrib(elm, 'onblur'); setAttrib(elm, 'onclick'); setAttrib(elm, 'ondblclick'); setAttrib(elm, 'onmousedown'); setAttrib(elm, 'onmouseup'); setAttrib(elm, 'onmouseover'); setAttrib(elm, 'onmousemove'); setAttrib(elm, 'onmouseout'); setAttrib(elm, 'onkeypress'); setAttrib(elm, 'onkeydown'); setAttrib(elm, 'onkeyup'); // Refresh in old MSIE // if (tinyMCE.isMSIE5) // elm.outerHTML = elm.outerHTML; } function insertAttribute() { tinyMCEPopup.close(); } tinyMCEPopup.onInit.add(init); tinyMCEPopup.requireLangPack(); xhtmlxtras/abbr.htm000066600000013725150472616010010420 0ustar00 {#xhtmlxtras_dlg.title_abbr_element}
{#xhtmlxtras_dlg.fieldset_attrib_tab}
:
:
:
:
:
:
{#xhtmlxtras_dlg.fieldset_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
xhtmlxtras/langs/ru_dlg.js000066600000004104150472616010011705 0ustar00tinyMCE.addI18n('ru.xhtmlxtras_dlg',{ attribute_label_title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", attribute_label_id:"ID", attribute_label_class:"\u041A\u043B\u0430\u0441\u0441", attribute_label_style:"\u0421\u0442\u0438\u043B\u044C", attribute_label_cite:"\u0426\u0438\u0442\u0430\u0442\u0430", attribute_label_datetime:"\u0414\u0430\u0442\u0430 / \u0412\u0440\u0435\u043C\u044F", attribute_label_langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430", attribute_option_ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", attribute_option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", attribute_label_langcode:"\u042F\u0437\u044B\u043A", attribute_label_tabindex:"TabIndex", attribute_label_accesskey:"AccessKey", attribute_events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F", attribute_attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B", general_tab:"\u041E\u0431\u0449\u0435\u0435", attrib_tab:"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B", events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F", fieldset_general_tab:"\u041E\u0431\u0449\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", fieldset_attrib_tab:"Element Attributes", fieldset_events_tab:"Element Events", title_ins_element:"Insertion Element", title_del_element:"Deletion Element", title_acronym_element:"Acronym Element", title_abbr_element:"Abbreviation Element", title_cite_element:"Citation Element", remove:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C", insert_date:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0434\u0430\u0442\u0443 / \u0432\u0440\u0435\u043C\u044F", option_ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", option_rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", attribs_title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C / \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B" });xhtmlxtras/langs/en_dlg.js000066600000002104150472616010011657 0ustar00tinyMCE.addI18n('en.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"});xhtmlxtras/editor_plugin_src.js000066600000007577150472616010013061 0ustar00/** * 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() { tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceCite', function() { ed.windowManager.open({ file : url + '/cite.htm', width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)), height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceAcronym', function() { ed.windowManager.open({ file : url + '/acronym.htm', width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)), height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceAbbr', function() { ed.windowManager.open({ file : url + '/abbr.htm', width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)), height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceDel', function() { ed.windowManager.open({ file : url + '/del.htm', width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)), height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceIns', function() { ed.windowManager.open({ file : url + '/ins.htm', width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)), height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceAttributes', function() { ed.windowManager.open({ file : url + '/attributes.htm', width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)), height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'}); ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'}); ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'}); ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'}); ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'}); ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'}); ed.onNodeChange.add(function(ed, cm, n, co) { n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS'); cm.setDisabled('cite', co); cm.setDisabled('acronym', co); cm.setDisabled('abbr', co); cm.setDisabled('del', co); cm.setDisabled('ins', co); cm.setDisabled('attribs', n && n.nodeName == 'BODY'); cm.setActive('cite', 0); cm.setActive('acronym', 0); cm.setActive('abbr', 0); cm.setActive('del', 0); cm.setActive('ins', 0); // Activate all if (n) { do { cm.setDisabled(n.nodeName.toLowerCase(), 0); cm.setActive(n.nodeName.toLowerCase(), 1); } while (n = n.parentNode); } }); ed.onPreInit.add(function() { // Fixed IE issue where it can't handle these elements correctly ed.dom.create('abbr'); }); }, getInfo : function() { return { longname : 'XHTML Xtras Plugin', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin); })();xhtmlxtras/del.htm000066600000015734150472616010010260 0ustar00 {#xhtmlxtras_dlg.title_del_element}
{#xhtmlxtras_dlg.fieldset_general_tab}
:
:
{#xhtmlxtras_dlg.fieldset_attrib_tab}
:
:
:
:
:
:
{#xhtmlxtras_dlg.fieldset_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
xhtmlxtras/cite.htm000066600000013725150472616010010436 0ustar00 {#xhtmlxtras_dlg.title_cite_element}
{#xhtmlxtras_dlg.fieldset_attrib_tab}
:
:
:
:
:
:
{#xhtmlxtras_dlg.fieldset_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
xhtmlxtras/attributes.htm000066600000013703150472616010011674 0ustar00 {#xhtmlxtras_dlg.attribs_title}
{#xhtmlxtras_dlg.attribute_attrib_tab}
:
:
:
:
:
{#xhtmlxtras_dlg.attribute_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
xhtmlxtras/acronym.htm000066600000013744150472616010011163 0ustar00 {#xhtmlxtras_dlg.title_acronym_element}
{#xhtmlxtras_dlg.fieldset_attrib_tab}
:
:
:
:
:
:
{#xhtmlxtras_dlg.fieldset_events_tab}
:
:
:
:
:
:
:
:
:
:
:
:
fullscreen/fullscreen.htm000066600000006276150472616010011603 0ustar00
fullscreen/editor_plugin.js000066600000007014150472616010012120 0ustar00(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();fullscreen/editor_plugin_src.js000066600000012527150472616010012774 0ustar00/** * 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.DOM; tinymce.create('tinymce.plugins.FullScreenPlugin', { init : function(ed, url) { var t = this, s = {}, vp, posCss; t.editor = ed; // Register commands ed.addCommand('mceFullScreen', function() { var win, de = DOM.doc.documentElement; if (ed.getParam('fullscreen_is_enabled')) { if (ed.getParam('fullscreen_new_window')) closeFullscreen(); // Call to close in new window else { DOM.win.setTimeout(function() { tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent()); tinyMCE.remove(ed); DOM.remove('mce_fullscreen_container'); de.style.overflow = ed.getParam('fullscreen_html_overflow'); DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings }, 10); } return; } if (ed.getParam('fullscreen_new_window')) { win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); try { win.resizeTo(screen.availWidth, screen.availHeight); } catch (e) { // Ignore } } else { tinyMCE.oldSettings = tinyMCE.settings; // Store old settings s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); vp = DOM.getViewPort(); s.fullscreen_scrollx = vp.x; s.fullscreen_scrolly = vp.y; // Fixes an Opera bug where the scrollbars doesn't reappear if (tinymce.isOpera && s.fullscreen_overflow == 'visible') s.fullscreen_overflow = 'auto'; // Fixes an IE bug where horizontal scrollbars would appear if (tinymce.isIE && s.fullscreen_overflow == 'scroll') s.fullscreen_overflow = 'auto'; // Fixes an IE bug where the scrollbars doesn't reappear if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) s.fullscreen_html_overflow = 'auto'; if (s.fullscreen_overflow == '0px') s.fullscreen_overflow = ''; DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); de.style.overflow = 'hidden'; //Fix for IE6/7 vp = DOM.getViewPort(); DOM.win.scrollTo(0, 0); if (tinymce.isIE) vp.h -= 1; // Use fixed position if it exists if (tinymce.isIE6 || document.compatMode == 'BackCompat') posCss = 'absolute;top:' + vp.y; else posCss = 'fixed;top:0'; n = DOM.add(DOM.doc.body, 'div', { id : 'mce_fullscreen_container', style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'}); DOM.add(n, 'div', {id : 'mce_fullscreen'}); tinymce.each(ed.settings, function(v, n) { s[n] = v; }); s.id = 'mce_fullscreen'; s.width = n.clientWidth; s.height = n.clientHeight - 15; s.fullscreen_is_enabled = true; s.fullscreen_editor_id = ed.id; s.theme_advanced_resizing = false; s.save_onsavecallback = function() { ed.setContent(tinyMCE.get(s.id).getContent()); ed.execCommand('mceSave'); }; tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) { s[k] = v; }); if (s.theme_advanced_toolbar_location === 'external') s.theme_advanced_toolbar_location = 'top'; t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); t.fullscreenEditor.onInit.add(function() { t.fullscreenEditor.setContent(ed.getContent()); t.fullscreenEditor.focus(); }); t.fullscreenEditor.render(); t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container'); t.fullscreenElement.update(); //document.body.overflow = 'hidden'; t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() { var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize; // Get outer/inner size to get a delta size that can be used to calc the new iframe size outerSize = fed.dom.getSize(fed.getContainer().firstChild); innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]); fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h); }); } }); // Register buttons ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'}); ed.onNodeChange.add(function(ed, cm) { cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); }); }, getInfo : function() { return { longname : 'Fullscreen', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin); })();advlink/css/advlink.css000066600000000730150472616010011134 0ustar00.mceLinkList, .mceAnchorList, #targetlist {width:280px;} .mceActionPanel {margin-top:7px;} .panel_wrapper div.current {height:320px;} #classlist, #title, #href {width:280px;} #popupurl, #popupname {width:200px;} #popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;} #id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;} #events_panel input {width:200px;} advlink/editor_plugin.js000066600000001715150472616010011410 0ustar00(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();advlink/js/advlink.js000066600000040362150472616010010611 0ustar00/* Functions for the advlink plugin popup */ tinyMCEPopup.requireLangPack(); var templates = { "window.open" : "window.open('${url}','${target}','${options}')" }; function preinit() { var url; if (url = tinyMCEPopup.getParam("external_link_list_url")) document.write(''); } function changeClass() { var f = document.forms[0]; f.classes.value = getSelectValue(f, 'classlist'); } function init() { tinyMCEPopup.resizeToInnerSize(); var formObj = document.forms[0]; var inst = tinyMCEPopup.editor; var elm = inst.selection.getNode(); var action = "insert"; var html; document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink'); document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink'); document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target'); // Link list html = getLinkListHTML('linklisthref','href'); if (html == "") document.getElementById("linklisthrefrow").style.display = 'none'; else document.getElementById("linklisthrefcontainer").innerHTML = html; // Anchor list html = getAnchorListHTML('anchorlist','href'); if (html == "") document.getElementById("anchorlistrow").style.display = 'none'; else document.getElementById("anchorlistcontainer").innerHTML = html; // Resize some elements if (isVisible('hrefbrowser')) document.getElementById('href').style.width = '260px'; if (isVisible('popupurlbrowser')) document.getElementById('popupurl').style.width = '180px'; elm = inst.dom.getParent(elm, "A"); if (elm == null) { var prospect = inst.dom.create("p", null, inst.selection.getContent()); if (prospect.childNodes.length === 1) { elm = prospect.firstChild; } } if (elm != null && elm.nodeName == "A") action = "update"; formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); setPopupControlsDisabled(true); if (action == "update") { var href = inst.dom.getAttrib(elm, 'href'); var onclick = inst.dom.getAttrib(elm, 'onclick'); // Setup form data setFormValue('href', href); setFormValue('title', inst.dom.getAttrib(elm, 'title')); setFormValue('id', inst.dom.getAttrib(elm, 'id')); setFormValue('style', inst.dom.getAttrib(elm, "style")); setFormValue('rel', inst.dom.getAttrib(elm, 'rel')); setFormValue('rev', inst.dom.getAttrib(elm, 'rev')); setFormValue('charset', inst.dom.getAttrib(elm, 'charset')); setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang')); setFormValue('dir', inst.dom.getAttrib(elm, 'dir')); setFormValue('lang', inst.dom.getAttrib(elm, 'lang')); setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : "")); setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : "")); setFormValue('type', inst.dom.getAttrib(elm, 'type')); setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus')); setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur')); setFormValue('onclick', onclick); setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick')); setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown')); setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup')); setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover')); setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove')); setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout')); setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress')); setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown')); setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup')); setFormValue('target', inst.dom.getAttrib(elm, 'target')); setFormValue('classes', inst.dom.getAttrib(elm, 'class')); // Parse onclick data if (onclick != null && onclick.indexOf('window.open') != -1) parseWindowOpen(onclick); else parseFunction(onclick); // Select by the values selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir')); selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel')); selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev')); selectByValue(formObj, 'linklisthref', href); if (href.charAt(0) == '#') selectByValue(formObj, 'anchorlist', href); addClassesToList('classlist', 'advlink_styles'); selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true); selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true); } else addClassesToList('classlist', 'advlink_styles'); } function checkPrefix(n) { if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) n.value = 'mailto:' + n.value; if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) n.value = 'http://' + n.value; } function setFormValue(name, value) { document.forms[0].elements[name].value = value; } function parseWindowOpen(onclick) { var formObj = document.forms[0]; // Preprocess center code if (onclick.indexOf('return false;') != -1) { formObj.popupreturn.checked = true; onclick = onclick.replace('return false;', ''); } else formObj.popupreturn.checked = false; var onClickData = parseLink(onclick); if (onClickData != null) { formObj.ispopup.checked = true; setPopupControlsDisabled(false); var onClickWindowOptions = parseOptions(onClickData['options']); var url = onClickData['url']; formObj.popupname.value = onClickData['target']; formObj.popupurl.value = url; formObj.popupwidth.value = getOption(onClickWindowOptions, 'width'); formObj.popupheight.value = getOption(onClickWindowOptions, 'height'); formObj.popupleft.value = getOption(onClickWindowOptions, 'left'); formObj.popuptop.value = getOption(onClickWindowOptions, 'top'); if (formObj.popupleft.value.indexOf('screen') != -1) formObj.popupleft.value = "c"; if (formObj.popuptop.value.indexOf('screen') != -1) formObj.popuptop.value = "c"; formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes"; formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes"; formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes"; formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes"; formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes"; formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes"; formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes"; buildOnClick(); } } function parseFunction(onclick) { var formObj = document.forms[0]; var onClickData = parseLink(onclick); // TODO: Add stuff here } function getOption(opts, name) { return typeof(opts[name]) == "undefined" ? "" : opts[name]; } function setPopupControlsDisabled(state) { var formObj = document.forms[0]; formObj.popupname.disabled = state; formObj.popupurl.disabled = state; formObj.popupwidth.disabled = state; formObj.popupheight.disabled = state; formObj.popupleft.disabled = state; formObj.popuptop.disabled = state; formObj.popuplocation.disabled = state; formObj.popupscrollbars.disabled = state; formObj.popupmenubar.disabled = state; formObj.popupresizable.disabled = state; formObj.popuptoolbar.disabled = state; formObj.popupstatus.disabled = state; formObj.popupreturn.disabled = state; formObj.popupdependent.disabled = state; setBrowserDisabled('popupurlbrowser', state); } function parseLink(link) { link = link.replace(new RegExp(''', 'g'), "'"); var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1"); // Is function name a template function var template = templates[fnName]; if (template) { // Build regexp var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi")); var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\("; var replaceStr = ""; for (var i=0; i'); for (var i=0; i' + name + ''; } if (html == "") return ""; html = ''; return html; } function insertAction() { var inst = tinyMCEPopup.editor; var elm, elementArray, i; elm = inst.selection.getNode(); checkPrefix(document.forms[0].href); elm = inst.dom.getParent(elm, "A"); // Remove element if there is no href if (!document.forms[0].href.value) { i = inst.selection.getBookmark(); inst.dom.remove(elm, 1); inst.selection.moveToBookmark(i); tinyMCEPopup.execCommand("mceEndUndoLevel"); tinyMCEPopup.close(); return; } // Create new anchor elements if (elm == null) { inst.getDoc().execCommand("unlink", false, null); tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1}); elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); for (i=0; i' + tinyMCELinkList[i][0] + ''; html += ''; return html; // tinyMCE.debug('-- image list start --', html, '-- image list end --'); } function getTargetListHTML(elm_id, target_form_element) { var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';'); var html = ''; html += ''; return html; } // While loading preinit(); tinyMCEPopup.onInit.add(init); advlink/langs/ru_dlg.js000066600000011102150472616010011113 0ustar00tinyMCE.addI18n('ru.advlink_dlg',{ title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C / \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443", url:"\u0410\u0434\u0440\u0435\u0441", target:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 ...", titlefield:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", is_email:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 URL \u043F\u043E\u0445\u043E\u0436 \u043D\u0430 email \u0430\u0434\u0440\u0435\u0441, \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0439 \u043F\u0440\u0435\u0444\u0438\u043A\u0441 mailto?", is_external:"\u0412\u0432\u0435\u0434\u0435\u043D\u043D\u044B\u0439 URL \u043F\u043E\u0445\u043E\u0436 \u043D\u0430 \u0432\u043D\u0435\u0448\u043D\u044E\u044E \u0441\u0441\u044B\u043B\u043A\u0443, \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B\u0439 \u043F\u0440\u0435\u0444\u0438\u043A\u0441 http://?", list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0441\u044B\u043B\u043E\u043A", general_tab:"\u041E\u0431\u0449\u0435\u0435", popup_tab:"Popup", events_tab:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F", advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E", general_props:"\u041E\u0431\u0449\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430", popup_props:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 Popup", event_props:"\u0421\u043E\u0431\u044B\u0442\u0438\u044F", advanced_props:"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430", popup_opts:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430", anchor_names:"\u042F\u043A\u043E\u0440\u044F", target_same:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u044D\u0442\u043E\u043C \u0436\u0435 \u043E\u043A\u043D\u0435 / \u0444\u0440\u0435\u0439\u043C\u0435", target_parent:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u043C \u043E\u043A\u043D\u0435 / \u0444\u0440\u0435\u0439\u043C\u0435", target_top:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u0444\u0440\u0435\u0439\u043C\u0435 (\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435 \u0444\u0440\u0435\u0439\u043C\u044B)", target_blank:"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432 \u043D\u043E\u0432\u043E\u043C \u043E\u043A\u043D\u0435", popup:"Javascript popup", popup_url:"Popup URL", popup_name:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u043A\u043D\u0430", popup_return:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C 'return false'", popup_scrollbars:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u043A\u0440\u043E\u043B\u043B\u0435\u0440\u044B", popup_statusbar:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u0442\u0430\u0442\u0443\u0441", popup_toolbar:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u0438 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432", popup_menubar:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043C\u0435\u043D\u044E", popup_location:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C location", popup_resizable:"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440", popup_dependent:"Dependent (\u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F Mozilla / Firefox)", popup_size:"\u0420\u0430\u0437\u043C\u0435\u0440", popup_position:"\u041F\u043E\u0437\u0438\u0446\u0438\u044F (X / Y)", id:"Id", style:"\u0421\u0442\u0438\u043B\u044C", classes:"\u041A\u043B\u0430\u0441\u0441\u044B", target_name:"Target name", langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u044F\u0437\u044B\u043A\u0430", target_langcode:"Target language", langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430", encoding:"Target character encoding", mime:"Target MIME type", rel:"Relationship page to target", rev:"Relationship target to page", tabindex:"Tabindex", accesskey:"Accesskey", ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", link_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0441\u044B\u043B\u043E\u043A" });advlink/langs/en_dlg.js000066600000003203150472616010011072 0ustar00tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"});advlink/link.htm000066600000036651150472616010007664 0ustar00 {#advlink_dlg.title}
advlink/editor_plugin_src.js000066600000003045150472616010012255 0ustar00/** * 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() { tinymce.create('tinymce.plugins.AdvancedLinkPlugin', { init : function(ed, url) { this.editor = ed; // Register commands ed.addCommand('mceAdvLink', function() { var se = ed.selection; // No selection and not in link if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A')) return; ed.windowManager.open({ file : url + '/link.htm', width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)), height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('link', { title : 'advlink.link_desc', cmd : 'mceAdvLink' }); ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink'); ed.onNodeChange.add(function(ed, cm, n, co) { cm.setDisabled('link', co && n.nodeName != 'A'); cm.setActive('link', n.nodeName == 'A' && !n.name); }); }, getInfo : function() { return { longname : 'Advanced link', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin); })();print/editor_plugin.js000066600000000754150472616010011116 0ustar00(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();print/editor_plugin_src.js000066600000001517150472616010011763 0ustar00/** * 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() { tinymce.create('tinymce.plugins.Print', { init : function(ed, url) { ed.addCommand('mcePrint', function() { ed.getWin().print(); }); ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'}); }, getInfo : function() { return { longname : 'Print', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('print', tinymce.plugins.Print); })(); legacyoutput/editor_plugin.js000066600000004046150472616010012505 0ustar00(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);legacyoutput/editor_plugin_src.js000066600000011514150472616010013352 0ustar00/** * 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 * * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash * * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are * not apart of the newer specifications for HTML and XHTML. */ (function(tinymce) { // Override inline_styles setting to force TinyMCE to produce deprecated contents tinymce.onAddEditor.addToTop(function(tinymce, editor) { editor.settings.inline_styles = false; }); // Create the legacy ouput plugin tinymce.create('tinymce.plugins.LegacyOutput', { init : function(editor) { editor.onInit.add(function() { var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', fontSizes = tinymce.explode(editor.settings.font_size_style_values), schema = editor.schema; // Override some internal formats to produce legacy elements and attributes editor.formatter.register({ // Change alignment formats to use the deprecated align attribute alignleft : {selector : alignElements, attributes : {align : 'left'}}, aligncenter : {selector : alignElements, attributes : {align : 'center'}}, alignright : {selector : alignElements, attributes : {align : 'right'}}, alignfull : {selector : alignElements, attributes : {align : 'justify'}}, // Change the basic formatting elements to use deprecated element types bold : [ {inline : 'b', remove : 'all'}, {inline : 'strong', remove : 'all'}, {inline : 'span', styles : {fontWeight : 'bold'}} ], italic : [ {inline : 'i', remove : 'all'}, {inline : 'em', remove : 'all'}, {inline : 'span', styles : {fontStyle : 'italic'}} ], underline : [ {inline : 'u', remove : 'all'}, {inline : 'span', styles : {textDecoration : 'underline'}, exact : true} ], strikethrough : [ {inline : 'strike', remove : 'all'}, {inline : 'span', styles : {textDecoration: 'line-through'}, exact : true} ], // Change font size and font family to use the deprecated font element fontname : {inline : 'font', attributes : {face : '%value'}}, fontsize : { inline : 'font', attributes : { size : function(vars) { return tinymce.inArray(fontSizes, vars.value) + 1; } } }, // Setup font elements for colors as well forecolor : {inline : 'font', attributes : {color : '%value'}}, hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}} }); // Check that deprecated elements are allowed if not add them tinymce.each('b,i,u,strike'.split(','), function(name) { schema.addValidElements(name + '[*]'); }); // Add font element if it's missing if (!schema.getElementRule("font")) schema.addValidElements("font[face|size|color|style]"); // Add the missing and depreacted align attribute for the serialization engine tinymce.each(alignElements.split(','), function(name) { var rule = schema.getElementRule(name), found; if (rule) { if (!rule.attributes.align) { rule.attributes.align = {}; rule.attributesOrder.push('align'); } } }); // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes editor.onNodeChange.add(function(editor, control_manager) { var control, fontElm, fontName, fontSize; // Find font element get it's name and size fontElm = editor.dom.getParent(editor.selection.getNode(), 'font'); if (fontElm) { fontName = fontElm.face; fontSize = fontElm.size; } // Select/unselect the font name in droplist if (control = control_manager.get('fontselect')) { control.select(function(value) { return value == fontName; }); } // Select/unselect the font size in droplist if (control = control_manager.get('fontsizeselect')) { control.select(function(value) { var index = tinymce.inArray(fontSizes, value.fontSize); return index + 1 == fontSize; }); } }); }); }, getInfo : function() { return { longname : 'LegacyOutput', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput); })(tinymce); visualchars/editor_plugin.js000066600000002530150472616010012300 0ustar00(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();visualchars/editor_plugin_src.js000066600000004101150472616010013143 0ustar00/** * 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() { tinymce.create('tinymce.plugins.VisualChars', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceVisualChars', t._toggleVisualChars, t); // Register buttons ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'}); ed.onBeforeGetContent.add(function(ed, o) { if (t.state && o.format != 'raw' && !o.draft) { t.state = true; t._toggleVisualChars(false); } }); }, getInfo : function() { return { longname : 'Visual characters', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods _toggleVisualChars : function(bookmark) { var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm; t.state = !t.state; ed.controlManager.setActive('visualchars', t.state); if (bookmark) bm = s.getBookmark(); if (t.state) { nl = []; tinymce.walk(b, function(n) { if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1) nl.push(n); }, 'childNodes'); for (i = 0; i < nl.length; i++) { nv = nl[i].nodeValue; nv = nv.replace(/(\u00a0)/g, '$1'); div = ed.dom.create('div', null, nv); while (node = div.lastChild) ed.dom.insertAfter(node, nl[i]); ed.dom.remove(nl[i]); } } else { nl = ed.dom.select('span.mceItemNbsp', b); for (i = nl.length - 1; i >= 0; i--) ed.dom.remove(nl[i], 1); } s.moveToBookmark(bm); } }); // Register plugin tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars); })();imagemanager/pages/im/view.html000066600000014036150472616010012537 0ustar00 {#view.title}
 
 
imagemanager/pages/im/resources.xml000066600000004323150472616010013431 0ustar00 imagemanager/pages/im/createdir.html000066600000004167150472616010013533 0ustar00 {#createdir.title}

{#createdir.title}

{#createdir.description}

{#createdir.create_in}
imagemanager/pages/im/upload.html000066600000010121150472616010013040 0ustar00 {#upload.title}

{#upload.title}

{#upload.description}

{#upload.file} {#upload.size} {#upload.status}

{#upload.add_more}

imagemanager/pages/im/css/forms.css000066600000001416150472616010013325 0ustar00/* Forms */ /* ########################################################## */ form { margin:0px; padding:0px; } select { font:100% tahoma; } input.file, input.text { font:90% tahoma, arial, sans-serif; } /* Submit buttons */ input.submit, .button { width:94px; height:26px; padding:0 0 2px; border:0; background:url('../img/submit-grey.png') no-repeat; font:normal 100%/100% tahoma, arial, sans-serif; text-align: center; text-decoration: none; } .button.disabled { cursor: text; color: gray; } input.default { background:url('../img/submit-default.png') no-repeat; font-weight:bold; } input.cancel { background:url('../img/submit-grey.png') no-repeat; font-weight:normal; } a.button { padding-top: 6px; text-align: center; text-decoration: none; } imagemanager/pages/im/css/view.css000066600000005011150472616010013144 0ustar00body { background-color:#fff; color:#000; margin:0px 0px; padding:0px; font:70% arial, helvetica, sans-serif; text-align:center; overflow: hidden; } td {font-size: 100%;} img { behavior:expression(PNG.fix(this)); } a { background:transparent; } a:link { color:#000; } a:visited { color:#000; } a:visited:hover { color:#000; } a:hover { color:#000; } a:active { color:#000; } #center { width:auto; max-width:1200px; margin:0px auto; text-align:left; } #singleview { margin:20px 30px 10px 30px; text-align:center; } #singleimg { overflow: auto; } #singleview p { font:thin 100% tahoma; margin:4px 0px; width:100%; } #singleview h2 { font:bold 110% tahoma; margin:4px 0px; width:100%; } #singleview .nav { margin:6px 0px 12px 0px; } #singleview .gallery { background:url('../img/gallery.png') no-repeat center; padding:4px 10px 4px 10px; text-decoration: none; behavior:expression(PNG.fix(this)); } #singleview .prev { background:url('../img/left.png') no-repeat left; padding:4px 20px 4px 4px; text-decoration: none; behavior:expression(PNG.fix(this));} #singleview .next { background:url('../img/right.png') no-repeat right; padding:4px 4px 4px 20px; text-decoration: none; behavior:expression(PNG.fix(this)); } #singleview #prev.disabled { background:url('../img/left_disabled.png') no-repeat left; } #singleview #next.disabled { background:url('../img/right_disabled.png') no-repeat right; } #singleview .editsingle a { padding:1px 4px 1px 20px; margin:4px 8px; text-decoration:none; } #singleview .editsingle a.delete { background:url('../img/im-delete.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.delete:hover { background:#e3e0d8 url('../img/im-delete.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.delete_disabled { background:url('../img/im-delete.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.delete_disabled:hover { background:url('../img/im-delete.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.edt { background:url('../img/im-edit.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.edt:hover { background:#e3e0d8 url('../img/im-edit.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.disabled { color: gray; background:url('../img/im-edit.png') no-repeat; behavior:expression(PNG.fix(this)); } #singleview .editsingle a.disabled:hover { background:url('../img/im-edit.png') no-repeat; behavior:expression(PNG.fix(this)); } imagemanager/pages/im/css/viewmodes.css000066600000004466150472616010014211 0ustar00/* Thumbnail view */ /* ########################################################## */ #viewcontainer { padding-left: 212px; padding-top: 10px; } #thumbs { margin:0 10px 10px 0px; } #textlists { margin:0 10px 10px 0px; } .thumbnail { position:relative; float:left; margin:3px; background:url(../img/im-topright.gif) no-repeat top right; text-align:center; } .thumbnail .wrap { background:url(../img/im-topleft.gif) no-repeat; } .thumbnailimage { border: 0; } .pic { position:relative; margin:0px auto 0px; } .pic[class] { display:table; position:static; padding-top:6px; } .mid { position:absolute; top:50%; left:50%; } /* ie6 */ .mid a { position:relative; top:-50%; left:-50%; } /* ie6 */ html>body .mid { position:absolute; top:50%; left:50%; } /* ie7 */ html>body .mid a { position:relative; top:-60%; left:-50%; } /* ie7 */ html:not([dummy]) .mid[class] { display:table-cell; vertical-align:middle; position:static; } /* ff + safari */ html:not([dummy]) .mid a { position:static; } /* ff + safari */ @media all and (min-width:0px) { html>body .mid { display:table-cell; vertical-align:middle; position:static; } } /* opera */ @media all and (min-width:0px) { html>body .mid a { position:static; } } /* opera */ .details { background:url(../img/im.gif) no-repeat bottom right; text-align:left; } .details .wrap2 { background:url(../img/im-botleft.gif) no-repeat bottom left; width:25px; line-height:11px; } .name { margin:0px 5px; padding:3px 0px 2px 0px; font:90% tahoma, arial, sans-serif; overflow:hidden; text-align:center; line-height: 16px; height:16px; white-space:nowrap; } * html .name { height:21px; } .name a { text-decoration:none; color:#000; } .name a:hover { color:#827a69; } .parent .act { display: none; } .act { position:absolute; bottom:3px; right:3px; cursor:pointer; } /* List view */ /* ########################################################## */ .listview { position:relative; margin:3px; background:url('../img/im-topright.gif') no-repeat top right; float:left; text-align:left; width:100px; } .listview .name {width:75px} .listview .wrap { width:15px; height:2px; background: url('../img/im-topleft.gif') no-repeat; line-height:0px; font-size:0px; } imagemanager/pages/im/css/imageeditor.css000066600000006177150472616010014501 0ustar00body { background:#fff url('../img/bg.gif'); color:#000; margin: 0; padding: 0; font:70% arial, helvetica, sans-serif; text-align:left; } td {font-size: 100%;} a { background:transparent; } a:link { color:#000; } a:visited { color:#000; } a:visited:hover { color:#000; } a:hover { color:#000; } a:active { color:#000; } img { behavior:expression(PNG.fix(this)); } .panel { display: none; } #actionbar { position: absolute; left: 15px; top: 50px; z-index: 10000; } input.text { border: 0; font-size: 100%; border: 1px solid #E0E0E0; } input.checkbox { padding: 0; margin: 0 3px 0 5px; vertical-align: middle; line-height: 20px; } input.radio { padding: 0; margin: 0 3px 0 5px; vertical-align: middle; line-height: 20px; } label { vertical-align: middle; line-height: 20px; } .toolbar { margin:0px; font:90% tahoma; padding:2px 20px 10px 15px; } .icons { margin:14px 0px 0px 0px; float:left; } .icon { margin:0px 2px 0px 1px; padding:0px; float:left; line-height:0px; position:relative; } .icon a { text-decoration:none; padding:2px; display:block; } .icon a:hover, .active { background:#d3d0ce; } .disabled img { opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30); } .disabled span { color:gray } a.disabled:hover { background:transparent; } .icon .caption { display:none; padding:0px 4px 0px 4px; position:relative; top:-4px; } .toolbar .separator { margin:0px 4px; float:left; } #toolbar.caption span.caption { display: inline; } .panel span.caption { display: inline; } .panel a { text-decoration: none; display: block; } .panel a:hover { background: #d3d0ce; } .actionsettings { float: left; } .actionicons { float: left; } /* SelectionRect */ .selection-corner-tl { cursor: nw-resize; } .selection-corner-tc { cursor: n-resize; } .selection-corner-tr { cursor: ne-resize; } .selection-corner-cl { cursor: w-resize; } .selection-corner-cr { cursor: e-resize; } .selection-corner-bl { cursor: sw-resize; } .selection-corner-bc { cursor: s-resize; } .selection-corner-br { cursor: se-resize; } div.selection { display:none; z-index: 1000; cursor: move; line-height: 1px; overflow: hidden; position:absolute; border:1px solid gray; } .resize div.selection { border: 0; } div.selection img { position:absolute; } .selection-corner { position: absolute; left: 1px; top: 1px; width: 8px; height: 8px; border: 0; margin: 0; padding: 0; background: transparent url('../img/selection_corner.gif') top left no-repeat; z-index: 1001; display:none; } /*a.selection-corner:hover { background-position: -8px 0px; }*/ #editArea { position: absolute; left: 15px; top: 80px; } #imageWrapper { position: relative; left: 0; top: 0; width: 720px; height: 455px; border: 1px solid black; overflow: scroll; cursor: crosshair; background-color: #c0c0c0; } #eventElement { position: relative; left: 0; top: 0; padding: 0; } #editImage { padding: 0; margin-right: 10px; margin-bottom: 10px; } #marginWrapper { padding: 10px; } td { vertical-align: middle; } img.crop, .resize .selimage, .crop .mainimage { opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); } .resize div.selection { cursor: default; } imagemanager/pages/im/css/core.css000066600000011607150472616010013132 0ustar00/* Image Manager */ /* core stuff */ /* ########################################################## */ body { background:#fff; color:#000; margin:0 0; padding:0; font:70% arial, helvetica, sans-serif; text-align:center; } td { font-size: 11px; } img { behavior:expression(PNG.fix(this)); border: 0; } hr { clear:both; border:0; color:#e5e5e5; background-color:#e5e5e5; height:1px; } div { font-size:11px; } /* Lists */ ul { margin:0; padding:0; list-style:none; } ul li { margin:0; padding:0; } /* Layout */ #center { width:auto; max-width:1200px; margin:0 auto; text-align:left; } /* Links */ a {background:transparent; } a:link {color:#000; } a:visited {color:#000; } a:visited:hover {color:#000; } a:hover {color:#000; } a:active {color:#000; } #thearea { position:relative; } #secondarea { position:absolute; left:200px; } /* Page navigation */ /* ########################################################## */ .pagenav { float: left; color: #484848; display: none; line-height: 16px; height: 16px; z-index:1; } * html .pagenav {/* double margin ie6 bug fix */ display:inline; } .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0 2px; } .pagenav * {float:left; display:block} .pagenav a {outline:0 } .pagenav .prev {background:url('../img/left.gif') no-repeat left; width:20px; height:16px; text-decoration:none; behavior:expression(PNG.fix(this));} .pagenav .next {background:url('../img/right.gif') no-repeat right; width:20px; height:16px; text-decoration:none; behavior:expression(PNG.fix(this));} .pagenav input {padding:0; width:20px; text-align:center; font-size:10px; margin:0 4px 0 4px } .pagenav .disabled {opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); cursor:default} #progress { background: url('../img/loading.gif') no-repeat; padding-left: 20px; } /* View mode */ /* ########################################################## */ .viewmode { float:right; margin:0 25px 0 0; display:inline; height: 25px; color:#484848; z-index:1; white-space:nowrap; } .viewmode .desc { float:left; margin:3px 4px 0 0; } .viewmode a img { margin-bottom:-5px; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); } .viewmode a.listactive img { opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100); } .viewmode a.listactive { font-weight:bold; } #viewcontainer #filelist { position:relative; } /* List container */ #listcontainer { position:relative; } * html #listcontainer {/* double margin ie6 bug fix */ display:inline; } /* Left side folders */ /* ########################################################## */ #folders { position:absolute; top:0; left:2px; margin:0; width:192px; background:url(../img/folder-middle-bg.png) bottom left; z-index:1; } #folders h2 { margin:0; padding:20px 10px 10px 10px; background:url(../img/folder-top-bg.png) top left; font-size:100%; color:#7791c4; } #folders h3 { margin:10px 2px 0 2px; padding:10px 8px 10px 8px; font-size:100%; color:#7791c4; border-top:1px solid #9ab0d7; } #folders a { text-decoration:none; behavior:expression(PNG.fix(this)); } #folders .categories { margin:0 6px 0 10px; } #folders .categories li a { background:url(../img/icons/category-closed.png) no-repeat; padding:2px 2px 0 24px; display:block; min-height:16px; } #folders .categories li.current a { background:url(../img/icons/category-open.png) no-repeat; font-weight:bold; } #folders .special { margin:5px 6px 0 10px; } #folders .special li a { padding: 2px 2px 0 24px; display: block; min-height: 16px; height: 16px; line-height: 16px; } #folders .folders { margin:0 6px 0 10px; } #folders div { background:url(../img/folder-bottom-bg.png) no-repeat bottom left; } #folder_list { padding:0 0 20px 0; } #folders .folders li a { background:url(../img/folder.png) no-repeat; padding:2px 2px 0 24px; display:block; min-height:16px; } #folders .folders li.parent a { background:url(../img/icons/up.png) no-repeat; } #folders .folders li.current a { background:url(../img/icons/folders-open.png) no-repeat; font-weight:bold; } #folders .preview { margin:0 0 4px 10px; } #folders .previewact { padding:0 0 20px 10px; } #folders a:hover { color:#2e4e8c; } #folders .folders li.progress { background: url('../img/loading.gif') no-repeat; height: 16px; line-height: 16px; padding-left: 20px; } .folder .name, .parent .name { font-weight:bold; } /* ########################################################## */ #toolbar.caption span.caption { display: inline; } #toolbar a {outline:0 } /* Validation classes */ label.msg { display:none; } label.invalid { color:#aa0000; display:inline; } input.invalid { background-color:#d63232; } div label.invalid { display:block; } /* Dialog facts */ #facts { height:30px; } imagemanager/pages/im/css/imagemanager.css000066600000000210150472616010014603 0ustar00@import url("core.css"); @import url("toolbar.css"); @import url("viewmodes.css"); @import url("dialog.css"); @import url("forms.css"); imagemanager/pages/im/css/window_clearlooks2.css000066600000026770150472616010016020 0ustar00/* * * clearlooks2 - Gnome theme * * */ .clearlooks2 { position: absolute; left: 20px; top: 20px; width: 320px; height: 240px; overflow: hidden; color: white; display: none; text-align: left; } .clearlooks2_progress { position: absolute; left: 0; top: 0; width: auto; height: 30px; z-index: 100100; display: none; border: 1px solid gray; background: #FFF url('../img/loading.gif') no-repeat 5px 8px; text-align: left; } .clearlooks2_progress .message { padding-left: 30px; padding-right: 10px; font-family: Arial, Verdana; font-weight: bold; line-height: 30px; } .clearlooks2_event_blocker, .clearlooks2_visible_event_blocker { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 100001; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2_visible_event_blocker { opacity:0.7; -ms-filter:'alpha(opacity=70)'; filter:alpha(opacity=70); background: #FFF; } .clearlooks2_placeholder { position: absolute; left: 0; top: 0; border: 1px dotted black; display: none; z-index: 100002; } /* Alert */ .clearlooks2 .alert { text-align: left; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; font-weight: bold; text-decoration: none; } .clearlooks2 .alert .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .bigicon { display: none; } .clearlooks2 .alert .bigicon, .clearlooks2 .confirm .bigicon, .clearlooks2 .status .bigicon { position: absolute; left: 15px; top: 15px; width: 32px; height: 32px; display: block; } .clearlooks2 .alert .info, .clearlooks2 .status .info { background-image: url('../img/clearlooks2/alert_info.gif'); } .clearlooks2 .alert .warning, .clearlooks2 .status .warning { background-image: url('../img/clearlooks2/alert_warn.gif'); } .clearlooks2 .alert .error, .clearlooks2 .status .error { background-image: url('../img/clearlooks2/alert_error.gif'); } .clearlooks2 .alert .message, .clearlooks2 .confirm .message { position: absolute; left: 55px; top: 15px; width: 325px; height: 40px; overflow: auto; } .clearlooks2 .ok, .clearlooks2 .cancel { position: absolute; left: 160px; top: 65px; width: 80px; height: 30px; background-image: url('../img/clearlooks2/button.gif'); text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 30px; font-weight: bold; text-decoration: none; } /* Confirm dialog */ .clearlooks2 .confirm .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .confirm .ok { left: 110px; } .clearlooks2 .confirm .cancel { left: 210px; } .clearlooks2 .confirm .ask { background-image: url('../img/clearlooks2/alert_info.gif'); } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Status dialog */ .clearlooks2 .status .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .status .ok { top: 178px; } .clearlooks2 .status .statustext { position: absolute; left: 10px; top: 8px; width: 360px; height: 150px; border: 1px solid gray; overflow: auto; padding: 5px; } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Chromeless window */ .clearlooks2 .chromeless .resize, .clearlooks2 .chromeless .action, .clearlooks2 .chromeless .statusbarbottom { display: none; } .clearlooks2 .chromeless .middle .action { display: block; } .clearlooks2 .chromeless .windowtop, .clearlooks2 .chromeless .window { height: 5px; } .clearlooks2 .chromeless .windowtop .left { position: absolute; left: 0; top: 0; width: 5px; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_left.gif') no-repeat; } .clearlooks2 .chromeless .windowtop .middle { position: absolute; right: 5px; width: 100%; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_middle.gif') no-repeat 5px 0; clip: rect(auto auto auto 10px); } .clearlooks2 .chromeless .windowtop .right { position: absolute; right: 0; top: 0; width: 5px; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_right.gif') no-repeat; } .clearlooks2 .chromeless .windowmiddle { top: 5px; } /* Top section */ .clearlooks2 .windowtop .middle-fg { display: none; } .clearlooks2 .windowtop { position: absolute; width: 100%; height: 23px; overflow: hidden; } .clearlooks2 .windowtop .left { position: absolute; left: 0; top: 0; width: 6px; height: 23px; background: transparent url('../img/clearlooks2/top_left.gif') no-repeat; } .clearlooks2 .windowtop .middle { position: absolute; right: 6px; width: 100%; height: 23px; background: transparent url('../img/clearlooks2/top_middle.gif') no-repeat 12px 0; clip: rect(auto auto auto 12px); /* Safari hack */ } .clearlooks2 .windowtop .right { position: absolute; right: 0; top: 0; width: 6px; height: 23px; background: transparent url('../img/clearlooks2/top_right.gif') no-repeat; } .clearlooks2 .windowtop .title { position: absolute; left: 0; top: 0; width: 100%; height: 19px; text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; font-weight: bold; } /* Top section - Focus */ .clearlooks2 .focustop .left { background: transparent url('../img/clearlooks2/top_left.gif') no-repeat -6px 0; } .clearlooks2 .focustop .middle { background: transparent url('../img/clearlooks2/top_middle.gif') no-repeat 12px -23px; } .clearlooks2 .focustop .right { background: transparent url('../img/clearlooks2/top_right.gif') no-repeat -6px 0; } .clearlooks2 .focus .title { color: #FFF; } /* Middle section */ .clearlooks2 .windowmiddle { position: absolute; top: 23px; width: 100%; z-index: 5; } .clearlooks2 .windowmiddle .left { position: absolute; left: 0; top: 0; width: 4px; height: 100%; background-image: url('../img/clearlooks2/middle_left.gif'); } .clearlooks2 .windowmiddle .middle { position: absolute; left: 4px; top: 0; width: 100%; height: 100%; background-color: #FFF; color: #000; } .clearlooks2 .windowmiddle .right { position: absolute; right: 0; top: 0; width: 4px; height: 100%; background-image: url('../img/clearlooks2/middle_right.gif'); } /* Bottom section */ .clearlooks2 .windowbottom { position: absolute; left: 0; bottom: 0; width: 100%; height: 5px; overflow: hidden; z-index: 5; } .clearlooks2 .windowbottom .left { position: absolute; left: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../img/clearlooks2/bottom_left.gif'); overflow: hidden; } .clearlooks2 .windowbottom .middle { position: absolute; left: 5px; bottom: 0; width: 100%; height: 5px; background: url('../img/clearlooks2/bottom_middle.gif'); overflow: hidden; } .clearlooks2 .windowbottom .right { position: absolute; right: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../img/clearlooks2/bottom_right.gif'); overflow: hidden; } /* Statusbar */ .clearlooks2 .statusbarbottom { height: 24px; overflow: hidden; z-index: 5; } .clearlooks2 .statusbarbottom .left { bottom: 0; width: 5px; height: 23px; background-image: url('../img/clearlooks2/statusbar_left.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .middle { height: 23px; background-image: url('../img/clearlooks2/statusbar_middle.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .right { width: 20px; height: 23px; background-image: url('../img/clearlooks2/statusbar_right.gif'); overflow: hidden; } .clearlooks2 .windowbottom .statustext { display: none; } .clearlooks2 .statusbarbottom div.statustext { display: block; position: absolute; left: 6px; bottom: 0; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; } .clearlooks2 .resizable .statusbarbottom .resize-se { background-image: url('../img/clearlooks2/statusbar_resize.gif'); width: 20px; height: 23px; } /* Actions */ .clearlooks2 .action { position: absolute; cursor: pointer; overflow: hidden; } .clearlooks2 .close, .clearlooks2 .min, .clearlooks2 .med, .clearlooks2 .max { z-index: 3; } .clearlooks2 .resizable .min { right: 68px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 0; background-repeat: no-repeat; } .clearlooks2 .resizable .med { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px 0; background-repeat: no-repeat; } .clearlooks2 .resizable .max { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px 0; background-repeat: no-repeat; } .clearlooks2 .close { right: 6px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px 0; } /* Actions - Focus */ .clearlooks2 .focustop .min { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 -16px; } .clearlooks2 .focustop .med { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px -16px; } .clearlooks2 .focustop .max { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px -16px; } .clearlooks2 .focustop .close { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px -16px; } /* Actions - Hover */ .clearlooks2 .focustop .min:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 -32px; } .clearlooks2 .focustop .med:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px -32px; } .clearlooks2 .focustop .max:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px -32px; } .clearlooks2 .focustop .close:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px -32px; } /* Move and resize handles */ .clearlooks2 .move { top: 0; left: 0; width: 100%; height: 19px; cursor: move; z-index: 1; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resize { display: none; z-index: 4; } .clearlooks2 .resizable .resize { display: block; } .clearlooks2 .resizable .resize-w { top: 0; left: 0; width: 5px; height: 100%; cursor: w-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-e { top: 0; right: 0; width: 5px; height: 100%; cursor: e-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-n { top: 0; left: 0; width: 100%; height: 5px; cursor: n-resize; overflow: hidden; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-nw { top: 0; left: 0; width: 5px; height: 19px; cursor: nw-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-ne { top: 0; right: 0; width: 5px; height: 19px; cursor: ne-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-sw { bottom: 0; left: 0; width: 5px; height: 5px; cursor: sw-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-s { bottom: 0; left: 0; width: 100%; height: 5px; cursor: s-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-se { bottom: 0; right: 0; width: 5px; height: 5px; cursor: se-resize; background-image: url('../img/clearlooks2/transparent.gif'); } imagemanager/pages/im/css/dialog.css000066600000005741150472616010013443 0ustar00/* dialog popups */ /* ########################################################## */ body { overflow: auto; } .dialog { position:relative; text-align:left; width:100%; } .dialog .top { padding:10px 12px; background:#f3f2f0 url('../img/dialog-top.png') no-repeat right bottom; behavior:expression(PNG.fix(this)); } .dialog .close { position:absolute; top:4px; right:4px; } .dialog h2 { font:bold 115% tahoma, arial, sans-serif; margin:0px; } .dialog .description { margin:0px; } .dialog .headline { padding:8px 0px 12px 40px; } .dialog .createdir { background: url('../img/dialog-icon-newfolder.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .facts { background:#f3f2f0; padding:8px 16px 12px 20px; font:90% tahoma, arial, sans-serif; } .dialog .body { padding:8px 16px 12px 20px; } #content { display: none; } /* Upload */ #uploadarea { position: relative; padding: 16px; height: 220px; overflow: hidden; } * html #uploadarea { height: 208px; } #uploadarea .small { margin: 2em 0 -1em; color: #6d88c4; font-size: 0.9em; text-transform: uppercase; } #uploadarea #add.hidden { display: none; } #uploadarea .addbutton, #uploadarea #uploadstart { display: block; width: 182px; height: 26px; margin: 0 0 1em; background: url(../img/submit-greyWide.png) no-repeat; text-align: center; font-size: 1em; font-weight: bold; line-height: 26px; text-decoration: none; } #uploadarea #uploadstart { background: url(../img/submit-wide.png) no-repeat; } #uploadarea #fileblock { position:relative; top:400px; } #uploadarea #filelist { position:relative; max-height: 7em; overflow: auto; margin-bottom: 6px; border: 1px solid #9fadc4; } * html #uploadarea #filelist { height: 7em; } #uploadarea #fileshead { width: 100%; font-weight: bold; background: #eee; border-bottom: 1px solid #fff; } #uploadarea #files { width: 490px; } #uploadarea #status { position: absolute; top: 4px; border: 1px solid #9fadc4; padding: 1px; width: 506px; height: 34px; display: none; } #uploadarea #progressbar { position: relative; width: 100%; height: 34px; background: url(../img/progress.gif); z-index: 10; } #uploadarea .progresstext { position: absolute; top: 0; left: 0; width: 100%; text-align: center; color: #535353; font-weight: bold; line-height: 36px; z-index: 11; } #uploadarea .progresstext a { text-decoration: none; color: #535353; } #files .fname a {display:block; width:295px; overflow:hidden} #files .disabled {text-decoration:none; cursor:default} #files .done {color:gray} #files .failed {color:red} #multiupload_view {display:none} #singleupload_view {display:none} #multiupload_view #selectview {position:relative} #files input.text {width:290px; margin:0; padding:0} imagemanager/pages/im/css/toolbar.css000066600000003501150472616010013636 0ustar00/* Toolbar */ /* ########################################################## */ #topnav { background:url('../img/toolbar.png') no-repeat bottom left; } #topwrap { background:url('../img/toolbar.png') no-repeat bottom right; margin:0px 0px 0px 30px; } #settings { display:none; position:absolute; top:20px; right:-4px; width:14em; line-height:14px; text-align:right; background:#fff; padding:4px; border:1px solid #959595; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:100; } #settings a { display:inline; padding:0px; } /* Inside stuff */ .toolbar { margin:0px; padding:2px 20px 10px 0px; font:90% tahoma, arial, sans-serif; } #tools li a { font-size:11px; } .toolbar div.filter { padding-right: 20px; width: 125px; } .filter input { width: 123px; background: transparent; border: 1px solid #aaaaaa; font-size: 10px; } .toolbar .navigation { margin:0px 2px; padding: 0; float: left; width: 170px; padding-bottom: 12px; } .navigation .desc { margin:0px 0px 4px 0px; background:url('../img/navdesc_bg.gif') no-repeat right; } .navigation .path { margin-bottom:5px; width:260px; overflow:hidden; } .toolbar .icons { margin:14px 0px 0px 0px; float:right; } .toolbar .icon { margin:0px 2px 0px 1px; padding:0px; float:left; line-height:0px; position:relative; } .toolbar .disabled img { opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30); } .toolbar .disabled a { color: #AAA; } .toolbar .disabled a:hover { background: transparent; cursor: default; } /* Icons */ .icon a { text-decoration:none; padding:2px; display:block; } .icon a:hover { background:#d3d0ce; } .icon .caption { position:relative; top:-4px; display:none; padding:0px 4px 0px 4px; } .toolbar .separator { margin:0px 4px; float:left; } imagemanager/pages/im/css/dropmenu.css000066600000002236150472616010014031 0ustar00/* Menu */ .menu { margin: 0; padding: 0; position: absolute; border: 1px solid #d4d0c8; background: #EAE9E5; z-index: 1000; width: 100px; } .menu a { display: block; color: #000; text-decoration: none; padding: 3px; text-align: left; overflow:auto; /* FF */ } .menu a:hover { background-color: #dbecf3 } .menu .submenu { background: url(../img/menu_arrow.gif) no-repeat center right } .menu .active { background: #dbecf3 url(../img/menu_arrow.gif) no-repeat center right } .menu .active a:hover { background-color: transparent } .menu .separator { border-top: 1px solid gray; height: 1px; overflow: hidden } .menu .separator a { display: none } .menu .disabled a { cursor: default; color: #aaa } /* Menu icons */ .menu a { background-image: url(../img/menu_icons.gif); background-repeat: no-repeat } .menu .add a { background-position: 0 -60px } .menu .delete a { background-position: 0 -80px } .menu .copy a { background-position: 0 0 } .menu .cut a { background-position: 0 -20px } .menu .paste a { background-position: 0 -40px } .menu .moveup a { background-position: 0 -100px } .menu .movedown a { background-position: 0 -120px }imagemanager/pages/im/js/upload.js000066600000023262150472616010013136 0ustar00(function($){ window.UploadDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; t.args = args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); t.fileListTpl = $.templateFromScript('#filelist_item_template'); $('.uploadtype').html($.translate('{#upload.basic_upload}', 0, {a : '', '/a' : ''})); $('#createin').html(args.visual_path); $('form input[name=path]').val(args.path); $('form input[name=file0]').change(function(e) { $('form input[name=name0]').val(t.cleanName(/([^\/\\]+)$/.exec(e.target.value)[0].replace(/\.[^\.]+$/, ''))); }); $('form').submit(function() { $.WindowManager.showProgress({message : $.translate('{#upload.progress}')}); }); if (document.location.hostname != document.domain) $('form input[name=domain]').val(document.domain); t.path = args.path; $('#singleupload').click(function(e) { $('#multiupload_view').hide(); $('#singleupload_view').show(); }); RPC.exec('im.getConfig', {path : args.path}, function(data) { var config = data.result, maxSize, upExt, fsExt, outExt = [], i, x, found; maxSize = config['upload.maxsize']; fsExt = config['filesystem.extensions'].split(','); upExt = config['upload.extensions'].split(','); t.debug = config['general.debug'] == "true"; t.shouldCleanNames = config['filesystem.clean_names'] == "true"; t.chunkSize = config['upload.chunk_size'] || '1mb'; $('#content').show(); if ($.multiUpload.initialized) $('#multiupload_view').show(); else $('#singleupload_view').show(); // Disabled upload if (config['upload.multiple_upload'] != "true") { $('#multiupload_view').hide(); $('#singleupload_view').show(); } maxSize = maxSize.replace(/\s+/, ''); maxSize = maxSize.replace(/([0-9]+)/g, '$1 '); if (upExt[0] == '*') upExt = fsExt; if (fsExt[0] == '*') fsExt = upExt; for (i = 0; i < upExt.length; i++) { upExt[i] = $.trim(upExt[i].toLowerCase()); found = false; for (x = 0; x < fsExt.length; x++) { fsExt[x] = $.trim(fsExt[x]).toLowerCase(); if (upExt[i] == fsExt[x]) { found = true; break; } } if (found) outExt.push(upExt[i]); } t.validExtensions = outExt; t.maxSize = maxSize; $('#facts').html($.templateFromScript('#facts_template'), {extensions : outExt.join(', '), maxsize : maxSize, path : args.visual_path}); if (config['upload.multiple_upload'] == "true") t.initMultiUpload(); }); $('#cancel').click(function() {t.currentWin.close();}); }, cleanName : function(s) { if (this.shouldCleanNames) s = $.cleanName(s); return s; }, handleSingleUploadResponse : function(data) { var t = this, args = t.currentWin.getArgs(); $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.upload_failed}', visual_path : t.args.visual_path, response : data})) { var res = RPC.toArray(data.result); $.WindowManager.info($.translate('{#message.upload_ok}')); $('#file0, #name0').val(''); t.insertFiles([res[0].file]); } }, initMultiUpload : function() { var t = this, up, args = t.currentWin.getArgs(), initial = 1, startTime; up = $.multiUpload.create({ silverlight_xap_url : '../../stream/index.php?theme=im&package=static_files&file=multiupload_xap', upload_url : '../../stream/index.php?cmd=im.upload', path : t.path, filter : t.validExtensions, chunk_size : t.chunkSize, max_size : t.maxSize, flash_browse_button : '#add', oninit : function() { $('#add').removeClass('hidden'); } }); if (t.debug) alert('Runtime used: ' + $.multiUpload.runtime); function calc(up) { var size = 0, uploaded = 0, loaded = 0, unloaded = 0, bps = 0, finished = true, fl = []; if (!up.files.length) { $('#selectview').css('top', 0); $('#selectview').show(); $('#fileblock').css({position : 'relative', top : 400}); initial = 1; return; } $(up.files).each(function(i, f) { size += f.size; loaded += f.loaded; if (f.status == 'completed') uploaded++; if (!f.status) finished = false; }); bps = Math.ceil(loaded / ((new Date().getTime() - startTime || 1) / 1000.0)); if (finished) { $('#abortupload').hide(); $(up.files).each(function(i, f) { if (f.status == 'completed') fl.push(t.path + '/' + f.name); }); t.insertFiles(fl); $('#progressbar').css('width', '100%'); return; } $('#progressinfo').html($.translate('{#upload.progressinfo}', 1, {loaded : up.formatSize(loaded), total : up.formatSize(size), speed : up.formatSize(bps)})); $('#progressbar').css('width', Math.round(loaded / size * 100.0) + '%'); $('#stats').html($.translate('{#upload.statusrow}', 1, {files : up.files.length, size : up.formatSize(size)})); }; // Register event listeners $(up).bind('multiUpload:filesSelected', function(e, fs) { var up = this, totalSize = 0; if (!fs.files.length) { $.WindowManager.info($.translate('{#upload.no_valid_files}')); return; } if (initial) { $('#selectview').animate({ top: '-150px' }, 1000); $('#fileblock').animate({ top:'-60px' }, 1000, 'linear', function() { $('#fileblock').css('position', 'static'); $('#selectview').hide(); up.repaint(); }); initial = 0; } $(fs.files).each(function(i, fo) { fo.name = t.cleanName(fo.name); $('#files').show(); $('#files tbody').append(t.fileListTpl, {id : fo.id, name : fo.name, size : fo.size}); $('#' + fo.id + ' a.remove').click(function(e) { $('#' + fo.id).remove(); $.multiUpload.get(up.id).removeFile(fo.id); e.preventDefault(); return false; }); $('#' + fo.id + ' a.rename').click(function(e) { var a = $(e.target), inp, parts; if (!a.hasClass('disabled')) { parts = /^(.+)(\.[^\.]+)$/.exec(fo.name); a.hide(); $(e.target).parent().append(''); inp = $('#rename').val(parts[1]); t.renameEnabled = 1; inp.focus().blur(function() { t.endRename(); }).keydown(function(e) { var c = e.keyCode; if (c == 13 || c == 27) { if (c == 13) { fo.name = t.cleanName(inp.val()) + parts[2]; a.html(fo.name); } t.endRename(); } }); } e.preventDefault(); return false; }); }); up.settings.flash_browse_button = '#addmore'; up.repaint(); $('#filelist')[0].scrollTop = 0; }); $(up).bind('multiUpload:fileUploaded', function(e, o) { $('#' + o.file.id).removeClass('failed').addClass('done'); }); $(up).bind('multiUpload:filesChanged', function() { calc(up); up.repaint(); t.endRename(); }); $(up).bind('multiUpload:fileUploadProgress', function(e, pr) { if (up.status) { if (!pr.file.scroll) { $('#filelist').scrollTo($('#' + pr.file.id), 50); pr.file.scroll = 1; } $('#' + pr.file.id + ' td.status').html(Math.round(pr.loaded / pr.total * 100.0) + '%'); calc(up); } }); $(up).bind('multiUpload:chunkUploaded', function(e, o) { var res = $.parseJSON(o.response), data = RPC.toArray(res.result); if (data[0]["status"] != 'OK') { o.file.loaded = o.file.size; calc(up); $('#' + o.file.id).addClass('failed'); $('#' + o.file.id + ' td.status').html($.translate(data[0]["message"])); o.cancel = 1; } }); $(up).bind('multiUpload:uploadChunkError', function(e, o) { $('#' + o.file.id).addClass('failed'); $('#' + o.file.id + ' td.status').html('Failed').attr('title', o.error); //top.console.log(o.file, o.chunk, o.chunks, o.error); }); // Add UI events $('#add, #addmore').click(function(e) { up.selectFiles(); e.preventDefault(); return false; }); $('#abortupload').click(function(e) { up.stopUpload(); $.WindowManager.info($.translate('{#upload.cancelled}'), function() { t.currentWin.close(); }); }); $('#uploadstart').click(function(e) { $('#uploadstart').parent().hide(); $('#status').show(); $('#statsrow').hide(); $('#files .status').html('-'); $('#files .fname a').addClass('disabled'); startTime = new Date().getTime(); up.startUpload(); e.preventDefault(); return false; }); $('#uploadstop').click(function(e) { up.stopUpload(); e.preventDefault(); return false; }); $('#clear').click(function(e) { up.clearFiles(); $('#files').hide(); $('#files tbody').html(''); e.preventDefault(); return false; }); }, insertFiles : function(pa) { var s = this.currentWin.getArgs(); // Insert file if (s.onupload) { RPC.insertFiles({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, paths : pa, insert_filter : s.insert_filter, oninsert : function(o) { s.onupload(o); } }); } }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } }, endRename : function() { if (this.renameEnabled) { $('#files input').remove(); $('#files a').show(); this.renameEnabled = 0; } } }; // JSON handler window.handleJSON = function(data) { window.focus(); UploadDialog.handleSingleUploadResponse(data); }; $(function(e) { UploadDialog.init(); }); })(jQuery); imagemanager/pages/im/js/imagemanager.js000066600000033401150472616010014263 0ustar00(function($) { window.ImageManager = $.extend(BaseManager, { page : 0, pages : 0, pageSize : 25, viewMode : 'thumbs', tools : [ 'createdir', 'preview', 'refresh', 'edit', 'upload', 'rename', 'delete', 'download', 'insert', 'filemanager', 'help' ], init : function() { var t = this, args = t.currentWin.getArgs(), uri; // Compile templates t.type = 'im'; t.caregoryListTpl = $.templateFromScript('#folders_template'); t.foldersTpl = $.templateFromScript('#folders_template'); t.thumbTpl = $.templateFromScript('#thumb_template'); t.textTpl = $.templateFromScript('#text_template'); t.customDirsTpl = $.templateFromScript('#custom_dir_template'); t.path = args.path || '{default}'; t.rootPath = args.rootpath; t.extensions = args.extensions; t.include_file_pattern = args.include_file_pattern; t.exclude_file_pattern = args.exclude_file_pattern; t.include_directory_pattern = args.include_directory_pattern; t.exclude_directory_pattern = args.exclude_directory_pattern; t.remember_last_path = args.remember_last_path; t.urlSuffix = ''; if (document.domain != document.location.hostname) t.urlSuffix = '?domain=' + document.domain; if (args.url) { uri = $.parseURI(args.url, {base_url : args.document_base_url || args.default_base_url}); if (uri) t.inputURL = uri.path.replace(/\/[^\/]+$/, ''); } if (t.rootPath) { chunks = t.rootPath.split(/=/); t.rootPathName = chunks.length > 1 ? chunks[0] : /[^\/]+$/.exec(t.rootPath); t.rootPath = chunks[1] || t.rootPath; } // Add template helpers $.extend($.template.helpers, { add : function(v, a) { if (v != 'auto') v = parseInt(v) + parseInt(a) + 'px'; return v; } }); t.menu = new $.mcDropMenu({ halign : 'right', valign : 'bottom', setup : function(m) { $(m).bind('DropMenu:beforeshow', function(e, m) { var file = t.focusedFile; // Build new menu m.clear(); if (file.type != 'folder') m.add({title : $.translate('{#common.insert}'), disabled : t.isDisabled('insert'), onclick : function() {t.insertFiles();}}); m.add({title : $.translate('{#common.deleteit}'), disabled : t.isDisabled('delete'), onclick : function() {t.deleteFiles([file]);}}); if (file.type != 'folder') { if (file.custom.editable) m.add({title : $.translate('{#common.edit}'), disabled : t.isDisabled('edit'), onclick : function() {t.editFile(file);}}); m.add({title : $.translate('{#common.view}'), disabled : t.isDisabled('view'), onclick : function() {t.viewFile(file);}}); } }); } }); $().bind('DropMenu:show', function(e, m) { $('#' + m.id).css('opacity', 0).animate({ opacity: 0.9 }, 300); }); t.menu.render('#filelist'); // Register toolbar actions $().bind('action:createdir', function() {t.createDir();}); $().bind('action:upload', function() {t.uploadFiles();}); $().bind('action:refresh', function() {t.listFiles();t.listDirs();}); $().bind('action:help', function() {}); $().bind('action:filemanager', function() {t.fileManager()}); $('#tools li').each(function(i, v) { $(v).click(function(e) { if (!$(v).hasClass('disabled')) $().trigger('action:' + v.id, e); e.preventDefault(); return false; }); }); $('#filelist').click(function(e) { var a = $(e.target).parents('a')[0], fo, o, div, img; if (a && a.rel) { div = $(a).parents('div.file')[0]; fo = t.focusedFile = t.files[div.id.replace(/[^0-9]/g, '')]; t.selectedFiles = [fo]; if (a.rel == 'file') { if (fo.type == 'folder' || fo.type == 'parent') { t.page = 0; t.listFiles(fo.path); t.listDirs(); } else t.insertFiles(); } else if (a.rel == 'menu') { img = $(a).find('img'); o = img.offset(); t.menu.show(o.left + img.width(), o.top); } e.preventDefault(); return false; } }); $('#folder_list, #special_list, #category_list').click(function(e) { var a = e.target.nodeName == 'A' ? e.target : $(e.target).parents('a')[0]; if (a) { t.page = 0; t.listFiles(a.title); t.listDirs(); } }); $('#selectView').change(function(e) { t.viewMode = $(e.target).val(); t.updateFileList(); }); $('#setPages').change(function(e) { t.page = 0; t.pageSize = $(e.target).val(); t.listFiles(); }); $('#curpage').change(function(e) { t.page = parseInt(e.target.value) - 1; t.listFiles(); }); $('#pages').click(function(e) { var el = e.target; if (el.nodeName == 'A') { if ($(el).hasClass('disabled')) return; if ($(el).hasClass('next')) t.page++; else if ($(el).hasClass('prev')) t.page--; t.listFiles(); e.preventDefault(); return false; } }); function filter(e) { var f = $(e.target).val(); if (f == t.filterVal) return; t.filterVal = f; if (f == '') f = null; else if (f.indexOf('*') == -1) f = '*' + f + '*'; t.page = 0; t.filter = f; t.listFiles(); t.listDirs(); }; $('#filter').change(filter).keyup(function(e) { if (e.keyCode == 13) filter(e); }); if (t.specialFolders.length) { $(t.specialFolders).each(function(i, v) { v.title = $.translate(v.title); $('#special_list').append(t.customDirsTpl, v); }); $('#special_list').show(); } setInterval(function() { RPC.exec('im.keepAlive', {}); }, 60 * 1000 * 5); // 5 min }, listFiles : function(p) { var t = this, args = t.currentWin.getArgs(); t.path = p || t.path; $('#pages').hide(); $('#progress').show(); $('#filelist').html(''); t.page = isNaN(t.page) || t.page < 0 ? 0 : t.page; if (t.pages) t.page = t.page > t.pages - 1 ? t.pages - 1 : t.page; RPC.exec('im.listFiles', { path : t.path, root_path : t.rootPath, url : t.inputURL, config : 'general,thumbnail,filesystem,filemanager', extensions : t.extensions, include_file_pattern : t.include_file_pattern, exclude_file_pattern : t.exclude_file_pattern, include_directory_pattern : t.include_directory_pattern, exclude_directory_pattern : t.exclude_directory_pattern, remember_last_path : !!t.remember_last_path, page : t.page, page_size : t.pageSize, filter : t.filter }, function(data) { var header, cfg, disabled, visible, argTools, argDisabledTools; if (!RPC.handleError({message : 'List files error', visual_path : t.visualPath, response : data})) { header = data.result.header; cfg = data.result.config; t.access = header.attribs; t.visualPath = header.visual_path; t.pages = parseInt(header.pages); t.config = cfg; t.fileManagerURL = cfg['filemanager.urlprefix']; t.demoMode = cfg['general.demo'] == "true"; t.path = header.path; function explode(s) { return s ? s.replace(/\s+/g, '').split(',') : s; }; // Enable/disable tools disabled = t.disabledTools = explode(cfg['general.disabled_tools']); visible = explode(cfg['general.tools']); if (argDisabledTools = explode(args.disabled_tools)) disabled = jQuery.merge(argDisabledTools, disabled); if (argTools = explode(args.tools)) { $(argTools).each(function(i, v) { if (!$.inArray(v, visible)) visible.push(v); }); visible = $.grep(visible, function(v) { return $.inArray(v, argTools); }); } $(t.tools).each(function(i, v) { var li = $('#' + v); t.setDisabled(v, $.inArray(v, disabled) != -1); if ($.inArray(v, visible) != -1) li.show(); else li.hide(); }); $('#tools').show(); $('#progress').hide(); $('#curpath').html(t.visualPath).attr('title', t.visualPath); // Convert result table into object list t.files = RPC.toArray(data.result); // Update file list t.updateFileList(); $().trigger('filelist:changed'); } }); }, updateFileList : function() { var t = this; fileLst = $('#filelist'); fileLst.html(''); $('#numpages').html(t.pages); $('#curpage').val(t.page + 1); $('#pages').show(); if (!t.page) $('#pages .prev').addClass('disabled'); else $('#pages .prev').removeClass('disabled'); if (t.page == t.pages - 1) $('#pages .next').addClass('disabled'); else $('#pages .next').removeClass('disabled'); $(t.files).each(function(i) { var r = this, cfg = t.config; r = $.extend({ index : i, thumburl : '../../stream/index.php?cmd=im.thumb&path=' + escape(r.path) + '&u=' + r.size, thumb_width : (parseInt(cfg["thumbnail.width"]) + 10) + 'px', thumb_height : (parseInt(cfg["thumbnail.height"]) + 10) + 'px', text_width : (parseInt(cfg["thumbnail.width"]) - 16) + 'px' }, this); if (r.custom.twidth) { r.width = r.custom.twidth + 'px'; r.height = r.custom.theight + 'px'; } else { r.width = r.height = 'auto'; r.thumburl = 'img/img_generic.png'; } switch (r.type) { case 'parent': r.thumburl = 'img/parent_big.gif'; break; case 'folder': r.thumburl = 'img/folder_big.gif'; break; case 'swf': case 'flv': r.thumburl = 'img/flash.gif'; break; case 'dcr': r.thumburl = 'img/dcr.gif'; break; case 'mov': case 'qt': r.thumburl = 'img/qt.gif'; break; case 'ram': case 'rm': r.thumburl = 'img/rm.gif'; break; case 'wmv': case 'avi': case 'mpg': case 'mpeg': case 'asf': r.thumburl = 'img/avi.gif'; break; } fileLst.append(t.viewMode == 'thumbs' ? t.thumbTpl : t.textTpl, r); $('#file_' + i + ' img.thumbnailimage').attr('src', r.thumburl); }); }, deleteFiles : function(fl) { var t = this, args = {}; if (fl) { $(fl).each(function(i, v) { args['path' + i] = v.path; }); $.WindowManager.confirm($.translate('{#view.confirm_delete}'), function(s) { if (s) { if (!t.isDemo()) { RPC.exec('im.deleteFiles', args, function (data) { if (!RPC.handleError({message : '{#error.delete_failed}', visual_path : t.visualPath, response : data})) { t.listFiles(); t.listDirs(); } }); } } }); } }, insertFiles : function() { var t = this, s = t.currentWin.getArgs(), selectedPaths = []; $(t.selectedFiles).each(function(i, v) { selectedPaths.push(v.path); }); RPC.insertFiles({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, paths : selectedPaths, progress_message : $.translate("{#common.image_data}"), insert_filter : s.insert_filter, oninsert : function(o) { t.currentWin.close(); if (s.oninsert) { $(o.files).each(function(i, v) { if (v.path == t.focusedFile.path) o.focusedFile = v; }); s.oninsert(o); } } }); }, editFile : function(f) { $('#center').hide(); window.scrollTo(0, 0); $.WindowManager.open({ url : 'edit.html' + this.urlSuffix, onclose : function() { $('#center').show(); } }, { is_demo : this.demoMode, path : this.focusedFile.path, visual_path : this.visualPath, onsave : function() { ImageManager.listFiles(); ImageManager.listDirs(); } }).maximize(); }, viewFile : function(f) { $('#center').hide(); window.scrollTo(0, 0); $.WindowManager.open({ url : 'view.html' + this.urlSuffix, chromeless : 1, onclose : function() { $('#center').show(); } }, { is_demo : this.demoMode, path : f.path, visual_path : this.visualPath, ondelete : function() { ImageManager.listFiles(); } }).maximize(); }, createDir : function() { $.WindowManager.open({ url : 'createdir.html' + this.urlSuffix, width : 450, height : 280 }, { is_demo : this.demoMode, path : this.path, visual_path : this.visualPath, oncreate : function() { ImageManager.listFiles(); ImageManager.listDirs(); } }); }, uploadFiles : function() { $.WindowManager.open({ url : 'upload.html' + this.urlSuffix, width : 550, height : 350, scrolling : 'no' }, { is_demo : this.demoMode, path : this.path, visual_path : this.visualPath, onupload : function() { ImageManager.listFiles(); } }); }, fileManager : function() { var suf; if (this.fileManagerURL.indexOf('?') != -1) suf = this.urlSuffix.replace(/\?/, '&'); document.location = this.fileManagerURL + suf; }, listRoots : function() { var t = this; if (t.rootPathName) { $('#category_list').html(t.caregoryListTpl, {name : t.rootPathName, path : t.rootPath}); return; } RPC.exec('im.listFiles', { "path" : "root:///" }, function(data) { $(RPC.toArray(data.result)).each(function() { $('#category_list').append(t.caregoryListTpl, this); }); }); }, listDirs : function() { var t = this; $('#folder_list').html($.translate('
  • {#common.loading}
  • ')); RPC.exec('im.listFiles', { path : t.path, root_path : t.rootPath, only_dirs : true, include_directory_pattern : t.include_directory_pattern, exclude_directory_pattern : t.exclude_directory_pattern, filter : t.filter, remember_last_path : t.remember_last_path }, function(data) { $('#folder_list').html(''); $(RPC.toArray(data.result)).each(function() { $('#folder_list').append(t.caregoryListTpl, this); }); }); } }); $(function() { ImageManager.init(); ImageManager.listFiles(); ImageManager.listDirs(); ImageManager.listRoots(); }); })(jQuery); imagemanager/pages/im/js/jquery/jquery.imageselection.js000066600000021221150472616010017470 0ustar00/** * $Id: jquery.imageselection.js 460 2008-10-14 16:06:43Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { var count = 0; function ImageSelection(ta, s) { var t = this, id; s = t.settings = $.extend({ }, s); t.id = id = 'imageSelection' + (count++); t.mode = s.mode; $(ta).after( '
    ' + '
    ' + '
    ' + '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '
    ' ); t.scrollContainer = $(s.scroll_container); t.container = $('#' + id + '_container'); t.selection = $('#' + id + '_sel'); t.cornerTL = $('#' + id + '_tl'); t.cornerTC = $('#' + id + '_tc'); t.cornerTR = $('#' + id + '_tr'); t.cornerCL = $('#' + id + '_cl'); t.cornerCR = $('#' + id + '_cr'); t.cornerBL = $('#' + id + '_bl'); t.cornerBC = $('#' + id + '_bc'); t.cornerBR = $('#' + id + '_br'); // Add images t.offset = t.container.offset(); t.setImage(ta); t.container.mousedown(function(e) { var el = e.target; if (t.mode == 'none') return; if (el.id == id + '_mainImg') return t.drag(e, 'sel'); if (el.id == id + '_selectionImg') return t.drag(e, 'move'); if (el.nodeName == 'SPAN') return t.drag(e, el.className.replace(/selection\-corner(-|\s+)/g, '')); }); }; $.extend(ImageSelection.prototype, { getX : function(e) { return (e.clientX - this.settings.delta_x) + this.scrollContainer[0].scrollLeft; }, getY : function(e) { return (e.clientY - this.settings.delta_y) + this.scrollContainer[0].scrollTop; }, setMode : function(m) { var t = this; if (t.mode != m) { t.container.removeClass(t.mode); t.mode = m; t.container.addClass(m); if (m == 'none') { t.reset(); t.targetImg.show(); t.container.hide(); } else { t.targetImg.hide(); t.container.show(); } if (m == 'resize') { t.cornersVisible = 1; t.setRect(0, 0, t.maxW, t.maxH).show(); } else { t.cornersVisible = 0; t.setRect(0, 0, 0, 0); t.hide(); } } return t; }, setBounderyRect : function(x, y, w, h) { var t = this; t.minX = x; t.minY = y; t.maxW = w; t.maxH = h; }, setImage : function(ta) { var t = this; ta = $(ta); if (t.mode != 'none') ta.hide(); t.container.find('img').remove(); t.container.append($(ta).clone().attr('id', t.id + '_mainImg').addClass('mainimage')); t.mainImage = $('#' + t.id + '_mainImg').show(); t.selection.append($(ta).clone().attr('id', t.id + '_selectionImg').addClass('selimage')); t.selectionImg = t.selection.find('img').show(); t.targetImg = ta; t.setBounderyRect(0, 0, ta.width(), ta.height()); return t; }, setRect : function(x, y, w, h, ns) { var t = this, s = t.settings; // Flip rect horizontal if (w < 0) { w = w * -1; x -= w; if (x < 0) w += x; } // Flip rect vertical if (h < 0) { h = h * -1; y -= h; if (y < 0) h += y; } // Boundery check x = x < 0 ? 0 : x; y = y < 0 ? 0 : y; if (t.mode == 'crop') { w = w > t.maxW - x ? t.maxW - x : w; h = h > t.maxH - y ? t.maxH - y : h; } if (t.x != x) { t.selection.css('left', t.x = x); if (t.selectionImg) t.selectionImg.css('left', 0 - x - 1); } if (t.y != y) { t.selection.css('top', t.y = y); if (t.selectionImg) t.selectionImg.css('top', 0 - y - 1); } if (t.w != w) t.selection.css('width', 0).css('width', (t.w = w) - 2); if (t.h != h) t.selection.css('height', 0).css('height', (t.h = h) - 2); if (t.mode == 'resize') { t.selectionImg.css({left : 0, top : 0, width : t.w, height : t.h}); if (!ns) t.mainImage.css({width : t.w, height : t.h}); } $(t).trigger('imgselection:change', [x, y, w, h]); if (!ns) t.cornersVisible = 1; t.drawCorners().show(); return this; }, show : function() { var t = this; if (!t.visible) { t.selection.show(); if (t.cornersVisible) t.container.find('span').show(); t.visible = 1; } return t; }, hide : function() { var t = this; if (t.visible) { t.selection.hide(); t.container.find('span').hide(); t.visible = 0; } return t; }, reset : function() { var t = this, w = t.targetImg.width(), h = t.targetImg.height(); t.mainImage.css({width : w, height : h}); t.selectionImg.css({width : w, height : h}); t.setRect(0, 0, w, h); t.setBounderyRect(0, 0, w, h); return t; }, drawCorners : function() { var t = this; if (t.cornersVisible) { t.cornerTL.css({left : t.x - 4, top : t.y - 4}).show(); t.cornerTC.css({left : t.x + Math.round((t.w - 8) / 2), top : t.y - 4}).show(); t.cornerTR.css({left : t.x + t.w - 3, top : t.y - 4}).show(); t.cornerCL.css({left : t.x - 4, top : t.y + Math.round((t.h - 8) / 2)}).show(); t.cornerCR.css({left : t.x + t.w - 3, top : t.y + Math.round((t.h - 8) / 2)}).show(); t.cornerBL.css({left : t.x - 4, top : t.y + t.h - 3}).show(); t.cornerBC.css({left : t.x + Math.round((t.w - 8) / 2), top : t.y + t.h - 3}).show(); t.cornerBR.css({left : t.x + t.w - 3, top : t.y + t.h - 3}).show(); } return t; }, startDrag : function(e, o) { var t = this, sx = t.getX(e), sy = t.getY(e); if (o.start) o.start.call(t, sx, sy); function drag(e) { if (o.drag) o.drag.call(t, t.getX(e), t.getY(e)); e.preventDefault(); return false; }; function up() { if (o.end) o.end.call(t, t.getX(e), t.getY(e)); $().unbind('mouseup', up); $().unbind('mousemove', drag); e.preventDefault(); return false; }; $().mousemove(drag); $().mouseup(up); e.preventDefault(); return false; }, drag : function(e, ty) { var t = this, sx, sy, rx, ry, rw, rh, mw, mh, a; t.startDrag(e, { start : function(x, y) { sx = x; sy = y; rx = t.x; ry = t.y; rw = t.w; rh = t.h; mw = t.maxW; mh = t.maxH; a = (rw / rh) || 0; if (rw == 0 && rh == 0) t.hide(); t.cornersVisible = 0; t.container.find('span').hide(); t.selection.addClass('selection-corner-' + ty); }, drag : function(cx, cy) { var x = rx, y = ry, w = rw, h = rh, dx, dy, p = t.proportional || e.shiftKey; dx = cx - sx; dy = cy - sy; // Calc rect switch (ty) { case 'sel': dx = p ? Math.round(dy * a) : dx; w = dx; h = dy; x = sx; y = sy - 1; // Fix quirk break; case 'tl': dx = p ? Math.round(dy * a) : dx; x = rx + dx; y = ry + dy; w = rw - dx; h = rh - dy; break; case 'tc': y = ry + dy; h = rh - dy; break; case 'tr': dx = p ? Math.round(-dy * a) : dx; y = ry + dy; w = rw + dx; h = rh - dy; break; case 'cl': x = rx + dx; w = rw - dx; break; case 'cr': w = rw + dx; break; case 'bl': dx = p ? Math.round(-dy * a) : dx; x = rx + dx; w = rw - dx; h = rh + dy; break; case 'bc': h = rh + dy; break; case 'br': dx = p ? Math.round(dy * a) : dx; w = rw + dx; h = rh + dy; break; case 'move': x = rx + dx; y = ry + dy; x = x + rw > mw ? mw - rw : x; y = y + rh > mh ? mh - rh : y; break; } if (ty != 'move') { w = x < 0 ? w + x : w; h = y < 0 ? h + y : h; } t.setRect(x, y, w, h, 1); }, end : function() { t.cornersVisible = 1; if (t.mode == 'resize') { t.setRect(0, 0, t.w, t.h); t.setBounderyRect(0, 0, t.w, t.h); } t.drawCorners(); t.selection.removeClass('selection-corner-' + ty); } }); } }); $.createImageSelection = function(ta, s) { return new ImageSelection(ta, s); }; })(jQuery);imagemanager/pages/im/js/jquery/jquery.multiupload.js000066600000007317150472616010017051 0ustar00/** * $Id: jquery.multiupload.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { var id = 0; $.multiUpload = function(s) { var up = this, mul; up.id = up.generateID(); // Default settings up.settings = { }; up.settings = s = $.extend(up.settings, s); // Parse max size if (s.max_size) s.max_size = up.parseSize(s.max_size); // Parse chunk size if (s.chunk_size) s.chunk_size = up.parseSize(s.chunk_size); if (s.oninit) { $(up).bind('multiUpload:init', function() { s.oninit.call(up, up); }); } up.init(); $(['setup', 'filesSelected', 'fileProgress', 'filesProgress', 'filesUploaded', 'fileUploaded', 'fileUploadProgress']).each(function() { if (s[(this)]) $(up).bind('multiUpload:' + this, s[(this)]); }); $(up).trigger('multiUpload:setup'); $(up).bind('multiUpload:selectFiles', function() {this.cache = {};}); $(up).bind('multiUpload:filesSelected', function(e, fs) { var mx = up.settings.max_size; function filter(f) { var m = /\.([^.]+)$/.exec(f.name.toLowerCase()), ext = m ? m[1] : null; return ext && $.inArray(ext, s.filter) != -1 && (!mx || f.size < mx); }; // Remove non valid files if (s.filter[0] != '*') { this.files = $.grep(this.files, filter); fs.files = $.grep(fs.files, filter); } this.cache = {}; }); }; // Add public methods $.extend($.multiUpload.prototype, { files : [], cache : {}, listeners : {}, status : 0, init : function() { }, repaint : function() { }, selectFiles : function() { $(this).trigger('multiUpload:selectFiles'); }, startUpload : function() { this.status = 1; $(this).trigger('multiUpload:startUpload'); this.uploadNext(); }, stopUpload : function() { this.status = 0; $(this).trigger('multiUpload:stopUpload'); }, uploadNext : function() { var i, fl = this.files; if (!this.status) return; for (i = 0; i < fl.length; i++) { if (!fl[i].status) { $(this).trigger('multiUpload:uploadFile', [fl[i]]); return; } } this.stopUpload(); }, getFile : function(id) { var t = this, f, i, fl = t.files; if (f = t.cache[id]) return f; for (i = 0; i < fl.length; i++) { if (fl[i].id == id) return t.cache[id] = fl[i]; } }, removeFile : function(id) { var up = this, f; up.files = $.grep(up.files, function(v) { if (v.id == id) f = v; return v.id != id; }); $(this).trigger('multiUpload:removeFile', f); $(this).trigger('multiUpload:filesChanged'); }, clearFiles : function() { this.stopUpload(); this.files = []; this.cache = {}; $(this).trigger('multiUpload:clearFiles'); $(this).trigger('multiUpload:filesChanged'); }, formatSize : function(v) { // MB if (v > 1048576) return Math.round(v / 1048576, 1) + " MB"; // KB if (v > 1024) return Math.round(v / 1024, 1) + " KB"; return v + " b"; }, generateID : function() { return 'u' + (id++); }, parseSize : function(sz) { var mul; if (typeof(sz) == 'string') { sz = /^([0-9]+)([mk]+)$/.exec(sz.toLowerCase().replace(/[^0-9mk]/g, '')); mul = sz[2]; sz = parseInt(sz[1]); if (mul == 'm') sz *= 1048576; if (mul == 'k') sz *= 1024; } return sz; } }); // Static methods $.extend($.multiUpload, { instances : {}, create : function(s) { return this.add(new $.multiUpload(s)); }, remove : function(id) { if (this.get(id)) delete this.instances[id]; }, add : function(up) { return this.instances[up.id] = up; }, get : function(id) { return this.instances[id]; } }); })(jQuery); imagemanager/pages/im/js/jquery/jquery.multiupload.silverlight.js000066600000012647150472616010021406 0ustar00/** * $Id: jquery.multiupload.silverlight.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ function onSilverlightError(sender, args) { alert("onSilverlightError: " + args.errormessage); }; (function($) { function isInstalled(version) { var isVersionSupported = false; var container = null; try { var control = null; try { control = new ActiveXObject('AgControl.AgControl'); if (version == null) isVersionSupported = true; else if (control.IsVersionSupported(version)) isVersionSupported = true; control = null; } catch (e) { var plugin = navigator.plugins["Silverlight Plug-In"]; if (plugin) { if (version === null) { isVersionSupported = true; } else { var actualVer = plugin.description; if (actualVer === "1.0.30226.2") actualVer = "2.0.30226.2"; var actualVerArray = actualVer.split("."); while (actualVerArray.length > 3) actualVerArray.pop(); while ( actualVerArray.length < 4) actualVerArray.push(0); var reqVerArray = version.split("."); while (reqVerArray.length > 4) reqVerArray.pop(); var requiredVersionPart, actualVersionPart, index = 0; do { requiredVersionPart = parseInt(reqVerArray[index]); actualVersionPart = parseInt(actualVerArray[index]); index++; } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) isVersionSupported = true; } } } } catch (e) { isVersionSupported = false; } return isVersionSupported; }; if (!$.multiUpload.initialized && isInstalled('2.0.31005.0')) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'silverlight'; // Register global Silverlight instance $.multiUpload.setup = function(se) { $.multiUpload.plugin = $('#multiuploader')[0].content.Upload; $.multiUpload._fireEvent('init'); }; $.multiUpload.instances = []; $.multiUpload._fireEvent = function(na, p1, p2, p3, p4) { // Detach event from flash window.setTimeout(function() { $($.multiUpload.instances).each(function(i, v) { $(v).trigger('multiUpload:' + na, [p1, p2, p3, p4]); }); }, 0); }; // Override init function $.extend($.multiUpload.prototype, { init : function() { var up = this, sel = []; $.multiUpload.instances.push(up); // Add silverlight runtime if (!$('#multiuploader')[0]) { $("body").append( '' + '' + '' ); } // Register silverlight specific event handlers $(up).bind('multiUpload:slSelectFile', function(e, id, na, sz) { var fo = {id : id, name : na, size : sz, loaded : 0}; sel.push(fo); up.files.push(fo); }); $(up).bind('multiUpload:slSelectSuccessful', function() { $(up).trigger('multiUpload:filesSelected', [{files : sel}]); $(up).trigger('multiUpload:filesChanged'); sel = []; }); $(up).bind('multiUpload:slSelectCancelled', function() { $(up).trigger('multiUpload:filesSelectionCancelled', [sel]); sel = []; }); $(up).bind('multiUpload:slUploadFileProgress', function(e, id, lod, tot) { var file = up.getFile(id); file.loaded = lod; $(up).trigger('multiUpload:fileUploadProgress', [{file : file, loaded : lod, total : tot}]); }); $(up).bind('multiUpload:slUploadSuccessful', function(e, id, resp) { var fo; if (fo = up.getFile(id)) { if (!fo.status) { fo.status = "completed"; $(up).trigger('multiUpload:fileUploaded', [{file : fo, response : resp}]); } } $(up).trigger('multiUpload:filesChanged'); up.uploadNext(); }); $(up).bind('multiUpload:stopUpload', function(e) { $.multiUpload.plugin.CancelUpload(); }); $(up).bind('multiUpload:slUploadChunkSuccessful', function(e, id, chunk, chunks, resp) { var fo = up.getFile(id), ar = {file : fo, chunk : chunk, chunks : chunks, response : resp}; $(up).trigger('multiUpload:chunkUploaded', [ar]); if (ar.cancel) { fo.status = "failed"; $.multiUpload.plugin.CancelUpload(); } }); $(up).bind('multiUpload:slUploadChunkError', function(e, id, chunk, chunks, err) { $(up).trigger('multiUpload:uploadChunkError', [{file : up.getFile(id), chunk : chunk, chunks : chunks, error : err}]); }); // Register event handlers $(up).bind('multiUpload:selectFiles', function(e) { $.multiUpload.plugin.SelectFiles( 'Files |' + $.map(up.settings.filter, function(v) { return '*.' + v }).join(';') ); }); $(up).bind('multiUpload:removeFile', function(e, fo) { $.multiUpload.plugin.RemoveFile(fo.id); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { $.multiUpload.plugin.UploadFile( fo.id, up.settings.upload_url + '&name=' + escape(fo.name) + "&path=" + escape(up.settings.path), parseInt(up.settings.chunk_size) ); }); $(up).bind('multiUpload:clearFiles', function(e) { $.multiUpload.plugin.ClearFiles(); }); } }); } })(jQuery);imagemanager/pages/im/js/jquery/jquery.uri.js000066600000013712150472616010015305 0ustar00/** * $Id: jquery.uri.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function URI(u, s) { var t = this, o, a, b; // Default settings s = t.settings = s || {}; // Strange app protocol or local anchor if (/^(mailto|news|javascript|about):/i.test(u) || /^\s*#/.test(u)) { t.source = u; return; } // Absolute path with no host, fake host and protocol if (u.indexOf('/') === 0 && u.indexOf('//') !== 0) u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u; // Relative path if (u.indexOf(':/') === -1 && u.indexOf('//') !== 0) u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u); // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u); $(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]).each(function(i, v) { var s = u[i]; // Zope 3 workaround, they use @@something if (s) s = s.replace(/\(mce_at\)/g, '@@'); t[v] = s; }); if (b = s.base_uri) { if (!t.protocol) t.protocol = b.protocol; if (!t.userInfo) t.userInfo = b.userInfo; if (!t.port && t.host == 'mce_host') t.port = b.port; if (!t.host || t.host == 'mce_host') t.host = b.host; t.source = ''; } }; $.extend(URI.prototype, { /** * Sets the internal path part of the URI. * * @param {string} p Path string to set. */ setPath : function(p) { var t = this; p = /^(.*?)\/?(\w+)?$/.exec(p); // Update path parts t.path = p[0]; t.directory = p[1]; t.file = p[2]; // Rebuild source t.source = ''; t.getURI(); }, /** * Converts the specified URI into a relative URI based on the current URI instance location. * * @param {String} u URI to convert into a relative path/URI. * @return {String} Relative URI from the point specified in the current URI instance. */ toRelative : function(u) { var t = this, o; if (u === "./") return u; u = new URI(u, {base_uri : t}); // Not on same domain/port or protocol if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol) return u.getURI(); o = t.toRelPath(t.path, u.path); // Add query if (u.query) o += '?' + u.query; // Add anchor if (u.anchor) o += '#' + u.anchor; return o; }, /** * Converts the specified URI into a absolute URI based on the current URI instance location. * * @param {String} u URI to convert into a relative path/URI. * @param {bool} nh No host and protocol prefix. * @return {String} Absolute URI from the point specified in the current URI instance. */ toAbsolute : function(u, nh) { var u = new URI(u, {base_uri : this}); return u.getURI(this.host == u.host ? nh : 0); }, /** * Converts a absolute path into a relative path. * * @param {String} base Base point to convert the path from. * @param {String} path Absolute path to convert into a relative path. */ toRelPath : function(base, path) { var items, bp = 0, out = '', i, l; // Split the paths base = base.substring(0, base.lastIndexOf('/')); base = base.split('/'); items = path.split('/'); if (base.length >= items.length) { for (i = 0, l = base.length; i < l; i++) { if (i >= items.length || base[i] != items[i]) { bp = i + 1; break; } } } if (base.length < items.length) { for (i = 0, l = items.length; i < l; i++) { if (i >= base.length || base[i] != items[i]) { bp = i + 1; break; } } } if (bp == 1) return path; for (i = 0, l = base.length - (bp - 1); i < l; i++) out += "../"; for (i = bp - 1, l = items.length; i < l; i++) { if (i != bp - 1) out += "/" + items[i]; else out += items[i]; } return out; }, /** * Converts a relative path into a absolute path. * * @param {String} base Base point to convert the path from. * @param {String} path Relative path to convert into an absolute path. */ toAbsPath : function(base, path) { var i, nb = 0, o = []; // Split paths base = base.split('/'); path = path.split('/'); // Remove empty chunks $(base).each(function(i, k) { if (k) o.push(k); }); base = o; // Merge relURLParts chunks for (i = path.length - 1, o = []; i >= 0; i--) { // Ignore empty or . if (path[i].length == 0 || path[i] == ".") continue; // Is parent if (path[i] == '..') { nb++; continue; } // Move up if (nb > 0) { nb--; continue; } o.push(path[i]); } i = base.length - nb; // If /a/b/c or / if (i <= 0) return '/' + o.reverse().join('/'); return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/'); }, /** * Returns the full URI of the internal structure. * * @param {bool} nh Optional no host and protocol part. Defaults to false. */ getURI : function(nh) { var s, t = this; // Rebuild source if (!t.source || nh) { s = ''; if (!nh) { if (t.protocol) s += t.protocol + '://'; if (t.userInfo) s += t.userInfo + '@'; if (t.host) s += t.host; if (t.port) s += ':' + t.port; } if (t.path) s += t.path; if (t.query) s += '?' + t.query; if (t.anchor) s += '#' + t.anchor; t.source = s; } return t.source; } }); $.parseURI = function(u, s) { s = s || {}; return new URI(u, $.extend({base_uri : new URI(s.base_url || document.location.href)}, s)); }; })(jQuery);imagemanager/pages/im/js/jquery/jquery.cleanname.js000066600000001416150472616010016427 0ustar00/** * $Id: jquery.cleanname.js 528 2008-10-29 17:58:01Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ $.cleanName = function(s) { var i, lo; // Replace diacritics lo = [ /[\300-\306]/g, 'A', /[\340-\346]/g, 'a', /\307/g, 'C', /\347/g, 'c', /[\310-\313]/g, 'E', /[\350-\353]/g, 'e', /[\314-\317]/g, 'I', /[\354-\357]/g, 'i', /\321/g, 'N', /\361/g, 'n', /[\322-\330]/g, 'O', /[\362-\370]/g, 'o', /[\331-\334]/g, 'U', /[\371-\374]/g, 'u' ]; for (i = 0; i < lo.length; i += 2) s = s.replace(lo[i], lo[i + 1]); // Replace whitespace s = s.replace(/\s+/g, '_'); // Remove anything else s = s.replace(/[^a-z0-9_\-\.]+/gi, ''); return s; }; })(jQuery);imagemanager/pages/im/js/jquery/jquery.dropmenu.js000066600000011733150472616010016340 0ustar00/** * $Id: jquery.dropmenu.js 466 2008-10-15 14:54:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { var idCount = 0; function DropMenu(s) { var t = this, k; t.items = []; t.settings = s = $.extend({ menu_class : 'menu', menu_item_class : 'menuitem', item_class : 'item', separator_class : 'separator', submenu_item_class : 'submenu', active_class : 'active' }, s); t.id = s.id; if (s.setup) s.setup.call(t, t); // Private methods function hideHandler(e) { if (e.target.nodeName !== 'A' || !$(e.target).parents('div.' + s.menu_class).length) t.hide(); }; function clickHandler(e) { var m; if (e.target.nodeName === 'A') { m = t.find(e.target.rel); if (!m.show && !m.disabled) { if (m.onclick) m.onclick.call(m.scope || this, e, m); if (s.onClick) s.onClick(e, m); m = t; do { m.hide(); } while (m = m.parentMenu); } e.preventDefault(); return false; } }; function mouseOverHandler(e) { var x, y, o, m, el; if (e.target.nodeName === 'A') { if (t.lastMenu) t.lastMenu.hide(); if (m = t.find(e.target.rel)) { if (m.show) { el = $(e.target.parentNode); o = el.offset(); x = o.left + el.width(); y = o.top; el.addClass(m.settings.active_class); t.lastMenu = m; m.show(x, y); } } } }; function createElm(n, a, h) { n = document.createElement(n); if (a) $(n).attr(a); if (h) $(n).html(h); return n; }; function uniqueId() { return 'jquery_mc_' + idCount++; }; // Public methods $.extend(this, { createMenu : function(s) { return new DropMenu(s); }, find : function(n) { var i; for (i = 0; i < t.items.length; i++) { if (t.items[i].id === n) return t.items[i]; } return null; }, clear : function() { t.hide(); t.items = []; $('#' + t.id).remove(); t.rendered = 0; }, render : function(n) { if (!n.id) n.id = t.id = uniqueId(); else t.id = 'jquery_mc_' + n.id; if (s.onInit) s.onInit(t); }, show : function(x, y) { var pe, it, m, s = t.settings; if (t.visible) t.hide(); $(t).trigger('DropMenu:beforeshow', [t]); $().trigger('DropMenu:beforeshow', [t]); if (!t.rendered) { pe = createElm('div', {id : t.id, 'class' : s.menu_class}); $.each(t.items, function(i, v) { var ti, id, cl = '', an; if (v.constructor == DropMenu) { ti = v.settings.title; cl = ' ' + s.submenu_item_class; if (v.settings['class']) cl += ' ' + v.settings['class']; } else { ti = v.title; if (this['class']) cl = ' ' + v['class']; } if (v.disabled || v.settings && v.settings.disabled) cl += ' disabled'; // Add menu item it = createElm('div', {id : t.id + '_' + v.id, 'class' : s.menu_item_class + cl}); an = createElm('a', {rel : v.id, href : '#'}, ti); //$(an).append(createElm('span', null, ti)); $(it).append(an); $(pe).append(it); }); $(document.body).append(pe); t.rendered = 1; } $().mouseup(hideHandler); m = $('#' + t.id); m.mouseover(mouseOverHandler).show().css({left : -5000, top : -5000}); // Measure and align if (s.halign == 'right') x -= m.width(); if (s.valign == 'bottom') y -= m.height(); // Constrain if (s.constrain) { x = x < 0 ? 0 : x; y = y < 0 ? 0 : y; x = x + m.width() > $.winWidth() ? $.winWidth() - m.width() : x; y = y + m.height() > $.winHeight() ? $.winHeight() - m.height() : y; } m.css({left : x, top : y}).click(clickHandler); t.visible = 1; $(t).trigger('DropMenu:show'); $().trigger('DropMenu:show', [t]); return false; }, hide : function() { if (!t.visible) return false; $('a[@rel=' + t.id + ']').parent().removeClass('active'); $().unbind('mouseup', hideHandler); $('#' + t.id).unbind('mouseover', mouseOverHandler).hide(); $('#' + t.id).unbind('click', clickHandler); t.visible = 0; $.each(t.items, function() { if (this.hide) this.hide(); }); $(t).trigger('DropMenu:hide'); $().trigger('DropMenu:hide', [t]); return false; }, add : function(o) { o.id = o.id || uniqueId(); t.items.push(o); return o; }, addSeparator : function() { return t.add({'class' : s.separator_class, title : 'separator'}); }, addMenu : function(o) { if (!o.onClick) o.onClick = s.onClick; o = new DropMenu(o); o.parentMenu = t; return t.add(o); } }); }; jQuery.mcDropMenu = DropMenu; jQuery.fn.mcContextMenu = function(s) { this.each(function() { var m = new $.mcDropMenu(s); m.render(this); $(this).bind('contextmenu', function(e) { return m.show(e.clientX, e.clientY); }); }); }; })(jQuery); imagemanager/pages/im/js/jquery/jquery.json.js000066600000005755150472616010015467 0ustar00(function ($) { var m = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }, s = { 'array': function (x) { var a = ['['], b, f, i, l = x.length, v; for (i = 0; i < l; i += 1) { v = x[i]; f = s[typeof v]; if (f) { v = f(v); if (typeof v == 'string') { if (b) { a[a.length] = ','; } a[a.length] = v; b = true; } } } a[a.length] = ']'; return a.join(''); }, 'boolean': function (x) { return String(x); }, 'null': function (x) { return "null"; }, 'number': function (x) { return isFinite(x) ? String(x) : 'null'; }, 'object': function (x) { if (x) { if (x instanceof Array) { return s.array(x); } var a = ['{'], b, f, i, v; for (i in x) { v = x[i]; f = s[typeof v]; if (f) { v = f(v); if (typeof v == 'string') { if (b) { a[a.length] = ','; } a.push(s.string(i), ':', v); b = true; } } } a[a.length] = '}'; return a.join(''); } return 'null'; }, 'string': function (x) { if (/["\\\x00-\x1f]/.test(x)) { x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { var c = m[b]; if (c) { return c; } c = b.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); }); } return '"' + x + '"'; } }; $.toJSON = function(v) { var f = isNaN(v) ? s[typeof v] : s['number']; if (f) return f(v); }; $.parseJSON = function(v, safe) { if (safe === undefined) safe = $.parseJSON.safe; if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v)) return undefined; return eval('('+v+')'); }; $.parseJSON.safe = false; })(jQuery); imagemanager/pages/im/js/jquery/jquery.template.js000066600000016004150472616010016316 0ustar00/** * jQuery Templates * * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * * Written by: Stan Lemon * * Based off of the Ext.Template library, available at: * http://www.extjs.com * * This library provides basic templating functionality, allowing for macro-based * templates within jQuery. * * Basic Usage: * * var t = $.template('
    Hello ${name}, how are you ${question}? I am ${me:substr(0,10)}
    '); * * $(selector).append( t , { * name: 'Stan', * question: 'feeling', * me: 'doing quite well myself, thank you very much!' * }); * * Requires: jQuery 1.2+ * * * @todo Add callbacks to the DOM manipulation methods, so that events can be bound * to template nodes after creation. */ (function($){ /** * Create a New Template */ $.template = function(html, options) { return new $.template.instance(html, options); }; /** * Template constructor - Creates a new template instance. * * @param html The string of HTML to be used for the template. * @param options An object of configurable options. Currently * you can toggle compile as a boolean value and set a custom * template regular expression on the property regx by * specifying the key of the regx to use from the regx object. */ $.template.instance = function(html, options) { // If a custom regular expression has been set, grab it from the regx object if ( options && options['regx'] ) options.regx = this.regx[ options.regx ]; this.options = $.extend({ compile: false, regx: this.regx.standard }, options || {}); this.html = html; if (this.options.compile) { this.compile(); } this.isTemplate = true; }; /** * Regular Expression for Finding Variables * * The default pattern looks for variables in JSP style, the form of: ${variable} * There are also regular expressions available for ext-style variables and * jTemplate style variables. * * You can add your own regular expressions for variable ussage by doing. * $.extend({ $.template.re , { * myvartype: /...../g * } * * Then when creating a template do: * var t = $.template("
    ...
    ", { regx: 'myvartype' }); */ $.template.regx = $.template.instance.prototype.regx = { jsp: /\$\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, ext: /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, jtemplates: /\{\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}\}/g }; /** * Set the standard regular expression to be used. */ $.template.regx.standard = $.template.regx.jsp; /** * Variable Helper Methods * * This is a collection of methods which can be used within the variable syntax, ie: * ${variable:substr(0,30)} Which would only print a substring, 30 characters in length * begining at the first character for the variable named "variable". * * A basic substring helper is provided as an example of how you can define helpers. * To add more helpers simply do: * $.extend( $.template.helpers , { * sampleHelper: function() { ... } * }); */ $.template.helpers = $.template.instance.prototype.helpers = { substr : function(value, start, length){ return String(value).substr(start, length); } }; /** * Template Instance Methods */ $.extend( $.template.instance.prototype, { /** * Apply Values to a Template * * This is the macro-work horse of the library, it receives an object * and the properties of that objects are assigned to the template, where * the variables in the template represent keys within the object itself. * * @param values An object of properties mapped to template variables */ apply: function(values) { if (this.options.compile) { return this.compiled(values); } else { var tpl = this; var fm = this.helpers; var fn = function(m, name, format, args) { if (format) { if (format.substr(0, 5) == "this."){ return tpl.call(format.substr(5), values[name], values); } else { if (args) { // quoted values are required for strings in compiled templates, // but for non compiled we need to strip them // quoted reversed for jsmin var re = /^\s*['"](.*)["']\s*$/; args = args.split(','); for(var i = 0, len = args.length; i < len; i++) { args[i] = args[i].replace(re, "$1"); } args = [values[name]].concat(args); } else { args = [values[name]]; } return fm[format].apply(fm, args); } } else { return values[name] !== undefined ? values[name] : ""; } }; return this.html.replace(this.options.regx, fn); } }, /** * Compile a template for speedier usage */ compile: function() { var sep = $.browser.mozilla ? "+" : ","; var fm = this.helpers; var fn = function(m, name, format, args){ if (format) { args = args ? ',' + args : ""; if (format.substr(0, 5) != "this.") { format = "fm." + format + '('; } else { format = 'this.call("'+ format.substr(5) + '", '; args = ", values"; } } else { args= ''; format = "(values['" + name + "'] == undefined ? '' : "; } return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'"; }; var body; if ($.browser.mozilla) { body = "this.compiled = function(values){ return '" + this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.options.regx, fn) + "';};"; } else { body = ["this.compiled = function(values){ return ['"]; body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.options.regx, fn)); body.push("'].join('');};"); body = body.join(''); } eval(body); return this; } }); /** * Save a reference in this local scope to the original methods which we're * going to overload. **/ var $_old = { domManip: $.fn.domManip, text: $.fn.text, html: $.fn.html }; /** * Overwrite the domManip method so that we can use things like append() by passing a * template object and macro parameters. */ $.fn.domManip = function( args, table, reverse, callback ) { if (args[0].isTemplate) { // Apply the template and it's arguments... args[0] = args[0].apply( args[1] ); // Get rid of the arguements, we don't want to pass them on delete args[1]; } // Call the original method var r = $_old.domManip.apply(this, arguments); return r; }; /** * Overwrite the html() method */ $.fn.html = function( value , o ) { if (value && value.isTemplate) var value = value.apply( o ); var r = $_old.html.apply(this, [value]); return r; }; /** * Overwrite the text() method */ $.fn.text = function( value , o ) { if (value && value.isTemplate) var value = value.apply( o ); var r = $_old.text.apply(this, [value]); return r; }; })(jQuery); imagemanager/pages/im/js/jquery/jquery.dialog.js000066600000034122150472616010015743 0ustar00/** * $Id: jquery.dialog.js 589 2008-11-13 11:15:53Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.Window = function(f, a) { var t = this; t.features = f; t.args = a; t.isIE6 = /MSIE [56]/.test(navigator.userAgent); // Register actions t.clickActions = { min : t.minimize, max : t.maximize, med : t.medimize, close : t.close }; t.mouseDownActions = { move : t.startDrag, 'resize-n' : t.startDrag, 'resize-nw' : t.startDrag, 'resize-w' : t.startDrag, 'resize-e' : t.startDrag, 'resize-s' : t.startDrag, 'resize-sw' : t.startDrag, 'resize-se' : t.startDrag }; }; $.extend($.Window.prototype, { getArgs : function() { return this.args; }, focus : function() { var t = this, id = t.id; if (!t.focused) { if (t.shim) t.shim.css('z-index', $.WindowManager.zIndex); $('#' + id).css('z-index', t.zIndex = $.WindowManager.zIndex++); $('#' + id + '_container').addClass('focus'); $('#' + id + '_top').addClass('focustop'); $('#' + id + '_middle').addClass('focusmiddle'); $('#' + id + '_bottom').addClass('focusbottom'); $($.WindowManager.windows).each(function() { if (this != t) this.blur(); }); t.focused = 1; } return this; }, blur : function() { var t = this, id = t.id; if (t.focused) { $('#' + id + '_container').removeClass('focus'); $('#' + id + '_top').removeClass('focustop'); $('#' + id + '_middle').removeClass('focusmiddle'); $('#' + id + '_bottom').removeClass('focusbottom'); t.focused = 0; } return t; }, setTitle : function(ti) { this.features.title = ti; $('#' + this.id + '_title').html(ti); return this; }, setStatus : function(st) { $('#' + this.id + '_statustext').html(st); return this; }, minimize : function() { return this; }, medimize : function() { var t = this, sp = $.scrollPos(), r; if (r = t.lastRect) { $('#' + t.id + '_max').removeClass('med').addClass('max'); t.moveTo(r.x, r.y); t.resizeTo(r.w, r.h); t.lastRect = 0; } return t; }, maximize : function() { var t = this, sp = $.scrollPos(); if (!t.lastRect) { t.lastRect = {x : t.x, y : t.y, w : t.width, h : t.height}; $('#' + t.id + '_max').removeClass('max').addClass('med'); t.moveTo(sp.x, sp.y); t.resizeTo($.winWidth(), $.winHeight(), 1); } return t; }, close : function(ac) { var t = this, f; if (ac && (f = t.features.onbeforeclose)) { if (f.call(t) === false) return; } $('#' + t.id).remove(); if ($.WindowManager.windows.length == 1) $('#windowManEventBlocker').remove(); $.WindowManager.remove(t); if (t.shim) { t.shim.remove(); t.shim = 0; } if (t.features.onclose) t.features.onclose(t); }, moveTo : function(x, y) { var t = this, el = $('#' + t.id); if (t.x != x) { el.css({left : x}); t.x = x; } if (t.y != y) { el.css({top : y}); t.y = y; } if (t.shim) t.shim.css({left : x, top : y}); return t; }, moveBy : function(dx, dy) { return this.moveTo(this.x + parseInt(dx), this.y + parseInt(dy)); }, resizeTo : function(w, h, nr) { var t = this, b = t.borders, el = $('#' + t.id), ifr = $('#' + t.id + '_content, #' + t.id + '_ifr'); w = parseInt(w); h = parseInt(h); if (!nr && t.lastRect) { $('#' + t.id + '_max').removeClass('med').addClass('max'); t.lastRect = 0; } if (t.width != w) { ifr.css({width : w - b.w}); el.css({width : w}); t.width = w; } if (t.height != h) { ifr.css({height : h - b.h}); el.css({height : h}); $('#' + t.id + '_middle').css('height', h - b.h); t.height = h; } if (t.shim) t.shim.css({width : w, height : h}); return t; }, resizeBy : function(dw, dh) { return this.resizeTo(this.width + parseInt(dw), this.height + parseInt(dh)); }, show : function() { var t = this, id = t.id, bw, bh; $('#' + id).show(); // Calculate borders bw = $('#' + id + '_middle div.left')[0].clientWidth; bw += $('#' + id + '_middle div.right')[0].clientWidth; bh = $('#' + id + '_top')[0].clientHeight; bh += $('#' + id + '_bottom')[0].clientHeight; t.borders = {w : bw, h : bh - 1}; if (t.shim) t.shim.show(); return t; }, hide : function() { var t = this; $('#' + t.id).hide(); if (t.shim) t.shim.hide(); return t; }, setContent : function(h) { $('#' + this.id + '_content').html(h); return this; }, setURL : function(u) { var t = this, id = t.id, ifr = $('#' + id + '_ifr'), b = t.borders; if (!ifr[0]) $('#' + id + '_content').html('').append($.createElm('iframe', {id : id + '_ifr', src : u, frameBorder : '0', scrolling : t.features.scrolling}).css({width : t.width - b.w, height : t.height - b.h})); else ifr.attr('src', u); return t; }, startMove : function(a, e) { var t = this, bid = t.features.theme + '_move', mb, sx = e.screenX, sy = e.screenY, dx, dy, wx, wy; $(document.body).append($.createElm('div', {id : bid, 'class' : t.features.theme + '_event_blocker'}).css('z-index', $.WindowManager.zIndex)); mb = $('#' + bid).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); wx = t.x; wy = t.y; mb.mousemove(function(e) { dx = e.screenX - sx; dy = e.screenY - sy; t.moveTo(wx + dx, wy + dy); }); mb.mouseup(function(e) { mb.remove(); }); }, startDrag : function(a, e) { var t = this, bid = t.features.theme + '_move', mb, sx = e.screenX, sy = e.screenY, dx, dy, wx, wy, w, h; $(document.body).append($.createElm('div', {id : bid, 'class' : t.features.theme + '_event_blocker'}).css('z-index', $.WindowManager.zIndex)); mb = $('#' + bid).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); wx = t.x; wy = t.y; w = t.width; h = t.height; mb.mousemove(function(e) { dx = e.screenX - sx; dy = e.screenY - sy; var x = wx + dx, y = wy + dy; switch (a) { case 'resize-n': t.moveTo(wx, y); t.resizeTo(w, h - dy); break; case 'resize-nw': t.moveTo(x, y); t.resizeTo(w - dx, h - dy); break; case 'resize-ne': t.moveTo(wx, y); t.resizeTo(w + dx, h - dy); break; case 'resize-w': t.moveTo(x, wy); t.resizeTo(w - dx, h); break; case 'resize-e': t.resizeTo(w + dx, h); break; case 'resize-s': t.resizeTo(w, h + dy); break; case 'resize-sw': t.moveTo(wx + dx, wy); t.resizeTo(w - dx, h + dy); break; case 'resize-se': t.resizeTo(w + dx, h + dy); break; case 'move': t.moveTo(wx + dx, wy + dy); break; } e.preventDefault(); return false; }); mb.mouseup(function(e) { mb.remove(); }); e.preventDefault(); return false; }, render : function() { var t = this, id = 'win_' + $.WindowManager.count++, f = t.features, mc = '', bl, v; t.features = f = $.extend({ theme : 'clearlooks2', modal : 1, type : 'window', x : -1, y : -1, width : 320, height : 240, title : ' ' }, f); // Center window if (f.x == -1) f.x = Math.round(($.winWidth() / 2) - (f.width / 2)); if (f.y == -1) f.y = Math.round(($.winHeight() / 2) - (f.height / 2)); t.id = id; if (f.modal) { bl = $('#windowManEventBlocker'); if (!bl[0]) { $(document.body).append($.createElm('div', {id : 'windowManEventBlocker', 'class' : f.theme + '_event_blocker'}).addClass(f.theme + '_visible_event_blocker')); bl = $('#windowManEventBlocker'); } bl.show().css('z-index', $.WindowManager.zIndex++).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); } if (t.isIE6 && !t.shim) { $(document.body).append(''); t.shim = $('#' + id + '_shim'); } $(document.body).appendAll( ['div', {id : id, 'class' : f.theme + ' window'}, ['div', {id : id + '_container', 'class' : 'statusbar ' + f.type}, ['div', {id : id + '_top', 'class' : 'windowtop'}, ['div', {'class' : 'left'}], ['div', {'class' : 'middle'}], ['div', {'class' : 'right'}], ['div', {id : id + '_title', 'class' : 'title'}, f.title], ['a', {id : id + '_min', href : '', 'class' : 'action min'}], ['a', {id : id + '_max', href : '', 'class' : 'action max'}], ['a', {id : id + '_close', href : '', 'class' : 'action close'}], ['a', {id : id + '_move', 'class' : 'action move', tabindex : '-1'}], ['a', {id : id + '_resize_n', 'class' : 'action resize resize-n', tabindex : '-1'}], ['a', {id : id + '_resize_nw', 'class' : 'action resize resize-nw', tabindex : '-1'}], ['a', {id : id + '_resize_ne', 'class' : 'action resize resize-ne', tabindex : '-1'}] ], ['div', {id : id + '_middle', 'class' : 'windowmiddle'}, ['div', {'class' : 'left'}], ['div', {id : id + '_content', 'class' : 'middle'}, ' '], ['div', {'class' : 'right'}], ['div', {id : id + '_bigicon', 'class' : 'bigicon'}], ['a', {id : id + '_resize_w', 'class' : 'action resize resize-w', tabindex : '-1'}], ['a', {id : id + '_resize_e', 'class' : 'action resize resize-e', tabindex : '-1'}] ], ['div', {id : id + '_bottom', 'class' : 'windowbottom' + (f.statusbar ? ' statusbarbottom' : '')}, ['div', {'class' : 'left'}], ['div', {'class' : 'middle'}], ['div', {'class' : 'right'}], ['div', {id : id + '_statustext', 'class' : 'statustext'}, ' '], ['a', {id : id + '_resize_s', 'class' : 'action resize resize-s', tabindex : '-1'}], ['a', {id : id + '_resize_sw', 'class' : 'action resize resize-sw', tabindex : '-1'}], ['a', {id : id + '_resize_se', 'class' : 'action resize resize-se', tabindex : '-1'}] ] ] ] ); if (f.bigicon) $('#' + id + '_bigicon').addClass(f.bigicon); if (f.chromeless) $('#' + id + '_container').addClass('chromeless'); if (f.resizable) $('#' + id + '_container').addClass('resizable'); if (f.statusbar) { $('#' + id + '_container').addClass('statusbar'); $('#' + id + '_bottom').addClass('statusbarbottom'); } t.show().hide().resizeTo(f.width, f.height).moveTo(f.x, f.y).show(); if (v = f.title) t.setTitle(v); if (v = f.content) t.setContent(v); if (v = f.url) t.setURL(v); function handleAction(e) { var el = $(e.target), action, f; t.focus(); if (el[0].nodeName == 'A' && el.hasClass('action')) { action = $.grep(el[0].className.split(/\s+/), function(v) {return !/^action|resize$/.test(v);}).join(' '); if (e.type == 'mousedown') f = t.mouseDownActions[action]; else { if (t.features.onaction) { t.features.onaction.call(t, action); return false; } f = t.clickActions[action]; } if (f) { f.call(t, action, e); return false; } } }; $('#' + id).click(handleAction).mousedown(handleAction); $($.WindowManager).trigger('WindowManager:open', [t]); return t; } }); $.WindowManager = { zIndex : 100010, count : 0, windows : [], i18n : { yes : 'Yes', no : 'No', ok : 'Ok' }, setup : function() { var w = window, lw, nwm; // Find root window manager while ((w = w.parent || w.opener) && w != lw) { if (w.$ && w.$.WindowManager) nwm = w.$.WindowManager; lw = w; } // Found parent window manager use that one and set the title for the dialog if (nwm && nwm != this) { $.CurrentWindowManager = $.WindowManager; $.WindowManager = nwm; nwm.find(window).setTitle(document.title); } else { $(window).bind('resize', function() { $($.WindowManager.windows).each(function(i, w) { if (w.lastRect) w.resizeTo($.winWidth(), $.winHeight(), 1); }); }); } }, find : function(tw) { var i, ifr, w; for (i = 0; i < this.windows.length; i++) { w = this.windows[i]; ifr = $('#' + w.id + '_ifr')[0]; if (ifr && ifr.contentWindow == tw) return w; } return this.defaultWin; }, open : function(f, a) { var w = new $.Window(f, a).render(); this.windows.push(w); return w.focus(); }, warn : function(msg, cb) { return this.modalBox(msg, { bigicon : 'warning' }, cb); }, error : function(msg, cb) { return this.modalBox(msg, { bigicon : 'error' }, cb); }, info : function(msg, cb) { return this.modalBox(msg, { bigicon : 'info' }, cb); }, confirm : function(msg, cb) { return this.modalBox(msg, { type : 'confirm', bigicon : 'ask', onaction : function(a) { var t = this; if (a == 'ok') { t.close(); if (cb) cb.call(t, 1); } else if (a == 'cancel' || a == 'close') { t.close(); if (cb) cb.call(t, 0); } } }, cb).setContent( '
    ' + msg +'
    ' + '' + this.i18n.yes + '' + '' + this.i18n.no + '' ); }, modalBox : function(msg, f, cb) { f = $.extend({ type : 'alert', bigicon : 'error', width : 400, height : 130, onaction : function(a) { if (a == 'ok') { this.close(); if (cb) cb.call(this, 1); } else if (a == 'close') this.close(); } }, f); return this.open(f).setContent( '
    ' + (msg || '') +'
    ' + '' + this.i18n.ok + '' ); }, remove : function(w) { var t = this, fr, z = 0, nl = []; // Find front most window $(t.windows).each(function(i, cw) { if (w == cw) return; if (cw.zIndex > z) { z = cw.zIndex; fr = cw; } nl.push(cw); }); t.windows = nl; if (fr) fr.focus(); } }; $.WindowManager.setup(); })(jQuery);imagemanager/pages/im/js/jquery/jquery.multiupload.flash.js000066600000010645150472616010020143 0ustar00/** * $Id: jquery.multiupload.gears.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function getFlashVersion() { var v; try { v = navigator.plugins['Shockwave Flash']; v = v.description; } catch (ex) { try { v = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); } catch (ex) { v = '0.0'; } } v = v.match(/\d+/g); return parseFloat(v[0] + '.' + v[1]); }; if (!$.multiUpload.initialized && getFlashVersion() >= 10) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'flash'; $.multiUpload.instances = []; $.multiUpload._fireEvent = function(na, p1, p2, p3, p4) { // Detach event from flash window.setTimeout(function() { $($.multiUpload.instances).each(function(i, v) { $(v).trigger('multiUpload:' + na, [p1, p2, p3, p4]); v.repaint(); }); }, 0); }; // Override init function $.extend($.multiUpload.prototype, { getFlash : function() { return $('#flashuploader')[0]; }, repaint : function() { var up = this, fb = $(up.settings.flash_browse_button), off = fb.offset(); up.flashContainer.css({position : 'absolute', top : off.top, left : off.left, width : fb.width(), height : fb.height(), backgr2ound : 'red'}); }, init : function() { var up = this, s = up.settings, so, fb; $.multiUpload.instances.push(up); $(up).bind('multiUpload:flashInit', function(e) { $(up).trigger('multiUpload:init'); }); $(document.body).append('
    '); so = new SWFObject("js/jquery/jquery.multiupload.flash.swf", "flashuploader", "100%", "100%", "10.0"); so.addVariable("file_filter", $.map(up.settings.filter, function(v) { return '*.' + v }).join(';')); so.addParam("wmode", "transparent"); so.write("flashUploaderContainer"); up.flashContainer = $('#flashUploaderContainer'); // Reposition flash $(function(e) { up.repaint(); }); up.repaint(); // Register event handlers $(up).bind('multiUpload:flashSelectFiles', function(e, sel) { // Add selected files to file queue $(sel).each(function(i, fo) { up.files.push(fo); }); // Trigger events $(up).trigger('multiUpload:filesSelected', [{files : sel}]); $(up).trigger('multiUpload:filesChanged'); }); $(up).bind('multiUpload:flashUploadComplete', function(e, o) { var fo; if (fo = up.getFile(o.id)) { if (!fo.status) { fo.status = 'completed'; $(up).trigger('multiUpload:fileUploaded', [{file : fo, response : o.text}]); } } $(up).trigger('multiUpload:filesChanged'); up.uploadNext(); }); $(up).bind('multiUpload:flashUploadProcess', function(e, pr) { var fo = up.getFile(pr.id); if (!fo.status) { fo.loaded = pr.loaded; $(up).trigger('multiUpload:fileUploadProgress', [{file : fo, loaded : fo.loaded, total : fo.size}]); } }); $(up).bind('multiUpload:flashIOError', function(e, o) { var fo; if (fo = up.getFile(o.id)) { if (!fo.status) { fo.status = 'failed'; $(up).trigger('multiUpload:uploadChunkError', [{file : fo, error : o.message}]); } } }); $(up).bind('multiUpload:stopUpload', function(e) { up.getFlash().cancelUpload(); }); $(up).bind('multiUpload:removeFile', function(e, fo) { up.getFlash().removeFile(fo.id); }); $(up).bind('multiUpload:clearFiles', function(e) { up.getFlash().clearFiles(); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { var pageURL = document.location.href.replace(/\/[^\/]+$/g, '/'); up.getFlash().uploadFile(fo.id, { upload_url : pageURL + up.settings.upload_url + '&path=' + escape(up.settings.path) + '&name=' + escape(fo.name), chunk_size : up.settings.chunk_size, file_field : 'file0', post_args : { name0 : fo.name } }); }); $(up).bind('multiUpload:flashUploadChunkComplete', function(e, o) { var fo = up.getFile(o.id), arg; arg = { file : fo, chunk : o.chunk, chunks : o.chunks, response : o.text }; if (!fo.status) $(up).trigger('multiUpload:chunkUploaded', [arg]); if (arg.cancel) { fo.status = 'failed'; up.getFlash().cancelUpload(); } }); } }); } })(jQuery);imagemanager/pages/im/js/jquery/jquery.multiupload.gears.js000066600000007076150472616010020153 0ustar00/** * $Id: jquery.multiupload.gears.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { if (!$.multiUpload.initialized && window.google && google.gears) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'gears'; // Override init function $.extend($.multiUpload.prototype, { init : function() { var up = this; $(up).trigger('multiUpload:init'); $(up).bind('multiUpload:selectFiles', function(e) { var up = this, desk = google.gears.factory.create('beta.desktop'), s = {}; if (up.settings.filter[0] != '*') s.filter = $.map(up.settings.filter, function(v) {return '.' + v}); desk.openFiles(function(f) { var sf = []; if (f.length) { up._fireEvent('multiUpload:beforeFilesSelected'); $(f).each(function() { var fo = { id : up.generateID(), name : this.name, blob : this.blob, size : this.blob.length, loaded : 0 }; up.files.push(fo); sf.push(fo); }); up._fireEvent('multiUpload:filesSelected', [{files : sf}]); up._fireEvent('multiUpload:filesChanged'); } else up._fireEvent('multiUpload:filesSelectionCancelled'); }, s); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { var req, up = this, chunkSize, chunk = 0, chunks, i, start, loaded = 0, curChunkSize; chunkSize = up.settings.chunk_size || 1024 * 1024; chunks = Math.ceil(fo.blob.length / chunkSize); uploadNextChunk(); function uploadNextChunk() { var url = up.settings.upload_url; if (fo.status) return; curChunkSize = Math.min(chunkSize, fo.blob.length - (chunk * chunkSize)); req = google.gears.factory.create('beta.httprequest'); req.open('POST', url + (url.indexOf('?') == -1 ? '?' : '&') + 'name=' + escape(fo.name) + '&chunk=' + chunk + '&chunks=' + chunks + '&path=' + escape(up.settings.path)); req.setRequestHeader('Content-Disposition', 'attachment; filename="' + fo.name + '"'); req.setRequestHeader('Content-Type', 'application/octet-stream'); req.setRequestHeader('Content-Range', 'bytes ' + chunk * chunkSize); req.upload.onprogress = function(pr) { fo.loaded = loaded + pr.loaded; up._fireEvent('multiUpload:fileUploadProgress', [{file : fo, loaded : fo.loaded, total : fo.size}]); }; req.onreadystatechange = function() { var ar; if (req.readyState == 4) { if (req.status == 200) { ar = {file : fo, chunk : chunk, chunks : chunks, response : req.responseText}; up._fireEvent('multiUpload:chunkUploaded', [ar]); if (ar.cancel) { fo.status = 'failed'; up._fireEvent('multiUpload:filesChanged'); up.uploadNext(); return; } loaded += curChunkSize; if (++chunk >= chunks) { fo.status = 'completed'; up._fireEvent('multiUpload:fileUploaded', [{file : fo, response : req.responseText}]); up._fireEvent('multiUpload:filesChanged'); up.uploadNext(); } else uploadNextChunk(); } else up._fireEvent('multiUpload:uploadChunkError', [{file : fo, chunk : chunk, chunks : chunks, error : 'Status: ' + req.status}]); } }; if (chunk < chunks) req.send(fo.blob.slice(chunk * chunkSize, curChunkSize)); }; }); }, _fireEvent : function(ev, ar) { $(this).trigger(ev, ar); } }); } })(jQuery);imagemanager/pages/im/js/jquery/jquery.template.ext.js000066600000001443150472616010017116 0ustar00/** * $Id: jquery.template.ext.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ $.template.regx.standard = $.template.regx.ext; $.templateFromScript = function(el, opts) { return $.template($.trim($.translate($(el).html().replace(/()/gi, ''))), opts); }; // Add template helpers $.extend($.template.helpers, { sizefix : function(v) { v = parseInt(v); if (isNaN(v) || v == -1) return ''; // MB if (v > 1048576) return Math.round(v / 1048576, 1) + " MB"; // KB if (v > 1024) return Math.round(v / 1024, 1) + " KB"; return v + " b"; }, encodeURIComponent : function(v) { return encodeURIComponent(v); } }); })(jQuery);imagemanager/pages/im/js/jquery/jquery.multiupload.flash.swf000066600000007113150472616010020322 0ustar00CWS Ax}8Y{Ǒ]s$CO xHH,KD@4I<$ ba`9$VN"ىɮro o}o_7h{@V]wWWUWEG!ǀĚ:!orƗbӡS#vu 纥ͱby}dҥK#s# Pe[Cʩ n fV2eBFXu Ԭf3FKղMf3#c͂[EC̸U, w(;c0s#[C\1so0,Ǩ䮌<d::T6Cӎ M=Ҿ>ut1 =)GJbA,4ŕ0jڱ+9Yw*ÀrQ%kf\F}߁OێdZf,dLzXtLPwTl֮c[Y.+f ?Z1Шlgj5zŴ ܽ)̲6_ܰͨc4.\l&PlSϠweFHvvu ADj2&*uUv*zΰ 0߳96=Fs1z]_5SD>Fp3X^!b~ˤ NEK2d_Du_b>;fVr̺h9ŗkղ&kkI kBL;\|f޹8%7W^IFsx262U[ j, )^fX1XFƬ a.e ǑylF6˷fY0 fa*ǒ+ԍx_ψlW,C*mނ2U7L"_ZJ,5,ǣK3+h:|VTVrc\; `,Ti\)JMKvԧ:ŔtYˎK%C++n#[kWt=w1mk1N4g鹻_li{1mGݏѧ@=|[M#;a؎vҲ+g=*fO4dY5+Dx4$$04f5jV‚~^Ux5ҼYi19,75.vV:۠Mjښ[ev=,EerTW:[;v.u.wd(4AHQ]vD P(TPRAF:  Tjb[(=BiG)mrvQMi(=Ni'(=I^J()=C R0G(D(R(K.PTHKTe_a HaQpM 3f)Ba Baʷ(ܦpʯQx—(|7($)(2L )(RGBBBBKa[Naow@} !@~p'T1A ̟覍pAh/Ko@k _ /q[8 Vg`߯ ""If&&՗j"8 h5; ?`'5]8+Z>Xߠ!?(bfBZH+#@ئGہ $tp9$@W>g{0@ΈmQ a03926FH9K SVG @z/ %~"o Alz С.@?X5ы@iQP:/& HDfHj%ISv-%Z՞DY>}JgVfUHd( mBۻVv_>'焾 uHHQhמ Z˫/k"?K&#1 E&uHӒT%U|bY&8|I#M*bٓtIuQ˓OU7í0BO  /K@Y|X5l^d wrĞ<1$)O.R+FD,7`:=صʏ$Fj97:V ?ĺ옭 BPKP^4:޵b<_޳6=kk%4ܖ8-/{j[t&F oj׽{7vA]c"I57^⪈fl)/bIFRۑ[W"!=/W-L~OjŶ(lnr@Md"k 2QV:yvs/y{1o AQ쌝üX$"(Zy|Xa8ٌz{֘H~~o8YRF#5o&;x!7FD;@ѻNO@(A=]h'F=~k*+hVUv/>ljH}w!J򎔑P -qQ 5 M+iji?/5b_5.n0K%S2 ߁}@nqE㲠Xy,|ea!c)8lAxH|Aw-ħ:5ݠ|MG0Zw¶}58YOkƯ'AS(/״ kPwQo[]GpZ$H}֏1G錏yb(VFQ~Of)V .a B78a?WUj3;w y'P(>Io\_]F)S׮XLK˹K^Z]@~E]~w#A$EwG@E*>_(fKaimagemanager/pages/im/js/jquery/jquery.scrollto.js000066600000016007150472616010016347 0ustar00/** * jQuery.ScrollTo * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 9/11/2008 * * @projectDescription Easy element scrolling using jQuery. * http://flesler.blogspot.com/2007/10/jqueryscrollto.html * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. * * @author Ariel Flesler * @version 1.4 * * @id jQuery.scrollTo * @id jQuery.fn.scrollTo * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. * The different options for target are: * - A number position (will be applied to all axes). * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes * - A jQuery/DOM element ( logically, child of the element to scroll ) * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. * @param {Object,Function} settings Optional set of settings or the onAfter callback. * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. * @option {Number} duration The OVERALL length of the animation. * @option {String} easing The easing method for the animation. * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. * @option {Function} onAfter Function to be called after the scrolling ends. * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. * @return {jQuery} Returns the same jQuery object, for chaining. * * @desc Scroll to a fixed position * @example $('div').scrollTo( 340 ); * * @desc Scroll relatively to the actual position * @example $('div').scrollTo( '+=340px', { axis:'y' } ); * * @dec Scroll using a selector (relative to the scrolled element) * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); * * @ Scroll to a DOM element (same for jQuery object) * @example var second_child = document.getElementById('container').firstChild.nextSibling; * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ * alert('scrolled!!'); * }}); * * @desc Scroll on both axes, to different values * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); */ ;(function( $ ){ var $scrollTo = $.scrollTo = function( target, duration, settings ){ $(window).scrollTo( target, duration, settings ); }; $scrollTo.defaults = { axis:'y', duration:1 }; // Returns the element that needs to be animated to scroll the window. // Kept for backwards compatibility (specially for localScroll & serialScroll) $scrollTo.window = function( scope ){ return $(window).scrollable(); }; // Hack, hack, hack... stay away! // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) $.fn.scrollable = function(){ return this.map(function(){ // Just store it, we might need it var win = this.parentWindow || this.defaultView, // If it's a document, get its iframe or the window if it's THE document elem = this.nodeName == '#document' ? win.frameElement || win : this, // Get the corresponding document doc = elem.contentDocument || (elem.contentWindow || elem).document, isWin = elem.setInterval; return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body : isWin ? doc.documentElement : this; }); }; $.fn.scrollTo = function( target, duration, settings ){ if( typeof duration == 'object' ){ settings = duration; duration = 0; } if( typeof settings == 'function' ) settings = { onAfter:settings }; settings = $.extend( {}, $scrollTo.defaults, settings ); // Speed is still recognized for backwards compatibility duration = duration || settings.speed || settings.duration; // Make sure the settings are given right settings.queue = settings.queue && settings.axis.length > 1; if( settings.queue ) // Let's keep the overall duration duration /= 2; settings.offset = both( settings.offset ); settings.over = both( settings.over ); return this.scrollable().each(function(){ var elem = this, $elem = $(elem), targ = target, toff, attr = {}, win = $elem.is('html,body'); switch( typeof targ ){ // A number will pass the regex case 'number': case 'string': if( /^([+-]=)?\d+(px)?$/.test(targ) ){ targ = both( targ ); // We are done break; } // Relative selector, no break! targ = $(targ,this); case 'object': // DOMElement / jQuery if( targ.is || targ.style ) // Get the real position of the target toff = (targ = $(targ)).offset(); } $.each( settings.axis.split(''), function( i, axis ){ var Pos = axis == 'x' ? 'Left' : 'Top', pos = Pos.toLowerCase(), key = 'scroll' + Pos, old = elem[key], Dim = axis == 'x' ? 'Width' : 'Height', dim = Dim.toLowerCase(); if( toff ){// jQuery / DOMElement attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); // If it's a dom element, reduce the margin if( settings.margin ){ attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; } attr[key] += settings.offset[pos] || 0; if( settings.over[pos] ) // Scroll to a fraction of its width/height attr[key] += targ[dim]() * settings.over[pos]; }else attr[key] = targ[pos]; // Number or 'number' if( /^\d+$/.test(attr[key]) ) // Check the limits attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); // Queueing axes if( !i && settings.queue ){ // Don't waste time animating, if there's no need. if( old != attr[key] ) // Intermediate animation animate( settings.onAfterFirst ); // Don't animate this axis again in the next iteration. delete attr[key]; } }); animate( settings.onAfter ); function animate( callback ){ $elem.animate( attr, duration, settings.easing, callback && function(){ callback.call(this, target, settings); }); }; function max( Dim ){ var attr ='scroll'+Dim, doc = elem.ownerDocument; return win ? Math.max( doc.documentElement[attr], doc.body[attr] ) : elem[attr]; }; }).end(); }; function both( val ){ return typeof val == 'object' ? val : { top:val, left:val }; }; })( jQuery );imagemanager/pages/im/js/jquery/jquery.multiupload.silverlight.xap000066600000024612150472616010021555 0ustar00PKQ961*MAppManifest.xaml`I%&/m{JJt`$ؐ@iG#)*eVe]f@흼{{;N'?\fdlJɞ!?~|?"ǿ|4_"_El>h޶Gw6yȚUSi;- jzwogݙ}#yѻ޾*wet/b7Mן}AfwoW||Z}Z/bd^7E죽GGq޸/mSw^d uYI(xw#PKyU9g]~'p Upload.dll`I%&/m{JJt`$ؐ@iG#)*eVe]f@흼{{;N'?\fdlJɞ!?~|?"?_ukׯ!?7=7]~]_?M:[ltz闯E5ǿon k<5  g刺3kE9_=]6?~kƟkoD?zI_7 o{]K?#icͼ0zk(ny=:/kAvOO~GϏ=?z~Gϗ_uէƯ_5{Ư?~_Hدz֯kzoAn G5EkzkZNG o/E~ǝ_ſ[}۫_mߞu߁~V#SS;ߙI~קߐ~Z4&[ >V^gҿV?~]@535u)wk'hFxZ:k&k|Z/V߮cկ_Ͷ~7o Z:kmBͯWoUBk5ӏ_k!;֯A#Fc16 %fɯ} ~_E77`_XFok%-jkwNdm~ꎇoV{K~ש~OoTGh7o1ܻ=?Ap}p: pztڃ'}ieJLCV[o[zo6kzm5_?+ol/{?3_C'yRCv~$~7mof7qnݧ6~CFolf$~__7g~7u_K_o%_zo/G_zo'_o/O__~ oVmo _ ֿA) oVB߀<@ϩϭ_ת_1}ׂX~Z>_?IB>c$q_נא'uvPfb?{~_B\zί[>I&o%֧<[񛿑Q}xPtuL_+IG'ݮV=:zrkZ7[ZZ{_<7~=|_<7~}|_<[7~|[_<S~Ϙ_*z/1 Ўv_|  ^5KaxjЬ 7`b~C7Ə_k+{['5*~oO_ǯK~}g:msC2նnoI݁7~B>tm_ϡŨ_kt'2:ޯ:/]~?Q~.ċ/D'-oH`_y%՞~ȷ15>)-(3ׯCF7vc0_Luv_Zu~1_%rѯI?xց &KK}_נkF v>e&e:~W#~7qws }Tṿ{~ǝ_'-^{!b=_뗠kWc֎? x~~_㏧Y5aX~ f ?1-qoZ $~^翐z?fo{g#0_7L>(~_P'cɯ۠G{7-g_0o///I11ۯz ^5V:_ׯ~R/7 Υ_~_7~$xC@M X~~{ч^U_П7O(~~/&ׯ*y&&?IK߂%y߅෥Z_Ka_ aiߎ~^{Bscȁ%>P_{(19/UX)'7x]Od_>2ߨ!N~ ~ z_뗠%M›ʯa4毱kc0?-u+3 waܾsNmT!}kwD:ƟLsNC0|rkk ߈^)7я"X! d~J?g5> _EZA~5Voch7߮C׫~_mS@(ssHQt(%)d~Frȯ'`kp4cf___?x77HDZ7 h:?K@~~'>װQ ׯ2|Un1qϯ>n߆6o+vaWx@?]s1O~{w;C~ۛmb(?_n|1~7պUz.iUdd^7EloFɺlu2_uVҗIYLM6_~6y ?{w^"7[0 SWZ?Yk~ůQŊ5r#jEe- 7N~ݢ\6}4oգw<_dxQL목Zܽ*|z](ɗ-xNʬZU6j>N۩(iY4kvki_e̫u9K'y:ϋ%5u>NC߿kjZuUz/>tyq1o?h`#ѯw]\<؃#7~_k#ۺX^4hKG,W?#G?)}Rn?Xow؏;k5~qTn}$7I?p_15^kߙ7F?_ɯ7ѿޯ/o~ӿɯolI535+nF ~ #:1K~ ÷?c/O~6/|g:6H7m~=75%ZѿH-_h7A }Fbd~M7yi>_)c~_~-z[sk}Oп_@P~k17_ ௿_75&!|8Fw!k|_KKw5~7_S5ם_+>5~o5' ~-P~Z?I53C_k;xw3ҿ鯽__~_毱Oz}_0z?֯k+?kwW#㟴pxזo_?;5!S7"5kZ_9]wRKZ'轻?$ǯW_넲ԏ_}cWk}$ӿVok/&M~C# f*M~?w75$}c4_%K'O\gp)gok׮[돢~_W_}M[},kl_Ro_?607/~?ӿ{oӿ_~~_",rT~ߍ~ 诗oO_w_=uNklO?_ouE5~u ] /`|zOO {~`?A0/y~{Yޑ޿k{ Z_{=!/޽owD&=F _O5_:ޯ<(o~كկy޿{=u$f=oNw~?_22SÿCx?&~FO aw?'wOyׯq\5Dҿ ZS.=_k?߿?3~]_l?5΃scou_'RL޿7+?aޥƯk.?7?ֿ_k˅m5o'^ _kLL~k*ckBد_75?5w7xkد|ko_o;ѿ?AD/ _ίys_s;ůG~Ko=o'?kΟkVDό~?k/hLjc?o_sk|z>>ݯ[/_s_5__I^FkUɔߞqMX'?#23֝_?H_ 0_kߒ?_7S-_/ã_1_oZůK>#Fԯ~777~_~-~77/_7N ~m~㿆ߖ|oZcZMwg ZMdFwx_35_ע_㷢?kƯ__Ϡ?5AnJk"G#Ɵkg:/ѯҿu~݄&/] T~-ף~~>g7 ףO~{"'|~7#@BlsDZAEoJ Uk<9~Ssk&x~Ϳ~~u_iאѯ ?M~g췍C{E uhסQ::4__F:4_-%/ٺ̏~ M[נdk k<+JJSf9/wE>fuQ^攇Xˏj*6vym>o_uU?^cKJהO}ɼYu` &kjYR0+j_Orie~zO۪5^YݮW/W9lvn{kPω8[mrгZ7f'UYR3<_u15AV_{9fk4I5뚦gA/i]ZELgE~9x}ɗū|Q]Ig48ɈJ4/~ 2[ƚ. ưٗg(~f^Sbr:e&-&: }l~-F~&SƉ&ӿF6jU/EMF{6cfh٘_ eyA˗˳//4|Aƿ1K[B_ΛҔy8rMҧ qmNQ~ښ –dΖ5}I~Q,L B8~A1g'IVmVr77K@2VP iWY-_EӒjߎ:>n);Y}I6[zEx_3C Ȱh.~ˬ\տFBU"W3bYM-KMo]yMM_:zʖX'a<_~yKxfl3>#뼾,-'|]u-tLKi],C#" Hͭ2Ȃhį2{ǿ5nIQGr  `l+ʨokX[˾P%zeh$3Z,q3dkP_ ܦoi@kD%BUO.JvCX#~Q=PyAF̛=3H|b0qs5NE^ ")%gUC .kcM~L|'{O)G5ryqO/Wo?ІDX@џdr!MáƟ[ RaxL _C~1mV,Z@p&`[}m?k|y/2$' N:#s1>OYoD0^|8! ւ ە)Z/[$R`~G W?5V9kRWR| 6L_ˊmۇmho>^y>kfoWթR_ck߯dA% 7GW d_>5[\7_!E7"ƵN xGXF3@ PxHYv߽XQTʡe@]mF7$+~h [a̋qm)l}%>oL_lQկqE(~V#? kܿKME-fɔ~['c*,RaC-_cMF{~ߟVO_N)c ݆ZNhk~N?{Z9ƝngLMenqAko֯ǻNxv;vx%_d×o gt{I=i} ]Xb靖)*0 KZ<`*_R@|XhQ+˻ཚ:w3^<ݯk}o?}_} ~௼_K_w-~{;ZޯzoZoZokzockֿk&ɯŝ_M7_/7 ~-~jMk̿.uo[oo;o)2z%5~߀-wG&n;voq~'dK?ٲBHZ:ȶ_ kz_PEѴ@/'S7_> :Z>Ak?/}~MD4ίk_wMh>- 7- w-5Zo;N@7_okw__'ί2/*j$k)8~_wu߀~ ?Z҈o{Rb?~!J-RO7s5㯟o[{HoZDC ~_4k.;NTD,$.gZIJTV&-lX#u5Ylg;Ư;Ưpl~k6߭[65odI/O5^~O?ӿ?~y_%_c%׾]'UMﻘ.%|O_M=} Wd~PO?f_/h{k'yӲ9'߿~ kɯAkI\Ϸkfާߟ=5^ogEg;/cVa[$Y^gd3[oی=T~?_@Zq1 ȇY^5! ,ccoakPư [V'X$@~MmPƔ>5?3IMyl`'k`N⦅do;7g}VFo:l}cXD|\ %V5"_MGPߓRڿy#;L'g읷gTϏkMGϏ=?z~GCͯQj/?z~GϏ=?z~GϏ PKQ961*MAppManifest.xamlPKyU9g]~'p XUpload.dllPKv(imagemanager/pages/im/js/jquery/jquery.imageutils.js000066600000005275150472616010016656 0ustar00/** * $Id: jquery.imageutils.js 466 2008-10-15 14:54:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.ImageUtils = function(ta) { var t = this, d = document, ss; ta = $(ta); t.target = ta; if ($.browser.msie) { // Add VML namespace and stylesheets on IE d.namespaces.add("v", "urn:schemas-microsoft-com:vml"); ss = d.createStyleSheet(); ss.cssText = "v\\:*{behavior:url(#default#VML);display:inline-block;margin:0;padding:0}"; } else { ta.after(''); t.canvas = document.getElementById('editImageCanvas'); t.context = t.canvas.getContext('2d'); } }; $.extend($.ImageUtils.prototype, { render : function() { var t = this; t.img = new Image(); $(t.img).load(function() { if (t.canvas) { t.canvas.width = t.img.width; t.canvas.height = t.img.height; $(t.canvas).css({width : t.img.width, height : t.img.height}).show(); t.context.drawImage(t.img, 0, 0); } else t.target.after(''); t.target.hide(); $(t).trigger('ImageUtils:load'); }); t.img.src = t.target.attr('src'); }, flip : function(d) { var t = this, ctx = t.context; if (!t.canvas) { $('#editImageVML').css('flip', d == 'h' ? 'x' : 'y'); return; } if (d == 'h') { ctx.save(); ctx.scale(-1, 1); ctx.drawImage(t.img, -t.img.width, 0); ctx.restore(); } else { ctx.save(); ctx.scale(1, -1); ctx.drawImage(t.img, 0, -t.img.height); ctx.restore(); } }, rotate : function(a) { var t = this, img = t.img, can = t.canvas, ctx = t.context, rad = a * Math.PI / 180; if (!t.canvas) { $('#editImageVML').attr('rotation', a); return; } ctx.save(); switch(a) { case 90: can.width = img.height; can.height = img.width; ctx.rotate(rad); ctx.drawImage(img, 0, -img.height); $(t.canvas).css({width : img.height, height : img.width}); break; case 180: can.width = img.width; can.height = img.height; ctx.rotate(rad); ctx.drawImage(img, -img.width, -img.height); break; case 270: can.width = img.height; can.height = img.width; ctx.rotate(rad); ctx.drawImage(img, -img.width, 0); break; } ctx.restore(); $(t.canvas).css({width : can.width, height : can.height}); }, destroy : function() { var t = this; if (t.canvas) $(t.canvas).remove(); else $('#editImageVML').remove(); t.target.show(); } }); })(jQuery);imagemanager/pages/im/js/jquery/jquery.i18n.js000066600000002445150472616010015266 0ustar00/** * $Id: jquery.i18n.js 479 2008-10-20 09:00:59Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function xmlEncode(s) { return s ? ('' + s).replace(new RegExp('[<>&"\']', 'g'), function (c, b) { switch (c) { case '&': return '&'; case '"': return '"'; case '\'': return '''; // ' is not working in MSIE case '<': return '<'; case '>': return '>'; } return c; }) : s; }; $.translate = function(s, e, va) { return s.replace(/\{#([^\}]+)\}/g, function(a, b) { var pa = b.split(/\./); if (MCManagerI18n[pa[0]]) a = MCManagerI18n[pa[0]][pa[1]]; a = a ? a : '{#' + b + '}'; if (va) { a = a.replace(/\{([^\}]+)\}/g, function(a, b) { return va[b] || a; }); } return e ? xmlEncode(a) : a; }); }; $.translateElement = function(e) { e = e || document.body; e.innerHTML = $.translate(e.innerHTML.replace(/=({#[a-z0-9_]+})/gi, '="$1"'), 1); }; document.title = $.translate(document.title.replace(/^(http|https):\/\/[a-z0-9._\-\s]+-/gi, '')); $('body > *').each(function(i, v) { if (!/(SCRIPT|BR|HR|INPUT|META|IMG|LINK|PARAM|IFRAME)/.test(v.nodeName)) $.translateElement(v); }); })(jQuery);imagemanager/pages/im/js/jquery/jquery.domutils.js000066600000002060150472616010016340 0ustar00/** * $Id: jquery.domutils.js 460 2008-10-14 16:06:43Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.extend({ createElm : function(n, a, h) { n = $(document.createElement(n)); n.attr(a).html(h); return n; }, appendElements : function(te, ne) { var i, n; if (typeof(ne) == 'string') te.appendChild(document.createTextNode(ne)); else if (ne.length) { te = te.appendChild($.createElm(ne[0], ne[1])[0]); for (i=2; i)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
    ","
    "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
    ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();imagemanager/pages/im/js/jquery/jquery.dialog.status.js000066600000006157150472616010017274 0ustar00/** * $Id: jquery.dialog.status.js 552 2008-11-03 12:32:05Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.StatusWindow = function(f, a) { var t = this; t.isIE6 = /MSIE [56]/.test(navigator.userAgent); f = $.extend({ type : 'status', width : 400, height : 240, onaction : function(a) { if (a == 'ok') t.close(); } }, f); $.Window.call(t, f, a); }; $.extend($.StatusWindow.prototype, $.Window.prototype, { setContent : function(co) { var v, k, h = ''; if (typeof(co) != 'string') { // Build string $(co).each(function(i, v) { h += '
    ' + '
    ' + v.title + '
    ' + '
    ' + v.content + '
    ' + '
    '; }); } $('#' + this.id + '_statuscont').html(h || co); return this; }, render : function() { var t = this, f, v; $.Window.prototype.render.call(t); $.Window.prototype.setContent.call(t, '
    ' + '' + $.WindowManager.i18n.ok + '' ); f = t.features; if (v = f.content) t.setContent(v); return t; } }); if (!$.CurrentWindowManager) { $.extend($.WindowManager, { status : function(f, cb) { var t = this, w; f = $.extend({ onaction : function(a) { if (a == 'ok') { w.close(); if (cb) cb.call(t, 1); } else if (a == 'close') w.close(); } }, f); w = new $.StatusWindow(f).render(); t.windows.push(w); return w.focus(); }, showProgress : function(f) { var t = this, bl, id = 'progressWindow'; t.hideProgress(); t.progress = 1; f = $.extend({ theme : 'clearlooks2', x : -1, y : -1 }, f); bl = $('#windowManProgressEventBlocker'); if (!bl[0]) { $(document.body).append($.createElm('div', {id : 'windowManProgressEventBlocker', 'class' : f.theme + '_event_blocker'}).addClass(f.theme + '_visible_event_blocker')); bl = $('#windowManProgressEventBlocker'); } bl.show().css('z-index', t.zIndex++).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); $(document.body).appendAll( ['div', {id : id, 'class' : f.theme + '_progress'}, ['div', {id : id + '_msg', 'class' : 'message'}] ] ); $('#' + id + '_msg').html(f.message); $('#' + id).css({left : -1000, top : -1000}).show(); // Center window if (f.x == -1) f.x = Math.round(($.winWidth() / 2) - ($('#' + id).width() / 2)); if (f.y == -1) f.y = Math.round(($.winHeight() / 2) - ($('#' + id).height() / 2)); $('#' + id).css({left : f.x, top : f.y}); $(t).bind('WindowManager:open', function() {t.hideProgress();}); }, hideProgress : function() { var t = this; if (t.progress) { $('#progressWindow').remove(); $('#windowManProgressEventBlocker').hide(); $(t).unbind('WindowManager:open', t.hideProgress); t.progress = 0; } } }); } })(jQuery);imagemanager/pages/im/js/jquery/jquery.multiupload.flash.expressinstall.swf000066600000001405150472616010023377 0ustar00CWSAxTO@uw-ע!1J 5 Y@l;@6ܳr⸉!F7vqB(3)Ka0.1`ziE9&/ h 1ms-1K;yeJ& J x7BP>h-3ˡG=1''7 {aI߱YO]uJsGюB'IE"x].楰:1Tq*;hR'-+HЪ ʚ\E&W%pRNi 24l79IW|6'm&j}qb3VZMQzvڂ̯$бmK"{>*<imagemanager/pages/im/js/view.js000066600000014007150472616010012621 0ustar00(function($){ window.ViewDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; t.args = args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); // Compile templates t.singeViewTpl = $.templateFromScript('#singleview_template'); t.mpgTpl = $.templateFromScript('#mpg_template'); t.rmTpl = $.templateFromScript('#rm_template'); t.movTpl = $.templateFromScript('#mov_template'); t.dcrTpl = $.templateFromScript('#dcr_template'); t.footerFullTpl = $.templateFromScript('#single_footer_full'); t.footerNoEditTpl = $.templateFromScript('#single_footer_no_edit'); t.footerSimpleTpl = $.templateFromScript('#single_footer_simple'); $('#prev').click(function(e) { if (!$(e.target).hasClass('disabled')) t.getMediaInfo(t.prevMedia); }); $('#next').click(function(e) { if (!$(e.target).hasClass('disabled')) t.getMediaInfo(t.nextMedia); }); $('#gallery').click(function(e) { if (!$(e.target).hasClass('disabled')) t.currentWin.close(); }); $('#singlefooter').click(function(e) { var el = e.target, a = el.nodeName == 'A' ? el : $(el).parents('a')[0]; if (a) { a = $(a); if (a.attr('id') == 'deleteit' && !a.hasClass('disabled')) t.deleteFile(t.path); if (a.attr('id') == 'edit' && !a.hasClass('disabled')) t.editFile(t.path); } }); $().keydown(function(e) { switch (e.keyCode) { case 32: // space case 110: // n case 34: // page down case 39: // right arrow case 40: // down arrow t.getMediaInfo(t.nextMedia); break; case 102: // p case 33: // page up case 37: // left arrow case 38: // up arrow t.getMediaInfo(t.prevMedia); break; case 27: // Esc t.currentWin.close(); break; } }); $(window).bind('resize', function() { t.resizeView(); }); $('#singlecontent').click(function(e) { if (e.target.nodeName == 'IMG' && $(e.target).hasClass('viewimage')) { if (args.onselect) { RPC.insertFile({ relative_urls : args.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : args.remove_script_host || args.no_host, path : t.path, progress_message : $.translate("{#message.insert}"), insert_filter : args.insert_filter, oninsert : function(o) { args.onselect(o); t.currentWin.close(); } }); } else t.currentWin.close(); } }); t.getMediaInfo(args.path); focus(); }, getMediaInfo : function(p) { var t = this; t.path = p; RPC.exec('im.getMediaInfo', {path : p}, function (data) { var res, row, tpl, footTpl; res = RPC.toArray(data.result); row = res[0]; t.nextMedia = row.next; t.prevMedia = row.prev; if (!row.next) $('#next').addClass('disabled'); else $('#next').removeClass('disabled'); if (!row.prev) $('#prev').addClass('disabled'); else $('#prev').removeClass('disabled'); footTpl = t.footerSimpleTpl; switch (row.type) { case "jpg": case "jpeg": case "gif": case "png": case "bmp": tpl = t.singeViewTpl; footTpl = t.footerFullTpl; break; case "mpg": case "mpeg": case "wma": case "wmv": case "asf": case "avi": tpl = t.mpgTpl; break; case "qt": case "mov": tpl = t.movTpl; break; case "rm": case "ram": tpl = t.rmTpl; break; case "dcr": tpl = t.dcrTpl; break; case "swf": var so = new SWFObject("../../stream/index.php?cmd=im.streamFile&path="+ escape(row.path), "swfMovie", row.width, row.height, "7", "#FFFFFF"); so.addParam("quality", "high"); so.addParam("scale", "showall"); so.addParam("wmode", "transparent"); so.write("singlecontent"); $('#singlefooter').html(t.footerNoEditTpl, row); return; case "flv": var so = new SWFObject("flvplayer/flvPlayer.swf", "flvPlayer", row.width, row.height, "8", "#FFFFFF"); so.addVariable("flvToPlay", "../../../stream/index.php?cmd=im.streamFile%26path=" + escape(row.path)); so.addVariable("hiddenGui", "false"); so.addVariable("showScaleModes", "true"); so.addVariable("autoStart", "false"); so.addParam("allowFullScreen", "true"); so.write("singlecontent"); $('#singlefooter').html(t.footerNoEditTpl, row); return; } $('#singlecontent').html(tpl, row); $('#singlefooter').html(footTpl, row); if (row.custom) { if (!row.custom.editable) $('#singleview .editsingle a.edt').addClass('disabled'); else $('#singleview .editsingle a.edt').removeClass('disabled'); } t.resizeView(); }); }, resizeView : function() { $('#singleimg').css({'width' : $.winWidth() - 60, 'height' : $.winHeight() - 100}); }, deleteFile : function(p) { var t = this; $.WindowManager.confirm($.translate('{#view.confirm_delete}'), function(s) { if (s) { if (!t.isDemo()) { RPC.exec('im.deleteFiles', {path0 : p}, function (data) { var args; if (!RPC.handleError({message : '{#error.delete_failed}', visual_path : t.args.visual_path, response : data})) { if (t.args.ondelete) t.args.ondelete(p); if (t.nextMedia) t.getMediaInfo(t.nextMedia); else if (t.prevMedia) t.getMediaInfo(t.prevMedia); else t.currentWin.close(); } }); } } }); }, editFile : function(p) { var t = this; $.WindowManager.open({ url : 'edit.html' }, { is_demo : t.args.is_demo, path : p, visual_path : this.visualPath, onsave : function() { t.getMediaInfo(t.path); } }).maximize(); }, isDemo : function() { if (this.args.is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function(e) { ViewDialog.init(); }); })(jQuery); imagemanager/pages/im/js/createdir.js000066600000005075150472616010013616 0ustar00(function($){ window.CreateDirDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args, cleanNames; args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); // Add templates RPC.exec('im.getConfig', {path : args.path}, function(data) { var config = data.result, templates = [], tpl; if (!RPC.handleError({message : 'Get config error', visual_path : t.visualPath, response : data})) { cleanNames = config['filesystem.clean_names'] == "true"; $(config['filesystem.directory_templates'].split(/,/)).each(function(i, v) { if (v) { v = $.trim(v).split('='); templates.push({name : /([^\/]+)$/.exec(v[0])[0], value : v[1] || v[0]}); } }); if (config['filesystem.force_directory_template'] == "true") { $('#template').html(''); if (templates.length == 1) $('#templaterow').hide(); } if (templates.length == 0) $('#templaterow').hide(); tpl = $.templateFromScript('#template_template'); $(templates).each(function(i, v) { $('#template').append(tpl, v); }); $('#content').show(); $('#createin').html(args.visual_path); $('form').submit(function() { var tpl = $('#template').val(), name = $('#dirname').val(); if (cleanNames) name = $.cleanName(name); if (!t.isDemo()) { RPC.exec('im.createDirs', {path : args.path, name0 : name, template0 : tpl}, function(data) { var res = RPC.toArray(data.result), s = t.currentWin.getArgs(); if (!RPC.handleError({message : '{#error.createdir_failed}', visual_path : args.visual_path, response : data})) { // Insert file if (s.oncreate) { RPC.insertFile({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, path : res[0].file, progress_message : $.translate("{#message.insert}"), insert_filter : s.insert_filter, oninsert : function(o) { s.oncreate(o); t.currentWin.close(); } }); } } }); } return false; }); $('#cancel').click(function() {t.currentWin.close();}); } }); }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function() { CreateDirDialog.init(); }); })(jQuery); imagemanager/pages/im/js/utils/swfobject.js000066600000015340150472616010014776 0ustar00/** * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ * * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * */ if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;imagemanager/pages/im/js/utils/basemanager.js000066600000002060150472616010015250 0ustar00/** * $Id: basemanager.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { window.BaseManager = { currentWin : $.WindowManager.find(window), path : '{default}', visualPath : '', files : [], selectedFiles : [], focusedFile : null, demoMode : false, disabled : {}, specialFolders : [], getFile : function(id) { var o; $(this.files).each(function() { if (this.id == id) o = this; }); return o; }, setDisabled : function(v, st) { this.disabled[v] = st; if (st) $('#' + v).addClass('disabled').addClass('deactivated'); else $('#' + v).removeClass('disabled').removeClass('deactivated'); }, isDisabled : function(v) { return this.disabled[v] ? this.disabled[v] : 0; }, addSpecialFolder : function(o) { this.specialFolders.push(o); }, isDemo : function() { if (this.demoMode) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; })(jQuery); imagemanager/pages/im/js/utils/fixpng.js000066600000002403150472616010014277 0ustar00var PNG = { isOldIE : navigator.userAgent.indexOf('MSIE 5') > 0 || navigator.userAgent.indexOf('MSIE 6') > 0, transparentImg : 'img/transparent.gif', transparentBGImg : '../img/transparent.gif', fix : function(e) { var rs, cs, b, o; // Remove behavior to prevent memory leaks e.runtimeStyle.behavior = "none"; // Check browser version if (!this.isOldIE) return; // Use old PNG src if (e.png_src) e.src = e.png_src; // Is PNG image if (e.src && e.src.toLowerCase().indexOf('.png') > 0) { e.png_src = e.src; e.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + e.src + "', sizingMethod='scale')"; e.src = this.transparentImg; } cs = e.currentStyle; b = cs.backgroundImage; // Has PNG background if (b && b.toLowerCase().indexOf('png') > 0) { rs = e.runtimeStyle; b = b.replace(/url\(\"([^"]+)\"\)/g, "$1"); o = rs["background-position"]; if (!cs.hasLayout) rs.display = 'inline-block'; rs.backgroundImage = 'url(\'' + this.transparentBGImg + '\')'; rs.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + b + "', sizingMethod='crop')"; rs["background-position"] = o; } // Remove referenced to prevent memory leaks rs = cs = b = o = e = null; } }; imagemanager/pages/im/js/utils/domain.js000066600000000727150472616010014262 0ustar00/** * $Id: domain.js 505 2008-10-23 12:34:12Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function(){ try { var li = document.location.search.replace(/\?/, '').split('&'), query = {}, i; for (i = 0; i < li.length; i++) { it = li[i].split('='); query[unescape(it[0])] = unescape(it[1]); } if (query.domain) document.domain = query.domain; } catch (ex) { // Ignore } })(); imagemanager/pages/im/js/utils/tinymce.js000066600000001723150472616010014460 0ustar00/** * $Id: tinymce.js 599 2008-11-19 12:26:03Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ var w, ed, wm, args = {}; window.focus(); // try { w = opener || parent; // Check mcFileManager if (w.mcImageManager) args = w.mcImageManager.windowArgs; // Check TinyMCE if (w.tinyMCE && (ed = w.tinyMCE.activeEditor)) { if (ed && (wm = ed.windowManager)) { if (wm.params) args = wm.params; if (wm.setTitle) wm.setTitle(window, document.title); } } /* } catch (ex) { }*/ if (!$.CurrentWindowManager) { // Add default window and add some methods to it $.WindowManager.defaultWin = { getArgs : function() { return args; }, close : function() { // Restore selection if (ed && wm.bookmark) ed.selection.moveToBookmark(wm.bookmark); if (wm) wm.close(window); else window.close(); } }; } })(jQuery); imagemanager/pages/im/js/utils/rpc.js000066600000007274150472616010013603 0ustar00/** * $Id: rpc.js 558 2008-11-05 15:54:42Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ window.RPC = { pageBaseURL : document.location.href.replace(/[^\/]+$/, ''), init : function() { $().ajaxError(function(e, req, se) { if (req.status) $.WindowManager.status({title : "The server response wasn't JSON format", content : req.responseText}); }); }, toArray : function(res) { var fl = []; if (res && res.data && res.columns) { $(res.data).each(function(i) { var o = {index : i}; $(this).each(function(i, v) { o[res.columns[i]] = v; }); fl.push(o); }); } return fl; }, exec : function(m, ar, cb) { // Make RPC call $.post(RPC.pageBaseURL + '../../rpc/index.php', { json_data : $.toJSON({ "method" : m, "params" :[ar], "id" : "c0" }) }, cb, "json" ); }, handleError : function(args) { var t = this, errors, res = args.response.result, err = args.response.error; if (err) { if (err.level == 'AUTH') { if (res.login_url.indexOf('return_url') != -1) document.location = res.login_url; else if (res.login_url.indexOf('://') == -1) document.location = "../../" + res.login_url + "?return_url=" + escape(document.location); else document.location = res.login_url + "?return_url=" + escape(document.location); return true; } $.WindowManager.info($.translate(err.errstr)); return true; } else { errors = []; $(this.toArray(res)).each(function(i, r) { var root; if (r.status && r.status.toLowerCase() != 'ok') { root = args.visual_path || '/'; root = root.substring(1); root = args.visual_path.replace(/^\/([^\/]+)\/.*$/, '$1'); if (r.fromfile != undefined) { r.fromfile = r.fromfile.replace(/\{[0-9]+\}/, root); r.tofile = r.tofile.replace(/\{[0-9]+\}/, root); errors.push({title : r.fromfile + " -> " + r.tofile, content : $.translate(r.message)}); } if (r.file != undefined) { r.file = r.file.replace(/\{[0-9]+\}/, root); r.file = r.file.replace(/\/+/, '/'); errors.push({title : r.file, content : $.translate(r.message)}); } } }); if (errors.length) { $.WindowManager.status({title : $.translate(args.message), content : errors}); return true; } } }, insertFiles : function(s) { var t = this, args = {}; $(s.paths).each(function(i, v) { args['path' + i] = v; }); if (s.progress_message) $.WindowManager.showProgress({message : s.progress_message}); RPC.exec('im.insertFiles', args, function (data) { var o = {files : []}; $.WindowManager.hideProgress(); $(RPC.toArray(data.result)).each(function(i, v) { var u = v.url; if (s.relative_urls) u = $.parseURI(s.document_base_url || s.default_base_url).toRelative(u); else if (s.document_base_url) u = $.parseURI(s.document_base_url).toAbsolute($.parseURI(u).getURI(1), s.no_host); v = { name : v.name, path : v.path, url : u, size : v.size, type : v.type, created : v.created, modified : v.modified, attribs : v.attribs, custom : $.extend({}, v.custom) }; o.files.push(v); }); if (s.oninsert) { if (s.insert_filter) { $(o.files).each(function(i, f) { s.insert_filter(f); }); } s.oninsert(o); } }); }, insertFile : function(s) { var ins = s.oninsert; s.paths = [s.path]; s.oninsert = function(o) { o.file = o.files[0]; ins.call(this, o); }; this.insertFiles(s); } }; RPC.init(); })(jQuery); imagemanager/pages/im/js/utils/gears_init.js000066600000006452150472616010015140 0ustar00// Copyright 2007, Google Inc. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Sets up google.gears.*, which is *the only* supported way to access Gears. // // Circumvent this file at your own risk! // // In the future, Gears may automatically define google.gears.* without this // file. Gears may use these objects to transparently fix bugs and compatibility // issues. Applications that use the code below will continue to work seamlessly // when that happens. (function() { // We are already defined. Hooray! if (window.google && google.gears) { return; } var factory = null; // Firefox if (typeof GearsFactory != 'undefined') { factory = new GearsFactory(); } else { // IE try { factory = new ActiveXObject('Gears.Factory'); // privateSetGlobalObject is only required and supported on WinCE. if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { factory.privateSetGlobalObject(this); } } catch (e) { // Safari if ((typeof navigator.mimeTypes != 'undefined') && navigator.mimeTypes["application/x-googlegears"]) { factory = document.createElement("object"); factory.style.display = "none"; factory.width = 0; factory.height = 0; factory.type = "application/x-googlegears"; document.documentElement.appendChild(factory); } } } // *Do not* define any objects if Gears is not installed. This mimics the // behavior of Gears defining the objects in the future. if (!factory) { return; } // Now set up the objects, being careful not to overwrite anything. // // Note: In Internet Explorer for Windows Mobile, you can't add properties to // the window object. However, global objects are automatically added as // properties of the window object in all browsers. if (!window.google) { google = {}; } if (!google.gears) { google.gears = {factory: factory}; } })(); imagemanager/pages/im/js/edit.js000066600000022067150472616010012601 0ustar00(function($){ window.EditDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; args = t.args = $.extend({ path : '{0}', visual_path : '/' }, t.currentWin.getArgs()); if (t.currentWin.features) { t.currentWin.features.onbeforeclose = function() { // Temp file exists, ask to save if (t.imgPath != t.targetPath) { $.WindowManager.confirm($.translate('{#edit_image.confirm_no_save}'), function(s) { if (s) t.currentWin.close(); }); return false; // Block close } }; } $(window).bind('resize', function(e) { t.resizeView(); }); t.imageSelection = $.createImageSelection($('#editImage'), { scroll_container : $('#imageWrapper'), delta_x : 26 + ($.browser.msie ? 2 : 0), delta_y : 90 + ($.browser.msie ? 2 : 0) }); $(t.imageSelection).bind('imgselection:change', function(e, x, y, w, h) { var f = document.forms[0]; if (this.mode == 'resize') { f.resize_w.value = w; f.resize_h.value = h; } else { f.crop_x.value = x; f.crop_y.value = y; f.crop_w.value = w; f.crop_h.value = h; } }); t.loadImage({path : args.path, url : args.url, initial : 1}); t.resizeView(); $(['save', 'revert', 'crop', 'resize', 'flip', 'rotate']).each(function(i, v) { var a = $('#' + v); a.click(function() { if (!a.hasClass('disabled') && !a.hasClass('active')) { t[v](); $('div.panel').hide(); $('#' + v + '_tools').show(); a.addClass('active'); } }); }); $('a.apply').click(function(e) {t.apply();}); $('a.cancel').click(function(e) {t.cancel();}); }, apply : function() { }, cancel : function() { $('div.panel').hide(); $('#toolbar a').removeClass('active'); this.imageSelection.setMode('none'); if (this.imgUtils) { this.imgUtils.destroy(); this.imgUtils = null; } $.WindowManager.hideProgress(); }, save : function() { var t = this, f = document.forms[0]; f.save_filename.value = t.targetPath.substring(t.targetPath.lastIndexOf('/') + 1); t.apply = function() { // Get replace mode RPC.exec('im.getConfig', {path : t.imgPath}, function(data) { var config = data.result, f = document.forms[0]; if (!RPC.handleError({message : 'Get config error', visual_path : t.args.visual_path, response : data})) { if (config['filesystem.clean_names'] == "true") $('#save_filename').val($.cleanName($('#save_filename').val())); $.WindowManager.showProgress({message : $.translate("{#edit_image.saving_wait}")}); RPC.exec('im.saveImage', {path : t.imgPath, target : $('#save_filename').val()}, function(data) { var res; $.WindowManager.hideProgress(); if (!RPC.handleError({message : 'Save error', visual_path : t.args.visual_path, response : data})) { res = RPC.toArray(data.result); if (t.args.onsave) return t.insertFile(res[0].file); if (res.length > 0) t.loadImage({path : res[0].file, initial : 1}); $('#save,#revert').addClass('disabled'); t.cancel(); } }); } }); }; }, revert : function(e) { var t = this; $.WindowManager.confirm($.translate("{#edit_image.confirm_revert}"), function(s) { if (s) { $('#save,#revert').addClass('disabled'); t.loadImage({path : t.targetPath}); } }); }, resize : function() { var t = this, f = document.forms[0]; t.cancel(); t.imageSelection.setMode('resize'); t.imageSelection.proportional = f.resize_prop.checked; $(f.resize_prop).click(function() { t.imageSelection.proportional = f.resize_prop.checked; }); $('#resize_tools input[@type=text]').change(function(e) { if (f.resize_prop.checked) { if (e.target.id == "resize_w") f.resize_h.value = Math.round(t.imageSelection.h * (parseInt(f.resize_w.value) / t.imageSelection.w)); else f.resize_w.value = Math.round(t.imageSelection.w * (parseInt(f.resize_h.value) / t.imageSelection.h)); } t.imageSelection.setRect(0, 0, parseInt(f.resize_w.value), parseInt(f.resize_h.value)); }); t.apply = function() { $.WindowManager.showProgress({message : $.translate('{#edit_image.please_wait}')}); t.execRPC('im.resizeImage', {path : t.imgPath, width : f.resize_w.value, height : f.resize_h.value, temp : true}, '{#error.resize_failed}'); }; }, crop : function() { var t = this, f = document.forms[0]; t.cancel(); t.imageSelection.setMode('crop'); t.imageSelection.proportional = f.crop_prop.checked; $(f.crop_prop).click(function() { t.imageSelection.proportional = f.crop_prop.checked; }); $('#crop_tools input[@type=text]').change(function(e) { if (f.crop_prop.checked) { if (e.target.id == "crop_w") f.crop_h.value = Math.round(t.imageSelection.h * (parseInt(f.crop_w.value) / t.imageSelection.w)); else f.crop_w.value = Math.round(t.imageSelection.w * (parseInt(f.crop_h.value) / t.imageSelection.h)); } t.imageSelection.setRect(parseInt(f.crop_x.value), parseInt(f.crop_y.value), parseInt(f.crop_w.value), parseInt(f.crop_h.value)); }); t.apply = function() { $.WindowManager.showProgress({message : $.translate('{#edit_image.please_wait}')}); t.execRPC('im.cropImage', {path : t.imgPath, left : f.crop_x.value, top : f.crop_y.value, width : f.crop_w.value, height : f.crop_h.value, temp : true}, '{#error.crop_failed}'); }; }, flip : function() { var t = this, f = document.forms[0], axis; $('#flip_tools input').attr('checked', ''); t.cancel(); t.imageSelection.setMode('none'); t.imgUtils = new $.ImageUtils($('#editImage')); $(t.imgUtils).bind('ImageUtils:load', function() { $('#flip_tools input').click(function() { t.imgUtils.flip(axis = $('#flip_tools input:checked').val()); }); t.apply = function() { $.WindowManager.showProgress({message : $.translate('{#edit_image.please_wait}')}); if (axis) t.execRPC('im.flipImage', {path : t.imgPath, horizontal : axis == 'h', vertical : axis == 'v', temp : true}, '{#error.flip_failed}'); else t.cancel(); }; }); t.imgUtils.render(); }, rotate : function() { var t = this, f = document.forms[0], ang; $('#rotate_tools input').attr('checked', ''); t.cancel(); t.imageSelection.setMode('none'); t.imgUtils = new $.ImageUtils($('#editImage')); $(t.imgUtils).bind('ImageUtils:load', function() { $('#rotate_tools input').click(function() { t.imgUtils.rotate(ang = parseInt($('#rotate_tools input:checked').val())); }); t.apply = function() { $.WindowManager.showProgress({message : $.translate('{#edit_image.please_wait}')}); if (ang) t.execRPC('im.rotateImage', {path : t.imgPath, angle : ang, temp : true}, '{#error.rotate_failed}'); else t.cancel(); }; }); t.imgUtils.render(); }, execRPC : function(m, a, er) { var t = this; RPC.exec(m, a, function(data) { var res = RPC.toArray(data.result); $.WindowManager.hideProgress(); if (!RPC.handleError({message : er, response : data})) { $('#save,#revert').removeClass('disabled'); t.loadImage({path : res[0].file}); } }); }, insertFile : function(p) { var t = this, s = t.args; RPC.insertFile({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, path : p, progress_message : $.translate("{#common.image_data}"), insert_filter : s.insert_filter, oninsert : function(o) { s.onsave(o); t.currentWin.close(); } }); }, loadImage : function(o, cb) { var t = this; $('#crop,#resize,#flip,#rotate').addClass('disabled'); $.WindowManager.showProgress({message : $.translate(o.initial ? "{#edit_image.loading}" : "{#edit_image.please_wait}")}); RPC.exec('im.getMediaInfo', {path : o.path, url : o.url}, function (data) { var res = RPC.toArray(data.result); if (!RPC.handleError({message : 'Generic error', response : data})) { if (o.initial) t.imageURL = res[0].url; // Initial load if (o.initial) t.targetPath = res[0].path; t.imgPath = res[0].path; $('#editImage').load(function() { $.WindowManager.hideProgress(); t.imageSelection.setImage($('#editImage')); $('#crop,#resize,#flip,#rotate').removeClass('disabled'); t.cancel(); }); $('#editImage').error(function() { $.WindowManager.hideProgress(); }); $('#editImage').attr('src', '../../stream/index.php?cmd=im.streamFile&path=' + escape(res[0].path) + '&rnd=' + new Date().getTime()); if (cb) cb(res); } }); }, resizeView : function() { $('#imageWrapper').css({'width' : (window.innerWidth || $.winWidth()) - 30, 'height' : (window.innerHeight || $.winHeight()) - 100}); }, isDemo : function() { if (this.args.is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function(e) { EditDialog.init(); }); })(jQuery); imagemanager/pages/im/flvplayer/flvPlayer.swf000066600000026624150472616010015376 0ustar00CWSax| \S$pr/EO΀ ѐEUEzZj[jjjkov?xowfvvfvf`KsBj)@=%hjjJe 6( UH |F5PT! (5y$DxLB[ 4SH e>aJPBIB.&䫴>$)sIC=؇ޓ!g}o^ӣzT G)!;tQTPPƏ-Z>C=>A×迨֡ 幻GJ?쑱"Ӫھ{SVes¶ŋe^cKqy? 5~E^LhQD5޿ˬ<+O߅i8jοMN6,?D~#5d([T;nJ = DAqfy9 ^)jrp@/o ɰ&6ٸT+Tɠj؎A:;0)Yp<\<0B k*ۥO2FD G0cۥB_HXޕA!A$B,D`(it Z[J~ЬَW+ EH.,225S*H+*QZTi (_֠RBoư(EYԐZf0贤h07JQPBcե< dXQkU(L"J02JP΀M WҖ 22>>U0BS~ 4H]{>Coұ~PeH`P R0#,ẠP~O(ӱ¥X4'ҫ*%'vI)zbҨ |:6K>K'iU*" oPFQjЁ:S(eĚ_4egVm}3L+Yc@Q1`|e%^b{: nn| r06m> tZ*("DHa0(hO Tz@*y#[aI{+ 4VQ(׫K qDu?aZ YP4mO~*,Jl76F1FG✔Jbcj$HA@TUU?L @#NX D tUZFU(JB@EA=;Fuѱ[TNTKgPdfFir̅JT1(oo(Y+,UU"uŝQ~YAW R خ5~ZZTb-. a0)0L@-QjthEѮ54!Ƞ *uQoH8Q&2V_*(?@o=Д)@cVAgT -F2iG)P%3j3*$ӫ2ʊ .2ء,+"QPyN:uh αZQiqqªVBgV\:g~c6^0 He<_b-n>QBj`^?!8sjRBjvؖ*.. AxFzP2 2p5 nټ3o,V/6~JhD%v~+ B H)a+rZZ xXXM!peI 9'# @ C12;d^ #$e.H"# Iyqv&e/\)@= I"D|HlLZ$7|IԑCDI٦L<4Tˎe'q!5\ сmvV_t/sB7,21")!ǽ 2Me-h]+""`7tycMǶ@m<W}9!FPMc46- dZa_ <aZ7Yѳ#T0 '<[ӏB,ZX';2 I5e0DU:1k|97L%jc!gociأ6l|`1wcۃp4ޒ5SN8F9߃ j'n3ds((LIw%㥙ԟ0@;A I9|SiEpY4W0QBr["7a%HH1B4+ΈY:2dytw;@E<S\Z0&$9z\X9ɷd\_RI3&*y%#BjjEF\NBu+"=>x:1پ}@q6c4 8Tm}2"<<$rod/Y_">l+ snAQ>> DdDwVD?"_N/|hKqH c)7aV$>#}?5y8NfDXD`Vj&T#nad!aoWP.,,K: d;dnv.H]XL=eSmk/+5L ԌxC;+/֝0 D_[8qZ81=5a4VihwDHz"OA)XBbm 9a'>x[yZ+umH&Ҩ/)Lދ:бZM?1<;.CrOYt2ӓ>G#2\e!DjN`5[V' (XefZ4eSWji\kS p ti$D _;8 m(q|Nvc&x#\LV mZHݖ3, (WS^.9ܡ2fOQ!I`R-h&nRZ;4Wk3Auo7czW0 'Li$B$MeNצɠ=tF$6f5kTBҥG mMmDdB ŒQ[۬FīY!fRj6M&`#\ 隓 Cvt*|EDPM'ɗ=Po)ePҜ/ΉM$j%dGEl@G`i\ xl}k6ペJFe 9@ǥ3i ;7e#0femw\7g>FlX&o|UH_!aQ)/+{:5[6zζ^DaLCb$s'L[8^`o*pqi\!!jvߡE35^R=59ྋ"^ n" İ$1S* 좽!hɛVUev}}=rwր?IoF  (n<p'JjѬ΅>rU_: ˳jNV \t|ɪK:מ+wꮮbu0Og9rJ$}%W5-p܅T8mf4tDW17_id 3Ƣ¦5]\]uQ>kWYwhvRؑK]B {{F5c$SX}pn9E%\\r{nN9 6ɢu$c\.a?y5]l<$35Ҩaӂ8=8qgmD#dO *1 wY9~5@#eHA QכkF8} [cQYKHɒ&Mg@cZB >kwPq B)mAScN"a;K`+dO|eT~,`3ݾ  ge ?iC6@ nPs^UT,$nN]+B{mn@ R-MÍJlBL@L0Y4i*.ܮrww#A0lN.q0LNkw=VŮNPs1d!,4rb>z1C1L#wPweXJD$;8 0;wH%*.m[x",[6խ6%㾌.ʹf>9''N{9lO}gYw]O6'V[3׺ʼ^ ]_YkFFM5#{O*.NPt}-r6c{_~<4Y\RTD_MCkq [[̅9g~vz~"犤;o"@ޠ+]op"꽶ፄQ{ v2ySڝin>]mSz|? >~own5=須VPHW礤)W(<^޶^, ^)?_=eOWZy5˥߿zUoZvw{%MGw҃KoG; g¦W=+䚝~[ώkl^9u|Q[QcRVgSV?,C[Ӻ!nG9>i?tZ25W߻ρ·.KSK+ccOUXPW6sꮑ&]y;OK{XlwxɃwGflc6qBỮsyCcؑ+?y. ԨsC.!k/dйYg ]ffjp׏7?&D"ܽq|+iN٭lnދUuOg(c6=pf_π}kԭx%]/W3 I=-r^BѰ=;< uI5R~vLWɹNwxV_k=2|ِ;w<~7.U)Vʛ+&NN[7hkNdCo 9ÉCZwҸ_ȟ\l7|0j×Nd!oGݴ}y;ܚ:s{#NOoV$>&gːSxqpț{y留'ľ_1v)uG`g݉{ϡU].ȍ1qF꥞%k\n޻W~I#9~~SuMaњXg8V^Լ}cc[Ԙ0'w GFnx¸={L~÷.3{7HPgE§ILWݿ+yyٛroonK?.pOq+;n1ו%ΏJ %Ÿt96緝㤮>YY`ەR]^Qk_^w*tUmO q{ޥ?nzXz9s5p5c*8"p8b-XFGe sAVŚ}s-]Zw ֿtKtǠeuukJg-|KϽ { oJLslcw:(,oh=Od'O'ްU믟ͨ>#n;uvb0˫٩Q_1~1[fV#!T5~Y~]xڔ'φ|t蓛n虻}fV Nh$^_hg}ͱ7&]<)Go-Yjʸ#~#cW h?>gT;?z>om/ԍܔrxm 燷%hy[k|MgVnT%2ڧႺ=WMיV_?8Wr^|/jt*kv׆fhԜGʏv4vFh$_b$tt&3xk=  rX3!iAkQ4N ՁiA+|k% "! 1o/-W֋1\z2+VŁʙr8$-Ä`Wxr/;e[@GOS־~=ۓ{4z9,]lPrYl7y}n a+Uf:LW2dAHΤHOwP.ш"ey׶V:|Vݩaƭ욲dk[W]F5`\t5`GtwqL1DbtC{xvi\E14xdLtafˠxBL]˴B+"#*˼Žh5H}<Dz#I=շ %7gvN1|ϻGnyB <4)~[\|gӓTWW7/'է}}}c*ޞ57Bn%N{pvo}ĉr̷:ooZ{r\I8l}㌇n]sĂG?,G }dMЍ\W[/ F\1Ž$%pC2V?3|K"#$7ؒD{;(~SQ{[1(^UA@5u@G|P̠FSh^H@^_mtf_Y\gz)0" $.r/qDЧv-DzD{H.Bw2p>ڵkESSq\ze%e 9g xnBCL:ݹA],FϹk# DkVB8mb# {#common.title}

    {#panel.categories}

        {#panel.folders}

        • {#common.loading}
        {#view.mode} , {#view.images_per_page}

        imagemanager/pages/im/edit.html000066600000017006150472616010012512 0ustar00 {#edit_image.title}
          
        imagemanager/pages/im/img/submit-delete.png000066600000004204150472616010014720 0ustar00PNG  IHDR^y|CgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxY͎53UVQ"%E9\sC @H % 8<ܹ 7)JlLWU=;:w].W}Uk!jVU4s]NNNɓ=|GGGgΜ9|qCx2HpfR DgϞ-q+Wlmm(m}/gY *9]5ҏ6>&u/:z;kcy<qι_|/(5` T ESˊr[hv`rJo|ɧ;5QG-RZ֭kG[@Ί3䫈NPZjjPBʭl4K0y`g,SUHvKna*C KKor?OOCDA\Zy  BxƈEUBT2"Iz@\K/{/Bjs`k.G.{)]1fHz벵2.hAOܑAڮZ50nSh}W*ĉUZWx?3ûjZmu'[0#?cdsnu Fr$'(ŵ.#D1Nr9%<*X^'꒑rк3^:-ksl؛䄸(@$}Fh#hcOY۹ʋ=wuq75g0HHԕ* Y-Ii.i]RV`RY`z6EU {B%:d4ZdqE"/Fa;a*q \mS,ߡe MsE7ܹ\*q##C^e.G`[B 9dr mί#`@@,q@+ vD,!^Lhm5SƂU<֘W^LsʓtڰM3`A4  Y'l =q\U>OK;dn?y1MP0S4.ӪA[}vLa@=2;g//H\y'@XVy9(p8:u@PHC" =LX$,'gLd&s\=#a-euspuIѯ("HrX0S30IKIږ0gN]}:TuV-_Oo:0wZHZ4grɋ^Ϻ8`ZVqy-ʕMmFq<'N9n#ESLUq ĥNwH5k2|GAwQ6@dlLqdˠ[lƩ"!ρK㤞}<6)i,,N`M (T*t!S"j~t6f4Ndx;wwnAs4kמ?i_~%J9?zŋ޽|/_*[ze +ؾ4zVL#A'De1ug6IENDB`imagemanager/pages/im/img/imageeditor/editarea.png000066600000014245150472616010016232 0ustar00PNG  IHDRKgAMA7tEXtSoftwareAdobe ImageReadyqe<7IDATxvHQN9S0j@nqw>T* 0~   00   00   00   00   00   00   00   00   00   00   00   00 >ϟ?_9sɏ'~h0@X CxSt7EDž* +D7W v;0  =NvNᯐJ=]tU$( މC>??56ϟE˻6`߿Co? r9 puU֋ oۭ?xYtNcxY1 8?`Fg|NeMC]+ߚ3)g6 XYԷ2 ٜ HR=qyxpǜoJ V t7ԷlǜV^_F9||i+0h5a#BլvsNñ# 7Էݫ;puSFe)>黢``ABnnժ#Q_XV}ˮ(w~ 0 ,E7:/ˆ\``~x<~3+[r5i5""%Wx[.s/gXY}*ñlsI%o!sPI ̢r'}7ߤ.E9{8 Ʊ;M vVvws9H00}<ǟ``}Xi]_?`wߦ<ɢv; )j㦾poT}}pu7p~;i}0;__BwbkE׬o-__"kEWq_Xh}?'[ߍ``}n_[_!kw`@}gv5"N*|^!@{!oaM& 2ҕ?ۭP껱 R):v}?>>Buwn 3 ,)y?0+h+*}Frۼl_^c'[{{:wW0;.E;F NK;̈́#@fWT_``8o3 PnzÍgu7kɛ|~||AZqIY}E6r7nwk۹  4}a}W0@f/S_``6n$wʸNYO6Ï֢@!.3ײUS0nvWO/ kd-nw/ ,KBUn}Eqi[w_O |E]3wil]nl27|#Fum &uçQ/ ,w~n.{n8+6@s2dZx/ ;Kwc/Ģ|x|^oPkMVW_ 0S3h;14+h|>L5kXaB~NS(7c(kaߗ^vW˲g;^!{YCܼ5+uhptCpoʽK~Ëv~mX I`oA}(H璗Ӳgu:F/Ǐx{@ܓX}Aanq ȍV} g~0D͊s@2 G\4K}we00{7נ~YqwfvH9le}kZ{ٗq%.+#ΡX1}UH_?9.z~u-{ ~ytn>968k-;]yw:B߾ftoP/ |pK~]tS}Amj_`X3߲$ 5&f߫PYO??S}Aa*~0eCp"EzEˉ5ͭx v(^{5&ַom3WbShRsZ9ּ ~"o碣orTgR_`AګeͲ}xn}7ӫ/ i>}ˤߧU_WګuX=etЉobo>ߖ~]ګUЕMwF!n &`b-HZb}o P_0 ^eշr,.o@{ L0܃5mVn~+@a\kjvwVyG ]{U6/  Sa4tBd`?ƻ>y}[  c)>eQdj^ߑpl``h/kյOo^߶[=LAa7m7̽Rq}ǘY])X{5[S8 04g+Jh|>'7VswI'R֬ 7qU;W}{}Kwj]#tZl>3}]9^M ky2')GpA!;9)}ת{Kt^Yp#^Oܪ  9  '  o%F S˓6:Xq+IWzA!5`NTx@~Mr- j==X_ձ ;Náx>$Қ+V,~ 떂 0Q}7wlNOm4{sJ/CмH}kړu5 .[h"ɺFLzӹ+<žO[߫9[FL_ /R Z~$Bzl9 ܅`o;`#-7ww\ȍםMz30:^TV0t#{= 7|~ǟS o컹~#f{% 00do2n {̚1O_E~T.{)1 v;@˞;e\ӿ ]48+]B3`Xb,!w߹?̷V“~aEw30=#q1.(ǟA!=!Od7n<0I4oBzu'NU֫; `$׋иUo߇I[(W.DA!5˞w\o2.p𷠾 w?=|x](Cm'{ ݞw:o N|bI`2|/ $~s-Cv;Z 0eCpʂݶ;l4H鍶ۭ_-`(pecr-oJ!~*;,rєk4,q%8  Cttϧ;<-/tFoۭ@~('})7 ?gAWHo65g%F+9O] XP .:z jM|_.Mߜׯܴv.Hoyk9  ͽQ\ouɚ(#`M]}ӓ7~*k7߇5c +\[6ƋƾwuÓ&^{3^7,)U3^^n$ ) pȚg@һ椻͉^wEex{z_@镲Fs߉y}Tv'nq=M<<:c T߁ 7ǜçN2 R 3 Wt̐C6F<]@)wXKk n >껍 ov`o}ێڪ׫X4ǻ&LΕv=n|=qkf|\0ߝ ir#``@@``@@``@@``@@``@@``@@``@@``@@``@@``@@``@@``@@``@@``@@d``ՆEp8IENDB`imagemanager/pages/im/img/imageeditor/bg.png000066600000005521150472616010015041 0ustar00PNG  IHDR=ɣ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FlIDATx1 kx /tPR7'HBܾ/Nڋ4 Za^\Js)>p"MgIENDB`imagemanager/pages/im/img/folder.png000066600000001340150472616010013426 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<rIDATxT=oA߽;' A !D(@P?CZjA!IA D%ľ/{wyw<̮Z} C0{IQsbi 6V>O{*>nz@1M,PuΜ*%[;@q!y A+wDwpm3(Eݟ_]9 ( LHzCvM\fn\ų/ɪMezũU%S: P[;$YF%:NW%6jG cW}cZQ@O26^Zw @}hƏ l @ ?׀+UYK)An| X7hA60i TGElx3:%0}&iˆ{*A#7T8?#+Q\vF%&cbx &&.c 1?q\E[~q"}ϫⳟr.vӠh DxFnpF+o|g{_NecP,:3rK o׫߽<[\kzı"B 2ݶ؁+:lynY<삣}s&; +҃IyI*19yx@FrjEG̅}Ifz|~T7),+=G6=HnÂ4Rsp;h#<\*Iq[E1ao;n<]dSAfì sL'lʹkIMc_C81!Bb,F?-x׎x4qӌ}T2(@ IQAd%Ga)aS`Rp臜B3 be9'f<F,) $jK]kEH3ggA}ȿoLj4c)pP 0u9ۀL<|8.'#m& ֵ/:p}7[5׊0 kf\˹}- CH-"kqp'[zpsH~;v ߠQƄEp:+(-נ'~ ޤ:yMfx}D%e^ I1!/:)&P!1}RD.З:jbC)©'Fbx)*jqY5#OKьOH&i Aɀ4( F9%>r+Bc"BUO&"aZ~WQPdEEZ,k [zT9.) )t#D!R`ť,W>QXj\PU@F}ej`Ǫ VE8(iXQ.qoRXPe Z]ro˹TZ Xlk-BYoe\{ o,^+)%-*:S)FWktڒ\)ڣ/3UfZ^nZW[1JN///oulAjl$ѯmQ .%F]/#ZiA) {;n 6W$ՖTBoyssHheL0jZ%ծw%նi3Beǎ6إ';IENDB`imagemanager/pages/im/img/right.gif000066600000000456150472616010013260 0ustar00GIF89a6YYb;q|耫a~t 7D>>C6 (>%ID9  #!>*\h$;imagemanager/pages/im/img/folder-middle-bg.png000066600000000360150472616010015251 0ustar00PNG  IHDRR5+}gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE&߭aIDATx 0c`I][OZjVZ<IENDB`imagemanager/pages/im/img/clearlooks2/button.gif000066600000000430150472616010015666 0ustar00GIF89aPccc!,PPC8;dihjLm,tJxpHDH1ɜ-P@ZجvvoްxL΂贚z^6|>~vz"w7ħ/! ;imagemanager/pages/im/img/clearlooks2/alert_info.gif000066600000001623150472616010016502 0ustar00GIF89a *T xg(Z[3ʜ[ūu=ѻnKc+؈,Meх+9CRڃL5\D~zȼ3~ %zn)E"<jT,-E΂-wIܕ@T8»aʡ_Ȯ}I:TµІ2aû{_}a݊#?׳^]ݏ1ƘPőU{79P|y7!,  Q Q _J]#i#]J_Kai~aK #LG# HY̯H œɽOO V ?S SRi~8 * mAm R85|,eп$Fhp #A}?` b=Pis$ `AQmph):ANQ͈T@ P-NU>E2`^ X5rgowxd> WqC:(SMu"C@k,U&aIB8]1!xh $q$mZ\e8>aGXXKT$AO>DŽew#X@F ys=@…&Ƃܽr É}Wx-P\"FčI;imagemanager/pages/im/img/clearlooks2/statusbar_right.gif000066600000000166150472616010017566 0ustar00GIF89a=:8ȿ!,;8"I} ͻHzY*ںL1-' Ia`l:tJ&;imagemanager/pages/im/img/clearlooks2/bottom_middle.gif000066600000000371150472616010017201 0ustar00GIF89aù=:8,Ҕڋ޼H扦ʶ L ĢL*̦ JԪjܮ N '(8HXhx)9IYiy *:JZjz 0K[k{ ,N^n~^;imagemanager/pages/im/img/clearlooks2/top_right.gif000066600000001161150472616010016354 0ustar00GIF89a $%'%+Ҽкβǭ·̴ɳۂu}~DZƴɳ鳧>;7 !F, ΀EF%E#$$#DF0C 22&E"==1E ..'EAA(99<>::=> 77B>--*669"9  ! CFsBjA R>P I*AAsr^@ `O> ;imagemanager/pages/im/img/clearlooks2/bottom_right.gif000066600000000105150472616010017053 0ustar00GIF89aù=:8!, 8*Î9 ;imagemanager/pages/im/img/clearlooks2/top_middle.gif000066600000007242150472616010016503 0ustar00GIF89a.$%'êu}~鳧!(,.pH,Ȥrl:ШtJZجvzxL.zn|N~& H*\ȰÇ#JHŃ2jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ@ JѣH*]ʴӧPJJQ Xjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(%Thfv ($h(,0(4h8<@)DiH&L6PF)$TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐¤Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6~ Vkfv+k覫+k,l' 7G,Wlgw ,$l(|,0,4l8<@-DmH'L7PG-TWmXg\w`-dmX{lp-tmx|߀.n'7G.Wngw砇.褗nꬷ.n/o'7G/Wogw/o= 觯/o HL:'H Z̠7z GH V(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` HhL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz ('ɁRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:vy @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNW*@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫZ׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKMv pKMr:ЍtKZͮvz xKMz|K]~LN;'L [ΰ7{ GL(NW0gL ȱw@L"HN&;PL*[Xβ.{`L2hN6pL:9xγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMR#ָεw^MbNf;ЎMj[ζn{MrNvMη~NO;'N[ϸ7{ GN(OW0Gn8Ϲw@ЇNHOҗ;PԧN[XϺַ{`NhOp @xϻOO;񐏼'O[ϼ7{GOқOWֻfOϽwOO;ЏO[Ͼ{OOOϿ8Xx ؀8Xx؁ "8$X&x(*,؂. 284X6x8:<؃>@B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈8Xx؉8Xx؊8Xx؋8XxȘʸ،8Xxؘڸ؍ȍ0Xx蘎긎؎8Xx؏9Yy ِ9Yyّ "9$Y&y(*,ْ.0294Y6y85<ٓ>@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖnpr9tYvyx|ٗ~9Yy٘9Yyٙ9Yyٚ9Yy9ٛ9Yyșʹٜ9Yyؙڹٝ9Yy虞깞ٞ9Yyٟ:Zz ڠʠ 0Zzڡ ":$Z&z(*,ڢ.02:4Z6z8:<ڣ>@B:DZFzHJLڤN@ R:TZVzXZ\ڥ^`b:dZfzhjlڦnpr:tZvzxz|ڧ~:ZzڨA;imagemanager/pages/im/img/clearlooks2/statusbar_resize.gif000066600000000220150472616010017741 0ustar00GIF89a=:8ȿ!,Uh"I} Z ɅmB(xnGER-)LSEy_+$c"z^|;imagemanager/pages/im/img/clearlooks2/alert_warn.gif000066600000001462150472616010016517 0ustar00GIF89a wvnn \\ܣ<<66CCJJ888CCdd--QQ33yyWWiivvkj<<llbb$$uuEE׎ڴMLpp++$$eeKKRRÌͳ==AAdd::))::JJjjWWPP((;;ħɣп%%%ƪ00ccIIϺ̱֘~ȟ^]עUU,,ڌssyy||٭QPNNđƘBB__??mm 㺺߀bb!, o2u20v7$r1U{))F1+55=;p!}%Y!8d>x`~~ M\j_}]hE(M2x&sBW( '~7 ?Wf.cKRs&(#>88܅Dpj"@: )Fn$ 0&saxS-*B"-Ȅ }l9hǬ[8q ! 0HhACzfCˀ.a˻xtfbŃ|򗶱 xXB B(CӨH倠6v A;!,rMܰ !üЛPf@(ν@h $ӧg@;imagemanager/pages/im/img/clearlooks2/top_middle_fg.gif000066600000000070150472616010017147 0ustar00GIF89a!,ڋ;imagemanager/pages/im/img/clearlooks2/statusbar_middle.gif000066600000000166150472616010017707 0ustar00GIF89a-=:8ȿ!,-;80I8k`(dihlp,tmx|G(Ȥr 8ШtJ&;imagemanager/pages/im/img/clearlooks2/transparent.gif000066600000000070150472616010016714 0ustar00GIF89a!,ڋ;imagemanager/pages/im/img/clearlooks2/top_chromeless_right.gif000066600000000105150472616010020575 0ustar00GIF89aù=:8!, HC# ( ;imagemanager/pages/im/img/clearlooks2/top_left.gif000066600000001164150472616010016174 0ustar00GIF89a $%'%+EKQҼкβǭ·̴ɳۂu}~DZƴɳ鳧>;7 !G, рGFFF&F$%%G$ED1F'33F#F2>>F F(//)BB?=::?>;; ?C88 ?+..?:77SѢ`  6(#@.dEDhب md@25RK'U f8iH'<@h@;imagemanager/pages/im/img/clearlooks2/top_chromeless_middle.gif000066600000000371150472616010020723 0ustar00GIF89aù=:8,Ҍڋ޼H扦ʶ L gL*̦ JԪjܮ N ('@Xhx)9IYiy *:JZjz +;K[k{ ,N^n~~X;imagemanager/pages/im/img/clearlooks2/middle_left.gif000066600000000073150472616010016626 0ustar00GIF89a!, T똌ڇ ;imagemanager/pages/im/img/clearlooks2/buttons.gif000066600000002253150472616010016056 0ustar00GIF89at0n{Q[c787k|`r~WdpZiu^n|\kyy{x!,t0Fdi&l;nr-bA|c#B,< Ak6LTL9:z:9D;{>9u|ͻ߿u}Ả?5سk^}{ޱw߾u?~˟?*&{P5 6蠃 >@ '>HaJ] Thpb*B/17X\60DbHNUF7ALdP"YeS2 ې[F))iPyfd)fn&`&w U|矀g~G(,ꨟP 餔Vj^馒f駔z *Q)`ꩨ*R 묧J[+XfkU T*`&.6 JK-k\n+W޺njعƞXnټλY^oڿ Zy\[fE-'1ʕMpƲ'2v!{{%ww) (s|57\ l2+ b!^hv F@$T#;5,v>v5xyƪLMep')q7)fy ~>*yz(/y 0~>j(Jz{+Ȯ>k뮿 {F{l/{j;imagemanager/pages/im/img/clearlooks2/top_chromeless_left.gif000066600000000105150472616010020412 0ustar00GIF89a=:8!, H1NAH( ;imagemanager/pages/im/img/clearlooks2/bottom_left.gif000066600000000105150472616010016670 0ustar00GIF89a=:8!, H!,A ;imagemanager/pages/im/img/clearlooks2/statusbar_left.gif000066600000000105150472616010017374 0ustar00GIF89a=:8!,y{3Ree;imagemanager/pages/im/img/clearlooks2/alert_error.gif000066600000001662150472616010016703 0ustar00GIF89a SSEEGG9/.* ʌ21 K; RR SFHHII~z85–97zuoeTS IIFFoltl@0gfGGvrLLXWGG,,!D5rnNMTSYWkf!!21EE3'GGCCONII32ѹ^\WVLLPPEDdc!GGEE үԈURQP_WA@%%YW_]ZW|u~xYWI7M;mjLAcasm?>NM"!c^ONKK!, E e@>=>@e ELwTRN''NRTeL1SmHmS- 1D3r-6b6)r3E mO 3H,,{AZ+r&kr+K2X"'0#t#x)"Dȏ7p…6%nJQF(H`P uHf4Bʛ*$82H3Jѡ%d"H=JaԃMT(PM" N|"e)ld (xR0큦^B @p$+^̷q*n,E$75<<|@ n !( C4p9ٛHi# MTTu,۰O,3`?,Ĉ/ڈKYdaAW"Ҵ/,qTm9aد E%{J3Nc Q JPo 7pDca, c]6SkB+/;,F- ܘKo8dw܁ |Qh,Ymx%~]?nXyOGrR {>vD&|x3-?GN,`3R^`D'U+\&=#3 G|C_8\H8 *\Y-( b g6){ECRv biڦ HLւÈJ u3!p?=zl3.lbS$CJ '6fF;9 |`5Ah[<"{.ppFQelt&r8-sD"8<2AEZP?fWt"g4Ћ݊f8Q80FĠKhL&V.;m43;iل9x%H? G+^ /P.Aap^р{ L,2 >S`hf00GiJs+@%/dS/Ȩpt(:SJ]8VRt\p&Aog%Ps%1AP}[B?Ȁ(! ˨F'@m9CHhN@OnPSHE4(8C62L! Yb@ͫF:Tͱ87Q[E8p0@AMCP#,a `Vg?,*3H@J[iP L#` / M.7Q@ޠ;*pt#m e]B'\ O8Ԑ6 d|OV>-PWhD`ՠr܉^t xwoyх@VmnMF-!R?T1ZꁳGJyaW kBv 9b,_<R2aL\086Ĕ:@ ?Q)Ly$W2e+l+l! 1K ߴu}y@fRn;Q0  uV 1O`DXEL,A hE{c ȶ^^y 4/)4`H_;z2 H$W0;RHo+.D0+԰G(> /$|sL PM%`zN __>+t! ea΂ AD:OBqWpzy L@>9 %RsU$ b~ #ĔPcAX UӶ<[m|##A/z=@ zsgǛR U}- %! Eo|,0l'b7yЗIG>7jY`-y z_Wd~cqG<RcwEuwwHP:?aIYg Ql[0WVcL3jc61 (n@PO8zAdQ9kN>γsYZdts5 t8`}@[1uD8> PFfM8Xz++[X#HI`g/Nwϓo?wldps ed}p {#ASh;p0Vf>'Vg=H Do^ЂG0x[p x ?X m$`6hw-@XN b/v,Hr:ygp>=HP{U@YsЂm8`r]P  k^l@psq&;4Hf(9>`y8?`Yf/y08"H T{_wwbSŇ Q^n vIvxP& Wk9M8Q@`ruhpٌVfo6)04p>o{K4hueP[|^}pdjyȜMc`P@`bw ։9pk>Pi@f\UoSwhoo ] 0 hh%FW 44M0@BOgf/gI qJ0OyXr+@! CUp4@E@pZG7jO@TePЧ&| EG -NMxw0hX@:((T g+V!9ƦVnO{{QlL^ PQFl} :"z2g:21JY#1Z#YXcJ)Ќ5`jj+?@dgE@džJuxP Yd[~ Z)C #z j%c캢88SL0L Y 0 /ylʬ#*P k)MIJk8!+X g^fC0m:s WFExJdP hV0 ?A[yЊ  0 0 P 'AZ)p59uf 0MS p 0ko U}P ೊ0|JPװ .CGpj{fz˪%KmsF sW ʐt0l|H:,KM ںkz `n#PڌЋjʹELFYjݐK :p klt@ ޓ};Z09ۄ`J7,/s߹p \:fZOkP_X FTPP Y˦tp t0<[j3>QK#70J?p h%'[zڲQ0){0h2f|kP Πx` \@ǹH4)9 [ȏA׸   'jPZ0e8Y0HLYj@ [l` ` /| ZRbq˸|,.h2!0L̼F[ی!%%+$c)@CEP88=@){Z= lx 0 0 PxT.%`M-`9PܩsJk:p˪b y@&ۀD0 [w Un l \  pu\% `G,O:9 N?<+Jxk-4@јk] Ib`_D۫]Z  ط `|؇b1(+ ȕْhRP$ڌ|F2]pv@LY;=iIv *j` P \͠0؉m%;M+㡴<w@ Ga`YK:D6 OtN*wIPvY K i\@ +.~%NJ! d ї 5=8tS{ bЦ2N=D k pSϠ f\nP> @ ̠; @ R\""/jdgy)@)pqⓔYg*cb@0 1Z Zhp̠İ 0鳬 6%'_aLw$(pʵM;rzSDf0N0NY`X3EY@ %>e$G^TI(!Zf!9$W0& (s P F@Zp\@ p?H3>$׎(8!A": ~ .,ϪH8P:@C`Im=ޠ8P 0/eP`Xt 1 0̰X8x,J8mfpg@`'MۛF ]P͠ ? + ` K!/!$Y *]@Hho/ %+/;`kK Wbne = i4`b„+V p!ebaC I[6چ8D`ҥK9%L3 NOA%ZIweSQNUWYkRa, 2@`CF zV"D^4X"E !QL81dȑ{|(sNp(IAz, ( \8.I k:*Fv4I$åuF_HJj+.E rs^'_v[(D`JdB[,`a3lUƅoI/cB6 bFktn * M&@Ȅa*E|F0ZXLQ}ûek' đNƏhvfY-h3+YnƴFRWX8ly#sQ_\;LIENDB`imagemanager/pages/im/img/filelist-border.png000066600000000205150472616010015240 0ustar00PNG  IHDRfEegAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbz`۱UqIENDB`imagemanager/pages/im/img/dialog-top.png000066600000024772150472616010014230 0ustar00PNG  IHDRHfDgAMA7tEXtSoftwareAdobe ImageReadyqe<)IDATxێ#I$3*{N0 X`7y=,+VV#8UӃNgIF̏nf8?ukO*2Ngz]|d'4sc6wccS|lvLZ ˴!Ϲh %sgqn5rOKΘQ]>i &f>ƴ}`c\Xd;L$!<@zcbv20U(^!'^'L_q8vDkͨs`Ex3 )m_iƺ~M23D{u2*MvH_ IȾtb>lWnͨc"AZA6G;;a^i %0;Xyki܎:uvǿg'k4t~¼ؙO}1ñn'l gL.P@1ԙ1.9p`{﹚) 0OO0t a!abd܇ 80L32Yx=W=,i'O2slr̐yo;:i;؏tl:NF 3-gߴ-lkL|h 4e/qc04Ӄ $#ee p~ۆE,\=v0D"HA_D-l V'Un4D:q7nd܎pζ2! D"H}=Ə@ po^Y <{TXH@mנּ$D"Nз-¤䡏?u$ .BW>5 6q K!oI$D"_j 9 h؅I >!:8g(^s,Ʌg  D"H' ^HLkBҗ\ljv~O62ZrR$4&H$wpE%3/7\o#&[؀!u z`6YI$DzeȖ1^ 0^L=S#/iŃ CÙI {Fږ=N~F\d$H$W$F_&x Y+־qf~ \e2z9z9 PǤ"1ǑNv_ ̏6Osj|s"$H$ׯ4, 7+݌e(FMo!QJMc\p|AP< 'xVyq2:h⤰0nhBe!H$(fej>Yc95_Jg;oa( &Aq LbV n( u=|X }_'*2s G kh D"Hת|KylπozM=\P}e֊OpfD"HeCぐNw@a+ΜSs4 O_.G0-ן9LwꟅ@@D"~2/s@.M%g=?jжsk ze= jx H"H$&p/ZeWONA/%D; 8k4 p^3 ͅgwFuP"Z\l@q8H"H$ү^h1 e,FAx,:Sƒ~~zg}L mm-lg}>qA|wÒuϰ:H$Dz}Zq<f(p hqep`KFW<@9;pp't=0ڟ~{۵[,;#aFMl;uZ` GoR$ D"Hzܳ0P i,\TGƀg!t]rǶt1K)Ln *OQ\fa={I{pW$52N D"H_l$~bb`(v=ZcKh{TYep;mhUa w x, "xָ5 ueGXH-CS ,@_@H[$D"~1nͥpqo:6 @a{ETak8@~ pWr ~)CPf"`5G=Py Z80\ܜް?q1L"H$ҫ@,CYrb>l %ܪL-~X8YtY ~;;ӗ*XVtrAQsgGM/em!nW-gͳ) d$H$ Qkr p֦f r g^p؅{ftG?0 Flru - ۥi;p hAM1 Z3c`.M!}ն e Y1-3/N !H$Dz n،)fw&Bpe![-la LIf1 [xkpz %6 mnqO:K82 B-ӇXkP({0`D"^zAZ%; 3e$C XeTR"8Ǘg_C9ABLGR>OC8 tvT2$H$H0c1H-я{kwX iYA~z Gye<"F?99H$ʄѣKeZRhSTeY8g9taKdOB X}Σx΂Oh%%=yš"EZZmժ\UBb-8~#od%?.$ܤ't7c7VuqЫ:n!{[b`ym !Оe9Dt$^:MD"^@[J /ˢB TIYNa,m4'hQRt`To51G 0+ۮo6l[ݾֶ}lŒOA;MzY+t90lGmOrt13k0[7GfB)J]%F˧^< <8%@$D"6u8Jf h +nj $Z6JhhǀڈeK䦡ZDOa(t䝪PEyF}Y0؊m_o% 0=WpO-ia?Fb6uw' )AM{2{<9|`P7u܀?P'RNMJNϓH!H$Jd+bA))V}]mӸt}n߭7 |zndtP-Κe9ALىczBOiݶ5֬a-lڂf]2ˉ aZS6w(g%ۭ񵦮;u}k]UYz]bb#p y ?4[4D2UH$ěO1vMh!FUidAaO -gBw5AmB_aOgPR bWR=? )0͛7f7 [;ְcn/ğvtmͺVyӈ\tO:prH Ȏh)Tp$D"B$d0g߇A{zR: O*xu\RSz 3|{Z0m`R\HZMt`0#Iаuni^_}Ė7:4>1 !>=>6Ӷq;닋bGl"cOb,yHԤ#=1>27A&H$J1U5 bL[YkP`囫rRB[>>֏<eRVNɝ&-kYiM8pV`6Ib[B cG"H$ҫ&@D;7 #hѪz붻fsZU>/`.p5Ÿ\cG)XJ 0Zy?| zkP'lh;'1 4VDG;N"H$Wz s9>lưu|汼n-W?}{z[򇹈a&.;! lik>~;zl..J4ӈ<[f<9KOw/ruBp:[.g*5H$jдq#bPY(u[X"#H$uYU*YxҿVU÷wZvc֝Rh_ފ.~fn\B .LI< MHmv;9`ލJХ6DB  )8( D"H׮Owޯ Ѡ3~wrR?Äc`xwk7qQxܛ&5lc0KvVWWWZg61JIж\O48"dBAo X%^)rL3ڱԇcGcXr>| 4ñ´{ha.\Ftv3#׻{xӍg2zS`qfD JE={VU6Tkk|]*5kRelUk {, 'J4 &lS5~R>5=\ppϬiy_.hk6`_Kswp \;\a#։aq dJ?8t,FcBB%VZOY8/q'c7w#Џ >nCY5Lk^:9+Be,=FI)԰9>Ӏ:̛k#!4coxfθMY>ٱ_zmwW.IlL y,H7\T닷Jyt ?t]y[a~ŵ?fKeB;\W}9oḶ ~+B.܇d';\䘘|p,tÛttv6>~S·f6I(+sg9cG}=*b۰Ƚ }W5A=&ƆxhGHlۭXA\l/~PNIo'Hr1oL'E_p?`˂~.E?n8s>ۡOuˈbXiNkIk0~`G@ ̄?aZÿczkgrL`,җ g ukIϟܶ mywwmm6o߭e)n`ͻJJo>e<7<~baW`ﯫ/umaA 5sW1 q,s)CjGT\ڳ`wݺ% k`{鎅/}{{8O ϖn-pm䚃ߥŏwBczlml*qc*mJ v8ecPox~i{]m÷5nb&_X8ϞkLq;wX/`a?lبoF \@./vß~A}+G~-, lǧ'Yf>9pXϞW _ɨ/1uJ5/hH$D#Z/^Ͻ1v=xf(v;d;|HjY0 iS`NmIENDB`imagemanager/pages/im/img/folder-top-bg.png000066600000001243150472616010014616 0ustar00PNG  IHDR,GgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEWIDATxWr@ _We )"yYKƖ2U gD13D<$8 $ P`@ ;-bB΀W=ovźOXEbEZf8MWf}xt:(x/ 5v}i6P7{fwՖ]@ض $@0`aP[ 1<@azhq@r) 1<7 mj{^ߍ*?Gz4W3IENDB`imagemanager/pages/im/img/navdesc_bg.gif000066600000001113150472616010014225 0ustar00GIF89au苢䠲{ȫɓϯٝ灛䰾ـ悛ݩۜҟӤzǧ֥}Ȕ接΅艡̪풧ϖ쐦~ȺܡԳڢߗфʶ醞ˇ~Ꮵι卤Φؙ֬Ҿߘ술̴㮽雮Ҽݱ!u,u S9CfR-5lG^ (2WTq. >= #:i`A"o7]%FYghB8j\N6es&J[_Q)nLt pc@'0b1,MK&B5O@a4JPHxK^;imagemanager/pages/im/img/submit-wide.png000066600000006024150472616010014410 0ustar00PNG  IHDR.tEXtSoftwareAdobe ImageReadyqe< IDATx\͎άˠ/`7}g>_0Wˇ}@\l9XpFdFVOU73h&ʟ/#QcjZtce]AݭG~tT>}Zig|+5陓'OFe0UUyJX3gvڒKi^4=(ˋ/(<_|QΝ 4Ds\8ܽK{-){/=4_*RyHr}>Y֝˿i]cWr} rrt6Ҽ Be}[|OUGX_i# I&J-[Lg0}WZ3xXiӋ^+m"eA2U 4c\+1N0YA|m'p  R6xQ t-^~ j "J͜ld#MI،3 4XiƦu]d~jàpR[i?~,uC?j;mPGR7*4Wz԰lYS_kIPi:ct4C0d+ -<[zV+y7-||8'O,Ԙ7U=id]*|R< %XxdY.=O{A9;z#Z["E@s#]a|`@c3(n:E똷U`~s%ƭcy\۷{jA9ri=oiev/ȡ뀧"K4SA/_izk]<Ni7TDirE^j!|P\5Pcߢ 8ܭ0YQëJPM%>LU  6ʈ#3Z@&9 QW:K@PȖTP^~uѤJ!+B_ RF{++{Ԫu(J\g׭ް~c=uՏGaZzxTeGu1>uGY2Ԧu}7CyX0;rcsN8Ik> ZԀ kl:ֽi?ܻ׸x*-Ui lCYФJd5`%Vl>-ҡ^)N.|ÊV甆~æh]fLc[wY¦vH0M#@_1 */| -uEꮦr21-5Ru57pKLva"(l8L rɔĘk_H8we։:y7/itcV`.8AhoPK"0QPsNc'"Jb⛄RLo5jk쟴$GPοILT\1 M[`9 {%Pc,ɌƷ8Іkܦ*ŸL7.8>JM;~76oI\ˮCPtˊz~R,M8Xn:9H?)HAIENDB`imagemanager/pages/im/img/rm.gif000066600000003011150472616010012547 0ustar00GIF89a-,Eyʖq&|tSjmJ闪䊱D~\ܠʣYY}گ>zæJ~1b-kڳݹ˵romr+QkW"zaO5kGtе]wǏå]9ߙwҪf88n!,-,~~>Ws-AX!>~>n##"7""#-b-878"n(((-X,[(y8#{ X\dE(v !&?(ÃD).H[I\"G,(⒦ A8R&B<9ƒ '2 .}>i `%&R 6ݫW pIa@2`hKKL!T#e?TƄ#U4xr/B uc} <1qEo1È #h˃Ĕ<&tp݉/m0H$/&kpHPBQH܊EJK 8 8!` ZPat >0g,D\` 2c(EDCP/$(?fD b )|g.$qCȠm p1$Nj1CvfĘ@%PGXQ G VpqI =4Qr*DjjhSGGDBDj+7@a!%,՜OpedG FFJF fmq{B\J=+DKzn( {H믿gDLqK(00* ,Bn";imagemanager/pages/im/img/im-edit.png000066600000001200150472616010013476 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڤMhAߙL]DA C.JAPPhOKzЋųDQhÃZRl n-CtgƙmJ)cgwٙ["@?A00Y). h\GhAc  P.ʣ2țR>:#/I1w~Έ<]x ᵧ ۗN G%"R 'C >7Oҡ#\AW(K{y qgf0ꋛX]0*f˻?%RCAB@7zwXY%~tqq+p6608zQU#SYb\>7%D|xO3,/E  1r|4MX驥5[cqVeuR Fmhx!$e߫VNd2 9Ӿͻ&nk Rd2l6jPJJU>?}&@@IENDB`imagemanager/pages/im/img/submit-cancel.png000066600000011246150472616010014707 0ustar00PNG  IHDR^y|C pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxY͊/2{ABH c#v16fl|e_g?{4ؾ> 6x@ v@{FOTWUCVeeu׌vi2####21F3k6HR~\AUucizuAwI]׻ܹsGUrJ)jه$|WWWo޼ifwÇWU91JϿX.m˯O}-"z՘^Ar @ ibi8)B@q}?D( C $ً؛] :"現1ƶmA過b=&ƝCI{~o - P$IENjrX!G;eI.p:P' $xɯqs1s,M.jf%j 8=i%Yڅxo_%ɱr 5'ߜLB7ĹL⯟JUQ-Ƥz| |_,(CD5B/o̒ޖMԆMތVbTc df6'{HO]QsP ۺ_&ԗOJ%h˕%Gޤ㖁eƧ34rVA@YLc{u:gXC[(r.M(l6[4Rh4d`L3TC¢$4$ 9{7`%EЫwc&ISȔd)-d қ޽{;3=1Q]>@Hq4i͘2> Ob1v$iVι2F8xYOaԹT/3IA{}/-eQЄP$:i)&dLTG bu]ׯ4mBi9},Y$}2}V6?+t"zbHIXm}f^է(3 'pW#8ڵMu9jn!`{ #&[h31 ;Dږc7(؇"3s>[닻7 dh.iEl2BX|BְTruu]ŁΛ&n,Nۦ1^^^ IZ"1`PP *Us.;΢Prc̢H(̞MŢ0 (8dྜYwyjvٴm\_^E$ rvxC8̼il)]ѡ2~\s r!_"XUX$T>m @Du<[J`%j>ɺ.jwKj;~۷'''"Bx%1_|ݻ?~YR߿Ϙ%[ݻ>jŜtO~2H7`\Ǔ IENDB`imagemanager/pages/im/img/im-botleft.gif000066600000001477150472616010014211 0ustar00GIF89aP߹񔔔!,P@Fx(PrYXxL.贊-kH% R1<+G{and{#gtxbo}wl{gE[z_}yprDʼnͯ\^ҮFڻ"~qs]¯"sHe}}d0x/5lBB\xk;d;f$ >N Js^̖^LpNzbH JBJ| 4J&O&B݊WX٢iͭ4%Z+jι.\rz n!þL0be&2&U5+E-ʛXE"g sgvY;m`+,;/J@LWYom&v=G5o]쵧Yq źo;4Rzb 27yw_ҼvqkǴ|捆\`jU}` \51YNh~x\1Xa Zu!^x_d676c @Dn#EBDTie RRY dI@;imagemanager/pages/im/img/im-delete.png000066600000001266150472616010014027 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<HIDATxڤSMKQ=of&51Qhզ.4 ůFE7.t҅AZ-nEM-J(M~sfh]. <޼s޹8h$4Yi9c_>_YHZ +8gZ+Rw8Ar渮 Ҩ7G_]qOOGlXۻ| q}K &=8:2>O&'y XJPIX =<:< z #9)nUL5bz"v3@32*s(J|rk+$dU0ק77;%M/mN'drRY(9:Ҥs`)J̕NOH軖UX,蝟O4$|J"Q=$a}(dcv :Z4(`@`utTwMMdABjkO-`dcl ;;dK SJRO@7pnm ww&"$e/\EatFoz挽ͮ{==O[Zz&nck9 0IENDB`imagemanager/pages/im/img/avi.gif000066600000003422150472616010012716 0ustar00GIF89a,,ꔲ[ ginLLN9J&/34Lh)MJGhwz{Vl]xƣ8»S(jdLmzxq7hşBo6nQ%$tkz|dce,o:iwGv^Ĺe~AC Pz;@C!x.+0]X.guy~xIأYCҹ%_|PXZ˯ki_j ei$Ũzǯ}wPW*]i(VѠȰppq[]!,,,"k^n 1taf~~1!^1zeYao1~1z"^wUA 2 50ezt~l"eU2UU``AlY]<e^~kA` CO)HR@B\,0܉Ձ5B!7 y9)vSL OcϟPP"$ds'DB~`hՅ@<h•PFQ`u' b<V#CVxmv:HBUt@!hХk22(eq?8\'ӍӦ͗/vƀ '2~”sn+NycD;ŀ`c pNCPy߿0M@V^@ L0ƒ@j`!~$ CLzq`@qG nPC B86` 8.wA1>f`FUw"58TM41*܀#:v^d a>„M`48`o2ԐdT 7A88xps`gKlxȆ @J G\=L# UdH@iy\qϘ*ðAZ@?]lTzhC B+` B${gULlw+ B.n;uTh!FH!@0#ٮkqG?H\' FQ'XڛD8 %a!m@/Wl 7W<QD.l 4@P Q]삽+M6/LsUqrqف'p 7M =˰S& h % Se$ {!GP'vw|oF`ÄF@D>8\Y a "ذB \rD1^ؠ(VafX@ e搄 d,t t#- h` kB!^@otp°KAnQ疅=60y|, L`t@E2d0 " 1@7XӁt&p t  : rPI2;imagemanager/pages/im/img/dcr.gif000066600000003044150472616010012707 0ustar00GIF89a4,虗5 1./$*hff36y4}{|%! XUV \_aXdܱ܄ɉ텉rA^+C&HFGh Î7;ͧhܥJعvM6l"[즡bיLQmF/N} !nkl_][\b``OMNrqrRPQ867_``Βސ׻" @D @>?~q#)Ű!,4,>Q"]@],</",@\GsB,{)2Jx*4X9D!5r5!>62q J*LL5q䜴)F8Ǹ?KB 1I"dC_'N 1!% @azx0@FW::HJ)h4#ϟ)hoLlP`Q~;P tF)RPMԥӉdHjucNLuHUm*1AڵUe:Bg\t)ij~N N\֊JD+m#/,bdEC; Hcί6ۗ6 0ƍozݘ8LUOȒ@҃xɻ:]^?Gvk?]8ёV_z-2M5'^l 4Q^M }B>{B 7|70XatyUM qTt q bm/b fޤPH`&рvO,IAfBG I09J EDpAd0y#8p@""G_\(i!h?pE tC Z@AjPeD|!'w@ hi@%QPFWPF"rpHb(@qlQ0kƺi| jpo\QFH'x" \P@ (n@*8?@8jL\@p(@,0F\ `䱅 HpF^DpQFAgb1ga!WdbF<0qh [F un,:^bЁnqy#PG  D;i$^F, lo lQGc|Ⱦk|dQBԡ`4=h|C@u ` uF0\j 1BR!A{kb  жCSnd`_@@Z(@ , 0c`ziO@siDŽ"[?*PHxMr =Mȗ(Z\@-@bn3hSYmu>)( _@:Gקx ;2(U"ϩ'4{u>f0Yl1{{Z!m r0}A3bMIR*\O-Bܮʺ,(IENDB`imagemanager/pages/im/img/dialog-icon-edit.png000066600000002543150472616010015271 0ustar00PNG  IHDR((mtEXtSoftwareAdobe ImageReadyqe<IDATx̙]LU3RQ\*I$.HH5M05!5)AFR}j_[ 1m E.ڏYQMNNuMeCbxn>Dp??܂5Ϣj JϿ믝Gee%$Io@JO=c43S8YqP+++$J~=]]Q!6~6>> x<=ZEOwvwwbi)'ZG8^^rt4̃DGG4ݼy ._DZIܹ9[:855WPVVpAx<;^ڰe/,܌p8 $JAE1k?DP__r͓5H2qcc"+8wvvۋ[hi) ]1BĂڠ*N 5Cgg'Z[[-WC;QRH:gV 63V&_p1Tya}! rmK鬷PrG JfcvMemqꖭx%b'u]oLؗt1N-8]Jljz'spBQ=bOtMbv%>cn1A8 ˪%WT]jKqX1 ><xϞ UNcOs0nctFoFr¥i!`O -[~IENDB`imagemanager/pages/im/img/img_generic.png000066600000001574150472616010014434 0ustar00PNG  IHDR,$ (^gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE8IkؐDVwLNR󪪪asTfhnxæ~zTu\ak$9[ߟlՔ񢧫r/Aab|ಳm}»_%BIDATxڌԋn@a.rR*R,.j j"$aH SNQ^VeyRQpG,$xJF$,c&c #IKןN Eϫa>`Bz&֫NlCPCYWp4o>F?ˀyHð{G\Ј߰ anGk˸lm/@^ 3B7:~8}c܎f+h~ ';?Sa+ނqtk#mj<I[y>&E XZYSi8 sh.0ޅ;T ?Бe#B 81 k۸VoJ{,f"WԌ3vu\9pL 㑘CXjq #AbI+Q,cuS_Bc:U:10yBG˼L[l<>K܇IIW,[2LDxב#j+JQ$b)]7MJH\'&/IENDB`imagemanager/pages/im/img/submit-default.png000066600000004117150472616010015105 0ustar00PNG  IHDR^y|CgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxYˎ7-W a 4#+4DXgM> _%Qu!*lHHlFbFB,xMOw7Ǿvk{Ͻڔ(".B)eeIHX,n{~̙3ٌ+wQ9<.L!mx>_,C\0p:Fr>16+'"' Vl(֭.kYi::zL LOTsML&]Ip׎tt={ɓ'9ͮ_;{#X߹snܸ ݾs_rYvK.WbL=zO?`W/^`~i\pA_ӧO]1<;_t 0R:X}mIENDB`imagemanager/pages/im/img/parent_big.gif000066600000003553150472616010014256 0ustar00GIF89a%+Yh{BP_Ve Zh ZhYg^k `m Bep am s}!9>@Aghis ishrpzqz~%+Upx #+3I{}%5BFS&).0599JO_x#-8;@e!$%046Ώϔ %(,-@FUim҅"&0:?CPPdbݔpde[˶ͻ#%**//1547;AAFCGLMSUWM__eclqtrp||}p̟߶ ı*Ŵ7PȷGZ[ǹUlkxUګնy{ Ⱥe~`lȿʪzo}gr^TEt zx4Kֶ}urjmYiUeR]KD7)!4kѽf!,%+Mgp*L͛Ç޶aHbfخYȑ7۸dXU[5dɼQK͛_܉ ;ټd-:k'ܸjMTX{՝;mevLo9ƭ9sƍW횹sԭZv벥+;p\S*)RѢmٲN[X0aRiѧJRu)iq]Sy0\ЩLޭۘPC}Ωxt\hަ|E=X0P:e~8m1G|tcկwZݗKk/ng=|\ngvG %<XJr~B$4`xUC*`&-( /x|S5"C xb##3L$҉lI*.,쨓5Eu.4.P &iSVy|Zj9<""p⚼ĔX֬T :yJ0(P B%64鈘<`' C&(N&# :Lϯˆ"P$X 0@LI ڎ2ք{ )uQB2o5l,"Y @H" 7QFjQnm! "H8RK @=0GkD<1^lƂ\qA` OA(,lq,h<`.X?p@iXL GﱇA,KxHFiQW]1H{DL@kmĝ##B*FhA Mw,}淰Q _ pNi. t6/ bς^2Aztp[h5 0$@C5Qf0*H@.{4aBQ*!HJŠUN c>Ag1R9xs4Qp<4F;imagemanager/pages/im/img/progress.gif000066600000000545150472616010014006 0ustar00GIF89a"a~ed{wuԁlqԂyrntox|iҀbfcshm}jӁvzgk!,"p@r١8t Xvxx\z͈|n~x  !! A;imagemanager/pages/im/img/google_gears_logo.gif000066600000003451150472616010015616 0ustar00GIF89a**zWTE9N@@ݛ{?qMJƩKG;HCTLm)꺝<>4e_â7~*#i]ZM~OKt(H3.3ֱ<۔}s0(.&e*%iګJAj:5K>\PE9@5Յ6-tjbVB6~񜕥l\*k{*س<죖sb*¾{rXJ>r& Ү;3*RGtr׉L@a^qlzt8/sn5,A71){f$ڵ=Ȧ8H;ynܸAKfU1I<5ܶ>v.(D:~b_J=إ8.PB3m`\RE;1,M@M?L?M?L@QDUHK=UGXKL?WJL@J=VIpe߹><2L?J>x0|93G@ua 1}SOu3-m`4{h*،{Y^XlfeZ5PG]Wx(!C8LH>b[vPL=5ODُK>NCRIwFnkHVû¼Ǽɿlf4-_#˨9Ϭ:\~{!,** HIuÇQĈ'ċ%`F :LE/Ph X%ָl鐁BxBCCqE}ŀm@<T\Q`رD#|!%D $0 &|0LI#TB8S$8Y퐎 $\ uH#lQ" ` De`e#B#E\\s H!| @MaB8#@xQd"I$|P1gp2(2R d 4bI"> P-=w?kw~=4~tX)pWq~SP4 A$idE‹:$/>3܁ <3Y%2BIS@,e Z/lOYw1col4(^ʏ2d|#ecz3@LloLn1s؇} '-i20+9.UH͠O0JAccMYH kkk6+<#TCUtvXۉX3J`0̲M0x١uڟ `\J!Ot6xe': 3\ލjF=qPGnh$]CPE1I0t:E6.|/o<ϥ`8jRS&!RŸ>1UmXl^`ņL8])sUW5ߓH VG@G~a5ij^+W>rj44mIҥեp~_.X8>HO9֗_|ͷ޼yɓ߼yӟf677eqk׮<?WVVnݺ;{!Çoyy`xȅ򼵵p…ׯoEq=M766^Z>}իW}obׯ%''# \Μ9#*wVxB/{F΀ݼ+߲sIENDB`imagemanager/pages/im/img/submit-greyWide.png000066600000005332150472616010015240 0ustar00PNG  IHDR.gAMA7tEXtSoftwareAdobe ImageReadyqe< lIDATx\ݮ=?Ů \ RD=Vϳ}. d"/  D]jW۞hhZnWWJnݦvվ[cnmA}/>?NܹsJk7?Oο?%sNz(/_6 yu%رhzq+WTYxG{>{LUU.^iy,޶Eߜ_n_Ld?egJ^'~ٙ9Ll6UuVm*fo}ɕBIӉZjUhӬW 'ן z,3m_$x:!1޴}b?sJy~-6ݧאT~|KUBxSc_ 6SѸ[{uݾmƳ?l[mk1<͘}h໶1&MfMuG=aݹNf>]tu"|܅y<K:^=yyxn" faX11nG0PhR4Ca]@پ`@5qbseY :~CD沟g1ޫW|~S.dX<Qݝ!AU0fސi683 lh ih0JIG  hZϞeMw¾*鋻gXw2$8Cl5qߴY}8 Y&ȶKwQ6{O4ˉ5jOƞ tMYm}*쫬01P]%fNVaLczveN._r泹P)Z':8R̭2Eq.nfZ-^?f`4&$&b+bS_8<ޛ9.αRKv(])uK;z3wN^k9U@h K:2_tI9W 9QkBf"Cذawl')@HbjRYIRG gYXv2ौZeiΊ-qdIw=88偸}2T`3C!S׫޸Ϭ!;9rlx`'- MiMSAG+[t[;>, Ay՘qf9QūȘY/2i:L3R}.&B(I"hThLԴg2hCWdׯ5i.Nl *zxZLOA'!; ?xNؗ})$ógէ?U:5(E3M|h+,8s̱/u˾GauXE_U/>WOfVݸqC2-gԇ .ׯ꣫~)+W^ .ݻr%uދ򹏡߼wܡ>۷ooxI{VJ|޽{T֭[./5'ż|?~5?sz}"Z*2CWivr=T*?Kz~HIRLݔVW*w;4UBɡBJd(n=NM}ס.QЧ{hKC fcëzu.}_Y+^S?[ `X˵G|>Zz==/;/͕Am3B1:C{pTb=u*X'wD\La~>R=H,_C"bAWO\ 9`iL/ u6wy. zPQsKhOYyeǪhS%]`c< 't}jH@UUx#FY"腱|Kw],ҵN]싪b}~h=G>`P.2;c^mE-GmA(g:3b5/qsf(A7V E/9_j/ ;1WKbV/- :`B :&tL :&tL>: :.Aͱ :&tLPsL1`BDŽ 5DŽ :&tL:&tL1`BL1`BDŽ 0`BDŽ :&t :&tLL|H_a0:cBgA r^tѶ0|<&tV(9ͼn 1i<,#7ݺ:cB_aEn:0VQtYȜV z̵w胎|ڙh'.ڵѓnR z^'7k;Ps}НwݥmkjAEGFUX5qqqaKwsXtDࢪ缨*qy(;='(ȢGxyO:PU¦ߪh5gWUцsvZUwzhEGF}4lx%9b׈ȔF;N;BK2EGF }P4džWto"ߑ^uXNy1"2)?iZ83kaAo)'􁁁rHX`"3*رcXK׉f 荛NIG_yYKC<(,ꏅ.gP?.i!]6Q=s]ťQ\XCUhSUݠN&=oQx?AOIXumu ǰkQweo$.<Jy47t9<ރ)#k +(ty}"di~#Ybc SY̙=t]satgu~,'b}x#Qd^JSJϳS%=_7SVq`|*z쯡~Aq#Gbҿ}e )9?Yb?20T7|:AgEVC d_Q:;dUA}SJƴ9NJw3.l]nO ԢzU젯%>)).k?5!<߭X;J#*ӣ\-J~9K|y،·2$OA*~Ukn@wYCtbee8uyԟ3S E,C e1(ڪ߅|/@L8.kŊ, n'q2bRTfV 9'pf ߠTb< + dѵ}±:GAU^ɢ8^y& 9³׿ zz*rڧG i6<"KY>5T*.8vG v[Ŝ CvPlϻNj)g{/@.}\xySiaY3d#@ !G@m;{o~\KyN)'i#߼y$43+;`QtA Șˆ{( C`GS7z& z9]5:7'bZV|bhúvWvvu: {l}C _8bb~[gNxϜnOvwBZOҐv[ʡaMj|V5>䴤Y-S-+lx6[: sQs>a!lH!9Ν;ޝ@׵ ivn񫆆Qi 4]i,v}iii>NF=,g?qrCPa9CAn 1; WXVųʆ֜dʟ/5^v=`ezC;Eл[YsN-7gwTiKS]]m[78;Cyӽm55O[,+̬ބ0uIIu*{}/sK Mujm>EUݶXRΏOc9)Q^s|-?-'Žn no7LinO9;0tw7zu>kA7>B^pUdp@*7mp3^nawn/WԈ›;i\emO֘꫑)ҝt/ FcfDߑT?o^en|-Sϲ\6YdM55iSMuwnR(/ʑ[/ww;}h2KMsn[j7l6/h<2,MMm-1gag9h0Xلl:ivr2{xX+a7bed4r$e04?N]lzRX驼MMM8p73)k dyaa!;PI&],ܻW$U7}Y 4K\=IVQf.G缯a1Me1OKZ32RSһ3nׂoRt~?[~$/W[$(T{; Qt1+V݂:}uvW.[Mc;O:_x>yݛMDͯ#99}̧ ]bH.m׊u>q<2boD=4R{(E;V$27ۻxΖ\.Z-;;;bLjڵݰoש֑lӊ z.jO|u+젠!phI۲7>־ukR_](nd:"vHe=뫳ޝ;Y=OZ.鋍=2Sς.ۯ}[ӓ,RϲbjjE߰ߡ٬[{nQfQ ^<|"^漹YݷItߡ_m'Qi2g-a@mIMbѽۗ3P;,2Ɂ+uՌG!#͗><ԞuO.} h@ o`9dO6wvl,37n77}wd~&yw zY9{owSӺeU3.|9+[+:[u%7ٛΩ'OkGUQ- Waq~ Df7~,(w1[(OZ/7<ozn8x%#Z} z|-4?$ zvnQ9k@, }間,{$oْt'V+!q4ܒ\68oϼBLƺF67wЀ{w2/螚z}M wyG>DzlYk.~z ,WW+ZʼneBQз<,~ZX`=7$# zvϾuڢ{Ftv}С|m=8zvcVH M"Sw}If3GlOt eGH.<5 AIx"bD6zⴉn<33ExЏrN~S/ŊjM~d޻w+Gl u@/+}!.T􊊮_Gu4/ʞË4#: zjZ)x󜫯h)pQne\6^1_"smb/});4ޚ{Ř8ʳ(t׹Ws)Zoos&_Ȥ#mTD~G.>7iIn˙?͝wYrG/).))..//./?Kن崍(JR^o6U"]1rb~rqbE9= =Fxryς݄o)_ɔBlcO^bH)\G(/w}>+%CJ?|R 鱻U{U|3-._B?|%2%'%򹕔g%?~%2W?SsekԒZ[Oל>3{ųkgiܴ3fӧ[[~xVWΚӦAM6iӿ543Y3ܹs\B&Esb5> ".O<?cYn *{wif/9siXo:j sJk [pR0a!PɉYPy#w_LNkkfHS?ݕPy(T /AJ%zC?F~ 5%+ "^2lx|. \BUZA@M߃Ѝ- MJa<(8j,j1`֨#}٭oR&798Y@ e JD6R6RXs&J%M)-#'E&C%p f* 5nP.DΟJ9|Z/ wag0$]|$ */N3KXHlH@7Q/4<Ԕt⋮XrsPBBLِpv ˲Z@ȅTNf#Y]%Tמ܄S6 K@7KҴl̽q/ʥHTɨus l;`hKYC4IENDB`imagemanager/pages/im/img/editimage.gif000066600000002051150472616010014064 0ustar00GIF89a͎͓ܿΕ͟眯ǗΔϔU=_^v^ŘICAwցRݙKyzzǔxؚTЂֹuףcфScyX}[ЂñoɅAӯ~RHY̓IxٛL|xzOߘjѷ}wҬӮ{km΃e+Ͼasӟfo^][Z͕{‹V͛gҴˆɑXܜQ_]qwLНFnjH›彆BcdzUқ]eژG˓^Їlնze}BctJi{5uإXljϨtDlԀ۱_(zNԤEwӟT!,a H FTC" Š!$4^iܨD T"TA^9S>EVheAqbir0 =wh|0JgX%Vf-CP@*zddʼnP\P5 G ,BH2=9! VPjlpaHoP@0tR&LrIÄʣ#`X#, `S? @BXR<2[N&q gf$-ٞ!l^/J,r<;kŲDpd(77V*ȯ=g66 :=kke0u0b#h:e؅NqcAtcePj8 -\“`Dx=m`( X2TB4EjTPUIPM! k5t .-Ӡ?szS_ա`/7HRɖa) >NgJW|d Q4 K!8Ë}5@o/;K >֐KI8A#R6 EA>nlsrw+IENDB`imagemanager/pages/im/img/separator.png000066600000000244150472616010014155 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxL öouZ%$# DU>񦌛G(3< M+IENDB`imagemanager/pages/im/img/loading_bg.gif000066600000000105150472616010014217 0ustar00GIF89a!,ڋ޼H扦ʶk;imagemanager/pages/im/img/filelist-headbg2.png000066600000000476150472616010015271 0ustar00PNG  IHDRX++-agAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx 0DQYHJp16 s 1cV Pk! T]z)-E" { !!4 @XX`@Z-B B_F&!!!!!!!!!!!!!!!!!!!!!!!!!!`W.IENDB`imagemanager/pages/im/img/loading.gif000066600000004623150472616010013560 0ustar00GIF89a˷q;疲/fž@ާ֓Z^ԋЂ߫Jd҇۞ڜoxЀݤ-z! NETSCAPE2.0! ,0:@0! Da  " PXp@ɒ"40!B@p< Ⴥ((0! $>H@KJPBÒ <(Pa  4P X@a +`A$<awC΁K` wl q#X-f84! , @*$P*80P РA<D "@P ABH8@74 -* H @ %$|F q (`„ 80R|`CX0`k*`$P 6!3Ol0RŁRDA/Tr@! ,h \@@x8`<\9D , Ppb>H pР@QHB CS 6hȀx&LDlj'XbÆHAׁ~5Aj c P(Ⴥ̠C! ,`(P0 * V#H(6h0Ts `n80 .,\/ @_ ! , *0a > @_%<\dD`Z~'UKX#꺝([m/ػ@J:t6%y]Dr4JDo]x濨d%$1ED*뿀IENDB`imagemanager/pages/im/img/im-topright.gif000066600000004275150472616010014411 0ustar00GIF89a!,`#dihlp,tmx$B,Ȥrl:ШtJZجvF+ȃ zn|N> { ɥ΅ыԖxna½*lO>Zl&P,,ȱc(qb.Ae౥˗@ #'Qϟ@ȜI͛8+3ӧ>- (Jbk WRREduIZqʶb(klֺܐc*k &}+^0UC2|˘4ɔ1!Lt͜{hӰ3f&j­_ޭxvꢐ |eX7{};~7^ȣUmß[ν/u?ϮzA ?>uϿe}I_|\E`B'Wp fQw@ j(<&!V8x߉I"4*5Hz星/3hd+7֦{Dx6iR$X0┗Y䖪u9`f*.*i晕)_Rݐ9y% 'gg2)hR~hAfwZxep)si~JӒgJ*Ih 렲jNʫHkPD>KľIIJm{~Kn>C{Z ɸʩoc]\":.,+bR< c5=ܱYlTs#㗲Pr/!UG|2];sØF<#=1Ѯt>*]MSSݣՄݴ֫|u?Y]cGS4u:k͢sCݫ_7\׽݃Xx Lj㏋HP^cvyߠ*z:˦>~{\{b;> ?|8|2+<;={=ݙ=}=:>z>ȵ>>G;?%y?ݸ?A X,!(L 0Ȯ\A|i Q a qސ9C!2"mV!.;p#NS-n-]8/fMQd@59KdBE6-dD9?VcF9vmcH83t'bJ+t/}bL8S$֔7bNyS?aPY8TGaR9T 6O`T8UVW`VUu~__X7V|g_ZV쵕zo}^\7uxw]^wuv}]`U7t\b+56q\d6YUVne[fͶYuVkZh6ZVhYjmZVe%Yl=6[Vb]Xn 6_Wp5u\Vrg5Y Vtu5\UWV]UvINuS߭Tx)5FQ-Tz ^>wOS|45WMS~ô,KR4#HQ{5FfQW4UXDP3uA6P 4?'Ob3u5n2l9Yvg)V3,A{Іf˗D{enl:GKzNt/ihҜO>MP%δOݒTqլ= Xodz@;imagemanager/pages/im/img/icons/crop.gif000066600000001043150472616010014212 0ustar00GIF89a!! &&%..---,DC@vur21/?><]\ZXWUjigtsq975"! JHF'&%][Y,+*vutihghgf-,,vuuyyyxxxwwwsssrrrpppnnnmmmeee[[[ZZZUUURRRMMMEEE>>>777333...&&&$$$  !C,C  # $ ,''%443--?"7C-A@(BÂ)!5C͌ ..*Έ&ص+2;6C179<>==8C0/:;imagemanager/pages/im/img/icons/resize.gif000066600000000170150472616010014550 0ustar00GIF89a!,= x0AXQV:T=(%ݼMN#&C O8˽l;imagemanager/pages/im/img/icons/save.gif000066600000001131150472616010014203 0ustar00GIF89a-9IڀYcmTi|Xm!6HOduZp}访0B.CS3IZI`r>O\~kx/FVğ1@_y-<(5,:&&%tfvh͆zяѐӑ~tguhȊzzznnn!Y,45"?9:9;<>==6=78 #I@B IIJEACGGKNNFDF$ 'LGI/%٤JNR+ !&NMA ` 8|h 'Op @R +.H 2 c@;imagemanager/pages/im/img/icons/category-open.png000066600000001227150472616010016046 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<)IDATxt;oA̮_~4tDAB $4O WEH,l+;3u؊}WWsG;s.#"=b t `F(ʑ13lN(2qG7|z/u|b Cfa8ADv ںŻ?@W9`YJ'Y@(pa}]v1 x@߾iMH/112r/ \pYP괯`u X+DԂca;sQ#1\WU?ʼn*Daw8nW==BWCZ JgI(}جDrNl+# ܨfjtCj\t{t -(ezhFW)F40-q3mjONVrj_v#& 5J/54kFl؛ɴX8֖qjN~\{kyǕTbY_g&<na;8nbgD_76c̎rIENDB`imagemanager/pages/im/img/icons/filemanager.png000066600000000572150472616010015546 0ustar00PNG  IHDRabKGDC pHYs B(xtIME)0,C]ZIDAT8˽JAEI,|h%"h pNxZh{k%^R8; }IgN.I{Z!$Q }ӗ0ƙ17:#;֔v/Fٷ՗R^;Zא FrS(ҿs痔#\Q4<˕ZGڂOG,@0!`+c{R>8'Z;k LT_Ze҆IENDB`imagemanager/pages/im/img/icons/category-closed.png000066600000001113150472616010016350 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڜOAe`$C@&]ziS%PDR`g}{raюnܞPJwrbց=xw@*@`Tkņ'o;0ٜ5?4@}4}WE1v0fs뵏$Nm<&i@+2B\kRE$ tlW1b-b 0Bn w*Ɠ$aV\d/9M7(G76KlZ,AɅ)܉LԮZ'>2Jt> jMl $ (ڈIN/^} YHߏ $0=Yd@s0ἫℇݾW ϛJ߸Pd makD|=G Vn6[Įd桚(Pm.0Q`'Fb#&ܧ6aP׏Q12[+zi; ]C17оpI9̾jD}›?7ayze,hXAK^3*bk @+wQ=!}uXzq:g쯺n= :d+_GTA;Ր Jƣ.!P)5!H:epր"݂"Kyw|{H2!i~3z_X;okBZK* ^R:O(jF*^ȰS诿_ gЬycIENDB`imagemanager/pages/im/img/icons/picture_save.png000066600000001363150472616010015764 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATˋUus_ &# "e]mZie]EnB6J0 6QLeɌ3<.ss}|_ܸs:=j@dA#vAJ&qq ]nQЁU&[Cޚ3GxCڜ@Y7EGY4m>?v3PBFQ$Uumlډi4ۮ !J(RMVS3ԹfȭH"A}FˢӵyF93w7љ;sz\3%DPlgv/x+_>.][s^"(dY7pǻ& [k"y-mڜ=QY%`f.9:LIUUkeDHxy ?|UTS]Kh,Y "fY@v8ɡjRJ"iQiS;,) FtSݚ\ ʞ vok[+Ͼ^znhmlLJ7޶wQIam7@a`\3on~=ȁّ0[`c`L2%)"Sg|#(]X] ݨ ( (D]XB *$MkNfs'č+{=#1Ql=K5-krI!h_~.LN84T!Mjt⚅DK%/ \abx ^ͫ F^?tHKû{J^1MdEe3WbU12/{ű$_.ÞNtlSmk*lB&xK{߸ U&#0H' 3C;@tA߮^F]&V4t88B&h+#׃30A"+ps3#8])HLo|&][_Něm_))0OÙ%P(Hb+ҝ3M']4W;ɬt3P 2@e@!)oϙ3k۰4n?38$錧 }WZ@z4I"Z$EjXz,'?Bmn*B-r,S]mvi4UKB<|"ҸY;xCW$5AVLPy\`eY"R lHdj!P`VRϧAdJ04-M .z nf@D .BA4)Li)I9‰`Y;1OJ3ݍma9 =1!cʓM2y^$&Ak&J)LccJNv#DF- PVʝUkrL X̔n &!&@<wC|=&5 olp@PkJTGB?xj|65d]E&TInmԣ\.a)Cnxhz9k+!(eg"e IںEA*p'V5~C׀{v tiUm.PI%5 Ex(]:;"_jf&BYR?0c>eqD%2tdba9ҟ9_b0e Zlվ3LLO1y8cUc'O\2?~4g IE6IYje,rpŶRIP!tlho1{ ` QF1 污3,.G+L hCEr"OS ;*< ܮXC}M)_"Ahf(\[Xhl roXm2cco;z-VқD][eW`$b:L'Ia~$SJ1 ;Dc0qj"ovv HuOco!?>j~g]MIENDB`imagemanager/pages/im/img/icons/toggle_selection.gif000066600000000150150472616010016573 0ustar00GIF89a!,9 ZŴU^X>#=o)M7k8!h&Ì E;imagemanager/pages/im/img/icons/cancel.png000066600000001113150472616010014511 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥kkAkH !)4^cƘ4eJKi(̇\ ĕή;OgV7U/ þϙ3`  Fe` ݇[:WnF{2 28dA2I>w&B;6Y$ ZŽ=DUemӁfZ/Rm Cz/ tB ̛NJ a;rd N,XX'>Kry88 x__Y7ͫʹZȋ ==tajD_RA#(Uxf84ݹ9n2$b'C{M9Hj9,=ݫ R,2Z˾u0(fԘycRݵt#]畸ݿIENDB`imagemanager/pages/im/img/icons/newfolder.png000066600000001641150472616010015257 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<3IDATx\oE?;{m؁$c ;X dQDTi# ((! BJ-H8DGwp{3=iVo3ߙcC7oTڝbbOtd\!݊ 3*W$q뵎ve[+uvw6r9<͟"\bo*Y0{1?2bmCc[}J)pw?m>V&o|>/w׵m5$FE eL`be٫LQz θJ678'L!Ƴt-4FPeYG$w^lסZq_DU,` 4#괈St9t& !lSј^Xy8O̱-Fth& +05g"kOh2ʘ49$٢v{f>Lyvێ9a_&56SG:Ij>G9rer?zř5sfjra_)] QFu1Q2}7g qРn,.R8s?\. @RRhC O54X\9w98OJe S8,A2@V (BwX,43rP`<"J0n zxF;Ճ  ^\)0營Q•'n I; SbRfFa0QV)mN.mKR(haA/y!#}oc~!$%# D#X\`O&C=xA9B6׎;T@4' 7 R1"KFu]eW=c{t&PUA*/yc>zΛyB$k{;&Ϝ (Dꤟ+me&f^??nW `9YoIENDB`imagemanager/pages/im/img/icons/rotate_ac.png000066600000001221150472616010015225 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<#IDAT8˥MhA$ۦKmXQxMQh泝G?eQLd ^S6,[PAg}Qh5Cß`x{mq*F?U 5Ӱ19-}Kq&@1HW&3Ny K cVɃHW6.#W|~fSL_͠q2aa*.xZ* rnl(z~A=֒Z@H) HaU']AF$|n.R@bKG]| w  ,L րT=OĚ (A;0?ßP&/8m߿?]ǂ#%.z<7 C_|3e\%+-< ALAAJ .}OOkH("x[;)=~IENDB`imagemanager/pages/im/img/icons/reload.png000066600000001556150472616010014545 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx|IhALChD0xHЃ(/~=igd(/Ӳ6BNwn7?~NUGU\ǖ&KgBdt?H8$*m߽hhZܒNly??KXC IENDB`imagemanager/pages/im/img/icons/revert.gif000066600000001166150472616010014564 0ustar00GIF89a-9IYcmTY^gmsTi|Xm!6HOduZpWhvfnu0BI`r>O\kx$Wbj1@"-(5,:l~k| &&%0,WO.vk?ZR0KD(庄vEOtD\W̷mɴk]IB'րx'#"]S2A*%# f٪5޴FvR\@dkkє } p ף(zzzvvvssspppnnnfffcccbbbaaa!t,ӀW2XE7k]\][)30AIHJned_ 16AA=9qYZ 45?g[@PSVMA<`/SNUL=hCQmOTl'GKR (D*F8scCxƌ#lÇ cJ%(jA1 0E!7kP( E.Z Š+;imagemanager/pages/im/img/icons/flip_v.png000066600000000642150472616010014551 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<4IDAT8˵JQc>EЦE"$XR aXaa 'a` BS4X\73/D9wbbPN_؞Z`羚 {[ vsx[_%l(!P ag$Do*v.@Xc;#98p!r #k\9jrK],1˾`6<<aN۵>QtŎ􅋙x+Y8uY u6Ӎp7`lETY'M&k[ NW1t;RIENDB`imagemanager/pages/im/img/icons/help.png000066600000001456150472616010014226 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxtS]Ha~͙:ׅadRB 5]HÐ"4ꢺd7Y$)edhjvfNF̿۾y |B|>/_}eYrsvaQ A9Ï;-= RRn͖@Q-q8RQ_]3>^|3-L8PvЁʊ<ί"FƦQR1}+3a/99PM%!VdE{7FVe㜛\+͚Ydy\pHL/ZF0hh4*|i"F,EUykE'o?["2۞5)@.+ SN5rmJ®71\NkbF94B.)oG@jF%dLtxUJf0hFu̩U0zyċ5'{P) Y4?[[j5v%eӹ=rq~r~l`Į*\!NLWʧtGV(/峬],˦=Ǝn*^ V2\9[-?ٵLo($G4q7eeK88H *ϟrFZKDDJg~mi;vh}2m}i w0v r3[ϳ,ʏDeճOT7&{e>vμ{LyT~@?oWv\}rKK- ,U+?d}՟?;V>m}>^Q[>Ժne|5,GCERVF+%qW+bʭVB[Һn2+c4UWTk=<xvEl([bQz$Q {VWf.^?FaPvòee22Ȉ 0(g3=l7k2% {Yjw^<7?Mmk^H\}`FhEc/{uHN!m,>흯f*KK;7ӄ^ZDS)OQXg̱oO $*%G~ EPtlKjb875x<fښ=[ OCVSkk!V^mZ19e:³KPshPd?=QMTba{Lw8E͵ C*x@S=%3;˳?!dͯ澞R?܂c6?%r);\jlm2@ U+|;_8Y|y]Z.oCE4쟠?ʚc\8!*yXdS*C*WU׍@7\@|J(n}@q1ue<Gv ^K9/?G_]_?LBO; YWXuD%Z#]POx3xrwa7 xfAIz3\;i;)Z<F4RTyŅw 36;[sd }aT߯}}W߼_'z#exOC-^QY9GL~K5[OX+h?笍7r}"-"oҥgE9:.|^G|5ߙ-#/m g̛R%7puj^zJ7,*ȗDI͗x3fh#@^ۆ3ׯg*ȟ$g7&0|$HA48Zt&] @ }'xZ DxY48 $@BGN-4v8 $PB@f"x-*0P#0xߎ#cL1A$8ny ,iZFUZ)A Ex Mn#%YHf)gKe@ɧlAq ƗRHVR PJ'R(m:J.'Yq螞6*Q޺Ʀhk?(~, @Z -QB K*2y.l+ڋЭ)@~p@hro /,*Agj,gZ8}l|2>@3~lBDkLb (?ۯDKI/iCtPA\r vQo0u5!qE4]tabm6h N>`xkR 5pvߐ 8;~ |CyH9ځ;imagemanager/pages/im/img/folder-bg.gif000066600000021673150472616010014010 0ustar00GIF89aѹ浵ޛȡ񱱱ؿ얖䑑ޭ׎輼Z!,{H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\1O`ܹ@~'Qr&ڳǏK @Y%?~ hդ6y3r*%>$\)׻t<^Q@%SSQ2IfO@Cv+O"@`JC ZVYͺװc˞M۸s.녨Gx+_μW1hG~pËгH\bߦU(}~0Ͽ(h&CyP 0hfǀ(2A"h((e!*(4Ȁ*e@0@vC}:H&Y`@RdJF)<4Y*Sf<Xn)т&EbBl.ÙEt ȃ6hY{naCP)<|I< (9䢐j f*i>G>SO;$ 5#ꪊ9ꫴ묵ᭈk *.)k6;F VJmnm~KlJnnj oKoi.o 0\gωpl.0 p;_gqR~ "d&r?r.q M4ĸ=&J_t ROrVu'o͵^rbLv3jsn w?MIMzwݷz~t#n3hC^bS\cVs>P޴J~D>8^2,㞲&> ߱# 3C?S߯br_ܲ_ uۚ _ح@lVe*"X7RX 2A,Y;0p&$aBs-U B 0W7dW /CZ];]5Dy1E2Z4@\API$%jɢT{(D)uj B0"hT5nIi\ Qɦ`Aq $Mj6&{3) B isj*#MN**C'BЬ:$+ CQ6t+jDJ+)Rv^X$a-{ƂѲb,1kF΢Qj,EF‘rD-MkGѵzd-aGݠl[Gdp)9\Kdr9\O6etI9]SVUevY]Wvߕexi9^[ezy^_f|9_cUf~_gf9`kf`o6g9asVVgٹawvg9b{'gb6m!e|H84Vhゾ#1CY&Br|c%w1#VWh3dCyC_P1H䒖]1fyonj!f ysyN=:h^i[z.:iwV:{fj駎:>kZ꩞:ꫫ::ۺ޺k;ޫ\qM6a}Wi#ڂ6ce3;6,/;̆[l?{ʮ{.m7{_moo[;76 ϖV85es>x>YE9pU.\ƅ9re\39tu.]S:v]sE:x.^:z^:|._;~Ů_E;.`;`3;.aS<asF</bƓ&<%bʳ.EE'KAdG97=U/f֓}ffF>Og#ㄆg\>/hC>oicZ6?iS?ݯiZpƿjÚ&F~f怸 'ƀfƦ恾ƁF&fȦʆz!g}G%ƂFf׆覃悛Dd䦄ƃƄ&fFƅ& G''熡džG'q1fLJg'懷'Lj)+-'/G1g357lj9;='?GAgCEGNJIKM'OGQgSUWNjY[]'_Gagcegnjikm'oGqgsuwǍy{}'Ggǎ王'GgǏ''G珱g͇GǐG'Ǒ'gG㇒ǒۧ'GgǓG'hgǔˇ(hH  H (h#Ȗ!)(%h'H5+ȗ-h%1ȕ97h=;OȘ?A&KhMUQșS[W(YaH]_hgceȚiHkHG(ț蛑(HhȜ蜡(Hhȝ蝱(HhȞ(HhɈ˨ȟ(HhوۨȠ(Hh鈡먡ȡ(HhȢW)9.7ڐ0~ţ5GIhHH15K;*= ?ڤuHw>cRb(R`d !IR@Qjc,skG0tJj@592puڧ~:w #rxZIqdpjڦqtjQڕ9 DG@@@ 2GP@zG Zʪ GQeZzڇiZ*Qaj j@I0Zz*Ⱥ(uڮ Q ^ʪ DJHJ*J:Jz亰 K@GڧzZ* ˩@Eг>ºw.ZjjP ?KBe@TD"K*ғ s1n[IpMJTI gS7:l4 p%;Ep+?C0EhC\[ljd /ΨszKX;˺\;Cƌ8|6 y+/!)ڻȪR {O'"‚l`_@ʫ|j<|zZ` &ĺ˾,?̅]\<]K  q<̳X\Č@0 d0cpLKHOpvQZ۬?<Ɯʪ(<=1Pz)k˳.ƫ(EL}+D@:E` `*jQp+fL_E @MIIikdPSD k  " B؂=؄]؆}؈؈=،  = @Mhڃ0ڃ70 mff-ص0SںM-llz6܅=^Pەmls0ف}۠-ڤmڃݶۺ-TP0x0xP ܡM #]~]ކ݁^߂ऍ7=NT`s 0ڡ>(<؆ؑݖ]ߵ l>sfXZS0TPh lۼ7\-߅OrAPv~xz|~~ێ A MA g ~ `~.ڞ ߞ90؎>Ns@Nڭu>٧ښ.> ,h~õ`^@:صBn>=^d`Ǯn d۟hPEPN=`&> |^ ~~ 0Z~y^ . PAP _-E`Ezn2?4_68:3gaB/VLL٨Nepx0\XZ\H7OY`d/SpVN޳sp/4vxz|~ t=C `}Kv^d]/ ]{oMPjN OC@J_lP Fpro)v>x?` t ` ^C I m]\OP^Vo]PLY  ; b>![Yiծe֬GqE|鉘0}nx!1d EPLqӸMeکcV]Zg#0f#!Nd|zQ֭^ t[~R\ۇ/!+fgDH%I m$Gl!&m7>,sё.80'Ȗkkp@ 4@N:Ӣ3ΈȒ+‹$8!Fb2, N&12к.^jL% xB+( /N0EZB6- (rJ*J,21ĈC (%+ GĢ~BKLf t '=@8$*4C.$`0(TA?~PBSPCuTRK5TTCJҨOF XP r"B^?" 0!`T]9C hB#j"RJ5Xr  XPmP%ErM=~_x` 6`)cᅭe΁ ÃXCŒc5(h'f%R^IP2) IG^ xc7V+Bdx#)@B BRM2H:Yd"iF1lL y MASrLGxȀhqZ~xM1X5'1Ȍ @Xc ; (SG9 H(<LgZӛt=iPZة:B `rH㠾8ӸHX9 A#Q)J1 2;Еir#`H:A&w͍ zrxp1:Z}*VHֹHĀi`V|IBeǁ|%KH0EPE(W[#'9ǡS|@C^{Eo=0wu=l `ә8+pxć׊#` #:яjp#HmKu{zh;W+|}+|MbyvsZ#V"dda 9-a 08!?uNj/ZxSOgcõSg_ɘcUpE=kkV>6… -%c-?ouKz4y]d}[Ev'+! [nY`俰d'eA ̄ЊOIENDB`imagemanager/pages/im/img/alert.png000066600000004520150472616010013265 0ustar00PNG  IHDR31wi!gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxYɎGٛYX0탅d 8!5`' _0p+l∼">0R3kk6CJ%3^ȈlO=xn2n_\)^swnK r3Y"}{ʴ hH*YoGF|C !KϟK}eE>~۾Tu2GDŕׯeW޾jU\d` (W`R͵5-vy`"`3a.W\Yd#;˯^I lqwHA@2VٔU~efЀOhV G=OE>o!E?L0Qѽc,ffQT|Ŋ3[``X`+W qpO]kXZ`g7uh_h, j~JJNB@ 214YOf 8v2H_\5^{/VBe{eܹXr'O|x<٭"Ts\CL GLLVTz٬ בl 2A*/OlIJ=.mSzn`XXq[iVİ}QUr @d s{)+,j6wd8VYby !Ըb'.-J{njϲIT+ y/=sw"?r;nvOB*?]K^dppWF ޱư/elCv8>|;)b)\YuTOktq YwNkC.VT >ݫ ژNU^Wa+ss[pܑ?WnRX Lf41yDps}̈gM1!Gdf曲33:8h VB&"WМǒ颞w vC=f+ѫ?S}[ +ɛ7T~=dUlT^oT:Vq# kxxb{)exFhJoL,Lj8e.$`dp|bO}E'wS]G BF%DNNi33+;64+N֦4sb' eTDb#K*؞q[> GTFY[ʩ`,i6P2Dy5Xpkl6iERhhOh=pO&FY=k{[uٶntESO=Cs$;9/_JݞgK[1Q"e&JSb͔>Pؔ/HuK.'gTdû х'&ߝ9۷hV&m=0;v)u OWtxO?vX)Ng޽λI0@rYϒb@ ;"<?Ɯ{̘=}gd絮6]&J?z/Ic H̬=8aVGKV+W4+9ˊ98-װґx Y^bzeby9@CTs7SS"ё ٮN4%k7!VB15Ig)ict(c=>i=Wp"g4Qg q58P鯿ʈ:*XW<\fE>k/',cIENDB`imagemanager/pages/im/img/act.gif000066600000000311150472616010012700 0ustar00GIF89aþŻĻĻþĹľĿ¶ƻĺǾ!,F`#I)Fl-дq㯳- B șl~ͨN!r*i1B$;imagemanager/pages/im/img/check_arrow.gif000066600000000130150472616010014417 0ustar00GIF89a srrhhgHHH!, h;% m4oޗH .)';imagemanager/pages/im/img/Thumbs.db000066600000016000150472616010013215 0ustar00ࡱ>  Root Entry0256_36957e1a789b1cf4*256_64c62767e0ef5477*   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJMOE<JFIFC  !"$"$C^" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?>=]ƹBW I,IKgXFwJO x\nՍ|LDži5}O.pi o5_#o`&\h !.=gZz%&QE!aDOZsIC&v eM_.?n-BY]5˿d*#ւ\Ĺ~6W+Vfv>oCNz`P#d:go,uQR{c($]ћ^i iS*u jk BWYbX.%I#6;#:r /,OưXoޅF>3ֽb(TTL??Qa>(Kg7Ȥyzm?&/FK p3'_^X`c^<EL??Q`D,? u)E :&(aQ"1U5ίN Nq;נ?ʯȸgP?b&(aQ">?.?YVb|XX>ƑgE{+<ȣɇyG|,<~$KuF;M|ڏOkQZGm6emkm5۸UCdG8 Ҽȫlqm# V3,1"PNG  IHDR.sRGBgAMA a xIDATx^\]o\Emϗ$vx ! y&B5Yc]$ (6bc;eo}gƎk]͝UN9\&:[t9;fx,K 9t.~6Nǝe6>;fx1,0 XW|FSנp]\tV5$:͎M`Xf]0F^e:~vpƲ'}4OJHH4cr(IZy (4z:'GlW׿FCݷb Cwo$}Yms᭷'{!0n( .6{6H8 ~>P:'a2Xk/9Z ١{u#_P//*>ޠ n}};S#'ȩ3 N]RW+fT#.^d j\~[ :G0C 2DՆQ8R&EL|6Q> ~o9glN`hHj &4higl*OeBN}?,6\F8M:E/5fo4=*$  ~'dGK q znU8E6 kmOܜE͂]'R WCkgg:kh=زc"zI_dw>8"@p kE,Nr*˥ރr "=6mµͺӻĻ;0N\@)q=RrBR6ȓH&F%qLSlG Z6END+ ٽO{CM1bF?։x{olWƏiHT'40 .ǀ' Њ~'Բq(/_O_a! P+tEtdt>F6Y?ehD7ъuŢS'i!Q{rEpے\v z{n MX Z;,{+0ڊ29,H{=H- h}kHM,Vp= g9Q`'"_~[[]sW^Y.5}MrhTPիJ5Ngi6/ O9URiSk_ʧtvaG-p40=|(ec+Y|"4/x!YiP׷݉wCꮈ &~!hb$ 4f/muJ2@8vE]9)\Hjn~=U<Dž;9_h腉(ޣ!8HJ޶TJU `i|*۞dB7F.fL"ivFjTlq hVpYjrrǁ6+r: I0b08#0Oё.+ч(>D|"~''vjD7DjJ|<1ܤ_c&qjغG> l ɢ |P0| li[:j96|<2//+֫[u2+W=XG39GT"DZH?X)rt('gG6vF̣vXED>^WW/e=ŽVeYP(b=Elٟqzur#l11ʻ,"-{c͍gccuf,&Q]| 2] l<8Zlrlu.?>Y\uIzc-AчȂx@A%u>&pm ƃ ]P==u[/ËM|\[ݮCOQ\S' Hk՗!ҺKP,L+JQY)]|MmzAaٺd&}t+܏iF)kYO huj5հ݅dtY#t-:y&V>F$6WvF;|9GU*պ)\FČU5^0K!􀔽N]֖} S8,Ls>F6VA >l+8~dmpɯk0~/ a(Q|<`qZ!,,,{$HHTT$ $~LmOO7,SS1Ta!199]@s}MGPR~7/^`i**AA))fVGTpÄTLiIWW>WI JMv#m9[igW+eŕ$̙A6+C6 WKA C9rRqURL8pF.",&E,iQ-4cRcIiaS d$vP -. JI60%T\,PP2 ҤCvdr cLi@#d1 00]Ł #&  @B 73XQ.46414Aplslb幠 ~"x񹨐FYhE Ae"Azt0f FVl̑@e\8D$Mx _@,#A`NY @% !Y v@ $!Kx+=v R}8h!PJ)f0 stI l@'AP_>\EĎ E,AtxF*B~x0Y*(  \D`Їba@IX*) ,P: vNp n mdoeIrp3*Ezp|XD)<9%?e U|pZAA K,H^A ǀ @  l 7> Tqfp 0@GK:+ ,H. `@@ aS %A(P:CZ0 <.!C4pZ 80Da41Vp#A RkjBTc`0}|gB `gPty'tDFhLB]`B ? 86!aFk?OCCDd zQK >x`PDQb;?='&A7% tT@50I?x 5ȡo6Yr@-| +/X %p J@X(Eh#8Y0  J`z N",С | cP/%A <`: d C@& Xh#J([ 6Y8AEt@ {0a;imagemanager/pages/im/img/flash.gif000066600000003270150472616010013235 0ustar00GIF89a+,cJM0󈃦!(4kXJ'|vksd*ĺ䨙䴧ۣwgqZxfڇsWAݘh[򸩵3囉:(<R4󚢰#gY̩½L2w]CD4гꂁ%C}sz[JY|0bIP4bZ~"xhbḋ G"E:tf@,%N8t@섀F%PIsu "ZsDqRB,A Gи]`'5ԢMB9l3?/X 3_ؠNzNK I @>8 o  pslP F+ ^P@(4F{ޡ' Q sppa@A `pƃ W0s$pC <oG 4)XNL'=\qE u(  q\\ D-~h @ 1dG"HT0 1K}.A8,0*{d GTF,-:f۪e(+1>+*^mDYA,KB{+fU '@:nj \!e=[lQB@* >0i<P-mU\Q ua $f@$!'R0+m-90y ?JbmAbw y:ϡ;`!(}Dk/cՈ*G/PYw1]d֎ xK>l3ev~%C.xpv?=ڦojLN p ({3``Ky lܰ_/d P5! R:C @yܑ5&LS0"(`A REȃ4iMgPB `d `&ꄋ,0,…\]D).FD H(C@`8D">W4tX"P!"`h D hDW,|^p`KD ` H(K: ,"i $d P< Pd!)3=oh=rgDZZQƏbt)oCO]:yƳ hhGҩ>5ch6M{jN3QGY~Xr%=+=v;_  H1=/zyv[a(F=`j;) cg2 Z' .RO2O @\J|O%&AVnk&. .}2YŴ]z Sky,W55ψ1ug5\eE3 gPlgT Ѻ\ji@ FbV`X :H/w):PG-DSV{x ׌`mmjv5B'#=6W#=Q\F&? xreOauS]-JVGf<̩^n_e{.7F b="C1ϻnU5}luzLr̶kaئ+Q=Qw_h iaG-\sgVBAl G"k>Y* `繟 ߱v3) \=F\,A9qJg|{q!=Nun{>}14ziZBp?\5^Z%Oad_$yljz#Q\i5⺅ekHs$1 B-0e2EҡmWU{ S R<T* !m0X UK}g!VM@w!8͉Z%P+nl螱ZUͶq=TuN@U. mD"up3>TSS3{3Bf4Iv2h]ns_CCU<C(.ٯ+^F-?_sʼ*HdNripjp>ImC$hCfp9CXt1j1Ot#0%H| \E6c#MyϜ|LκNj_:Y#<"8 A*şόZmBs@̱Hj(dϜn4X!K3 Դ^~h}ӸHdWtE?+cNG"s29$s>#˙C~m "h!yƥ< H#L>z#f_ Ԟd2jnzpr3m}81?I1L[)0%|U(:@P e:Cd֥gyE4  ΌNWW/Jض|}QSلt*P%5&?q %7o\l9y25E<6ujfFi@Af[O64iTu 1luLeg#N9Ŀ,fL&wyHYCnV״ڰe0kSDqaJk/` cV,u1+K?(w|k,"-ݝVl$=ijǨ7 oʒ={6jJY|8Z7 A1D ̥_tXy,?7" %mBhiK@0B lnN'lg*GFߟtT^WD4x5Alh /rLJ& 1?ᮨ|]ŋ[[[U`rW##ԋ{ SrZ܁]opW$. QN[Wajq2ַ༥e2EzOOgsYٛ{6x9?PKvq>p'{8D7"+VzBfYa_n.lV֝pp?mDF(GJ {,R}CBܧ8+}إeca%WP19B= pRBA~vgP_,6n{8 R8YK0Y fy < +ڋc@`Y kVݗ6`_k*4AU_H 6Á @OScC^??Ky]ƏH>sikBʡ a`0rop@ W /9BC XP{}r(kY'cC{,/Q@DX{]}m0"*)1ypoStnZصdg͒) iy7* &IaKFMG;;PR]p /("?Rx-8ooR ARe'-BR0{0PZ8# gk /n< $BAa0B G~<2d39RUCY,<f.EnqD"hѢp͢0%Z[GZl^VC-,Xufsʷa#fW}e!@Wy1`_Pʿk5|W3l~EG.XK-g;Eק؍޾0`bIs4،k3mzG=5F,%Ūa<Ic `c}$qO6{HV@9A VD=vvuuݾBpޞyGc%P6M?z/ 1?-iJֈQ:n% Tw\`te]5xwpX4+pgW3Ifስdko\jw*nfF̵2;IDa}2mFpnwJU3m;ٹrʵ?nU: ^Ou^LWCOn\^z ZV3纻+%1>\ۖl\5qݷ_WOw'NxIFG?o6?[=OږhsX5a6>_g-\k &a:kY Lf.Ԧ'%|s'܏׼u/f&NlKƏJע.uM7͕t-.*mMԥ\B}Y L1=3_u7\zᒭfN3Zt3F0} 5og}n=?դ;8yACiܰqĚ<;; KADR.azzZ917_ݭ{J-iugmrPiFb\ _ JE1EHBH kwvf8Pcٙ={\{;Wp~*.#4fe^mD5fu*Ĩ%o $AĽTShV7?a{ps2L(-0)4PK GCX&_q81)%v]j1W٫G ;E)}z>wOu{G%lj٘=*l__v$>lIENDB`imagemanager/css/_cache/im_core_css.gz000066600000012062150472616010014011 0ustar00-PP >xsd1s>]O9Џ*eD(I؂[ք# @n0hZIqlQ XbH JDz]Ue$d"| ςDJց #p3*KEht+d.k<51&AJÂ@ >EPJ$ Xf7^Cx&|ճ1X/r.}(:p_7I oizwϣo螬E lCiP[$ԋU-r,7s Xo {$j ژĜ#Wyh.+qH53˳; Dm =jC~ҲdߑKGrkԥxdْh ^{ꭦx1L'T;ŵO[70кRfET E2<DtϤfMfGh,`1>w-dU^PID9}5~r(ݩL0gl/|ƸrUjWI.s93Sݵ(w(&"1t`F*ݞ4e3H#ZTp3]TtG_D۹ƬFk$ȷ\u8VȏE˝!;֊?jҖ(sv#ϑtterw ra.wPc̲vTv*OBtxn<\V_8ݷz hffC jS:4kl!fY) Bp1=%pRY$LEoFhlłPOVtoS]Yi,z&p<&/Hִdî@8`.+$_CJY通-.e¾/7RW.}R {$fN^ ?͞y$~fόhy ៀS8k3K-."^گw;CpPqN \bDHv6ǯczn>:lv%PGf °o1r,vG|nfúF\z{j:^(ֽZ\;mHTC4hΧǖ]}:ޗ!Nd#e<ȳ7Gm.Z{IKۂ>'(xVqDE-l.A3SֶJk.F#$fB'O+q6geg*$0*tMQ&)ִP;B>QU4(>BY̺:JtZ;;i5TK}%_ZwR 0R{${YZE)[$rj>1#$w҈~4v =z!bUcmm:?Vp#{ܛ){ym0UTSc-J)ه)l (n mK[8۠RkG\*1[,ϣALkC-_P Ɇ,ݬA{ " ƊY<ޮtOnd(ya aLF"N }zo({Fg|-"Å&Bp2 篦T XG+ t8*ϟ7ڒ^gwЉS_^ d,D5.Xҁ˵^\_*/Qt)ڕBUOQ{V&ODO Қt4)Rz\ܙپ%$GNF`;)TEzC4A'TOVFg_ӕCHo}>\{hX]j'RK9{"[#7KHd5,ٯk[lZ4AEy %Ԧd?G>,E!.L9 @q_ou㤈;[8K-'o֒dmW:H/%Iӛxگ%K_Ȓt&?]YߧFz1߭׈_=J ׍֯U0N;sΡ6Iڼ>"Ry~2B:*FOזuBqN L{b:sYì=4kr)-ŒQC ڑ.{~" j9w23XO)jW3&;Iq<攏n?emj_Lęyx|K FO䙄>IV^N,r`Qc6!/ ?Kvgnmf10kimagemanager/css/_cache/im_core_css.css000066600000065532150472616010014173 0ustar00/* Image Manager */ /* core stuff */ /* ########################################################## */ body { background:#fff; color:#000; margin:0 0; padding:0; font:70% arial, helvetica, sans-serif; text-align:center; } td { font-size: 11px; } img { behavior:expression(PNG.fix(this)); border: 0; } hr { clear:both; border:0; color:#e5e5e5; background-color:#e5e5e5; height:1px; } div { font-size:11px; } /* Lists */ ul { margin:0; padding:0; list-style:none; } ul li { margin:0; padding:0; } /* Layout */ #center { width:auto; max-width:1200px; margin:0 auto; text-align:left; } /* Links */ a {background:transparent; } a:link {color:#000; } a:visited {color:#000; } a:visited:hover {color:#000; } a:hover {color:#000; } a:active {color:#000; } #thearea { position:relative; } #secondarea { position:absolute; left:200px; } /* Page navigation */ /* ########################################################## */ .pagenav { float: left; color: #484848; display: none; line-height: 16px; height: 16px; z-index:1; } * html .pagenav {/* double margin ie6 bug fix */ display:inline; } .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0 2px; } .pagenav * {float:left; display:block} .pagenav a {outline:0 } .pagenav .prev {background:url('../pages/im/css/../img/left.gif') no-repeat left; width:20px; height:16px; text-decoration:none; behavior:expression(PNG.fix(this));} .pagenav .next {background:url('../pages/im/css/../img/right.gif') no-repeat right; width:20px; height:16px; text-decoration:none; behavior:expression(PNG.fix(this));} .pagenav input {padding:0; width:20px; text-align:center; font-size:10px; margin:0 4px 0 4px } .pagenav .disabled {opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); cursor:default} #progress { background: url('../pages/im/css/../img/loading.gif') no-repeat; padding-left: 20px; } /* View mode */ /* ########################################################## */ .viewmode { float:right; margin:0 25px 0 0; display:inline; height: 25px; color:#484848; z-index:1; white-space:nowrap; } .viewmode .desc { float:left; margin:3px 4px 0 0; } .viewmode a img { margin-bottom:-5px; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); } .viewmode a.listactive img { opacity:1; -ms-filter:'alpha(opacity=100)'; filter:alpha(opacity=100); } .viewmode a.listactive { font-weight:bold; } #viewcontainer #filelist { position:relative; } /* List container */ #listcontainer { position:relative; } * html #listcontainer {/* double margin ie6 bug fix */ display:inline; } /* Left side folders */ /* ########################################################## */ #folders { position:absolute; top:0; left:2px; margin:0; width:192px; background:url(../pages/im/css/../img/folder-middle-bg.png) bottom left; z-index:1; } #folders h2 { margin:0; padding:20px 10px 10px 10px; background:url(../pages/im/css/../img/folder-top-bg.png) top left; font-size:100%; color:#7791c4; } #folders h3 { margin:10px 2px 0 2px; padding:10px 8px 10px 8px; font-size:100%; color:#7791c4; border-top:1px solid #9ab0d7; } #folders a { text-decoration:none; behavior:expression(PNG.fix(this)); } #folders .categories { margin:0 6px 0 10px; } #folders .categories li a { background:url(../pages/im/css/../img/icons/category-closed.png) no-repeat; padding:2px 2px 0 24px; display:block; min-height:16px; } #folders .categories li.current a { background:url(../pages/im/css/../img/icons/category-open.png) no-repeat; font-weight:bold; } #folders .special { margin:5px 6px 0 10px; } #folders .special li a { padding: 2px 2px 0 24px; display: block; min-height: 16px; height: 16px; line-height: 16px; } #folders .folders { margin:0 6px 0 10px; } #folders div { background:url(../pages/im/css/../img/folder-bottom-bg.png) no-repeat bottom left; } #folder_list { padding:0 0 20px 0; } #folders .folders li a { background:url(../pages/im/css/../img/folder.png) no-repeat; padding:2px 2px 0 24px; display:block; min-height:16px; } #folders .folders li.parent a { background:url(../pages/im/css/../img/icons/up.png) no-repeat; } #folders .folders li.current a { background:url(../pages/im/css/../img/icons/folders-open.png) no-repeat; font-weight:bold; } #folders .preview { margin:0 0 4px 10px; } #folders .previewact { padding:0 0 20px 10px; } #folders a:hover { color:#2e4e8c; } #folders .folders li.progress { background: url('../pages/im/css/../img/loading.gif') no-repeat; height: 16px; line-height: 16px; padding-left: 20px; } .folder .name, .parent .name { font-weight:bold; } /* ########################################################## */ #toolbar.caption span.caption { display: inline; } #toolbar a {outline:0 } /* Validation classes */ label.msg { display:none; } label.invalid { color:#aa0000; display:inline; } input.invalid { background-color:#d63232; } div label.invalid { display:block; } /* Dialog facts */ #facts { height:30px; } /* Toolbar */ /* ########################################################## */ #topnav { background:url('../pages/im/css/../img/toolbar.png') no-repeat bottom left; } #topwrap { background:url('../pages/im/css/../img/toolbar.png') no-repeat bottom right; margin:0px 0px 0px 30px; } #settings { display:none; position:absolute; top:20px; right:-4px; width:14em; line-height:14px; text-align:right; background:#fff; padding:4px; border:1px solid #959595; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:100; } #settings a { display:inline; padding:0px; } /* Inside stuff */ .toolbar { margin:0px; padding:2px 20px 10px 0px; font:90% tahoma, arial, sans-serif; } #tools li a { font-size:11px; } .toolbar div.filter { padding-right: 20px; width: 125px; } .filter input { width: 123px; background: transparent; border: 1px solid #aaaaaa; font-size: 10px; } .toolbar .navigation { margin:0px 2px; padding: 0; float: left; width: 170px; padding-bottom: 12px; } .navigation .desc { margin:0px 0px 4px 0px; background:url('../pages/im/css/../img/navdesc_bg.gif') no-repeat right; } .navigation .path { margin-bottom:5px; width:260px; overflow:hidden; } .toolbar .icons { margin:14px 0px 0px 0px; float:right; } .toolbar .icon { margin:0px 2px 0px 1px; padding:0px; float:left; line-height:0px; position:relative; } .toolbar .disabled img { opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30); } .toolbar .disabled a { color: #AAA; } .toolbar .disabled a:hover { background: transparent; cursor: default; } /* Icons */ .icon a { text-decoration:none; padding:2px; display:block; } .icon a:hover { background:#d3d0ce; } .icon .caption { position:relative; top:-4px; display:none; padding:0px 4px 0px 4px; } .toolbar .separator { margin:0px 4px; float:left; } /* Thumbnail view */ /* ########################################################## */ #viewcontainer { padding-left: 212px; padding-top: 10px; } #thumbs { margin:0 10px 10px 0px; } #textlists { margin:0 10px 10px 0px; } .thumbnail { position:relative; float:left; margin:3px; background:url(../pages/im/css/../img/im-topright.gif) no-repeat top right; text-align:center; } .thumbnail .wrap { background:url(../pages/im/css/../img/im-topleft.gif) no-repeat; } .thumbnailimage { border: 0; } .pic { position:relative; margin:0px auto 0px; } .pic[class] { display:table; position:static; padding-top:6px; } .mid { position:absolute; top:50%; left:50%; } /* ie6 */ .mid a { position:relative; top:-50%; left:-50%; } /* ie6 */ html>body .mid { position:absolute; top:50%; left:50%; } /* ie7 */ html>body .mid a { position:relative; top:-60%; left:-50%; } /* ie7 */ html:not([dummy]) .mid[class] { display:table-cell; vertical-align:middle; position:static; } /* ff + safari */ html:not([dummy]) .mid a { position:static; } /* ff + safari */ @media all and (min-width:0px) { html>body .mid { display:table-cell; vertical-align:middle; position:static; } } /* opera */ @media all and (min-width:0px) { html>body .mid a { position:static; } } /* opera */ .details { background:url(../pages/im/css/../img/im.gif) no-repeat bottom right; text-align:left; } .details .wrap2 { background:url(../pages/im/css/../img/im-botleft.gif) no-repeat bottom left; width:25px; line-height:11px; } .name { margin:0px 5px; padding:3px 0px 2px 0px; font:90% tahoma, arial, sans-serif; overflow:hidden; text-align:center; line-height: 16px; height:16px; white-space:nowrap; } * html .name { height:21px; } .name a { text-decoration:none; color:#000; } .name a:hover { color:#827a69; } .parent .act { display: none; } .act { position:absolute; bottom:3px; right:3px; cursor:pointer; } /* List view */ /* ########################################################## */ .listview { position:relative; margin:3px; background:url('../pages/im/css/../img/im-topright.gif') no-repeat top right; float:left; text-align:left; width:100px; } .listview .name {width:75px} .listview .wrap { width:15px; height:2px; background: url('../pages/im/css/../img/im-topleft.gif') no-repeat; line-height:0px; font-size:0px; } /* dialog popups */ /* ########################################################## */ body { overflow: auto; } .dialog { position:relative; text-align:left; width:100%; } .dialog .top { padding:10px 12px; background:#f3f2f0 url('../pages/im/css/../img/dialog-top.png') no-repeat right bottom; behavior:expression(PNG.fix(this)); } .dialog .close { position:absolute; top:4px; right:4px; } .dialog h2 { font:bold 115% tahoma, arial, sans-serif; margin:0px; } .dialog .description { margin:0px; } .dialog .headline { padding:8px 0px 12px 40px; } .dialog .createdir { background: url('../pages/im/css/../img/dialog-icon-newfolder.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../pages/im/css/../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../pages/im/css/../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .facts { background:#f3f2f0; padding:8px 16px 12px 20px; font:90% tahoma, arial, sans-serif; } .dialog .body { padding:8px 16px 12px 20px; } #content { display: none; } /* Upload */ #uploadarea { position: relative; padding: 16px; height: 220px; overflow: hidden; } * html #uploadarea { height: 208px; } #uploadarea .small { margin: 2em 0 -1em; color: #6d88c4; font-size: 0.9em; text-transform: uppercase; } #uploadarea #add.hidden { display: none; } #uploadarea .addbutton, #uploadarea #uploadstart { display: block; width: 182px; height: 26px; margin: 0 0 1em; background: url(../pages/im/css/../img/submit-greyWide.png) no-repeat; text-align: center; font-size: 1em; font-weight: bold; line-height: 26px; text-decoration: none; } #uploadarea #uploadstart { background: url(../pages/im/css/../img/submit-wide.png) no-repeat; } #uploadarea #fileblock { position:relative; top:400px; } #uploadarea #filelist { position:relative; max-height: 7em; overflow: auto; margin-bottom: 6px; border: 1px solid #9fadc4; } * html #uploadarea #filelist { height: 7em; } #uploadarea #fileshead { width: 100%; font-weight: bold; background: #eee; border-bottom: 1px solid #fff; } #uploadarea #files { width: 490px; } #uploadarea #status { position: absolute; top: 4px; border: 1px solid #9fadc4; padding: 1px; width: 506px; height: 34px; display: none; } #uploadarea #progressbar { position: relative; width: 100%; height: 34px; background: url(../pages/im/css/../img/progress.gif); z-index: 10; } #uploadarea .progresstext { position: absolute; top: 0; left: 0; width: 100%; text-align: center; color: #535353; font-weight: bold; line-height: 36px; z-index: 11; } #uploadarea .progresstext a { text-decoration: none; color: #535353; } #files .fname a {display:block; width:295px; overflow:hidden} #files .disabled {text-decoration:none; cursor:default} #files .done {color:gray} #files .failed {color:red} #multiupload_view {display:none} #singleupload_view {display:none} #multiupload_view #selectview {position:relative} #files input.text {width:290px; margin:0; padding:0} /* Forms */ /* ########################################################## */ form { margin:0px; padding:0px; } select { font:100% tahoma; } input.file, input.text { font:90% tahoma, arial, sans-serif; } /* Submit buttons */ input.submit, .button { width:94px; height:26px; padding:0 0 2px; border:0; background:url('../pages/im/css/../img/submit-grey.png') no-repeat; font:normal 100%/100% tahoma, arial, sans-serif; text-align: center; text-decoration: none; } .button.disabled { cursor: text; color: gray; } input.default { background:url('../pages/im/css/../img/submit-default.png') no-repeat; font-weight:bold; } input.cancel { background:url('../pages/im/css/../img/submit-grey.png') no-repeat; font-weight:normal; } a.button { padding-top: 6px; text-align: center; text-decoration: none; } /* Menu */ .menu { margin: 0; padding: 0; position: absolute; border: 1px solid #d4d0c8; background: #EAE9E5; z-index: 1000; width: 100px; } .menu a { display: block; color: #000; text-decoration: none; padding: 3px; text-align: left; overflow:auto; /* FF */ } .menu a:hover { background-color: #dbecf3 } .menu .submenu { background: url(../pages/im/css/../img/menu_arrow.gif) no-repeat center right } .menu .active { background: #dbecf3 url(../pages/im/css/../img/menu_arrow.gif) no-repeat center right } .menu .active a:hover { background-color: transparent } .menu .separator { border-top: 1px solid gray; height: 1px; overflow: hidden } .menu .separator a { display: none } .menu .disabled a { cursor: default; color: #aaa } /* Menu icons */ .menu a { background-image: url(../pages/im/css/../img/menu_icons.gif); background-repeat: no-repeat } .menu .add a { background-position: 0 -60px } .menu .delete a { background-position: 0 -80px } .menu .copy a { background-position: 0 0 } .menu .cut a { background-position: 0 -20px } .menu .paste a { background-position: 0 -40px } .menu .moveup a { background-position: 0 -100px } .menu .movedown a { background-position: 0 -120px } /* * * clearlooks2 - Gnome theme * * */ .clearlooks2 { position: absolute; left: 20px; top: 20px; width: 320px; height: 240px; overflow: hidden; color: white; display: none; text-align: left; } .clearlooks2_progress { position: absolute; left: 0; top: 0; width: auto; height: 30px; z-index: 100100; display: none; border: 1px solid gray; background: #FFF url('../pages/im/css/../img/loading.gif') no-repeat 5px 8px; text-align: left; } .clearlooks2_progress .message { padding-left: 30px; padding-right: 10px; font-family: Arial, Verdana; font-weight: bold; line-height: 30px; } .clearlooks2_event_blocker, .clearlooks2_visible_event_blocker { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 100001; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2_visible_event_blocker { opacity:0.7; -ms-filter:'alpha(opacity=70)'; filter:alpha(opacity=70); background: #FFF; } .clearlooks2_placeholder { position: absolute; left: 0; top: 0; border: 1px dotted black; display: none; z-index: 100002; } /* Alert */ .clearlooks2 .alert { text-align: left; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; font-weight: bold; text-decoration: none; } .clearlooks2 .alert .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .bigicon { display: none; } .clearlooks2 .alert .bigicon, .clearlooks2 .confirm .bigicon, .clearlooks2 .status .bigicon { position: absolute; left: 15px; top: 15px; width: 32px; height: 32px; display: block; } .clearlooks2 .alert .info, .clearlooks2 .status .info { background-image: url('../pages/im/css/../img/clearlooks2/alert_info.gif'); } .clearlooks2 .alert .warning, .clearlooks2 .status .warning { background-image: url('../pages/im/css/../img/clearlooks2/alert_warn.gif'); } .clearlooks2 .alert .error, .clearlooks2 .status .error { background-image: url('../pages/im/css/../img/clearlooks2/alert_error.gif'); } .clearlooks2 .alert .message, .clearlooks2 .confirm .message { position: absolute; left: 55px; top: 15px; width: 325px; height: 40px; overflow: auto; } .clearlooks2 .ok, .clearlooks2 .cancel { position: absolute; left: 160px; top: 65px; width: 80px; height: 30px; background-image: url('../pages/im/css/../img/clearlooks2/button.gif'); text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 30px; font-weight: bold; text-decoration: none; } /* Confirm dialog */ .clearlooks2 .confirm .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .confirm .ok { left: 110px; } .clearlooks2 .confirm .cancel { left: 210px; } .clearlooks2 .confirm .ask { background-image: url('../pages/im/css/../img/clearlooks2/alert_info.gif'); } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Status dialog */ .clearlooks2 .status .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .status .ok { top: 178px; } .clearlooks2 .status .statustext { position: absolute; left: 10px; top: 8px; width: 360px; height: 150px; border: 1px solid gray; overflow: auto; padding: 5px; } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Chromeless window */ .clearlooks2 .chromeless .resize, .clearlooks2 .chromeless .action, .clearlooks2 .chromeless .statusbarbottom { display: none; } .clearlooks2 .chromeless .middle .action { display: block; } .clearlooks2 .chromeless .windowtop, .clearlooks2 .chromeless .window { height: 5px; } .clearlooks2 .chromeless .windowtop .left { position: absolute; left: 0; top: 0; width: 5px; height: 5px; background: transparent url('../pages/im/css/../img/clearlooks2/top_chromeless_left.gif') no-repeat; } .clearlooks2 .chromeless .windowtop .middle { position: absolute; right: 5px; width: 100%; height: 5px; background: transparent url('../pages/im/css/../img/clearlooks2/top_chromeless_middle.gif') no-repeat 5px 0; clip: rect(auto auto auto 10px); } .clearlooks2 .chromeless .windowtop .right { position: absolute; right: 0; top: 0; width: 5px; height: 5px; background: transparent url('../pages/im/css/../img/clearlooks2/top_chromeless_right.gif') no-repeat; } .clearlooks2 .chromeless .windowmiddle { top: 5px; } /* Top section */ .clearlooks2 .windowtop .middle-fg { display: none; } .clearlooks2 .windowtop { position: absolute; width: 100%; height: 23px; overflow: hidden; } .clearlooks2 .windowtop .left { position: absolute; left: 0; top: 0; width: 6px; height: 23px; background: transparent url('../pages/im/css/../img/clearlooks2/top_left.gif') no-repeat; } .clearlooks2 .windowtop .middle { position: absolute; right: 6px; width: 100%; height: 23px; background: transparent url('../pages/im/css/../img/clearlooks2/top_middle.gif') no-repeat 12px 0; clip: rect(auto auto auto 12px); /* Safari hack */ } .clearlooks2 .windowtop .right { position: absolute; right: 0; top: 0; width: 6px; height: 23px; background: transparent url('../pages/im/css/../img/clearlooks2/top_right.gif') no-repeat; } .clearlooks2 .windowtop .title { position: absolute; left: 0; top: 0; width: 100%; height: 19px; text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; font-weight: bold; } /* Top section - Focus */ .clearlooks2 .focustop .left { background: transparent url('../pages/im/css/../img/clearlooks2/top_left.gif') no-repeat -6px 0; } .clearlooks2 .focustop .middle { background: transparent url('../pages/im/css/../img/clearlooks2/top_middle.gif') no-repeat 12px -23px; } .clearlooks2 .focustop .right { background: transparent url('../pages/im/css/../img/clearlooks2/top_right.gif') no-repeat -6px 0; } .clearlooks2 .focus .title { color: #FFF; } /* Middle section */ .clearlooks2 .windowmiddle { position: absolute; top: 23px; width: 100%; z-index: 5; } .clearlooks2 .windowmiddle .left { position: absolute; left: 0; top: 0; width: 4px; height: 100%; background-image: url('../pages/im/css/../img/clearlooks2/middle_left.gif'); } .clearlooks2 .windowmiddle .middle { position: absolute; left: 4px; top: 0; width: 100%; height: 100%; background-color: #FFF; color: #000; } .clearlooks2 .windowmiddle .right { position: absolute; right: 0; top: 0; width: 4px; height: 100%; background-image: url('../pages/im/css/../img/clearlooks2/middle_right.gif'); } /* Bottom section */ .clearlooks2 .windowbottom { position: absolute; left: 0; bottom: 0; width: 100%; height: 5px; overflow: hidden; z-index: 5; } .clearlooks2 .windowbottom .left { position: absolute; left: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../pages/im/css/../img/clearlooks2/bottom_left.gif'); overflow: hidden; } .clearlooks2 .windowbottom .middle { position: absolute; left: 5px; bottom: 0; width: 100%; height: 5px; background: url('../pages/im/css/../img/clearlooks2/bottom_middle.gif'); overflow: hidden; } .clearlooks2 .windowbottom .right { position: absolute; right: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../pages/im/css/../img/clearlooks2/bottom_right.gif'); overflow: hidden; } /* Statusbar */ .clearlooks2 .statusbarbottom { height: 24px; overflow: hidden; z-index: 5; } .clearlooks2 .statusbarbottom .left { bottom: 0; width: 5px; height: 23px; background-image: url('../pages/im/css/../img/clearlooks2/statusbar_left.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .middle { height: 23px; background-image: url('../pages/im/css/../img/clearlooks2/statusbar_middle.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .right { width: 20px; height: 23px; background-image: url('../pages/im/css/../img/clearlooks2/statusbar_right.gif'); overflow: hidden; } .clearlooks2 .windowbottom .statustext { display: none; } .clearlooks2 .statusbarbottom div.statustext { display: block; position: absolute; left: 6px; bottom: 0; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; } .clearlooks2 .resizable .statusbarbottom .resize-se { background-image: url('../pages/im/css/../img/clearlooks2/statusbar_resize.gif'); width: 20px; height: 23px; } /* Actions */ .clearlooks2 .action { position: absolute; cursor: pointer; overflow: hidden; } .clearlooks2 .close, .clearlooks2 .min, .clearlooks2 .med, .clearlooks2 .max { z-index: 3; } .clearlooks2 .resizable .min { right: 68px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat 0 0; background-repeat: no-repeat; } .clearlooks2 .resizable .med { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -29px 0; background-repeat: no-repeat; } .clearlooks2 .resizable .max { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -58px 0; background-repeat: no-repeat; } .clearlooks2 .close { right: 6px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -87px 0; } /* Actions - Focus */ .clearlooks2 .focustop .min { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat 0 -16px; } .clearlooks2 .focustop .med { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -29px -16px; } .clearlooks2 .focustop .max { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -58px -16px; } .clearlooks2 .focustop .close { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -87px -16px; } /* Actions - Hover */ .clearlooks2 .focustop .min:hover { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat 0 -32px; } .clearlooks2 .focustop .med:hover { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -29px -32px; } .clearlooks2 .focustop .max:hover { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -58px -32px; } .clearlooks2 .focustop .close:hover { background: transparent url('../pages/im/css/../img/clearlooks2/buttons.gif') no-repeat -87px -32px; } /* Move and resize handles */ .clearlooks2 .move { top: 0; left: 0; width: 100%; height: 19px; cursor: move; z-index: 1; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resize { display: none; z-index: 4; } .clearlooks2 .resizable .resize { display: block; } .clearlooks2 .resizable .resize-w { top: 0; left: 0; width: 5px; height: 100%; cursor: w-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-e { top: 0; right: 0; width: 5px; height: 100%; cursor: e-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-n { top: 0; left: 0; width: 100%; height: 5px; cursor: n-resize; overflow: hidden; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-nw { top: 0; left: 0; width: 5px; height: 19px; cursor: nw-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-ne { top: 0; right: 0; width: 5px; height: 19px; cursor: ne-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-sw { bottom: 0; left: 0; width: 5px; height: 5px; cursor: sw-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-s { bottom: 0; left: 0; width: 100%; height: 5px; cursor: s-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-se { bottom: 0; right: 0; width: 5px; height: 5px; cursor: se-resize; background-image: url('../pages/im/css/../img/clearlooks2/transparent.gif'); } #folders .special li a.history { background: url(../plugins/History/css/../img/clock.png) no-repeat; } #folders .special li a.favorites { background: url(../plugins/Favorites/css/../img/favorites.png) no-repeat; } imagemanager/css/index.php000066600000003435150472616010011604 0ustar00dispatchEvent("onPreInit", array($type)); $config = $man->getConfig(); $compressor = new Moxiecode_CSSCompressor(array( 'expires_offset' => 3600 * 24 * 10, 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => false, 'charset' => 'UTF-8', 'name' => $theme . "_" . $package, 'convert_urls' => true )); $resources = new Moxiecode_ClientResources(); // Load theme resources $resources->load('../pages/' . $theme . '/resources.xml'); // Load plugin resources $plugins = explode(',', $config["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); $files = $resources->getFiles($package); if ($resources->isDebugEnabled() || checkBool($config["general.debug"])) { header('Content-type: text/css'); $pagePath = dirname($_SERVER['SCRIPT_NAME']); echo "/* Debug enabled, css files will be loaded without compression */\n"; foreach ($files as $file) echo '@import url("' . $pagePath . '/' . $file->getPath() . '");' . "\n"; } else { foreach ($files as $file) $compressor->addFile($file->getPath(), $file->isRemoveWhiteSpaceEnabled()); $compressor->compress($package); } ?>imagemanager/editor_plugin.js000066600000035266150472616010012405 0ustar00/** * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $ * * @author Moxiecode * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. */ (function() { window.mcImageManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'image,media' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; i'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinymce.DOM.encode(v); } } )); } }, v)); }); }, getInfo : function() { return mcImageManagerPlugin.getInfo(); }, createControl: function(n, cm) { var t = this, c, ed = t.editor, v; switch (n) { case 'insertimage': v = ed.getParam('imagemanager_insert_template'); if (v instanceof Array) { c = cm.createMenuButton('insertimage', { title : 'imagemanager_insertimage_desc', image : t.url + '/pages/im/img/insertimage.gif', icons : false }); c.onRenderMenu.add(function(c, m) { tinymce.each(v, function(v) { m.add({title : v.title, onclick : function() { ed.execCommand('mceInsertImage', false, v); }}); }); }); } else { c = cm.createButton('insertimage', { title : 'Загрузка и вставка картинок', image : t.url + '/pages/im/img/insertimage.gif', onclick : function() { ed.execCommand('mceInsertImage', false, {template : v}); } }); } return c; } return null; } }); tinymce.PluginManager.add('imagemanager', tinymce.plugins.ImageManagerPlugin); tinymce.ScriptLoader.load((tinymce.PluginManager.urls['imagemanager'] || tinymce.baseURL + '/plugins/imagemanager')+ '/language/index.php?type=im&format=tinymce_3_x&group=tinymce&prefix=imagemanager_'); } // Setup TinyMCE 2.x plugin if (window.TinyMCE_Engine) { var TinyMCE_ImageManagerPlugin = { setup : function() { var b = (window.realTinyMCE || tinyMCE).baseURL; mcImageManager.baseURL = b + '/plugins/imagemanager/js'; document.write(''); }, initInstance : function(ed) { ed.settings.file_browser_callback = 'mcImageManager.filebrowserCallBack'; mcImageManager.settings.handle = tinyMCE.getParam('imagemanager_handle', mcImageManager.settings.handle); }, getControlHTML : function(cn) { switch (cn) { case "insertimage": return tinyMCE.getButtonHTML(cn, 'lang_imagemanager_insertimage_desc', '{$pluginurl}/pages/im/img/insertimage.gif', 'mceInsertImage', false); } return ""; }, getInfo : function() { return mcImageManagerPlugin.getInfo(); }, execCommand : function(id, el, cmd, ui, v) { var ed = tinyMCE.getInstanceById(id); if (cmd == 'mceInsertImage') { mcImageManager.browse(tinyMCE.extend({ path : tinyMCE.getParam("imagemanager_path"), rootpath : tinyMCE.getParam("imagemanager_rootpath"), remember_last_path : tinyMCE.getParam("imagemanager_remember_last_path"), custom_data : tinyMCE.getParam("imagemanager_custom_data"), insert_filter : tinyMCE.getParam("imagemanager_insert_filter"), oninsert : function(o) { var ci = o.focusedFile.custom; if (!ci.thumbnail_url) { ci.thumbnail_url = url; ci.twidth = ci.width; ci.theight = ci.height; } ed.execCommand('mceInsertContent', false, mcImageManagerPlugin.replace( tinyMCE.getParam('imagemanager_insert_template', ''), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinyMCE.xmlEncode(v); } } )); } }, v)); return true; } return false; } }; TinyMCE_ImageManagerPlugin.setup(); tinyMCE.addPlugin('imagemanager', TinyMCE_ImageManagerPlugin); } })(); imagemanager/plugins/_Template/Template.php000066600000016102150472616010015046 0ustar00getConfig(); // Override option $config['somegroup.someoption'] = true; return true; } /** * Gets called before a file action occurs for example before a rename or copy. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param BaseFile $file1 File object 1 for example from in a copy operation. * @param BaseFile $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeFileAction(&$man, $action, $file1, $file2) { return true; } /** * Gets called after a file action was perforem for example after a rename or copy. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param BaseFile $file1 File object 1 for example from in a copy operation. * @param BaseFile $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onFileAction(&$man, $action, $file1, $file2) { return true; } /** * Gets called before a RPC command is handled. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeRPC(&$man, $cmd, $input) { return null; } /** * Gets executed when a RPC command is to be executed. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { return null; } /** * Gets called before data is streamed to client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeStream(&$man, $cmd, $input) { return true; } /** * Gets called when data is streamed to client. This method should setup * HTTP headers, content type etc and simply send out the binary data to the client and the return false * ones that is done. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onStream(&$man, $cmd, $input) { return true; } /** * Gets called after data was streamed to client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to was performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onAfterStream(&$man, $cmd, $input) { return true; } /** * Gets called before data is streamed/uploaded from client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeUpload(&$man, $cmd, $input) { return true; } /** * Gets called when data is streamed/uploaded from client. This method should take care of * any uploaded files and move them to the correct location. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return object Result object data or null if the event wasn't handled. */ function onUpload(&$man, $cmd, $input) { return null; } /** * Gets called before data is streamed/uploaded from client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to was performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onAfterUpload(&$man, $cmd, $input) { return true; } /** * Gets called when custom data is to be added for a file custom data can for example be * plugin specific name value items that should get added into a file listning. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param BaseFile $file File reference to add custom info/data to. * @param string $type Where is the info needed for example list or info. * @param Array $custom Name/Value array to add custom items to. * @return bool true/false if the execution of the event chain should continue. */ function onCustomInfo(&$man, &$file, $type, &$custom) { return true; } /** * Gets called when the user selects a file and inserts it into TinyMCE or a form or similar. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param BaseFile $file Implementation of the BaseFile class that was inserted/returned to external system. * @return bool true/false if the execution of the event chain should continue. */ function onInsertFile(&$man, &$file) { return true; } } // Add plugin to ManagerEngine $man->registerPlugin("template", new Moxiecode_TemplatePlugin()); ?>imagemanager/plugins/Favorites/resources.xml000066600000000417150472616010015350 0ustar00 imagemanager/plugins/Favorites/css/favorites.css000066600000000126150472616010016115 0ustar00#folders .special li a.favorites { background: url(../img/favorites.png) no-repeat; } imagemanager/plugins/Favorites/js/favorites.js000066600000003115150472616010015566 0ustar00(function($){ var man = window.FileManager || window.ImageManager, type = window.FileManager ? 'fm' : 'im'; man.addSpecialFolder({title : '{#favorites.special_folder_title}', path : 'favorite:///', type : 'favorites'}); // Add menu items to context menu $().bind('DropMenu:beforeshow', function(e, m) { if (man.path.indexOf('://') == -1) { m.addSeparator(); m.add({title : $.translate('{#favorites.addfavorites}'), disabled : man.isDisabled('addfavorites') || !man.selectedFiles.length, onclick : addFavorites}); } if (man.path.indexOf('favorite://') != -1) { m.addSeparator(); m.add({title : $.translate('{#favorites.removefavorites}'), disabled : man.isDisabled('removefavorites') || !man.selectedFiles.length, onclick : removeFavorites}); } }); $().bind('filelist:changed', function() { if (man.path.indexOf('favorite://') != -1) { $(man.tools).each(function(i, v) { man.setDisabled(v, 1); }); } }); function addFavorites() { var args = {}; $(man.selectedFiles).each(function(i, f) { args['path' + i] = f.path; }); RPC.exec(type + '.addFavorites', args, function(data) { RPC.handleError({message : '{#error.addfavorites_failed}', visual_path : args.visual_path, response : data}); }); }; function removeFavorites() { var args = {}; $(man.selectedFiles).each(function(i, f) { args['path' + i] = f.path; }); RPC.exec(type + '.removeFavorites', args, function(data) { if (!RPC.handleError({message : '{#error.removefavorites_failed}', visual_path : args.visual_path, response : data})) man.listFiles(); }); }; })(jQuery); imagemanager/plugins/Favorites/Favorites.php000066600000014455150472616010015276 0ustar00registerFileSystem('favorite', 'FavoriteFile'); return true; } function onRPC(&$man, $cmd, $input) { if ($cmd == "addFavorites") return $this->_addFavorites($man, $input); if ($cmd == "removeFavorites") return $this->_removeFavorites($man, $input); return null; } function _removeFavorites(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input['path' . $i]); $i++) { $status = $this->removeFavorite($man, $input["path". $i]); if ($status) $result->add("OK", $man->encryptPath($input["path". $i]), "Path was removed."); else $result->add("FAILED", $man->encryptPath($input["path". $i]), "Path was not removed."); } return $result->toArray(); } function _addFavorites(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input['path' . $i]); $i++) { $status = $this->addFavorite($man, $input["path". $i]); if ($status) $result->add("OK", $man->encryptPath($input["path". $i]), "Path was added."); else $result->add("FAILED", $man->encryptPath($input["path". $i]), "Path was not added."); } return $result->toArray(); } function addFavorite(&$man, $path) { $config = $man->getConfig(); $maxfavorites = isset($config["favorites.max"]) ? $config["favorites.max"] : $this->_maxfavorites; $type = $man->getType(); $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); if (count($patharray) > 0) { for($i=0;$i $maxfavorites) array_pop($patharray); } else $patharray[] = $path; $cookievalue = implode(",", $patharray); $this->setCookieData($type, $cookievalue); return true; } function getCookieData($type) { if ($this->_cookieData) return $this->_cookieData; if (isset($_COOKIE["MCManagerFavoriteCookie_". $type])) return $_COOKIE["MCManagerFavoriteCookie_". $type]; else return ""; } function setCookieData($type, $val) { $this->_cookieData = $val; setcookie("MCManagerFavoriteCookie_". $type, $val, time()+(3600*24*30)); // 30 days } function clearFavorites(&$man) { setcookie ("MCManagerFavoriteCookie_". $man->getType(), "", time() - 3600); // 1 hour ago return true; } function removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$isetCookieData($type, $cookievalue); return true; } } class FavoriteFile extends Moxiecode_BaseFileImpl { function FavoriteFile(&$manager, $absolute_path, $child_name = "", $type = MC_IS_FILE) { $absolute_path = str_replace('favorite://', '', $absolute_path); Moxiecode_BaseFileImpl::Moxiecode_BaseFileImpl($manager, $absolute_path, $child_name, $type); } function canRead() { return true; } function canWrite() { return false; } function exists() { return true; } function isDirectory() { return true; } function isFile() { return false; } function getParent() { return null; } function getParentFile() { return null; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new DummyFileFilter()); return $files; } /** * Returns an array of MCE_File instances based on the specified filter instance. * * @param MCE_FileFilter &$filter MCE_FileFilter instance to filter files by. * @return Array array of MCE_File instances based on the specified filter instance. */ function listFilesFiltered(&$filter) { $files = array(); $man = $this->_manager; $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); if (IndexOf($cookievalue, ",") != -1) $patharray = split(",", $cookievalue); else if ($cookievalue != "") $patharray[] = $cookievalue; foreach ($patharray as $path) { if (!$man->verifyPath($path)) continue; $file = $man->getFile($path); if (!$file->exists()) { $this->_removeFavorite($man, $path); continue; } if ($man->verifyFile($file) < 0) continue; if ($filter->accept($file) == BASIC_FILEFILTER_ACCEPTED) $files[] = $file; } return $files; } function _getCookieData($type) { if (isset($_COOKIE["MCManagerFavoriteCookie_". $type])) return $_COOKIE["MCManagerFavoriteCookie_". $type]; else return ""; } function _removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$i_setCookieData($type, $cookievalue); return true; } function _setCookieData($type, $val) { setcookie("MCManagerFavoriteCookie_". $type, $val, time() + (3600 * 24 * 30)); // 30 days } } // Add plugin to MCManager $man->registerPlugin("favorites", new Moxiecode_FavoritesPlugin()); ?>imagemanager/plugins/Favorites/img/favorites.png000066600000001077150472616010016103 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڤkQwhfBV[m*P\I1J7] "[?K|i1ږILj2$ۊHRj8}BJnu#_3uw#sKܷaʏ'}>D(pw=zZCT%Lu[x6uB#TGB)Ag*09 W3pyAl%hI],gD M'?Ыz`{Iӧ`pY-E*?X\kP)L_PzpQ$ JCf9[UKt];ໃ|(oXR:o5վ[:$ĔoZ>-suy+,T(~1xmg)[lCLGg=ZȻM1MKX ^.PگtNDb:v?.kbvi7!nSȢ6ubIENDB`imagemanager/plugins/Trash/css/trash.css000066600000000115150472616010014351 0ustar00#folders .special li a.trash { background:url(../img/trash.png) no-repeat; } imagemanager/plugins/Trash/img/trash_empty.png000066600000001217150472616010015553 0ustar00PNG  IHDRabKGDC pHYs B(xtIME*/3?IDAT8˥Ka?25E\3Эb")v/ ݪݲC CaD$ 2p-1e}y:[aK0;_3@ngU96tIvth}|bLxhÏXY㸸u,fzK}7GAHfDEDQ!\Y*:af厉=ծSV3Xhm1Zc!I :6c aГnoYߘW,%skYXfkv^S,ec#EK}zN~E[-_#p܈L!8|( il PN@-$I2W45@`!½?נrk((\w"4oj(`Z51%ϏuXC"f/@Z~{Fd1Blf=im;kD"h- Nc`% ٥ qIzdv IENDB`imagemanager/plugins/Trash/img/trash.png000066600000001422150472616010014333 0ustar00PNG  IHDRabKGDNPMzQN pHYs B(xtIME*SIDAT8˕Mh\e޹301&%L'4B]%[WRIPPpcͦ!] .. *AHARh$qb# :NzsgtcOA gwއzّ9Nq7iX971{n.?x-tFsӣa&lYjꙻ6Oҍ!jܿ@)~tM7~R{/Nu6~ZKA築BR7nNX5X`? [7GG<+Ah G1FVUrx@<Պ>{nѫV@dE_#IENDB`imagemanager/plugins/History/resources.xml000066600000000411150472616010015041 0ustar00 imagemanager/plugins/History/History.php000066600000010740150472616010014465 0ustar00registerFileSystem('history', 'Moxiecode_HistoryFile'); return true; } function onInsertFile(&$man, $file) { $path = $file->getAbsolutePath(); $type = $man->getType(); $maxhistory = isset($config["history.max"]) ? $config["history.max"] : $this->_maxhistory; $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); if (count($patharray) > 0) { for($i=0;$i $maxhistory) array_pop($patharray); } else $patharray[] = $path; $cookievalue = implode(",", $patharray); $this->setCookieData($type, $cookievalue); return true; } function getCookieData($type) { if (isset($_COOKIE["MCManagerHistoryCookie_". $type])) return $_COOKIE["MCManagerHistoryCookie_". $type]; else return ""; } function setCookieData($type, $val) { setcookie("MCManagerHistoryCookie_". $type, $val, time()+(3600*24*30)); // 30 days } function onClearHistory(&$man) { setcookie ("MCManagerHistoryCookie_". $man->getType(), "", time() - 3600); // 1 hour ago return true; } } class Moxiecode_HistoryFile extends Moxiecode_BaseFileImpl { function Moxiecode_HistoryFile(&$manager, $absolute_path, $child_name = "", $type = MC_IS_FILE) { $absolute_path = str_replace('favorite://', '', $absolute_path); Moxiecode_BaseFileImpl::Moxiecode_BaseFileImpl($manager, $absolute_path, $child_name, $type); } function canRead() { return true; } function canWrite() { return false; } function exists() { return true; } function isDirectory() { return true; } function isFile() { return false; } function getParent() { return null; } function getParentFile() { return null; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Returns an array of MCE_File instances based on the specified filter instance. * * @param MCE_FileFilter &$filter MCE_FileFilter instance to filter files by. * @return Array array of MCE_File instances based on the specified filter instance. */ function listFilesFiltered(&$filter) { $files = array(); $man = $this->_manager; $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); if (IndexOf($cookievalue, ",") != -1) $patharray = split(",", $cookievalue); else if ($cookievalue != "") $patharray[] = $cookievalue; foreach ($patharray as $path) { if (!$man->verifyPath($path)) continue; $file = $man->getFile($path); if (!$file->exists()) { $this->_removeFavorite($man, $path); continue; } if ($man->verifyFile($file) < 0) continue; if ($filter->accept($file) == BASIC_FILEFILTER_ACCEPTED) $files[] = $file; } return $files; } function _getCookieData($type) { if (isset($_COOKIE["MCManagerHistoryCookie_". $type])) return $_COOKIE["MCManagerHistoryCookie_". $type]; else return ""; } function _removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$i_setCookieData($type, $cookievalue); return true; } function _setCookieData($type, $val) { setcookie("MCManagerHistoryCookie_". $type, $val, time()+(3600*24*30)); // 30 days } } // Add plugin to MCManager $man->registerPlugin("history", new Moxiecode_HistoryPlugin()); ?>imagemanager/plugins/History/css/history.css000066600000000120150472616010015305 0ustar00#folders .special li a.history { background: url(../img/clock.png) no-repeat; } imagemanager/plugins/History/js/history.js000066600000000706150472616010014767 0ustar00(function($){ var man = window.FileManager || window.ImageManager; man.addSpecialFolder({title : '{#history.special_folder_title}', path : 'history:///', type : 'history'}); $().bind('filelist:changed', function() { if (man.path.indexOf('history://') != -1) { $(man.tools).each(function(i, v) { man.setDisabled(v, 1); }); $(['insert', 'download', 'view']).each(function(i, v) { man.setDisabled(v, 0); }); } }); })(jQuery); imagemanager/plugins/History/img/clock.png000066600000001562150472616010014672 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8]kHSq}}( EAAЇnAXVdYդtvl6׌t7 M}پ 7EF܏&MszJf-KS0\u I!}ًf>Ʌ]zd&."^õJ,.4 2I3(PdEى zG˅מ=M'QH;ePQxt5/ހG0/ vT\}`gDhc8 /jRTp ex+JP/)T;ƥ0o8ާx^+e/<6iFہ ~G [app@NyY&^tRE]"taC T%}N+BŨyY&^xrk᪾6W݇$+Ϊ U0L`#ZyÙZ} $man, "basepath" => $basepath, "json" => $json, "input" => $input, "cmd" => $cmd, "cwd" => getcwd(), "MCErrorHandler" => $MCErrorHandler ); // Bootstap drupal @session_destroy(); chdir($basepath . "../../../../../../../../"); require_once("includes/bootstrap.inc"); require_once("includes/common.inc"); // Setup session level drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); $isDrupalAuth = false; if (!isset($_SESSION['mc_drupal_auth']) || !$_SESSION['mc_drupal_auth']) { // Not cached in session check agains API drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); $isDrupalAuth = user_access('access tinymce'); $_SESSION['mc_drupal_auth'] = $isDrupalAuth; } else $isDrupalAuth = $_SESSION['mc_drupal_auth']; // Restore everything chdir($access_check['cwd']); $MCErrorHandler = $access_check['MCErrorHandler']; $man = $access_check['manager']; $json = $access_check['json']; $cmd = $access_check['cmd']; $input = $access_check['input']; $basepath = $access_check['basepath']; /** * This class is a Drupal CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class Moxiecode_DrupalAuthenticator extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Main constructor. */ function Moxiecode_DrupalAuthenticator() { } function onAuthenticate(&$man) { global $isDrupalAuth; global $user; $config =& $man->getConfig(); // If authenticated then if ($isDrupalAuth && isset($user)) { foreach ($config as $key => $value) { if (is_string($value)) { $value = str_replace('${user}', $user->uid, $value); $config[$key] = $value; } } // Get rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); // Create rootpath if (!file_exists($rootPath)) mkdir($rootPath); } return $isDrupalAuth; } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("DrupalAuthenticator", new Moxiecode_DrupalAuthenticator()); ?>imagemanager/plugins/CustomInfoExample/CustomInfoExample.php000066600000004240150472616010020365 0ustar00getName()); // Will be used as title/alt in TinyMCE link/image dialogs $input['description'] = $file->getName() . " (" . $this->_getSizeStr($file->getLength()) . ")"; break; // When the file is displayed in a more info dialog case "info": //$input['mycustomfield'] = strtoupper($file->getName()); break; // When the file is listed case "list": //$input['mycustomfield'] = strtoupper($file->getName()); break; } // Chain to next return true; } /** * Returns a filesize as a nice truncated string like "10.3 MB". * * @param int $size File size to convert. * @return String Nice truncated string of the file size. */ function _getSizeStr($size) { // MB if ($size > 1048576) return round($size / 1048576, 1) . "MB"; // KB if ($size > 1024) return round($size / 1024, 1) . "KB"; return trim($size) . "b"; } } // Add plugin to MCManager $man->registerPlugin("custominfoexample", new Moxiecode_CustomInfoExample()); ?>imagemanager/plugins/PHPNukeAuthenticator/PHPNukeAuthenticator.php000066600000001525150472616010021376 0ustar00registerPlugin("PHPNukeAuthenticator", new Moxiecode_PHPNukeAuthenticator()); ?>imagemanager/plugins/MamboAuthenticator/MamboAuthenticatorImpl.php000066600000003464150472616010021566 0ustar00initSession(); $mamboUser =& $mainframe->getUser(); chdir("mambots/editors/mosce/jscripts/tiny_mce/plugins/imagemanager/"); /** * This class is a Mambo CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class MamboAuthenticatorImpl extends BaseAuthenticator { /**#@+ * @access public */ var $_config; /** * Main constructor. */ function MamboAuthenticatorImpl() { } /** * Initializes the authenicator. * * @param Array $config Name/Value collection of config items. */ function init(&$config) { $this->_config =& $config; } /** * Returns a array with group names that the user is bound to. * * @return Array with group names that the user is bound to. */ function getGroups() { return ""; } /** * Returns true/false if the user is logged in or not. * * @return bool true/false if the user is logged in or not. */ function isLoggedin() { global $mamboUser; return preg_match($this->_config['authenticator.joomla.valid_users'], $mamboUser->username); } /**#@-*/ } ?>imagemanager/plugins/JoomlaAuthenticator/JoomlaAuthenticator.php000066600000004403150472616010021312 0ustar00initSession(); $mamboUser = $mainframe->getUser(); // Try that if ($mamboUser->id == 0) { session_name(md5($mosConfig_live_site)); session_start(); $mamboUser = new mosUser($database); $mamboUser->id = intval(mosGetParam($_SESSION, 'session_user_id', '')); $mamboUser->username = strval(mosGetParam($_SESSION, 'session_username', '')); $mamboUser->usertype = strval(mosGetParam($_SESSION, 'session_usertype', '')); } chdir($mcOldCWD); /** * This class is a Drupal CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class Moxiecode_JoomlaAuthenticator extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Main constructor. */ function Moxiecode_JoomlaAuthenticator() { } function onAuthenticate(&$man) { global $mamboUser; $config =& $man->getConfig(); // Not logged in if ($mamboUser->id == 0) return false; // Replace ${user} in all config values foreach ($config as $key => $value) { // Skip replaceing {$user} in true/false stuff if ($value === true || $value === false) continue; $value = str_replace('${user}', $mamboUser->username, $value); $config[$key] = $value; } // Try create rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); $rootPathItems = explode(';', $rootPath); $rootPathItems = explode('=', $rootPathItems[0]); if (count($rootPathItems) > 1) $rootPath = $rootPathItems[1]; else $rootPath = $rootPathItems[0]; if (!file_exists($rootPath)) @mkdir($rootPath); // Is one of the valid user names return preg_match($config['JoomlaAuthenticator.valid_users'], $mamboUser->username); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("JoomlaAuthenticator", new Moxiecode_JoomlaAuthenticator()); ?>imagemanager/plugins/ExternalAuthenticator/ExternalAuthenticator.php000066600000011137150472616010022216 0ustar00getConfig(); session_start(); $authURL = $config['ExternalAuthenticator.external_auth_url']; $secretKey = $config['ExternalAuthenticator.secret_key']; $prefix = isset($config['ExternalAuthenticator.session_prefix']) ? $config['ExternalAuthenticator.session_prefix'] : "mcmanager_"; $useCookie = isset($config['ExternalAuthenticator.use_cookie']) ? $config['ExternalAuthenticator.use_cookie'] == true : true; $dir = basename(dirname($_SERVER["PHP_SELF"])); // Always allow language packs to be loaded if ($dir == "language") { // Override language key if (isset($_SESSION[$prefix . "ExternalAuthenticator_general__language"])) $config["general.language"] = $_SESSION[$prefix . "ExternalAuthenticator_general__language"]; return true; } // Check local session if authenticated if ($dir == "rpc" || $dir == "stream") { if (isset($_SESSION[$prefix . 'ExternalAuthenticator']) && $_SESSION[$prefix . 'ExternalAuthenticator'] == true) { if (!$useCookie || isset($_COOKIE[$prefix . 'enabled']) && $_COOKIE[$prefix . 'enabled'] == md5($secretKey . $_SERVER['REMOTE_ADDR'])) { foreach ($_SESSION as $key => $value) { if (strpos($key, $prefix . "ExternalAuthenticator_") === 0) { $key = str_replace("__", ".", $key); $key = substr($key, strlen($prefix . "ExternalAuthenticator_")); $config[$key] = $value; } } // Try create rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); $rootPathItems = explode(';', $rootPath); $rootPathItems = explode('=', $rootPathItems[0]); if (count($rootPathItems) > 1) $rootPath = $rootPathItems[1]; else $rootPath = $rootPathItems[0]; if (!file_exists($rootPath)) @mkdir($rootPath); // Use rootpath as path if (!$config['filesystem.path'] || !$man->isChildPath($rootPath, $config['filesystem.path'])) $config['filesystem.path'] = $rootPath; return true; } } } if (isset($_POST['key'])) { // Generate data chunk $data = ""; $ignored = array("key"); foreach ($_POST as $key => $value) { if (!in_array($key, $ignored)) $data .= $value; } // Check input if ($_POST['key'] == md5($data . $secretKey)) { // Set authenticated session and cookie $_SESSION[$prefix . 'ExternalAuthenticator'] = true; if ($useCookie) setcookie($prefix . 'enabled', md5($secretKey . $_SERVER['REMOTE_ADDR']), 0, '/'); // Set config parameters foreach ($_POST as $key => $value) { if (!in_array($key, $ignored)) { $_SESSION[$prefix . 'ExternalAuthenticator_' . $key] = $value; $config[$key] = $value; } } return true; } else { sleep(1); // Sleep for bots die("Invalid input make sure that the secret keys match."); } } // Force absolute if (strpos($authURL, "http") !== 0 && strpos($authURL, "/") !== 0) $authURL = "plugins/ExternalAuthenticator/" . $authURL; // Setup return URL $prot = "http"; $port = ""; if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") $prot = "https"; // Non default port if ($_SERVER['SERVER_PORT'] != "80" && $_SERVER['SERVER_PORT'] != "443") $port = ":" . $_SERVER['SERVER_PORT']; // If RPC or stream then return it using config if ($dir == "rpc" || $dir == "stream") { // This part doesn't work yet but isn't really needed. // Make it absolute if (strpos($authURL, "/") === 0) $authURL = $prot . "://" . $_SERVER['HTTP_HOST'] . $port . $authURL; $returnURL = $prot . "://" . $_SERVER['HTTP_HOST'] . $port . dirname(dirname($_SERVER['PHP_SELF'])) . "/index.php?type=" . $man->getType(); $config['authenticator.login_page'] = $authURL . "?return_url=" . urlencode($returnURL); return false; } // Not logged redirect to External backend $returnURL = $prot . "://" . $_SERVER['HTTP_HOST'] . $port . $_SERVER['PHP_SELF'] . "?type=" . $man->getType(); header('location: ' . $authURL . "?return_url=" . urlencode($returnURL)); die(); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("ExternalAuthenticator", new Moxiecode_ExternalAuthenticator()); ?>imagemanager/plugins/ExternalAuthenticator/auth_example.asp000066600000002261150472616010020347 0ustar00<% @LANGUAGE="VBScript" %> <% Option Explicit %> <% ' Change this secret key so it matches the one in the imagemanager/filemanager config Private Const SECRET_KEY = "someSecretKey" Dim config, data, key, value ' Check if user is logged in here ' If Session("some_session") <> True Then ' Response.Write "You are not logged in." ' Response.End ' End If Set config = Server.CreateObject("Scripting.Dictionary") ' Override config values ' config("filesystem.path") = "c:/Inetpub/wwwroot/somepath" ' config("filesystem.rootpath") = "c:/Inetpub/wwwroot/somepath" ' Generate MD5 of config values data = "" For Each value In config.Items data = data & value Next key = MD5(data & SECRET_KEY) %>
        "> <% For Each key In config.Keys %> " value="<%= Server.HTMLEncode(config(key)) %>" /> <% Next %>
        imagemanager/plugins/ExternalAuthenticator/md5.asp000066600000030135150472616010016361 0ustar00<% ' Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm, ' as set out in the memo RFC1321. ' ' ' ASP VBScript code for generating an MD5 'digest' or 'signature' of a string. The ' MD5 algorithm is one of the industry standard methods for generating digital ' signatures. It is generically known as a digest, digital signature, one-way ' encryption, hash or checksum algorithm. A common use for MD5 is for password ' encryption as it is one-way in nature, that does not mean that your passwords ' are not free from a dictionary attack. ' ' This is 'free' software with the following restrictions: ' ' You may not redistribute this code as a 'sample' or 'demo'. However, you are free ' to use the source code in your own code, but you may not claim that you created ' the sample code. It is expressly forbidden to sell or profit from this source code ' other than by the knowledge gained or the enhanced value added by your own code. ' ' Use of this software is also done so at your own risk. The code is supplied as ' is without warranty or guarantee of any kind. ' ' Should you wish to commission some derivative work based on this code provided ' here, or any consultancy work, please do not hesitate to contact us. ' ' Web Site: http://www.frez.co.uk ' E-mail: sales@frez.co.uk Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30) Private m_l2Power(30) m_lOnBits(0) = CLng(1) m_lOnBits(1) = CLng(3) m_lOnBits(2) = CLng(7) m_lOnBits(3) = CLng(15) m_lOnBits(4) = CLng(31) m_lOnBits(5) = CLng(63) m_lOnBits(6) = CLng(127) m_lOnBits(7) = CLng(255) m_lOnBits(8) = CLng(511) m_lOnBits(9) = CLng(1023) m_lOnBits(10) = CLng(2047) m_lOnBits(11) = CLng(4095) m_lOnBits(12) = CLng(8191) m_lOnBits(13) = CLng(16383) m_lOnBits(14) = CLng(32767) m_lOnBits(15) = CLng(65535) m_lOnBits(16) = CLng(131071) m_lOnBits(17) = CLng(262143) m_lOnBits(18) = CLng(524287) m_lOnBits(19) = CLng(1048575) m_lOnBits(20) = CLng(2097151) m_lOnBits(21) = CLng(4194303) m_lOnBits(22) = CLng(8388607) m_lOnBits(23) = CLng(16777215) m_lOnBits(24) = CLng(33554431) m_lOnBits(25) = CLng(67108863) m_lOnBits(26) = CLng(134217727) m_lOnBits(27) = CLng(268435455) m_lOnBits(28) = CLng(536870911) m_lOnBits(29) = CLng(1073741823) m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1) m_l2Power(1) = CLng(2) m_l2Power(2) = CLng(4) m_l2Power(3) = CLng(8) m_l2Power(4) = CLng(16) m_l2Power(5) = CLng(32) m_l2Power(6) = CLng(64) m_l2Power(7) = CLng(128) m_l2Power(8) = CLng(256) m_l2Power(9) = CLng(512) m_l2Power(10) = CLng(1024) m_l2Power(11) = CLng(2048) m_l2Power(12) = CLng(4096) m_l2Power(13) = CLng(8192) m_l2Power(14) = CLng(16384) m_l2Power(15) = CLng(32768) m_l2Power(16) = CLng(65536) m_l2Power(17) = CLng(131072) m_l2Power(18) = CLng(262144) m_l2Power(19) = CLng(524288) m_l2Power(20) = CLng(1048576) m_l2Power(21) = CLng(2097152) m_l2Power(22) = CLng(4194304) m_l2Power(23) = CLng(8388608) m_l2Power(24) = CLng(16777216) m_l2Power(25) = CLng(33554432) m_l2Power(26) = CLng(67108864) m_l2Power(27) = CLng(134217728) m_l2Power(28) = CLng(268435456) m_l2Power(29) = CLng(536870912) m_l2Power(30) = CLng(1073741824) Private Function LShift(lValue, iShiftBits) If iShiftBits = 0 Then LShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lValue And m_l2Power(31 - iShiftBits)) Then LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 Else LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) End If End Function Private Function RShift(lValue, iShiftBits) If iShiftBits = 0 Then RShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And &H80000000 Then RShift = 1 Else RShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) If (lValue And &H80000000) Then RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) End If End Function Private Function RotateLeft(lValue, iShiftBits) RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) End Function Private Function AddUnsigned(lX, lY) Dim lX4 Dim lY4 Dim lX8 Dim lY8 Dim lResult lX8 = lX And &H80000000 lY8 = lY And &H80000000 lX4 = lX And &H40000000 lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 Else lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult = lResult Xor lX8 Xor lY8 End If AddUnsigned = lResult End Function Private Function F(x, y, z) F = (x And y) Or ((Not x) And z) End Function Private Function G(x, y, z) G = (x And z) Or (y And (Not z)) End Function Private Function H(x, y, z) H = (x Xor y Xor z) End Function Private Function I(x, y, z) I = (y Xor (x Or (Not z))) End Function Private Sub FF(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub GG(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub HH(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub II(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Function ConvertToWordArray(sMessage) Dim lMessageLength Dim lNumberOfWords Dim lWordArray() Dim lBytePosition Dim lByteCount Dim lWordCount Const MODULUS_BITS = 512 Const CONGRUENT_BITS = 448 lMessageLength = Len(sMessage) lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) ReDim lWordArray(lNumberOfWords - 1) lBytePosition = 0 lByteCount = 0 Do Until lByteCount >= lMessageLength lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) lByteCount = lByteCount + 1 Loop lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArray End Function Private Function WordToHex(lValue) Dim lByte Dim lCount For lCount = 0 To 3 lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) WordToHex = WordToHex & Right("0" & Hex(lByte), 2) Next End Function Public Function MD5(sMessage) Dim x Dim k Dim AA Dim BB Dim CC Dim DD Dim a Dim b Dim c Dim d Const S11 = 7 Const S12 = 12 Const S13 = 17 Const S14 = 22 Const S21 = 5 Const S22 = 9 Const S23 = 14 Const S24 = 20 Const S31 = 4 Const S32 = 11 Const S33 = 16 Const S34 = 23 Const S41 = 6 Const S42 = 10 Const S43 = 15 Const S44 = 21 x = ConvertToWordArray(sMessage) a = &H67452301 b = &HEFCDAB89 c = &H98BADCFE d = &H10325476 For k = 0 To UBound(x) Step 16 AA = a BB = b CC = c DD = d FF a, b, c, d, x(k + 0), S11, &HD76AA478 FF d, a, b, c, x(k + 1), S12, &HE8C7B756 FF c, d, a, b, x(k + 2), S13, &H242070DB FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE FF a, b, c, d, x(k + 4), S11, &HF57C0FAF FF d, a, b, c, x(k + 5), S12, &H4787C62A FF c, d, a, b, x(k + 6), S13, &HA8304613 FF b, c, d, a, x(k + 7), S14, &HFD469501 FF a, b, c, d, x(k + 8), S11, &H698098D8 FF d, a, b, c, x(k + 9), S12, &H8B44F7AF FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 FF b, c, d, a, x(k + 11), S14, &H895CD7BE FF a, b, c, d, x(k + 12), S11, &H6B901122 FF d, a, b, c, x(k + 13), S12, &HFD987193 FF c, d, a, b, x(k + 14), S13, &HA679438E FF b, c, d, a, x(k + 15), S14, &H49B40821 GG a, b, c, d, x(k + 1), S21, &HF61E2562 GG d, a, b, c, x(k + 6), S22, &HC040B340 GG c, d, a, b, x(k + 11), S23, &H265E5A51 GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA GG a, b, c, d, x(k + 5), S21, &HD62F105D GG d, a, b, c, x(k + 10), S22, &H2441453 GG c, d, a, b, x(k + 15), S23, &HD8A1E681 GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 GG d, a, b, c, x(k + 14), S22, &HC33707D6 GG c, d, a, b, x(k + 3), S23, &HF4D50D87 GG b, c, d, a, x(k + 8), S24, &H455A14ED GG a, b, c, d, x(k + 13), S21, &HA9E3E905 GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 GG c, d, a, b, x(k + 7), S23, &H676F02D9 GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A HH a, b, c, d, x(k + 5), S31, &HFFFA3942 HH d, a, b, c, x(k + 8), S32, &H8771F681 HH c, d, a, b, x(k + 11), S33, &H6D9D6122 HH b, c, d, a, x(k + 14), S34, &HFDE5380C HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 HH a, b, c, d, x(k + 13), S31, &H289B7EC6 HH d, a, b, c, x(k + 0), S32, &HEAA127FA HH c, d, a, b, x(k + 3), S33, &HD4EF3085 HH b, c, d, a, x(k + 6), S34, &H4881D05 HH a, b, c, d, x(k + 9), S31, &HD9D4D039 HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 HH b, c, d, a, x(k + 2), S34, &HC4AC5665 II a, b, c, d, x(k + 0), S41, &HF4292244 II d, a, b, c, x(k + 7), S42, &H432AFF97 II c, d, a, b, x(k + 14), S43, &HAB9423A7 II b, c, d, a, x(k + 5), S44, &HFC93A039 II a, b, c, d, x(k + 12), S41, &H655B59C3 II d, a, b, c, x(k + 3), S42, &H8F0CCC92 II c, d, a, b, x(k + 10), S43, &HFFEFF47D II b, c, d, a, x(k + 1), S44, &H85845DD1 II a, b, c, d, x(k + 8), S41, &H6FA87E4F II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 II c, d, a, b, x(k + 6), S43, &HA3014314 II b, c, d, a, x(k + 13), S44, &H4E0811A1 II a, b, c, d, x(k + 4), S41, &HF7537E82 II d, a, b, c, x(k + 11), S42, &HBD3AF235 II c, d, a, b, x(k + 2), S43, &H2AD7D2BB II b, c, d, a, x(k + 9), S44, &HEB86D391 a = AddUnsigned(a, AA) b = AddUnsigned(b, BB) c = AddUnsigned(c, CC) d = AddUnsigned(d, DD) Next MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) End Function %> imagemanager/plugins/ExternalAuthenticator/auth_example.jsp000066600000004772150472616010020371 0ustar00<%@page import="java.util.*" %> <% String key, secretKey, data = ""; // Change this secret key so it matches the one in the imagemanager/filemanager config secretKey = "someSecretKey"; // Check here if the user is logged in or not /* if (session.getAttribute("some_session") != "somevalue") { out.print("You are not logged in."); return; } */ // Override any config values here Hashtable configuration = new Hashtable(); //configuration.put("filesystem.path", "c:/Inetpub/wwwroot/somepath"); //configuration.put("filesystem.rootpath", "c:/Inetpub/wwwroot/somepath"); // Generates a unique key of the config values with the secret key for (Enumeration e = configuration.keys(); e.hasMoreElements(); ) data += configuration.get(e.nextElement()); key = md5(data + secretKey); %> <%! public String md5(String str) { try { java.security.MessageDigest md5 = java.security.MessageDigest.getInstance("MD5"); char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i=0; i': buff.append(">"); break; case '"': buff.append("""); break; case '&': buff.append("&"); break; default: buff.append(chr); } } return buff.toString(); } %>
        "> <% for (Enumeration e = configuration.keys(); e.hasMoreElements(); ) { key = (String) e.nextElement(); %> " value="<%= htmlEncode((String) configuration.get(key)) %>" /> <% } %>
        imagemanager/plugins/ExternalAuthenticator/auth_example.php000066600000001732150472616010020355 0ustar00
        $value) { echo ''; } ?>
        imagemanager/plugins/ExternalAuthenticator/auth_drupal.php000066600000002245150472616010020211 0ustar00uid; // Generates a unique key of the config values with the secret key $key = md5(implode('', array_values($config)) . $secretKey); ?>
        $value) { echo ''; } ?>
        imagemanager/plugins/WordpressAuthenticator/WordpressAuthenticator.php000066600000001436150472616010022633 0ustar00registerPlugin("WordpressAuthenticator", new Moxiecode_WordpressAuthenticator()); ?>imagemanager/changelog.txt000066600000057444150472616010011675 0ustar00Version 3.1.0.4 (2008-11-27) Fixed bug where the Flash uploader was compiled with debugging on. Fixed bug where downloading of files with spaces didn't work correctly. Fixed bug where it wouldn't load correctly correctly in old TinyMCE 2.x versions. Fixed bug where filter wouldn't be applied on IE when the user pressed enter. Fixed bug auto resizing of uploaded images would fail if the files where over 1MB. Version 3.1.0.3 (2008-11-20) Fixed bug where inline dialogs wasn't opened correctly when loading the product cross domain. Fixed bug where it was returning incorrect content-encoding headers. Fixed bug where the multiple upload feature didn't work correctly when * was used for the valid extensions settings. Fixed bug where language packs wasn't loading correctly when TinyMCE was compressed using the gzip compressor. Fixed bug where switching from ImageManager to FileManager would fail some times when used with TinyMCE. Version 3.1.0.2 (2008-11-13) Added new possibility to have a custom function for the imagemanager_insert_template option. Added new imagemanager_contextmenu option that enables you to disable the contextmenu addons for TinyMCE. Fixed bug where the combination of Google Gears and images larger then the chunk size would fail. Fixed bug where errors passed back from the server would be ignored by the Google gears implementation. Fixed bug where the file upload progress bar wasn't moving if upload errors occured. Fixed bug where domain relaxing didn't work when TinyMCE and the ImageManager was loaded from another domain. Fixed bug where the preview.urlprefix host wouldn't get applied correctly to output. Fixed bug where edit and view dialogs would be scrollable if the page was scrollable. Fixed bug where the resize tool would produce a move cursor in the edit dialog. Fixed bug where switching page size wouldn't take the user to the first page. Version 3.1.0.1 (2008-11-10) Fixed bug where it wasn't possible to override the preview.wwwroot and preview.urlprefix settings with mc_access files. Fixed bug with notice messages for missing items when using display_errors on. Fixed bug where it wasn't possible to load TinyMCE and the imagemanager plugin from another sub domain. Fixed bug where scrollbars wouldn't appear for native windows when used with TinyMCE. Fixed bug where it was impossible to enable remember_last_path by default. Fixed bug where the upload.chunk_size option didn't work correctly. Fixed bug where the onchange event wasn't fired as it was before when form items was changed by a browse call. Fixed bug where the category list and special folders list where separated by an odd margin in IE. Fixed so it's possible to see the current upload runtime when enablig the general.debug option. Version 3.1 (2008-11-06) Fixed bug where the toolbar would get a trailing focus rectangle on Gecko. Fixed bug with using the imagemanager on a non default http port. Fixed bug where the directory list wasn't refreshed if you using the refresh button. Fixed bug where progress of listing directories didn't work. Fixed bug where there could be a double scroll when you had to many directories. Fixed bug where sorting was incorrect on non Windows operating systems. Fixed bug where the ClientResources class would produce an error due to an invalid regexp. Fixed bug where IE would scroll the page down if you clicked the "basic upload" link. Fixed bug where single upload didn't work correctly. Fixed so all new integration callback functions have a file object. Version 3.1b2 (2008-10-30) Added new confirm message to edit dialog if the user didn't save the image before closing the dialog. Added new paging buttons and input. This new UI works better if you have a huge amount of images in one directory. Added new edit.format option. Enables you to update format images when you edit the original image. Added new filesystem.delete_format_images. Enables you to control if format images is to be deleted if the original is deleted. Added new disabled_tools js option enables you to disable specific tools from page level or TinyMCE. Added new tools js option enables you specify tools from page level or TinyMCE. Fixed bug where the first page size wasn't correct. It displayed one item less that expected. Fixed bug where it wasn't possible to override general.language using an external authenticator. Fixed bug an JS exception was thown when changing page, due to a call to preventDefault. Fixed bug where keepAlive handler was missing. It will not hit the backend each 5 minutes. Fixed bug where Gecko browsers would produce an traling focus border for toolbar items. Fixed bug where directory path would be on two lines if it was very long. Fixed bug where loading the xml resource files would break on some PHP installations. Fixed bug where add file action wasn't executed when multiple files where uploaded. Fixed bug where upload.format wasn't applied when multiple files where uploaded. Fixed bug where it wasn't possible to override path and rootpath settings from TinyMCE init. Fixed bug where rootpath names didn't work when specified in javascript options. Fixed bug where directory listing wasn't rooted if rootpath was specified using the javascript options. Fixed bug where the upload dialog produced a vertical scrollbar on IE. Fixed bug where images would be inserted to beginning of editor instances on IE. Fixed bug where scrolling of thumbnails didn't work correctly in IE. Fixed bug where singe file uploads wasn't working correctly. Fixed bug where native windows wasn't move to top. Fixed bug where upload with upper case extensions would fail. Fixed bug where filter input was case sensitive. Fixed bug where filter wouldn't move the user to the first page. Replaced upload.replace_diacritics with filesystem.clean_names. To make it more general and also take care of whitespace. Optimized file listing logic by 600%. The sorting was improved by sorting by the file names first and then creating file instances. Version 3.1b1 (2008-10-23) Added new multiple file upload uses Flash, Google Gears and Silverlight. Chunks large files by default. Added new API for client side plugin logic. You can now add menu items, dialogs and buttons from plugins. Added new resources.xml file for all themes and plugins. These are used to compress and concat js and css files. Added new support for live preview of resize, flip and rotate in image editor. Added new support for file and directory filtering from page level. Added new upload.replace_diacritics option. Replaces national characters like to aaou. Added new upload.multiple_upload option. Enables you to disable/enable this support. Added new upload.chunk_size option. Enables you to change the chunk size for each request. Added new support for cross sub domain usage by relaxing the document.domain field. Added new ImageManager context menu to the TinyMCE plugin. Enables you to edit and replace images more easily. Added new browse method to the mcImageManager.js file that replaces the old open method. Added new createDir method to the mcImageManager.js file. Enables you to open the create directory dialog directly from page. Added new createDoc method to the mcImageManager.js file. Enables you to open the create document dialog directly from page. Added new view method to the mcImageManager.js file. Enables you to open the view dialog directly from page. Added new upload method to the mcImageManager.js file. Enables you to open the upload dialog directly from page. Added new edit method to the mcImageManager.js file. Enables you to open the edit file dialog directly from page. Fixed so all dialogs adds a shim for the background items. Fixed so the mcimagemanager.js file is merged into the editor_plugin.js file to increase gzip compression. Fixed bug where the buttons in dialogs would look incorrect in FF 3. Fixed bug where it wouldn't display the input path in error message if it couldn't find a specific filesystem. Fixed bug where image rotation by 180 degrees didn't work correctly. Fixed bug where page size was one item more when the parent folder item was present. Fixed bug where it wasn't possible to override thumbnail settings using mc_access files. Optimized the LocalFileImpl class for speed particularly on Windows. Version 3.0.9.2 (2008-09-11) Fixed bug the default insert template didn't respect the TinyMCE url settings. Fixed bug where the an exception would be produced if you used the standalone mode on a page where TinyMCE was included but not loaded. Fixed bug with authenticators producing and error if they was overriding the filesystem.rootpath to a path not within the configured rootpath. Version 3.0.9.1 (2008-07-09) Fixed bug where Firefox 3 would produce an exception about empty id passed to getElementById. Fixed bug where Firefox 3 would produce an exception about window.console being undefined. Fixed bug where the insertimage command didn't work correctly if you didn't specify an template. Version 3.0.9 (2008-07-02) Added new support for adding multiple templates for the insertimage button. Fixed bug where loading the ImageManager on demand didn't load the language packs correctly. Fixed so it's not possible to open a hidden directory. It will automatically go to the parent of that dir. Fixed issue where it wouldn't setup an correct baseURL if the script was loaded dynamically. Version 3.0.8 (2008-04-29) Added possibility to load plugins from out side the ImageManager path. Fixed so plugin names are lowercase internally to avoid confusion. Fixed auto detection logic for the API base URL. It will now do this client side to avoid PHP bugs. Fixed bug where using the standalone integration on a page with TinyMCE without any editor instances would produce an error. Fixed so that the custom_data setting gets passed in as a parameter to the initial request for the index.php. Fixed so the SessionAuthenticator is enabled by default since people tend to miss adding any authentication. Version 3.0.7 (2008-03-20) Added missing support for WMV files in the view dialog. Fixed so the plugin info is displayed correctly in TinyMCE 3.0 about dialog. Fixed bug where cookies could be interpreted as input parameters. Version 3.0.6.1 (2008-02-21) Fixed compatibility issue with the TinyMCE gzip compressor. Fixed bug where the FileManager didn't work if the inlinepopups wasn't used in TinyMCE 3. Version 3.0.6 (2008-02-21) Added support for loading the TinyMCE plugin from an external location. Added support for inlinepopups if used with TinyMCE 3.x. Added detection for proxies that doesn't support non encoded HTTP posts. Added support for ${user} replacement variable for the JoomlaAuthenticator class. Added new insert_filter option enabled you to filter data passed back from IM before it's inserted. Fixed bug where the thumbnail directory wasn't deleted if all images was deleted. Fixed bug where scaling of images proportional sometimes would produce larger images than the specified max width/height. Fixed bug where loading non english language packs for the TinyMCE insertimage icon didn't work. Fixed bug where an empty value for the general.plugins option would produce errors. Fixed so the getSiteRoot will use the script_name instead of document_root. Version 3.0.5 (2007-11-22) Added new imagemanager_handle option to the TinyMCE editor plugin. Fixed compatibility with the TinyMCE 3.0b1 API. Removed all deprecated =& new statements from the PHP code to reduce notices. Fixed bug where reverting an image after editing didn't work properly. Fixed bug where comparison with null didn't work in new version of PHP 5.2.3. Fixed bug where caret focus on edit image sometimes wasn't possible due to IE7 bug. Fixed security issue thanks to a report from Michel Weimerskirch. Version 3.0.4 (2007-11-02) Added new upload.format option. Enables you to auto resize a image to multiple dimensions and formats. Added new ExternalAuthenticator.session_prefix option to ExternalAuthenticator to separate sessions. Added new ExternalAuthenticator.use_cookie option. This will create a cookie based on the session_prefix. Added new compatibility with TinyMCE 3.x. Fixed so that the external authentication page is runned each time the ImageManager opens. Fixed bug where filesystem.force_directory_template didn't work correctly. Fixed bug where general.disabled_tools didn't work for the edit menu. Fixed various issues with the jpeg file extension. Fixed issue where it was impossible to select a file if a user switched from IM to FM but only included one of them in the page. Version 3.0.3 (2007-08-21) Added new external authenticator enables you to authenticate between backend and cross domains. Added new asp and jsp example authentication pages for the external authenticator. Added new non flash upload que since the flash uploader was to buggy. Fixed bug compatibility issues with older TinyMCE gzip compressors like the one in Wordpress. Fixed bug where custom insert callback functions also execured default logic. Fixed some issues with symlinks, they where not resolved when used in JS init calls. Fixed issue with the need to have index.php as the default document. Fixed bug where the mcFileManager.init call didn't work as expected. Fixed so the upload.use_flash is now set to false by default. Version 3.0.2 (2007-06-20) Added new logging options, enables you to specify level, format, rotation, max size. Added cancel buttons to all dialogs for usability reasons. Added new config_prefix option to the SessionAuthenticator class, enables you to override any config option with a session. Fixed so that all dialogs are closed when a operation is completed successfully. Fixed so the template selection box gets removed if no templates are specified. Fixed so the dialogs will open more nicely, less visual maniplulation. Fixed so the parent directory icons has an arrow for usability reasons. Fixed so filter also filters folders in the folder listing to the left. Fixed so images get refreshed in cache when edited. Fixed so URL convertion logic is executed before custom callbacks. Fixed so the element names can be element id's in a mcImageManager.open call. Fixed so bit depth on PNG images are maintained while editing or generating thumbnails. Fixed some issues with the JoomlaAuthenticator, it now works in a multisite environment. Fixed bug where edit button wasn't removed from view image if you can't edit the image. Fixed bug where really long directory listings could make the background image wrap. Fixed bug where the imagemanager wasn't loading correctly if it was compressed using the TinyMCE Gzip compressor. Fixed bug where flip image produced a extra horizontal/vertical black line. Fixed issue with filemanager.urlprefix not working due to invalid config options. Fixed problem with the text not being centered on parent directory thumbnails. Fixed bug where the animation of the fading menus didn't finish correctly some times. Version 3.0.1 (2007-05-21) Added new upload.use_flash option, enables you to disable the flash uploader. Added new use_url_path JS integration option. Added new use path from url functionalty. Fixed problem with error reporting in PHP 5.x+. Fixed bug where the gzip compression failed if the accept encoding headers where missing. Fixed bug with preview.wwwroot not working correctly. Fixed bug with message "path not allowed", some installations use symlinks for their wwwroot. Fixed bug where it was sometimes resolved the URL to the js dir wrong in some PHP installations. Fixed issue where the remember_last_path feature remembered favorites and history as well. Fixed issues with very old PHP installations that doesn't have file_get_contents. Fixed issue with IE producing warning message if it was loaded over HTTPS. Version 3.0 (2007-05-15) Moved the general.login_page option to authenticator.login_page. Added new _Template plugin, this is a example plugin. Added better support for national characters like in filenames. Fixed so that you can change the default file system impelementation. Version 3.0b3 (2007-05-10) Added new CustomInfoExample plugin. Displays how to inject custom file information. Added new include/exclude/extensions config options for stream section. Added better error handling when loading XML language packs. Added missing language items for add file(s) in flash upload dialog. Added fallback JSON RPC method when Apache is configured with mod_security. Added more rapid demo mode response. It only ask the server once. Fixed so upload button is disabled until the user selects a file. Fixed so next/prev buttons in view mode are disabled when there is no more files in a direction. Fixed bug where it wasn't possible to disable the delete and edit tools in view image dialog. Fixed bug where non english language packs where loaded twice. Fixed bug where utf-8 encodings of language packs didn't work correctly. Fixed bug where relative path didn't work for the filesystem.rootpath config option. Fixed so the translation of the page is faster, so it doesn't flicker. Renamed all "directory" to "folder" in the English language pack. Version 3.0b2 (2007-05-04) Private beta released to selected customers. Version 3.0b1 (2007-04-13) First beta release of the complete rewrite of the ImageManager PHP. Version 2.0 (2006-02-22) Fixed an issue with the logger, a warning was displayed when no logfile was found, removed. Fixed an issue with image editing, if nothing was selected and the crop/resize icon was pressed. Fixed so the MCImageManager is a plugin for TinyMCE, makes the installation process easier. Fixed issue with parsing of the XML language packs in latest PHP versions. Fixed bug where valid extensions wasn't presented correctly in the upload form. Fixed bug where mc_access files wasn't working correctly under Windows. Fixed an issue with upload.php, thumbnails wasn't generated properly. Fixed issue where input URL was ignored if the remember_last_path option was enabled. Fixed lots of various bugs and issues. Changed some interface elements, using Ajax to get image info and delete images. Cleaned up JavaScript in some templates, moved to external files. Added better error checking and messages. Added new JoomlaAuthenticatorImpl, example config and documentation. Added new WordpressAuthenticatorImpl, example config and documentation. Added new DrupalAuthenticatorImpl, example config and documentation. Added new alert message when imagemanager popups is getting blocked by popup blockers. Added two strings to language pack, "error_selection" and "error_resize", an error message when input data to function is bad. Added new WordpressAuthenicatorImpl for integration with Wordpress 2.0. Added new DrupalAuthenicatorImpl for integration with Drupal CMS. Added new PHPNukeAuthenicatorImpl for integration with PHPNuke. Added new not_loggedin.php file, this can be used to present a error message when the user session was lost. Added more language packs, can't remember all the names (currently supports de, en, fs, ja_utf-8, nb, nn, no, sv). Added German language pack contributed by Markus Vetten. Added French language pack contributed by Olivier Gaillot. Removed status.php, was outdated and not very helpfull. Version 1.9 (2005-10-26) Fixed an issue with the language pack array merge in general.php Fixed issue with short_open_tag = "Off", replaced all 7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;;(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings);};$scrollTo.defaults={axis:'y',duration:1};$scrollTo.window=function(scope){return $(window).scrollable();};$.fn.scrollable=function(){return this.map(function(){var win=this.parentWindow||this.defaultView,elem=this.nodeName=='#document'?win.frameElement||win:this,doc=elem.contentDocument||(elem.contentWindow||elem).document,isWin=elem.setInterval;return elem.nodeName=='IFRAME'||isWin&&$.browser.safari?doc.body:isWin?doc.documentElement:this;});};$.fn.scrollTo=function(target,duration,settings){if(typeof duration=='object'){settings=duration;duration=0;}if(typeof settings=='function')settings={onAfter:settings};settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&&settings.axis.length>1;if(settings.queue)duration/=2;settings.offset=both(settings.offset);settings.over=both(settings.over);return this.scrollable().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case 'number':case 'string':if( /^([+-]=)?\d+(px)?$/.test(targ)){targ=both(targ);break;}targ=$(targ,this);case 'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset();}$.each(settings.axis.split(''),function(i,axis){var Pos=axis=='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,old=elem[key],Dim=axis=='x'?'Width':'Height',dim=Dim.toLowerCase();if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos))||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'))||0;}attr[key]+=settings.offset[pos]||0;if(settings.over[pos])attr[key]+=targ[dim]()* settings.over[pos];}else attr[key]=targ[pos];if( /^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max(Dim));if(!i&&settings.queue){if(old!=attr[key])animate(settings.onAfterFirst);delete attr[key];}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&&function(){callback.call(this,target,settings);});};function max(Dim){var attr='scroll'+Dim,doc=elem.ownerDocument;return win?Math.max(doc.documentElement[attr],doc.body[attr]):elem[attr];};}).end();};function both(val){return typeof val=='object'?val:{top:val,left:val};};})(jQuery);(function($){var id=0;$.multiUpload=function(s){var up=this,mul;up.id=up.generateID();up.settings={};up.settings=s=$.extend(up.settings,s);if(s.max_size)s.max_size=up.parseSize(s.max_size);if(s.chunk_size)s.chunk_size=up.parseSize(s.chunk_size);if(s.oninit){$(up).bind('multiUpload:init',function(){s.oninit.call(up,up);});}up.init();$(['setup','filesSelected','fileProgress','filesProgress','filesUploaded','fileUploaded','fileUploadProgress']).each(function(){if(s[(this)])$(up).bind('multiUpload:'+this,s[(this)]);});$(up).trigger('multiUpload:setup');$(up).bind('multiUpload:selectFiles',function(){this.cache={};});$(up).bind('multiUpload:filesSelected',function(e,fs){var mx=up.settings.max_size;function filter(f){var m= /\.([^.]+)$/.exec(f.name.toLowerCase()),ext=m?m[1]:null;return ext&&$.inArray(ext,s.filter)!=-1&&(!mx||f.size1048576)return Math.round(v/1048576,1)+" MB";if(v>1024)return Math.round(v/1024,1)+" KB";return v+" b";},generateID:function(){return 'u'+(id++);},parseSize:function(sz){var mul;if(typeof(sz)=='string'){sz= /^([0-9]+)([mk]+)$/.exec(sz.toLowerCase().replace(/[^0-9mk]/g,''));mul=sz[2];sz=parseInt(sz[1]);if(mul=='m')sz *=1048576;if(mul=='k')sz *=1024;}return sz;}});$.extend($.multiUpload,{instances:{},create:function(s){return this.add(new $.multiUpload(s));},remove:function(id){if(this.get(id))delete this.instances[id];},add:function(up){return this.instances[up.id]=up;},get:function(id){return this.instances[id];}});})(jQuery);(function($){if(!$.multiUpload.initialized&&window.google&&google.gears){$.multiUpload.initialized=1;$.multiUpload.runtime='gears';$.extend($.multiUpload.prototype,{init:function(){var up=this;$(up).trigger('multiUpload:init');$(up).bind('multiUpload:selectFiles',function(e){var up=this,desk=google.gears.factory.create('beta.desktop'),s={};if(up.settings.filter[0]!='*')s.filter=$.map(up.settings.filter,function(v){return '.'+v});desk.openFiles(function(f){var sf=[];if(f.length){up._fireEvent('multiUpload:beforeFilesSelected');$(f).each(function(){var fo={id:up.generateID(),name:this.name,blob:this.blob,size:this.blob.length,loaded:0};up.files.push(fo);sf.push(fo);});up._fireEvent('multiUpload:filesSelected',[{files:sf}]);up._fireEvent('multiUpload:filesChanged');}else up._fireEvent('multiUpload:filesSelectionCancelled');},s);});$(up).bind('multiUpload:uploadFile',function(e,fo){var req,up=this,chunkSize,chunk=0,chunks,i,start,loaded=0,curChunkSize;chunkSize=up.settings.chunk_size||1024 * 1024;chunks=Math.ceil(fo.blob.length/chunkSize);uploadNextChunk();function uploadNextChunk(){var url=up.settings.upload_url;if(fo.status)return;curChunkSize=Math.min(chunkSize,fo.blob.length-(chunk * chunkSize));req=google.gears.factory.create('beta.httprequest');req.open('POST',url+(url.indexOf('?')==-1?'?':'&')+'name='+escape(fo.name)+'&chunk='+chunk+'&chunks='+chunks+'&path='+escape(up.settings.path));req.setRequestHeader('Content-Disposition','attachment; filename="'+fo.name+'"');req.setRequestHeader('Content-Type','application/octet-stream');req.setRequestHeader('Content-Range','bytes '+chunk * chunkSize);req.upload.onprogress=function(pr){fo.loaded=loaded+pr.loaded;up._fireEvent('multiUpload:fileUploadProgress',[{file:fo,loaded:fo.loaded,total:fo.size}]);};req.onreadystatechange=function(){var ar;if(req.readyState==4){if(req.status==200){ar={file:fo,chunk:chunk,chunks:chunks,response:req.responseText};up._fireEvent('multiUpload:chunkUploaded',[ar]);if(ar.cancel){fo.status='failed';up._fireEvent('multiUpload:filesChanged');up.uploadNext();return;}loaded+=curChunkSize;if(++chunk>=chunks){fo.status='completed';up._fireEvent('multiUpload:fileUploaded',[{file:fo,response:req.responseText}]);up._fireEvent('multiUpload:filesChanged');up.uploadNext();}else uploadNextChunk();}else up._fireEvent('multiUpload:uploadChunkError',[{file:fo,chunk:chunk,chunks:chunks,error:'Status: '+req.status}]);}};if(chunk=10){$.multiUpload.initialized=1;$.multiUpload.runtime='flash';$.multiUpload.instances=[];$.multiUpload._fireEvent=function(na,p1,p2,p3,p4){window.setTimeout(function(){$($.multiUpload.instances).each(function(i,v){$(v).trigger('multiUpload:'+na,[p1,p2,p3,p4]);v.repaint();});},0);};$.extend($.multiUpload.prototype,{getFlash:function(){return $('#flashuploader')[0];},repaint:function(){var up=this,fb=$(up.settings.flash_browse_button),off=fb.offset();up.flashContainer.css({position:'absolute',top:off.top,left:off.left,width:fb.width(),height:fb.height(),backgr2ound:'red'});},init:function(){var up=this,s=up.settings,so,fb;$.multiUpload.instances.push(up);$(up).bind('multiUpload:flashInit',function(e){$(up).trigger('multiUpload:init');});$(document.body).append('
        ');so=new SWFObject("js/jquery/jquery.multiupload.flash.swf","flashuploader","100%","100%","10.0");so.addVariable("file_filter",$.map(up.settings.filter,function(v){return '*.'+v}).join(';'));so.addParam("wmode","transparent");so.write("flashUploaderContainer");up.flashContainer=$('#flashUploaderContainer');$(function(e){up.repaint();});up.repaint();$(up).bind('multiUpload:flashSelectFiles',function(e,sel){$(sel).each(function(i,fo){up.files.push(fo);});$(up).trigger('multiUpload:filesSelected',[{files:sel}]);$(up).trigger('multiUpload:filesChanged');});$(up).bind('multiUpload:flashUploadComplete',function(e,o){var fo;if(fo=up.getFile(o.id)){if(!fo.status){fo.status='completed';$(up).trigger('multiUpload:fileUploaded',[{file:fo,response:o.text}]);}}$(up).trigger('multiUpload:filesChanged');up.uploadNext();});$(up).bind('multiUpload:flashUploadProcess',function(e,pr){var fo=up.getFile(pr.id);if(!fo.status){fo.loaded=pr.loaded;$(up).trigger('multiUpload:fileUploadProgress',[{file:fo,loaded:fo.loaded,total:fo.size}]);}});$(up).bind('multiUpload:flashIOError',function(e,o){var fo;if(fo=up.getFile(o.id)){if(!fo.status){fo.status='failed';$(up).trigger('multiUpload:uploadChunkError',[{file:fo,error:o.message}]);}}});$(up).bind('multiUpload:stopUpload',function(e){up.getFlash().cancelUpload();});$(up).bind('multiUpload:removeFile',function(e,fo){up.getFlash().removeFile(fo.id);});$(up).bind('multiUpload:clearFiles',function(e){up.getFlash().clearFiles();});$(up).bind('multiUpload:uploadFile',function(e,fo){var pageURL=document.location.href.replace(/\/[^\/]+$/g,'/');up.getFlash().uploadFile(fo.id,{upload_url:pageURL+up.settings.upload_url+'&path='+escape(up.settings.path)+'&name='+escape(fo.name),chunk_size:up.settings.chunk_size,file_field:'file0',post_args:{name0:fo.name}});});$(up).bind('multiUpload:flashUploadChunkComplete',function(e,o){var fo=up.getFile(o.id),arg;arg={file:fo,chunk:o.chunk,chunks:o.chunks,response:o.text};if(!fo.status)$(up).trigger('multiUpload:chunkUploaded',[arg]);if(arg.cancel){fo.status='failed';up.getFlash().cancelUpload();}});}});}})(jQuery); function onSilverlightError(sender,args){alert("onSilverlightError: "+args.errormessage);};(function($){function isInstalled(version){var isVersionSupported=false;var container=null;try{var control=null;try{control=new ActiveXObject('AgControl.AgControl');if(version==null)isVersionSupported=true;else if(control.IsVersionSupported(version))isVersionSupported=true;control=null;}catch(e){var plugin=navigator.plugins["Silverlight Plug-In"];if(plugin){if(version===null){isVersionSupported=true;}else{var actualVer=plugin.description;if(actualVer==="1.0.30226.2")actualVer="2.0.30226.2";var actualVerArray=actualVer.split(".");while(actualVerArray.length>3)actualVerArray.pop();while(actualVerArray.length<4)actualVerArray.push(0);var reqVerArray=version.split(".");while(reqVerArray.length>4)reqVerArray.pop();var requiredVersionPart,actualVersionPart,index=0;do{requiredVersionPart=parseInt(reqVerArray[index]);actualVersionPart=parseInt(actualVerArray[index]);index++;}while(index'+''+'');}$(up).bind('multiUpload:slSelectFile',function(e,id,na,sz){var fo={id:id,name:na,size:sz,loaded:0};sel.push(fo);up.files.push(fo);});$(up).bind('multiUpload:slSelectSuccessful',function(){$(up).trigger('multiUpload:filesSelected',[{files:sel}]);$(up).trigger('multiUpload:filesChanged');sel=[];});$(up).bind('multiUpload:slSelectCancelled',function(){$(up).trigger('multiUpload:filesSelectionCancelled',[sel]);sel=[];});$(up).bind('multiUpload:slUploadFileProgress',function(e,id,lod,tot){var file=up.getFile(id);file.loaded=lod;$(up).trigger('multiUpload:fileUploadProgress',[{file:file,loaded:lod,total:tot}]);});$(up).bind('multiUpload:slUploadSuccessful',function(e,id,resp){var fo;if(fo=up.getFile(id)){if(!fo.status){fo.status="completed";$(up).trigger('multiUpload:fileUploaded',[{file:fo,response:resp}]);}}$(up).trigger('multiUpload:filesChanged');up.uploadNext();});$(up).bind('multiUpload:stopUpload',function(e){$.multiUpload.plugin.CancelUpload();});$(up).bind('multiUpload:slUploadChunkSuccessful',function(e,id,chunk,chunks,resp){var fo=up.getFile(id),ar={file:fo,chunk:chunk,chunks:chunks,response:resp};$(up).trigger('multiUpload:chunkUploaded',[ar]);if(ar.cancel){fo.status="failed";$.multiUpload.plugin.CancelUpload();}});$(up).bind('multiUpload:slUploadChunkError',function(e,id,chunk,chunks,err){$(up).trigger('multiUpload:uploadChunkError',[{file:up.getFile(id),chunk:chunk,chunks:chunks,error:err}]);});$(up).bind('multiUpload:selectFiles',function(e){$.multiUpload.plugin.SelectFiles('Files |'+$.map(up.settings.filter,function(v){return '*.'+v}).join(';'));});$(up).bind('multiUpload:removeFile',function(e,fo){$.multiUpload.plugin.RemoveFile(fo.id);});$(up).bind('multiUpload:uploadFile',function(e,fo){$.multiUpload.plugin.UploadFile(fo.id,up.settings.upload_url+'&name='+escape(fo.name)+"&path="+escape(up.settings.path),parseInt(up.settings.chunk_size));});$(up).bind('multiUpload:clearFiles',function(e){$.multiUpload.plugin.ClearFiles();});}});}})(jQuery);(function($){window.UploadDialog={currentWin:$.WindowManager.find(window),init:function(){var t=this,args;t.args=args=$.extend({path:'{default}',visual_path:'/'},t.currentWin.getArgs());t.fileListTpl=$.templateFromScript('#filelist_item_template');$('.uploadtype').html($.translate('{#upload.basic_upload}',0,{a:'','/a':''}));$('#createin').html(args.visual_path);$('form input[name=path]').val(args.path);$('form input[name=file0]').change(function(e){$('form input[name=name0]').val(t.cleanName(/([^\/\\]+)$/.exec(e.target.value)[0].replace(/\.[^\.]+$/,'')));});$('form').submit(function(){$.WindowManager.showProgress({message:$.translate('{#upload.progress}')});});if(document.location.hostname!=document.domain)$('form input[name=domain]').val(document.domain);t.path=args.path;$('#singleupload').click(function(e){$('#multiupload_view').hide();$('#singleupload_view').show();});RPC.exec('im.getConfig',{path:args.path},function(data){var config=data.result,maxSize,upExt,fsExt,outExt=[],i,x,found;maxSize=config['upload.maxsize'];fsExt=config['filesystem.extensions'].split(',');upExt=config['upload.extensions'].split(',');t.debug=config['general.debug']=="true";t.shouldCleanNames=config['filesystem.clean_names']=="true";t.chunkSize=config['upload.chunk_size']||'1mb';$('#content').show();if($.multiUpload.initialized)$('#multiupload_view').show();else $('#singleupload_view').show();if(config['upload.multiple_upload']!="true"){$('#multiupload_view').hide();$('#singleupload_view').show();}maxSize=maxSize.replace(/\s+/,'');maxSize=maxSize.replace(/([0-9]+)/g,'$1 ');if(upExt[0]=='*')upExt=fsExt;if(fsExt[0]=='*')fsExt=upExt;for(i=0;i');inp=$('#rename').val(parts[1]);t.renameEnabled=1;inp.focus().blur(function(){t.endRename();}).keydown(function(e){var c=e.keyCode;if(c==13||c==27){if(c==13){fo.name=t.cleanName(inp.val())+parts[2];a.html(fo.name);}t.endRename();}});}e.preventDefault();return false;});});up.settings.flash_browse_button='#addmore';up.repaint();$('#filelist')[0].scrollTop=0;});$(up).bind('multiUpload:fileUploaded',function(e,o){$('#'+o.file.id).removeClass('failed').addClass('done');});$(up).bind('multiUpload:filesChanged',function(){calc(up);up.repaint();t.endRename();});$(up).bind('multiUpload:fileUploadProgress',function(e,pr){if(up.status){if(!pr.file.scroll){$('#filelist').scrollTo($('#'+pr.file.id),50);pr.file.scroll=1;}$('#'+pr.file.id+' td.status').html(Math.round(pr.loaded/pr.total * 100.0)+'%');calc(up);}});$(up).bind('multiUpload:chunkUploaded',function(e,o){var res=$.parseJSON(o.response),data=RPC.toArray(res.result);if(data[0]["status"]!='OK'){o.file.loaded=o.file.size;calc(up);$('#'+o.file.id).addClass('failed');$('#'+o.file.id+' td.status').html($.translate(data[0]["message"]));o.cancel=1;}});$(up).bind('multiUpload:uploadChunkError',function(e,o){$('#'+o.file.id).addClass('failed');$('#'+o.file.id+' td.status').html('Failed').attr('title',o.error);});$('#add, #addmore').click(function(e){up.selectFiles();e.preventDefault();return false;});$('#abortupload').click(function(e){up.stopUpload();$.WindowManager.info($.translate('{#upload.cancelled}'),function(){t.currentWin.close();});});$('#uploadstart').click(function(e){$('#uploadstart').parent().hide();$('#status').show();$('#statsrow').hide();$('#files .status').html('-');$('#files .fname a').addClass('disabled');startTime=new Date().getTime();up.startUpload();e.preventDefault();return false;});$('#uploadstop').click(function(e){up.stopUpload();e.preventDefault();return false;});$('#clear').click(function(e){up.clearFiles();$('#files').hide();$('#files tbody').html('');e.preventDefault();return false;});},insertFiles:function(pa){var s=this.currentWin.getArgs();if(s.onupload){RPC.insertFiles({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,paths:pa,insert_filter:s.insert_filter,oninsert:function(o){s.onupload(o);}});}},isDemo:function(){if(this.currentWin.getArgs().is_demo){$.WindowManager.info($.translate('{#error.demo}'));return true;}},endRename:function(){if(this.renameEnabled){$('#files input').remove();$('#files a').show();this.renameEnabled=0;}}};window.handleJSON=function(data){window.focus();UploadDialog.handleSingleUploadResponse(data);};$(function(e){UploadDialog.init();});})(jQuery);imagemanager/js/_cache/im_upload.gz000066600000021304150472616010013320 0ustar00}v۸(lIhZrn)LNI^tFա$fY> Nz9ӧEBP ,6Y%+F *Z͓+,Ibqxȿݦ"ߤ2L;p'M7k,:C7\ 7XD+1ݭn!J`;܉8<).mMm|vS ?mxvHׇ12FQ_2-Na,ϣ |v*Bh/Yy #+\Ok\d6KY*ױ7J.*³ce8 Uy":;ύJC=HJ|h#Vs`:2j z޵|`aI-ז| OZ\N!ds1KV3΃`[ˢEHΫKV[<+(*w7 >de2@/IߋޕwM{3oԛM~&! =a\tv^ק'xIbȡEf֐`hJ2{y#]KI Zq>+*`fp0he4 Q'&b6TP]-,hBy#L4q rA3q#ԥH3+C ޽*?yڬ@C`yrUq,"h2ZZlZᡖ @wxXC/?F.Wq΃<LY/pTd[!؄FydLf3}1a 'P]G>?ᮨE60|n¸D?bvݘMZiӍ(-!?)>,7,Bhv 0$u Y~>kV*G dKI_~c`Y(;7g lNc$l~ v X&]aݽ"ޮJ&R@i(r*Zk*Ov.KqD@YkY-`lWP:`-Һ0(9v]c%ZCU7:Ѽ l\Ȓbj1E'eL"YrDx!n(lf5%gPjLmT\+g<?d_(Z2zb>s1Qe7w髟>zɫ~8O?=z㇏aQ{d)Z%N227ł21͕Jp!x$⾢^S-nE1h-#h٫4*Yɓ^FiW~ϯ=zޓcSד@Aw5P\mt|NMkO;I<µh육=ꍙ`3v;\zۗJAh*. [,Z/_\FFlqz,A=AlL1BBy 8৊>$G AٙmE&tv~{[9$dH9D|&?+?>fʦkCNQFVjaʥ4Ec}ϓEZ A@Zi4K2Ky"\mP-"hO7ó_َOciJ?p%/pdyUv(- 1Uwee'* ֤9,44LK0y,2M $7N <g/yeň'{ a[LpY܅;l`˹_I+NAl9c TlDzCK  w,h3[MCGSz\$?&5P@7ߤL0řBtuv`E,e-}dd-4w( Z҉pT4 T}7oHĕ'`p Sm<MJ- B6ajrz%:f\uETp{-TB*7(z_^۷B p10f@Z٥$ [' ޞ8ݭ TPC}A تOՅdrFR솺˹yu3SwnoU%@!ƻV2\~=<(*+GE^t,LܩGU(*P PU rvs x@(s|{(D6Pv+gۺY,"7:rFݣq4:k#A4pGT!- qc T81d,Py m+5̿wIY,wc5TA'?'W"=׻7bwK9iʽy|#J2NT0 I"<q9ySj$K`I2y'62t"]7>M9>w倸N9'Ƥś6b?#`qA9 1TrDNE~z􀍿9 #cGUPrU sa ٛ(rtVb0xbcU)2c.LӌrDX zᡡ#TxR+ &B#~Zܡ0J*,, iǞ2]h3zY@" ƲpXKAQa^`'bP8״s/`?3d퍨Xǘ l>(EHy*| ArA}{#3ve $ UKd RFe֢{8cz\jb(cu)pOՙ`NZ[uk4쯥 & #4z*{~x#Ld*Xy}':-NN-; 47v ./RoX  (}.g0T}ѿyC#ȾNC@}(s( K@򨨸't6 L9a⳧D!Ը7O\+3,ߤ x<"E%CQd2f"kl?]QgUI 5bȤ|tB#q$<)tԆcG)_>ݮM'<aT]U*ȠduS?Xc2w SGlde=( ,+)ږ}B<- ,LwLoru@KBx!2_˰VSw Kq:wJ-`(Q{`?qJ`F1#%P SX%Bw8Z Nz=w&0r"b*/a نQఢ"NJrEV M,rR~<UY\Ws7ƀ4U: ګNMu&Ik, 8QH Lr 4dmU>k I\zaZX6PkxOqXWuq9#V :{< .ͣrҵn3miZ]E4B]P~^rs9 y :aL-N+ Z5^*GoW|!xK A h#Qfo?hJ$ '5։Q>,a~5bR%Hu[)_'kgogjMГ HI1Bķ8q.ƺ{]BΠ7'ۆ~Ljͧ*trkHYgn꾾E[reVn&.k˾0}E'n'Æ.6q C-E4_Obi?Au8Chaҙ/e"c-m1齃^[heՔ]{tW?{,~὘r_ԓ$UBݻ[ݵZ*mGm9b*~:vfo-Hɴɍ4"hhJ8a:<73o5 w%wQ:{8YmRyKrp_)?&g6ȳsSC~ 쭼(b: pC|2(?c Pa.ޤɒ Y}ݓ' Ktl nanBL'WMiE =og!9x&\^Z*57ͳC@ΥNs1JuIycGU;jG$cX1qVH~!(p{L5pJ)9ɦ;f?}2Ύ / RpR$}1qHGRw n(S%)(R+p[%R0 b4_x23RmCæybM $~y03\ -bXݽ$O-$7'84w-Ywұ zwя(,VOcC%H왴*hP4êť-Pas9.rԕHaȜ"BJw:S +:0\LI| 87 v<7Cf(YmeS8 NP]tCI6N=.o4pȩNw eŵq;GF: ^ iQ^i!,]Ѻ|txYS,bOTM*ckLCk`fB6{[Eġ~+(/Wm0q7Lj.{lt/avÒpֹHLÃ;36uН"{.zE-g4ޤexO H qpUc,Xw,oo)iu*hEit.y2FޠҼUA+}Dx@.2I]=T[xK\}kkn3-!RY)O+JVCWMaU'hܦÃ%Nyh̪B1O145<[n ͕RF01@ۯN-mÛqT0 3P4x^ B!}XF~&&=(ѩ414Yc0seOIؿ\^y_xpOCr>'MP0\fG&S= [/jH0ڬ9f쓻cg:/Gvv:՗6C9MŐ'G cnGSc}b~:)Leu\ݢ2â I1 P-QLÌVPA4o>IYSzE6Xr Kx $j{ыWV~Q6b Τ!Pm^u/O_äW>'nśt]%P7~}6OzPl2$n6_<+~{H@UJ~j *[snd㋡L&Bb7eK{E+g%w\`D?3{Nt2 U2c?5ːZkH_OXtql1=X57 xrUh\!L?W7H/̓~/VlM띦-uUDŽLcve]^~EkY;ц(thԛ›V78֨>u$ 7r6ho6†In qqkl z=Goݮi0ͯ lS cƢ -PE;{f. mb63֎oH3 ge[k3['lu%l&b^c&n ~Û nli`4ns7py@M l`8c̝hcMDҭt`DF*! CCcN4+a=Q.]םÁvɟawi^_D_ITdZ8.)A}.Vuz5ax=:6eb 07nC9usln}4E( 3 aTVQ&/Oͤ:i8.~K܁'6&zs_.'tEfi (D/KWn<vr w50' 4"?Ug+bc}=L,8tE1$~jڢ@e ##8q{:P\&sZH 8^X-N9rbɠ@fxjXcmM{s9mV&d1+gg|"%GFF^%_C۫$79SéGiBVduf^c1mN^erheYF+ 1L5P?V7EzUf,c8tzM=,+;:xp';C$2`UiOP&-.h\$v[%+9ρ Ԥ~uk>40=3/O('D5=I~L ~ִ>t#-NwLO+%j@gWYQ<6ZzdM-#Q|eȖ&3lDZjN\@rqst,1[LbaS% q!Ribz6M`A?UEJXٝ^DҀV;|4Bi_X0(T7{TWlyLHJl%YĦP1qOxKΩd0&F)B;`B\pLrq3|PdjN;Eev'<"mA rd'o Orhj⨚B -*#Np`1# ͌h; Oٲ j%!f"$ʝ XA>"6* ?P+@ |Nׯ!zg^8uT,sr-``9+V?DndN73ۍKTeu&i`p+f^TBJjI0 +3yElcuy!$I2p?{%&/aosEPPC@t;Q S<`r "Li J0^Ȩ.fmczL *)0ˎncF} 6n.v֚Х:?1DaƄO ^i %vmsQLEǞU<o7gL&EE7-8 *&N9i^#Kw`P*R䙀:ջ]|ZIȩtm+Ę(}7X"V'|c$&xh1g%`Fo{E &wԾ,\kdIFK I=fǯiא.<$e;-Ԑ.nA+t. iN~c,aZ"^x9]!Vs:lY<5Tw)e›rb` ïX%  cѴ #Lu +:{O*˗[N#z}BTv 6lM.XIVN̛"Y@h)XMgUҦ] #'Cɢoѳ~ʜ. Pk4YM`ǩ|~)uFlLs0ۿM6E]w$M`O_׍H+S)qG󷝠jP.dsn~2;ƺ }eS`<d;a* d |I\5 &WU]0]ٕ"e~}9CُuR@fu~5;$Efhޫ}jfWSY8CŎ[t8۸qٔM'BB ՗EdӅD/[Ge_yUJ4eHr%}XKMKDށ.2J| ]:2(<^;BK*]ݯ_xAk`UО_5Q5OWqehS+UB@s#:mx1OLD'28(uX׷/#l(xmӰ:<֪ DOɀb*Wpi3hpT_*8'8 9]5fJs"YjL}}N3RAT xnkr Z$]8#V#L:QQ˺ǠfG*[5>uYsgC5Mv»D-*g_Lp dyL%oh8=eVDN^;m YgtClK[Ol6ztP"fUkmmns)[Ik~=\(Or= Ol(z[bۗEE/tGLY͋v\eH7/ 랲Zk^vC4@`۶,ɨ6S9z'̘#uE㋡xu[j{=w$l'uз]tf?x#ϋ0:vo+f. JeQAd9A AȊì)ۚFʸ nт:1@1;ZUQ/aW=\8kOϽ\vjٞzANt+[kYSx49F!05X]['P g A0 \օ,\d=;ٯ'c77uJ[1!Ts6K)\Xxԙ!6t 5mz5CG$VQ38C|SAj돢"`+'5ǓEo2 imJ%R /IO=YkyʜVU~4%ެěw.c03nb GɇcXY5޺zXA-, Wo\|E _gD{dtI3feuiiLB/;S1IYGG塳Dw jU x|hCV^+y(iT]:7Np|;kc4)l hp: ՛zPG&PJU u-Ul!P:n<2c#:#CDF1i.ra[>nz&·pm[ Oj!V]ɱS5I;><ۍ fu/OY$酶J}M<2Sbg9(y)*ݠpyr"yȘ$?MȺ\5rWxU P,cу6:d7ڔF޸cEl;m )3V]]>ָ֥ `a(-kq'L4Kk'\\y;|h8)V#p\_T=ծ{,TÒXHe98Xrǖ&U ԾhAnS ]hIMu}I)F ۀ{ O ^WTozv!=R[VkZu+#SFE(yZ t7rAx  =).PͱU>. jHNɶ+e%Bj0v] /qEv+Qx1`#j \T" /g<잿?&^N'7<c),#m=~N޻WIԱ ~[.4U!r^57Y"$wD 'ih^<73{?s^@$"/گSuӗs pu+]hc{NWe88J.E)hcl/*.d"`6 0-y+%pKm͵u,5<'8!<,ǁ/Ë!D`yOXUyv+$4Rq'{㌯jߒVq XgՈM #le[zG_ L,fäjcJeӯIMddl7lw<r![~6/UPB\4L -7`Tܴ;t=UbhaT; <{y~ɴB(P'70ߟ࿓ hoxW0geH۰>ip } о5rm O.cW0wε0HxǦ3,{y*@vJjKcgu9:;.lKe )?T,dɍxJ,Teg24ƔZK}L6'aau'_CWQ-_w1܊ZZPnW{cNpϝ88 dt~UT +90z)Q on z\AOdA>)R{Z ڎXuߚ&2*6B/^hG0#pz?Lٌ$ɚq2 7:GtAOnݦ1U]:exUk`%w|)ZQ+B3K`U~曮ٞ=sh :7v* uo.dZIJ/z*Ee׭D)DFINbЭ}$POĮ@_qo/3-4!)1+$Ji$k 6@vVN9F[3|x.ft;޴gJx\ Δ@&8{<'h$C#'D8>pǒhN4ϽDd qE$ PZ;ҶȚcP4Jh:-;ڃ,r_zdmZ|i0GvB Sm,3ʾcH>w sx}ޫRL+5 c3^bnAԭB0dEԥ4NxXѓN%*/<44gS Ź942C| rVf If4m|hC6fDۍX0 Di7,呋7DQsV"j6ѶP*h'O*cgӐ5F؎U  z W/5{Tlo4,S|j`Ʈ|Li⨎.g}7igx&D—Ϩ:UR8Q}y{h8Z k|(BS*ac ˪+y\GP-YA,E<gq` {/6D)-[,8{g} !gIJbedc! / "!>L#M #6Dž^Ϻ#b=v5/?whX.8>V@R yz`ɤ4@aqòWʝSWD)JDŲ Mh4=e)T̰!!Xa4Ш:rixDOV7'cn.U 9#Qy$=^ՀRnj2ipހ6!&w0AvgXܒb+YدPٝ`B`Zyo7ԻnwAeWZ #a3쫻ޜi ж‹!NJyTqګbxeu% mnE`HI[BM:CK(/wMs|Z\TS/pzyARhb93H^\Q=!~ABg\.Sa"iܺ>7=u>#s*V E.7OXq\lꅰR/X!"9El`cRHD-wĹKEhCZAItd"O`W}K2وk-YPBYŒR{Zю3 . yd#ĺх8ivrI $~kͼѿpѴ~sh8Jץ?NQ^a4Z0=v j$`Rʇn n2plܭ !iݸIe[ >> 51fouLgu" |j l:Om7ڳ9U@'9,n5l3+$F'ٴ_UMZzF^+1dZX4f̱hi#q&oFxSH`œ#Xn (EGkh)ϪBQ9m$Tve@x2bP̍ bFScan Tve>Qp9g NF Tq>RZuZ;`_(kAKt4֝6;Ho̮Д*. _:1D|S)89ۏ$"A^N_cOV ]"V]3pàU":$!zb*hĎ;2chDfC /^rXų3B3FXoa`lZ.bc~`GO9̵h%]UJؖHe%*vV;79j+ǧAXn]f(Dorc[fdE~qd@o*+'7ȡ~Fi]\^f&>OVhD_~j=?Z2_!8C3=B"]q!ߖgkO}L 0A@dGzf4;=ʡeBn0귔/yl."҅ \>Ze߾M]kw$zjc<fW%yKt:51jBpCn6ͨh`*esk}`d0P]Eĕoi$4?Yu7]ynLI{P,F27#Gj]'#On:І]>yp#Xݦ7v 8RYY@G lR]ؒ$ 3Mn2Ql1M0rd…D0n&E-edNްw`t·sMy1E4g Gۯ&pJ?\nɓWuD))5,F{yK`f~<_WY,nBux'B8Hgx.QV 2aMzϴHϟܙ?;nRhl"Q-GJ*r&;d\=/G`9/*r%tJIXq=$|&"iTkP UUSK Bsڵ{_}'FЧ'*N]س,A C\9!,|{Fl[>ሯ]Aú j~Stq/v*j>iSKoJbosdy;wRޓV+o&U?I[xy >.p&^`]{`5PJ#<;ָ rV^ ݅E(5 Y +uD.y-E#BLh#g=|ݖ_8 z`/B=fK܌馂KD+Dvx=-' /9_1}B:$55!;S5IGxt$%y^!ÚnY%֪ؑ:Gx?Z<j[esj^jA(eEyö)MPnso᠓6Y2EWbNak#lbm m,_Ӊ~0)I_{Ω:xNT Dt8q  ה:| М$qQ$7Ui'&M;F;:Bk<%-LGVO4,5 r K~ŭX9(PI} )L?3ԢƁEj_`߂sCTdx3F{;61"\a5ҟ W_΢oFs>o#ANY}^ea e:><*̕4cQB񛨆])ݞ2D&BD(dhDqMgslT|au0;dd%͏?<0`}(1M(SİFeT~#EB]րU6+(SKXxP2 TtD>P-rn;Grw`<#fg8QB0z=K =aGp=YL9 rѬN( 7䩉Xg%E]7 I\kpiiviRn(ި/9S0Ig\fDfe~Qx'3cEz kI*7_)$Z!֔eaG,5k##/7_YԻ\z #9 0.{ߧ<+e۟ bU۟uh)!&P*wM/)b T+z-C(/SD{F⍤R'@|HLOe+k_>2O U4Rq;0?}{i֢BYM\C겭lH4ՖTj`xBN'ZQ ˽ELGg$'nk.2g+o _ D%lnŋmxC)'Ngt ɬcm %n"L>F gDl|4kF$9 NјcL#+fk4bo1@wHț{+C!;hdԴhjE;)Hm AvrX 번Ufzsr^LkPcŌ<)Eʺ- uYuJymsgv{FO F}R><);D] FDW}ҍ¸ݿWs:YDw$&N[kz !'YeP#y֋$r svgՂ^\oj={/.+z-rm{,&fO]%U Y Z|/KnCP'AzeC }>2xҨuhM5bVi-E-M7xΤfHqfkUzv%J2Bf:1v..#FfS_\|~m n#fR`VV@Y_0'}L ٟ\ ܷYl=r5Ab,=Yn*0fo3dXo.n7Zy݀ XZct_.җrKAx]K4ay踤QC%H<ܡzm1Y\]; ">wKz.\4n@ 89> y'8zkتoz*l)AZ0l >U1,'vdD.-0`K u_%~)sX@\:Ab)}CPZJ6گxk$A!F1$_41~lr;3~MdG&:fޣ^$=B1b¶JF )=xJ9 \27B2Fk^͍1~܏ArR ]{~QX|4.CD ;MW!sW}NP(0VLqTMɹE),ݸ?2}d\| y Ub3EY\lL Lw|qSYI6q7q1Մ =fۭNU.nrmc!!_m,V@U*3vrG2Gv-(1CΝ"Q AY:lÍMH6 κ W΅e s.ҥ1S]L}a@dU?Yoϟ /9GgK[ZUHw!OбIjS,W)߂a 6KqWڨ @e j)fE8ȣ;v~A/ hFgqvp#$,'fKHwL4TZ%bXh. ٦ OkMs%"|:Fy_l!1֘lq;JI<^Ize>Gߧ=6@7Bq$61رdu#SVlL:gx,y#Y:%MYd+[pj@\O.P[gY p~)uoNJ2.QL4'-ljk\d E6.BsyWvs&.ӂԃU߿`@}fGKn#B8Hل#Q#pȪ%h )vlrVi~t=q #vP0 5?84VFO HI)'$[YWֱi `&^"[ݐ6lNNT:s*B;Bj7dn{%Ҟ9Zu22,SE.}I Vx(t.ia_CRk2 /$#q3ɥJOq`K_fgrĉxX) OieA"c揜մl [QZ5luI?c ֿvֳ*$wt S/KQG KqZT-dX-_}c}ѝá̵vf(BwǖMԺ; :@o:N<;SV=Т\i=OV^g уNsvs~F c)7s-Q%&T}F⠢ȓfT a(JOP(8ᛙvG(AUUtԡl._!gv=9++,N DUf_tg9%bXr#'//1gy_fe=kt׭tqmjNɈr_\5&_M^vS64m(l+Ҕ{\i`dJqB* $21 *uVݭWߐ#+UtG@_j{U [0/=x?G"iuڝH`vڳvrgr:cұr>?tK+}eʿ0Y?c{g2m [Vh1al 2Z]*0ԯ } ۋ?n[|adohuuαAgvo&]K؜3ZhwduDgOE=fQO⤲LJ$ `_~]lt6:81_a'FGajeZe=f)Gvϩ8vS}L[7_Oo_|χooݷ??oecžiof*ٞAf#)-;e2Kx ~ŷ>n7~?lfլ%|= :DeM lgdUV$GEѸPwJ`}Ϯ:tw'D ( Hh/̳Zsb\0ۧJ8zXR-O*,E`I< ̀v)ԫ*ߐeR3P (PEYh҉]%.Xb Y埲xaE%VZJǸW@3 M8XJE&罻0c JA5v* -DtGr}ÿk~q)" |3܏u¼>`0L܊6MYA+!㟭Xj ܩ27KOv6@Q^ȷ߸LFxH$[o3_*=;1[a@莨]|'ߟj$}|/% UY}_Z8;w]W+w_[id*2`wuɝ_rS0]汃L.^kig{ bT''קBZ-Utc.]D;Anʸȉӑ^kGS]\;o[Tl5Z(Ӕ+\Ճaeꨮhw:>8kk"cjob 6b~P(. H .M _ ׸vfko{ڡʹ Kf5Pt`߁ u}4MHY_R+QgБmhN<vmXm xWWRs@ƝgGwKh v %f1חaq'=y,,?B.8{TrFCcG2Ȱ).[ogU;OWMlP]]SJ `x=ѓb猂UCwNoR0myrcr3,T;ꦚg7 m(\N'\N0:=mC6,XB-fívXw_ | $q?:G Lb]_s4oZ-(L@[jKzmE B̊eF/Y 8!pO#f\.OSI- 2bQ) Cz˕pxOܲ$@0(H󒹬,'3mIgZTx-b*|I_-R"! x`a ׫*enesozZcֱX>q :B]Kaj0xL3%u&I0i=C,b.iL Xaf_duJ38cȧk@f)HNz;?rvI[)_k~S9-<QHJU^ʂUS8荢WXCOA*h$rj2֧꣓9q:=G-zo[z*1Df sT<6G'xtي[M+~DPV&(srUkͯl0ߣjlGjSʺ䕔>zVEr[΃5B.TY8l` !^+V!SKr%3Edec:aG᠂57@O!#CT`ܟyA}Kǝםv;YglϿʓ$Têڶ-[˩1;f=3^# =EPn~е9&'EGkEN}:?~쐞}TCp 7O,&هÎb<'vwvn|q-uډmL:<}uh[_ (DҦj4ʏH;^ޓPML=\lNТ8ܑW8]}G{qq yg a\w m[ar72NyR[8$A9pJ,kmp;j(  zN;;Mn[U8޺LevG{9 \+` 7'@NYf VP eO 5Y6ZKfJz%2 m/;X|>̓Up7>7SqwZt=ޫNC&|t^Z(Ğ c}|TD ͜JUkqݚL*3ϭKZGD>[%yi9(hp?nCԋV'ީv$͔,kǡx>Z@5s_AYa gt|d΅f|gV:߉կX́"mVL:;| =8 ikF tY'Y6dX/D !TY m'{٣,Asb,j\ՍmZ5|nA/Y9[Q{ǤuWAs Vý`;nw! `586s!V `p>X*.wp=̱.H< -z|I빜S k`1K`s޿}`QGן{5v}ս¿,Iۗسe?~ϑNQ1V%kt5;I# (?w8I> 8x2E7yY\mӠ;2A-FD:>ȘNЩ+[Sr-*̨^UDTInav`9#o KKo "v*C׸7);_{)|>%Y8;*N=+%{"LS5#Aݤ泒{BՋc,rJ]l"gR:o$j St|Pգmju tGį< grхGf[r;Xp8Wq a_X#<{lln#WJiN_!?q6 1&ht!Oe#$R/Tl Tl }?\$\%vLh~0KJQ~]`bYN&K/0!Ǚ`kqV._4iγ~M a~MidtqQAyQJdׯ߾d*PaP>l@{4X06aM%T䈃ռ|*R~%/ZKOxʼn/~>/Qj5e5xF[A%&,[,ItXtTWI}g c~]ső MPENŃvNDMOϊMO9 8$~=O_gE "n ڨw/`uj^7A? `.l.ӴIO?'gzTP`OTyԯ``가fO0~Y3ld_B`qځϐY}rx{a9:)nĂe~lbJ<i*.?T+C޴R}ak)sYbB'i\ 26K*4Bg|J 5B±>m&NPƜá0%]ҟi#X ZO8"[KNɮzKWP7ޢ>"'  _LΔHj.gYS^4G7K^*0;aW+ZqάQ{sxTboYCJS6b0lu07nOaT0:45Қpsͳsb0c&z*3/SpB 6Mӷ/maTB}u;|"GCJiuK\. w)yJc*Y0, ,,JosnYRy"9YK$h5-U_YA"Wٜ{CKQh! CLmU6\*?oO>"#0 LfB?WXrc.P\|Nu8ôqZbUE1w&_\ccxu>P1_`/(RN鴦lf`#o.[WtN%}NuN'_`)j矾x 컨3>c;!޶FAЛ}}ǖO~'_Oq jٱ{{`@1fŦS=/!h!~ Ht4OgdK*mt-,hTFKHx.l): |{6R=:o)s\ er29|Δ>,]Z.>/ԝz l{Pqg/Dfl]xxOC/Do>Zȇ򈼃q_@CM*_-Gc~%jUy[6Y_#XLAvn~g PSS眀E7x~SL'bQ2=PR5G 7T%0/ؿ#-[vJ%[etJ F~ѺߦlO!e?bc +3=_ ;.{! nVTxNO;Z;9ClzCcpfadqqlΆA9 RbKY#)m ȊMlx?Cgx ?60btKNx<.ޭ^T$bE!?5AuM'X36f 1ױ2u,z;!=8`Y9<XJ5>qwq`t.1+|WYq=?0"Y%zα<.#ωN2(ezm<imagemanager/js/_cache/im_core.js000066600000236155150472616010012774 0ustar00(function(){try{var li=document.location.search.replace(/\?/,'').split('&'),query={},i;for(i=0;i)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
        "]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
        ","
        "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
        ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();(function($){function xmlEncode(s){return s?(''+s).replace(new RegExp('[<>&"\']','g'),function(c,b){switch(c){case '&':return '&';case '"':return '"';case '\'':return ''';case '<':return '<';case '>':return '>';}return c;}):s;};$.translate=function(s,e,va){return s.replace(/\{#([^\}]+)\}/g,function(a,b){var pa=b.split(/\./);if(MCManagerI18n[pa[0]])a=MCManagerI18n[pa[0]][pa[1]];a=a?a:'{#'+b+'}';if(va){a=a.replace(/\{([^\}]+)\}/g,function(a,b){return va[b]||a;});}return e?xmlEncode(a):a;});};$.translateElement=function(e){e=e||document.body;e.innerHTML=$.translate(e.innerHTML.replace(/=({#[a-z0-9_]+})/gi,'="$1"'),1);};document.title=$.translate(document.title.replace(/^(http|https):\/\/[a-z0-9._\-\s]+-/gi,''));$('body > *').each(function(i,v){if(!/(SCRIPT|BR|HR|INPUT|META|IMG|LINK|PARAM|IFRAME)/.test(v.nodeName))$.translateElement(v);});})(jQuery);(function($){$.Window=function(f,a){var t=this;t.features=f;t.args=a;t.isIE6= /MSIE [56]/.test(navigator.userAgent);t.clickActions={min:t.minimize,max:t.maximize,med:t.medimize,close:t.close};t.mouseDownActions={move:t.startDrag,'resize-n':t.startDrag,'resize-nw':t.startDrag,'resize-w':t.startDrag,'resize-e':t.startDrag,'resize-s':t.startDrag,'resize-sw':t.startDrag,'resize-se':t.startDrag};};$.extend($.Window.prototype,{getArgs:function(){return this.args;},focus:function(){var t=this,id=t.id;if(!t.focused){if(t.shim)t.shim.css('z-index',$.WindowManager.zIndex);$('#'+id).css('z-index',t.zIndex=$.WindowManager.zIndex++);$('#'+id+'_container').addClass('focus');$('#'+id+'_top').addClass('focustop');$('#'+id+'_middle').addClass('focusmiddle');$('#'+id+'_bottom').addClass('focusbottom');$($.WindowManager.windows).each(function(){if(this!=t)this.blur();});t.focused=1;}return this;},blur:function(){var t=this,id=t.id;if(t.focused){$('#'+id+'_container').removeClass('focus');$('#'+id+'_top').removeClass('focustop');$('#'+id+'_middle').removeClass('focusmiddle');$('#'+id+'_bottom').removeClass('focusbottom');t.focused=0;}return t;},setTitle:function(ti){this.features.title=ti;$('#'+this.id+'_title').html(ti);return this;},setStatus:function(st){$('#'+this.id+'_statustext').html(st);return this;},minimize:function(){return this;},medimize:function(){var t=this,sp=$.scrollPos(),r;if(r=t.lastRect){$('#'+t.id+'_max').removeClass('med').addClass('max');t.moveTo(r.x,r.y);t.resizeTo(r.w,r.h);t.lastRect=0;}return t;},maximize:function(){var t=this,sp=$.scrollPos();if(!t.lastRect){t.lastRect={x:t.x,y:t.y,w:t.width,h:t.height};$('#'+t.id+'_max').removeClass('max').addClass('med');t.moveTo(sp.x,sp.y);t.resizeTo($.winWidth(),$.winHeight(),1);}return t;},close:function(ac){var t=this,f;if(ac&&(f=t.features.onbeforeclose)){if(f.call(t)===false)return;}$('#'+t.id).remove();if($.WindowManager.windows.length==1)$('#windowManEventBlocker').remove();$.WindowManager.remove(t);if(t.shim){t.shim.remove();t.shim=0;}if(t.features.onclose)t.features.onclose(t);},moveTo:function(x,y){var t=this,el=$('#'+t.id);if(t.x!=x){el.css({left:x});t.x=x;}if(t.y!=y){el.css({top:y});t.y=y;}if(t.shim)t.shim.css({left:x,top:y});return t;},moveBy:function(dx,dy){return this.moveTo(this.x+parseInt(dx),this.y+parseInt(dy));},resizeTo:function(w,h,nr){var t=this,b=t.borders,el=$('#'+t.id),ifr=$('#'+t.id+'_content, #'+t.id+'_ifr');w=parseInt(w);h=parseInt(h);if(!nr&&t.lastRect){$('#'+t.id+'_max').removeClass('med').addClass('max');t.lastRect=0;}if(t.width!=w){ifr.css({width:w-b.w});el.css({width:w});t.width=w;}if(t.height!=h){ifr.css({height:h-b.h});el.css({height:h});$('#'+t.id+'_middle').css('height',h-b.h);t.height=h;}if(t.shim)t.shim.css({width:w,height:h});return t;},resizeBy:function(dw,dh){return this.resizeTo(this.width+parseInt(dw),this.height+parseInt(dh));},show:function(){var t=this,id=t.id,bw,bh;$('#'+id).show();bw=$('#'+id+'_middle div.left')[0].clientWidth;bw+=$('#'+id+'_middle div.right')[0].clientWidth;bh=$('#'+id+'_top')[0].clientHeight;bh+=$('#'+id+'_bottom')[0].clientHeight;t.borders={w:bw,h:bh-1};if(t.shim)t.shim.show();return t;},hide:function(){var t=this;$('#'+t.id).hide();if(t.shim)t.shim.hide();return t;},setContent:function(h){$('#'+this.id+'_content').html(h);return this;},setURL:function(u){var t=this,id=t.id,ifr=$('#'+id+'_ifr'),b=t.borders;if(!ifr[0])$('#'+id+'_content').html('').append($.createElm('iframe',{id:id+'_ifr',src:u,frameBorder:'0',scrolling:t.features.scrolling}).css({width:t.width-b.w,height:t.height-b.h}));else ifr.attr('src',u);return t;},startMove:function(a,e){var t=this,bid=t.features.theme+'_move',mb,sx=e.screenX,sy=e.screenY,dx,dy,wx,wy;$(document.body).append($.createElm('div',{id:bid,'class':t.features.theme+'_event_blocker'}).css('z-index',$.WindowManager.zIndex));mb=$('#'+bid).css({width:$.winWidth(),height:$.winHeight(),position:t.isIE6?'absolute':'fixed'});wx=t.x;wy=t.y;mb.mousemove(function(e){dx=e.screenX-sx;dy=e.screenY-sy;t.moveTo(wx+dx,wy+dy);});mb.mouseup(function(e){mb.remove();});},startDrag:function(a,e){var t=this,bid=t.features.theme+'_move',mb,sx=e.screenX,sy=e.screenY,dx,dy,wx,wy,w,h;$(document.body).append($.createElm('div',{id:bid,'class':t.features.theme+'_event_blocker'}).css('z-index',$.WindowManager.zIndex));mb=$('#'+bid).css({width:$.winWidth(),height:$.winHeight(),position:t.isIE6?'absolute':'fixed'});wx=t.x;wy=t.y;w=t.width;h=t.height;mb.mousemove(function(e){dx=e.screenX-sx;dy=e.screenY-sy;var x=wx+dx,y=wy+dy;switch(a){case 'resize-n':t.moveTo(wx,y);t.resizeTo(w,h-dy);break;case 'resize-nw':t.moveTo(x,y);t.resizeTo(w-dx,h-dy);break;case 'resize-ne':t.moveTo(wx,y);t.resizeTo(w+dx,h-dy);break;case 'resize-w':t.moveTo(x,wy);t.resizeTo(w-dx,h);break;case 'resize-e':t.resizeTo(w+dx,h);break;case 'resize-s':t.resizeTo(w,h+dy);break;case 'resize-sw':t.moveTo(wx+dx,wy);t.resizeTo(w-dx,h+dy);break;case 'resize-se':t.resizeTo(w+dx,h+dy);break;case 'move':t.moveTo(wx+dx,wy+dy);break;}e.preventDefault();return false;});mb.mouseup(function(e){mb.remove();});e.preventDefault();return false;},render:function(){var t=this,id='win_'+$.WindowManager.count++,f=t.features,mc='',bl,v;t.features=f=$.extend({theme:'clearlooks2',modal:1,type:'window',x:-1,y:-1,width:320,height:240,title:' '},f);if(f.x==-1)f.x=Math.round(($.winWidth() / 2) - (f.width / 2));if(f.y==-1)f.y=Math.round(($.winHeight() / 2) - (f.height / 2));t.id=id;if(f.modal){bl=$('#windowManEventBlocker');if(!bl[0]){$(document.body).append($.createElm('div',{id:'windowManEventBlocker','class':f.theme+'_event_blocker'}).addClass(f.theme+'_visible_event_blocker'));bl=$('#windowManEventBlocker');}bl.show().css('z-index',$.WindowManager.zIndex++).css({width:$.winWidth(),height:$.winHeight(),position:t.isIE6?'absolute':'fixed'});}if(t.isIE6&&!t.shim){$(document.body).append('');t.shim=$('#'+id+'_shim');}$(document.body).appendAll(['div',{id:id,'class':f.theme+' window'},['div',{id:id+'_container','class':'statusbar '+f.type},['div',{id:id+'_top','class':'windowtop'},['div',{'class':'left'}],['div',{'class':'middle'}],['div',{'class':'right'}],['div',{id:id+'_title','class':'title'},f.title],['a',{id:id+'_min',href:'','class':'action min'}],['a',{id:id+'_max',href:'','class':'action max'}],['a',{id:id+'_close',href:'','class':'action close'}],['a',{id:id+'_move','class':'action move',tabindex:'-1'}],['a',{id:id+'_resize_n','class':'action resize resize-n',tabindex:'-1'}],['a',{id:id+'_resize_nw','class':'action resize resize-nw',tabindex:'-1'}],['a',{id:id+'_resize_ne','class':'action resize resize-ne',tabindex:'-1'}] ],['div',{id:id+'_middle','class':'windowmiddle'},['div',{'class':'left'}],['div',{id:id+'_content','class':'middle'},' '],['div',{'class':'right'}],['div',{id:id+'_bigicon','class':'bigicon'}],['a',{id:id+'_resize_w','class':'action resize resize-w',tabindex:'-1'}],['a',{id:id+'_resize_e','class':'action resize resize-e',tabindex:'-1'}] ],['div',{id:id+'_bottom','class':'windowbottom'+(f.statusbar?' statusbarbottom':'')},['div',{'class':'left'}],['div',{'class':'middle'}],['div',{'class':'right'}],['div',{id:id+'_statustext','class':'statustext'},' '],['a',{id:id+'_resize_s','class':'action resize resize-s',tabindex:'-1'}],['a',{id:id+'_resize_sw','class':'action resize resize-sw',tabindex:'-1'}],['a',{id:id+'_resize_se','class':'action resize resize-se',tabindex:'-1'}] ] ] ]);if(f.bigicon)$('#'+id+'_bigicon').addClass(f.bigicon);if(f.chromeless)$('#'+id+'_container').addClass('chromeless');if(f.resizable)$('#'+id+'_container').addClass('resizable');if(f.statusbar){$('#'+id+'_container').addClass('statusbar');$('#'+id+'_bottom').addClass('statusbarbottom');}t.show().hide().resizeTo(f.width,f.height).moveTo(f.x,f.y).show();if(v=f.title)t.setTitle(v);if(v=f.content)t.setContent(v);if(v=f.url)t.setURL(v);function handleAction(e){var el=$(e.target),action,f;t.focus();if(el[0].nodeName=='A'&&el.hasClass('action')){action=$.grep(el[0].className.split(/\s+/),function(v){return !/^action|resize$/.test(v);}).join(' ');if(e.type=='mousedown')f=t.mouseDownActions[action];else{if(t.features.onaction){t.features.onaction.call(t,action);return false;}f=t.clickActions[action];}if(f){f.call(t,action,e);return false;}}};$('#'+id).click(handleAction).mousedown(handleAction);$($.WindowManager).trigger('WindowManager:open',[t]);return t;}});$.WindowManager={zIndex:100010,count:0,windows:[],i18n:{yes:'Yes',no:'No',ok:'Ok'},setup:function(){var w=window,lw,nwm;while((w=w.parent||w.opener)&&w!=lw){if(w.$&&w.$.WindowManager)nwm=w.$.WindowManager;lw=w;}if(nwm&&nwm!=this){$.CurrentWindowManager=$.WindowManager;$.WindowManager=nwm;nwm.find(window).setTitle(document.title);}else{$(window).bind('resize',function(){$($.WindowManager.windows).each(function(i,w){if(w.lastRect)w.resizeTo($.winWidth(),$.winHeight(),1);});});}},find:function(tw){var i,ifr,w;for(i=0;i'+msg+'
        '+''+this.i18n.yes+''+''+this.i18n.no+'');},modalBox:function(msg,f,cb){f=$.extend({type:'alert',bigicon:'error',width:400,height:130,onaction:function(a){if(a=='ok'){this.close();if(cb)cb.call(this,1);}else if(a=='close')this.close();}},f);return this.open(f).setContent('
        '+(msg||'')+'
        '+''+this.i18n.ok+'');},remove:function(w){var t=this,fr,z=0,nl=[];$(t.windows).each(function(i,cw){if(w==cw)return;if(cw.zIndex>z){z=cw.zIndex;fr=cw;}nl.push(cw);});t.windows=nl;if(fr)fr.focus();}};$.WindowManager.setup();})(jQuery);(function($){$.StatusWindow=function(f,a){var t=this;t.isIE6= /MSIE [56]/.test(navigator.userAgent);f=$.extend({type:'status',width:400,height:240,onaction:function(a){if(a=='ok')t.close();}},f);$.Window.call(t,f,a);};$.extend($.StatusWindow.prototype,$.Window.prototype,{setContent:function(co){var v,k,h='';if(typeof(co)!='string'){$(co).each(function(i,v){h+='
        '+'
        '+v.title+'
        '+'
        '+v.content+'
        '+'
        ';});}$('#'+this.id+'_statuscont').html(h||co);return this;},render:function(){var t=this,f,v;$.Window.prototype.render.call(t);$.Window.prototype.setContent.call(t,'
        '+''+$.WindowManager.i18n.ok+'');f=t.features;if(v=f.content)t.setContent(v);return t;}});if(!$.CurrentWindowManager){$.extend($.WindowManager,{status:function(f,cb){var t=this,w;f=$.extend({onaction:function(a){if(a=='ok'){w.close();if(cb)cb.call(t,1);}else if(a=='close')w.close();}},f);w=new $.StatusWindow(f).render();t.windows.push(w);return w.focus();},showProgress:function(f){var t=this,bl,id='progressWindow';t.hideProgress();t.progress=1;f=$.extend({theme:'clearlooks2',x:-1,y:-1},f);bl=$('#windowManProgressEventBlocker');if(!bl[0]){$(document.body).append($.createElm('div',{id:'windowManProgressEventBlocker','class':f.theme+'_event_blocker'}).addClass(f.theme+'_visible_event_blocker'));bl=$('#windowManProgressEventBlocker');}bl.show().css('z-index',t.zIndex++).css({width:$.winWidth(),height:$.winHeight(),position:t.isIE6?'absolute':'fixed'});$(document.body).appendAll(['div',{id:id,'class':f.theme+'_progress'},['div',{id:id+'_msg','class':'message'}] ]);$('#'+id+'_msg').html(f.message);$('#'+id).css({left:-1000,top:-1000}).show();if(f.x==-1)f.x=Math.round(($.winWidth() / 2) - ($('#' + id).width() / 2));if(f.y==-1)f.y=Math.round(($.winHeight() / 2) - ($('#' + id).height() / 2));$('#'+id).css({left:f.x,top:f.y});$(t).bind('WindowManager:open',function(){t.hideProgress();});},hideProgress:function(){var t=this;if(t.progress){$('#progressWindow').remove();$('#windowManProgressEventBlocker').hide();$(t).unbind('WindowManager:open',t.hideProgress);t.progress=0;}}});}})(jQuery);(function($){$.extend({createElm:function(n,a,h){n=$(document.createElement(n));n.attr(a).html(h);return n;},appendElements:function(te,ne){var i,n;if(typeof(ne)=='string')te.appendChild(document.createTextNode(ne));else if(ne.length){te=te.appendChild($.createElm(ne[0],ne[1])[0]);for(i=2;i)/gi,''))),opts);};$.extend($.template.helpers,{sizefix:function(v){v=parseInt(v);if(isNaN(v)||v==-1)return '';if(v>1048576)return Math.round(v/1048576,1)+" MB";if(v>1024)return Math.round(v/1024,1)+" KB";return v+" b";},encodeURIComponent:function(v){return encodeURIComponent(v);}});})(jQuery);(function($){function URI(u,s){var t=this,o,a,b;s=t.settings=s||{};if (/^(mailto|news|javascript|about):/i.test(u)|| /^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf(':/')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u= /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);$(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]).each(function(i,v){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}};$.extend(URI.prototype,{setPath:function(p){var t=this;p= /^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;if(u==="./")return u;u=new URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i,l;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0,l=base.length;i=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return '/'+o.reverse().join('/');return '/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});$.parseURI=function(u,s){s=s||{};return new URI(u,$.extend({base_uri:new URI(s.base_url||document.location.href)},s));};})(jQuery);(function($){$.cleanName=function(s){var i,lo;lo=[ /[\300-\306]/g,'A', /[\340-\346]/g,'a', /\307/g,'C', /\347/g,'c', /[\310-\313]/g,'E', /[\350-\353]/g,'e', /[\314-\317]/g,'I', /[\354-\357]/g,'i', /\321/g,'N', /\361/g,'n', /[\322-\330]/g,'O', /[\362-\370]/g,'o', /[\331-\334]/g,'U', /[\371-\374]/g,'u' ];for(i=0;i "+r.tofile,content:$.translate(r.message)});}if(r.file!=undefined){r.file=r.file.replace(/\{[0-9]+\}/,root);r.file=r.file.replace(/\/+/,'/');errors.push({title:r.file,content:$.translate(r.message)});}}});if(errors.length){$.WindowManager.status({title:$.translate(args.message),content:errors});return true;}}},insertFiles:function(s){var t=this,args={};$(s.paths).each(function(i,v){args['path'+i]=v;});if(s.progress_message)$.WindowManager.showProgress({message:s.progress_message});RPC.exec('im.insertFiles',args,function(data){var o={files:[]};$.WindowManager.hideProgress();$(RPC.toArray(data.result)).each(function(i,v){var u=v.url;if(s.relative_urls)u=$.parseURI(s.document_base_url||s.default_base_url).toRelative(u);else if(s.document_base_url)u=$.parseURI(s.document_base_url).toAbsolute($.parseURI(u).getURI(1),s.no_host);v={name:v.name,path:v.path,url:u,size:v.size,type:v.type,created:v.created,modified:v.modified,attribs:v.attribs,custom:$.extend({},v.custom)};o.files.push(v);});if(s.oninsert){if(s.insert_filter){$(o.files).each(function(i,f){s.insert_filter(f);});}s.oninsert(o);}});},insertFile:function(s){var ins=s.oninsert;s.paths=[s.path];s.oninsert=function(o){o.file=o.files[0];ins.call(this,o);};this.insertFiles(s);}};RPC.init();})(jQuery);(function($){var w,ed,wm,args={};window.focus();w=opener||parent;if(w.mcImageManager)args=w.mcImageManager.windowArgs;if(w.tinyMCE&&(ed=w.tinyMCE.activeEditor)){if(ed&&(wm=ed.windowManager)){if(wm.params)args=wm.params;if(wm.setTitle)wm.setTitle(window,document.title);}}if(!$.CurrentWindowManager){$.WindowManager.defaultWin={getArgs:function(){return args;},close:function(){if(ed&&wm.bookmark)ed.selection.moveToBookmark(wm.bookmark);if(wm)wm.close(window);else window.close();}};}})(jQuery);imagemanager/js/_cache/im_imagemanager.js000066600000040121150472616010014443 0ustar00(function($){var idCount=0;function DropMenu(s){var t=this,k;t.items=[];t.settings=s=$.extend({menu_class:'menu',menu_item_class:'menuitem',item_class:'item',separator_class:'separator',submenu_item_class:'submenu',active_class:'active'},s);t.id=s.id;if(s.setup)s.setup.call(t,t);function hideHandler(e){if(e.target.nodeName!=='A'||!$(e.target).parents('div.'+s.menu_class).length)t.hide();};function clickHandler(e){var m;if(e.target.nodeName==='A'){m=t.find(e.target.rel);if(!m.show&&!m.disabled){if(m.onclick)m.onclick.call(m.scope||this,e,m);if(s.onClick)s.onClick(e,m);m=t;do{m.hide();}while(m=m.parentMenu);}e.preventDefault();return false;}};function mouseOverHandler(e){var x,y,o,m,el;if(e.target.nodeName==='A'){if(t.lastMenu)t.lastMenu.hide();if(m=t.find(e.target.rel)){if(m.show){el=$(e.target.parentNode);o=el.offset();x=o.left+el.width();y=o.top;el.addClass(m.settings.active_class);t.lastMenu=m;m.show(x,y);}}}};function createElm(n,a,h){n=document.createElement(n);if(a)$(n).attr(a);if(h)$(n).html(h);return n;};function uniqueId(){return 'jquery_mc_'+idCount++;};$.extend(this,{createMenu:function(s){return new DropMenu(s);},find:function(n){var i;for(i=0;i$.winWidth()?$.winWidth()-m.width():x;y=y+m.height()>$.winHeight()?$.winHeight()-m.height():y;}m.css({left:x,top:y}).click(clickHandler);t.visible=1;$(t).trigger('DropMenu:show');$().trigger('DropMenu:show',[t]);return false;},hide:function(){if(!t.visible)return false;$('a[@rel='+t.id+']').parent().removeClass('active');$().unbind('mouseup',hideHandler);$('#'+t.id).unbind('mouseover',mouseOverHandler).hide();$('#'+t.id).unbind('click',clickHandler);t.visible=0;$.each(t.items,function(){if(this.hide)this.hide();});$(t).trigger('DropMenu:hide');$().trigger('DropMenu:hide',[t]);return false;},add:function(o){o.id=o.id||uniqueId();t.items.push(o);return o;},addSeparator:function(){return t.add({'class':s.separator_class,title:'separator'});},addMenu:function(o){if(!o.onClick)o.onClick=s.onClick;o=new DropMenu(o);o.parentMenu=t;return t.add(o);}});};jQuery.mcDropMenu=DropMenu;jQuery.fn.mcContextMenu=function(s){this.each(function(){var m=new $.mcDropMenu(s);m.render(this);$(this).bind('contextmenu',function(e){return m.show(e.clientX,e.clientY);});});};})(jQuery);(function($){window.BaseManager={currentWin:$.WindowManager.find(window),path:'{default}',visualPath:'',files:[],selectedFiles:[],focusedFile:null,demoMode:false,disabled:{},specialFolders:[],getFile:function(id){var o;$(this.files).each(function(){if(this.id==id)o=this;});return o;},setDisabled:function(v,st){this.disabled[v]=st;if(st)$('#'+v).addClass('disabled').addClass('deactivated');else $('#'+v).removeClass('disabled').removeClass('deactivated');},isDisabled:function(v){return this.disabled[v]?this.disabled[v]:0;},addSpecialFolder:function(o){this.specialFolders.push(o);},isDemo:function(){if(this.demoMode){$.WindowManager.info($.translate('{#error.demo}'));return true;}}};})(jQuery);(function($){window.ImageManager=$.extend(BaseManager,{page:0,pages:0,pageSize:25,viewMode:'thumbs',tools:[ 'createdir','preview','refresh','edit','upload','rename','delete','download','insert','filemanager','help' ],init:function(){var t=this,args=t.currentWin.getArgs(),uri;t.type='im';t.caregoryListTpl=$.templateFromScript('#folders_template');t.foldersTpl=$.templateFromScript('#folders_template');t.thumbTpl=$.templateFromScript('#thumb_template');t.textTpl=$.templateFromScript('#text_template');t.customDirsTpl=$.templateFromScript('#custom_dir_template');t.path=args.path||'{default}';t.rootPath=args.rootpath;t.extensions=args.extensions;t.include_file_pattern=args.include_file_pattern;t.exclude_file_pattern=args.exclude_file_pattern;t.include_directory_pattern=args.include_directory_pattern;t.exclude_directory_pattern=args.exclude_directory_pattern;t.remember_last_path=args.remember_last_path;t.urlSuffix='';if(document.domain!=document.location.hostname)t.urlSuffix='?domain='+document.domain;if(args.url){uri=$.parseURI(args.url,{base_url:args.document_base_url||args.default_base_url});if(uri)t.inputURL=uri.path.replace(/\/[^\/]+$/,'');}if(t.rootPath){chunks=t.rootPath.split(/=/);t.rootPathName=chunks.length>1?chunks[0]: /[^\/]+$/.exec(t.rootPath);t.rootPath=chunks[1]||t.rootPath;}$.extend($.template.helpers,{add:function(v,a){if(v!='auto')v=parseInt(v)+parseInt(a)+'px';return v;}});t.menu=new $.mcDropMenu({halign:'right',valign:'bottom',setup:function(m){$(m).bind('DropMenu:beforeshow',function(e,m){var file=t.focusedFile;m.clear();if(file.type!='folder')m.add({title:$.translate('{#common.insert}'),disabled:t.isDisabled('insert'),onclick:function(){t.insertFiles();}});m.add({title:$.translate('{#common.deleteit}'),disabled:t.isDisabled('delete'),onclick:function(){t.deleteFiles([file]);}});if(file.type!='folder'){if(file.custom.editable)m.add({title:$.translate('{#common.edit}'),disabled:t.isDisabled('edit'),onclick:function(){t.editFile(file);}});m.add({title:$.translate('{#common.view}'),disabled:t.isDisabled('view'),onclick:function(){t.viewFile(file);}});}});}});$().bind('DropMenu:show',function(e,m){$('#'+m.id).css('opacity',0).animate({opacity:0.9},300);});t.menu.render('#filelist');$().bind('action:createdir',function(){t.createDir();});$().bind('action:upload',function(){t.uploadFiles();});$().bind('action:refresh',function(){t.listFiles();t.listDirs();});$().bind('action:help',function(){});$().bind('action:filemanager',function(){t.fileManager()});$('#tools li').each(function(i,v){$(v).click(function(e){if(!$(v).hasClass('disabled'))$().trigger('action:'+v.id,e);e.preventDefault();return false;});});$('#filelist').click(function(e){var a=$(e.target).parents('a')[0],fo,o,div,img;if(a&&a.rel){div=$(a).parents('div.file')[0];fo=t.focusedFile=t.files[div.id.replace(/[^0-9]/g,'')];t.selectedFiles=[fo];if(a.rel=='file'){if(fo.type=='folder'||fo.type=='parent'){t.page=0;t.listFiles(fo.path);t.listDirs();}else t.insertFiles();}else if(a.rel=='menu'){img=$(a).find('img');o=img.offset();t.menu.show(o.left+img.width(),o.top);}e.preventDefault();return false;}});$('#folder_list, #special_list, #category_list').click(function(e){var a=e.target.nodeName=='A'?e.target:$(e.target).parents('a')[0];if(a){t.page=0;t.listFiles(a.title);t.listDirs();}});$('#selectView').change(function(e){t.viewMode=$(e.target).val();t.updateFileList();});$('#setPages').change(function(e){t.page=0;t.pageSize=$(e.target).val();t.listFiles();});$('#curpage').change(function(e){t.page=parseInt(e.target.value)-1;t.listFiles();});$('#pages').click(function(e){var el=e.target;if(el.nodeName=='A'){if($(el).hasClass('disabled'))return;if($(el).hasClass('next'))t.page++;else if($(el).hasClass('prev'))t.page--;t.listFiles();e.preventDefault();return false;}});function filter(e){var f=$(e.target).val();if(f==t.filterVal)return;t.filterVal=f;if(f=='')f=null;else if(f.indexOf('*')==-1)f='*'+f+'*';t.page=0;t.filter=f;t.listFiles();t.listDirs();};$('#filter').change(filter).keyup(function(e){if(e.keyCode==13)filter(e);});if(t.specialFolders.length){$(t.specialFolders).each(function(i,v){v.title=$.translate(v.title);$('#special_list').append(t.customDirsTpl,v);});$('#special_list').show();}setInterval(function(){RPC.exec('im.keepAlive',{});},60 * 1000 * 5);},listFiles:function(p){var t=this,args=t.currentWin.getArgs();t.path=p||t.path;$('#pages').hide();$('#progress').show();$('#filelist').html('');t.page=isNaN(t.page)||t.page<0?0:t.page;if(t.pages)t.page=t.page>t.pages-1?t.pages-1:t.page;RPC.exec('im.listFiles',{path:t.path,root_path:t.rootPath,url:t.inputURL,config:'general,thumbnail,filesystem,filemanager',extensions:t.extensions,include_file_pattern:t.include_file_pattern,exclude_file_pattern:t.exclude_file_pattern,include_directory_pattern:t.include_directory_pattern,exclude_directory_pattern:t.exclude_directory_pattern,remember_last_path:!!t.remember_last_path,page:t.page,page_size:t.pageSize,filter:t.filter},function(data){var header,cfg,disabled,visible,argTools,argDisabledTools;if(!RPC.handleError({message:'List files error',visual_path:t.visualPath,response:data})){header=data.result.header;cfg=data.result.config;t.access=header.attribs;t.visualPath=header.visual_path;t.pages=parseInt(header.pages);t.config=cfg;t.fileManagerURL=cfg['filemanager.urlprefix'];t.demoMode=cfg['general.demo']=="true";t.path=header.path;function explode(s){return s?s.replace(/\s+/g,'').split(','):s;};disabled=t.disabledTools=explode(cfg['general.disabled_tools']);visible=explode(cfg['general.tools']);if(argDisabledTools=explode(args.disabled_tools))disabled=jQuery.merge(argDisabledTools,disabled);if(argTools=explode(args.tools)){$(argTools).each(function(i,v){if(!$.inArray(v,visible))visible.push(v);});visible=$.grep(visible,function(v){return $.inArray(v,argTools);});}$(t.tools).each(function(i,v){var li=$('#'+v);t.setDisabled(v,$.inArray(v,disabled)!=-1);if($.inArray(v,visible)!=-1)li.show();else li.hide();});$('#tools').show();$('#progress').hide();$('#curpath').html(t.visualPath).attr('title',t.visualPath);t.files=RPC.toArray(data.result);t.updateFileList();$().trigger('filelist:changed');}});},updateFileList:function(){var t=this;fileLst=$('#filelist');fileLst.html('');$('#numpages').html(t.pages);$('#curpage').val(t.page+1);$('#pages').show();if(!t.page)$('#pages .prev').addClass('disabled');else $('#pages .prev').removeClass('disabled');if(t.page==t.pages-1)$('#pages .next').addClass('disabled');else $('#pages .next').removeClass('disabled');$(t.files).each(function(i){var r=this,cfg=t.config;r=$.extend({index:i,thumburl:'../../stream/index.php?cmd=im.thumb&path='+escape(r.path)+'&u='+r.size,thumb_width:(parseInt(cfg["thumbnail.width"])+10)+'px',thumb_height:(parseInt(cfg["thumbnail.height"])+10)+'px',text_width:(parseInt(cfg["thumbnail.width"])-16)+'px'},this);if(r.custom.twidth){r.width=r.custom.twidth+'px';r.height=r.custom.theight+'px';}else{r.width=r.height='auto';r.thumburl='img/img_generic.png';}switch(r.type){case 'parent':r.thumburl='img/parent_big.gif';break;case 'folder':r.thumburl='img/folder_big.gif';break;case 'swf':case 'flv':r.thumburl='img/flash.gif';break;case 'dcr':r.thumburl='img/dcr.gif';break;case 'mov':case 'qt':r.thumburl='img/qt.gif';break;case 'ram':case 'rm':r.thumburl='img/rm.gif';break;case 'wmv':case 'avi':case 'mpg':case 'mpeg':case 'asf':r.thumburl='img/avi.gif';break;}fileLst.append(t.viewMode=='thumbs'?t.thumbTpl:t.textTpl,r);$('#file_'+i+' img.thumbnailimage').attr('src',r.thumburl);});},deleteFiles:function(fl){var t=this,args={};if(fl){$(fl).each(function(i,v){args['path'+i]=v.path;});$.WindowManager.confirm($.translate('{#view.confirm_delete}'),function(s){if(s){if(!t.isDemo()){RPC.exec('im.deleteFiles',args,function(data){if(!RPC.handleError({message:'{#error.delete_failed}',visual_path:t.visualPath,response:data})){t.listFiles();t.listDirs();}});}}});}},insertFiles:function(){var t=this,s=t.currentWin.getArgs(),selectedPaths=[];$(t.selectedFiles).each(function(i,v){selectedPaths.push(v.path);});RPC.insertFiles({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,paths:selectedPaths,progress_message:$.translate("{#common.image_data}"),insert_filter:s.insert_filter,oninsert:function(o){t.currentWin.close();if(s.oninsert){$(o.files).each(function(i,v){if(v.path==t.focusedFile.path)o.focusedFile=v;});s.oninsert(o);}}});},editFile:function(f){$('#center').hide();window.scrollTo(0,0);$.WindowManager.open({url:'edit.html'+this.urlSuffix,onclose:function(){$('#center').show();}},{is_demo:this.demoMode,path:this.focusedFile.path,visual_path:this.visualPath,onsave:function(){ImageManager.listFiles();ImageManager.listDirs();}}).maximize();},viewFile:function(f){$('#center').hide();window.scrollTo(0,0);$.WindowManager.open({url:'view.html'+this.urlSuffix,chromeless:1,onclose:function(){$('#center').show();}},{is_demo:this.demoMode,path:f.path,visual_path:this.visualPath,ondelete:function(){ImageManager.listFiles();}}).maximize();},createDir:function(){$.WindowManager.open({url:'createdir.html'+this.urlSuffix,width:450,height:280},{is_demo:this.demoMode,path:this.path,visual_path:this.visualPath,oncreate:function(){ImageManager.listFiles();ImageManager.listDirs();}});},uploadFiles:function(){$.WindowManager.open({url:'upload.html'+this.urlSuffix,width:550,height:350,scrolling:'no'},{is_demo:this.demoMode,path:this.path,visual_path:this.visualPath,onupload:function(){ImageManager.listFiles();}});},fileManager:function(){var suf;if(this.fileManagerURL.indexOf('?')!=-1)suf=this.urlSuffix.replace(/\?/,'&');document.location=this.fileManagerURL+suf;},listRoots:function(){var t=this;if(t.rootPathName){$('#category_list').html(t.caregoryListTpl,{name:t.rootPathName,path:t.rootPath});return;}RPC.exec('im.listFiles',{"path":"root:///"},function(data){$(RPC.toArray(data.result)).each(function(){$('#category_list').append(t.caregoryListTpl,this);});});},listDirs:function(){var t=this;$('#folder_list').html($.translate('
      • {#common.loading}
      • '));RPC.exec('im.listFiles',{path:t.path,root_path:t.rootPath,only_dirs:true,include_directory_pattern:t.include_directory_pattern,exclude_directory_pattern:t.exclude_directory_pattern,filter:t.filter,remember_last_path:t.remember_last_path},function(data){$('#folder_list').html('');$(RPC.toArray(data.result)).each(function(){$('#folder_list').append(t.caregoryListTpl,this);});});}});$(function(){ImageManager.init();ImageManager.listFiles();ImageManager.listDirs();ImageManager.listRoots();});})(jQuery);(function($){var man=window.FileManager||window.ImageManager;man.addSpecialFolder({title:'{#history.special_folder_title}',path:'history:///',type:'history'});$().bind('filelist:changed',function(){if(man.path.indexOf('history://')!=-1){$(man.tools).each(function(i,v){man.setDisabled(v,1);});$(['insert','download','view']).each(function(i,v){man.setDisabled(v,0);});}});})(jQuery);(function($){var man=window.FileManager||window.ImageManager,type=window.FileManager?'fm':'im';man.addSpecialFolder({title:'{#favorites.special_folder_title}',path:'favorite:///',type:'favorites'});$().bind('DropMenu:beforeshow',function(e,m){if(man.path.indexOf('://')==-1){m.addSeparator();m.add({title:$.translate('{#favorites.addfavorites}'),disabled:man.isDisabled('addfavorites')||!man.selectedFiles.length,onclick:addFavorites});}if(man.path.indexOf('favorite://')!=-1){m.addSeparator();m.add({title:$.translate('{#favorites.removefavorites}'),disabled:man.isDisabled('removefavorites')||!man.selectedFiles.length,onclick:removeFavorites});}});$().bind('filelist:changed',function(){if(man.path.indexOf('favorite://')!=-1){$(man.tools).each(function(i,v){man.setDisabled(v,1);});}});function addFavorites(){var args={};$(man.selectedFiles).each(function(i,f){args['path'+i]=f.path;});RPC.exec(type+'.addFavorites',args,function(data){RPC.handleError({message:'{#error.addfavorites_failed}',visual_path:args.visual_path,response:data});});};function removeFavorites(){var args={};$(man.selectedFiles).each(function(i,f){args['path'+i]=f.path;});RPC.exec(type+'.removeFavorites',args,function(data){if(!RPC.handleError({message:'{#error.removefavorites_failed}',visual_path:args.visual_path,response:data}))man.listFiles();});};})(jQuery);imagemanager/js/_cache/im_imagemanager.gz000066600000011663150472616010014460 0ustar00; s㶕xdrs۹Ra|tg4ݸ@]~($O Ey<<}nʤͪһw۸>oMFә9{[WUF*kYd*j۬\6Q]U6OiBm!nF:nta[eKdQfY5׿A/qU)@*hzڠ꛸P/H ;OU'6&H*o\g_g!+6H3QGEЬ/_Bc5}t"JBj{Ⱂd74ݶ<ԳE+9>\yET@ ֵ[ƛ5.8o6V"W@^ ygMCvwku҈M]RTеv%NV{Ҟ.[Q2 I 0%IU6mIG/2Y= 7x'`F\t9w؁!<ݺ/_:VO1ړT9)'IdKwVVi2~m 58.clGr}WG; 3]ոPjo֞.=8֍&rl cC^N )<[`ArW.K3f}նU!GR8a3P4|HG0*aInz_4u(C?Ё@n4dT?夸t6Hқ ,o$+bNĝ0g'{=x~6=:]EEȞ&7#&)MO$v2괺o[ֈQㄓ$QClQwz ;N8Y,H |oaw%oٌA0-ɶ!U~bil h[!*9yhD%6UaxQbP$z30*[7h_)`\8 cQhE&voeqp`S:6Sp$tUcQ_e M1+ËG86e_v݂烐 ś8ao7JJZxg:R  h9J4'AбVICdLJ- a|0HGr5-V6f.jZحϊZXTdu B?ag~o̚vj6Ͱ#j]uiS/;݅#$6 wC ʴ.eAu 223fP=ם?@KOAp Lo'wǓ>0HޱY/VU_8 HGC727 5GvUuFhSc#8TqѰa Uܫzq?L4 ;B[hEU@UhiQM @6X*&;w=xFv@A ˬ17=3m7^oڿ}U$&pbDyW?&WR٥HKVjC|]xQ%7}; ,`J\ j<ǘN34-r 2&3}xVFD#omD[ZJC>N}V';)ڇʣ~ǸOagBss'91#~6q> 86@hh ncXA9澢ZI> 9H NwtJA6 WrE -z~ps&XĝVGl҃(Bzb T\Iئ Gt8΍):31 թvHܜ>ZQ2])]yd_J,|0 w+bI˘*;xp rV}1[-:tﮖI۴#Ĉ5# 3Pqh~u2 ch:s$1zP ;(|~$!f] B+%u=KƳnn4/sܲ_> F8>opF Ω֯s,0.0=t?ҵ`MMJ$R1WS󺮖nFwB'&W_*y&0iK{y}c[G{nev $2sa]ɤ*l*U e\k|l KC7c9z8˱<ɤ<|"'T^gc <ջ43=owɪ?txrbP=KK}ms0:u-EwB>iܒ@Dy]sF5@SB68Bw? X׀f^7 x$9i!of.3lCFy.=`f֏b5:oݒ+'كIykwQt%s-: ?{iE3Q$~؀6,] ̂ )s $jtś"[w@ade 83>4(|]5n յghSz=Գ<̥?]VZ@GN19h0όP>ݛC}9B^2G7բ`rAW`BմQ x)#3j=upxT5= 8\'sO\ u8uQq]״+֫MR,  dD5IV>"^nЅsJ CgE66Ο\Oi83]^/ua)4 Or[n=l7C+N9Kuc3kJ]L @8} Y*f3х#x4Sj|; B:[$#xx&HAy~jA0 uq R  %fY]Svܤǫ%?277ݕ[hd"r"ΰhb2+pnDn+웤SU,i%%9W;pޭ o1--!L.wxl36aQ}c=_E{ sN$he)Q-?'J}*4N-+`SC8ʟrty$q z\/ -M-.‘K89~ odY037tK}qz{p!M27sE꼻AM}M΀-"\F$y(ϾE N&vԯ2^xJzUHTE@*aۑwƅ)za/jh.kDŽ f W*Tu_}thS7'Q%*@f&h>xlE#2+FO^m{5:O!-8$#2B9O{94Yrye2S[:f僊FWC]ܨfps%KH!D#kO-F+_`_+*GoQrOrPxogs9&:?]x㷉c ԃ#p>vJ#'53[_΍=:L+Wy%>ݪلX-jcӱWG2c7lN8"3o{G~F:3eN3 ߚ h]giCq[c= qH[m=G8* ^荗5fڪ%uVܵ.v=nKM-#F&߈R]z; 񶪳V5OLsydACFyEL='{}Qwc?zOȝ(I-}X“p >< ;үTR]ݟ.+xO$Q"E P'"pq>]Tpek@Nǰ`k @25|<I/$| BQ@imagemanager/js/_cache/im_createdir.gz000066600000001522150472616010013776 0ustar00UKo:+i2jy-E]cܹ356ͤCGyǤM5dEe*A+w|({ ߕIW{T(Ikt2eTHt w(τyVj)'J!$:4*Y^1a{{NF! - f_?߁YDȿVM& Ȗ*[usdp'=xfA}ٲLh|ud <&d\ID}/St7R:O&6IQZ'<ي\PeXOwZfkJeC(= 8y ;}C #Zj=|R^^͛2G ֕x!M:Hr)oBIDش4zP$ -ǒ̢ζJpB?|:wpl @@@ffĠ2A>lZΝ39um"a3ZgAl2tR #* \{ZpysnoS/ M!ȋh9طΉGrQ|~yM$$_:6~ \p5 .sdprS{YNU[!|d [4և衵`I̧'g9YAK0d;}\xl nfxOY3чopPIJm}g\s2\B{BRjRt_66ch?C 830EճMڒ,co6,L>zr|8)fhimagemanager/js/_cache/im_createdir.js000066600000003577150472616010014006 0ustar00(function($){window.CreateDirDialog={currentWin:$.WindowManager.find(window),init:function(){var t=this,args,cleanNames;args=$.extend({path:'{default}',visual_path:'/'},t.currentWin.getArgs());RPC.exec('im.getConfig',{path:args.path},function(data){var config=data.result,templates=[],tpl;if(!RPC.handleError({message:'Get config error',visual_path:t.visualPath,response:data})){cleanNames=config['filesystem.clean_names']=="true";$(config['filesystem.directory_templates'].split(/,/)).each(function(i,v){if(v){v=$.trim(v).split('=');templates.push({name: /([^\/]+)$/.exec(v[0])[0],value:v[1]||v[0]});}});if(config['filesystem.force_directory_template']=="true"){$('#template').html('');if(templates.length==1)$('#templaterow').hide();}if(templates.length==0)$('#templaterow').hide();tpl=$.templateFromScript('#template_template');$(templates).each(function(i,v){$('#template').append(tpl,v);});$('#content').show();$('#createin').html(args.visual_path);$('form').submit(function(){var tpl=$('#template').val(),name=$('#dirname').val();if(cleanNames)name=$.cleanName(name);if(!t.isDemo()){RPC.exec('im.createDirs',{path:args.path,name0:name,template0:tpl},function(data){var res=RPC.toArray(data.result),s=t.currentWin.getArgs();if(!RPC.handleError({message:'{#error.createdir_failed}',visual_path:args.visual_path,response:data})){if(s.oncreate){RPC.insertFile({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,path:res[0].file,progress_message:$.translate("{#message.insert}"),insert_filter:s.insert_filter,oninsert:function(o){s.oncreate(o);t.currentWin.close();}});}}});}return false;});$('#cancel').click(function(){t.currentWin.close();});}});},isDemo:function(){if(this.currentWin.getArgs().is_demo){$.WindowManager.info($.translate('{#error.demo}'));return true;}}};$(function(){CreateDirDialog.init();});})(jQuery);imagemanager/js/default.php000066600000000044150472616010011736 0ustar00imagemanager/js/mcfilemanager.js000066600000015613150472616010012741 0ustar00/** * $Id: mcfilemanager.js 584 2008-11-12 16:26:02Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function() { window.mcFileManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'file' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; idispatchEvent("onPreInit", array($type)); $config = $man->getConfig(); if ($package) { $compressor = new Moxiecode_JSCompressor(array( 'expires_offset' => 3600 * 24 * 10, 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'name' => $theme . "_" . $package )); require_once('../classes/Utils/ClientResources.php'); $resources = new Moxiecode_ClientResources(); // Load theme resources $resources->load('../pages/' . $theme . '/resources.xml'); // Load plugin resources $plugins = explode(',', $config["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); $files = $resources->getFiles($package); if ($resources->isDebugEnabled() || checkBool($config["general.debug"])) { header('Content-type: text/javascript'); $pagePath = dirname($_SERVER['SCRIPT_NAME']); echo "// Debug enabled, scripts will be loaded without compression\n"; echo "(function() {\n"; echo "var h = '';\n"; foreach ($files as $file) echo 'h += \'\';' . "\n"; echo "document.write(h);\n"; echo "})();\n"; } else { foreach ($files as $file) $compressor->addFile($file->getPath(), $file->isRemoveWhiteSpaceEnabled()); $compressor->compress($package); } die; } ?>imagemanager/default.php000066600000000044150472616010011322 0ustar00imagemanager/rpc/rpc.php000066600000006312150472616010011252 0ustar00decode($raw); // Parse prefix and method $chunks = explode('.', $input['method']); $type = $chunks[0]; $input['method'] = $chunks[1]; // Clean up type, only a-z stuff. $type = preg_replace("/[^a-z]/i", "", $type); if ($type == "") die('{"result":null,"id":null,"error":{"errstr":"No type set.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}'); // Include Base and Core and Config. $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $config =& $man->getConfig(); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch onInit event if ($man->isAuthenticated()) { $man->dispatchEvent("onBeforeRPC", array($input['method'], $input['params'][0])); $result = new stdClass(); $result->result = $man->executeEvent("onRPC", array($input['method'], $input['params'][0])); $result->id = $input['id']; $result->error = null; $data = $json->encode($result); //header('Content-Length: ' . strlen($data)); die($data); } else die('{"result":{"login_url":"' . addslashes($config["authenticator.login_page"]) . '"},"id":null,"error":{"errstr":"Access denied by authenicator.","errfile":"","errline":null,"errcontext":"","level":"AUTH"}}'); ?>imagemanager/rpc/default.php000066600000000042150472616010012104 0ustar00imagemanager/rpc/index.php000066600000000042150472616010011567 0ustar00imagemanager/mime.types000066600000001612150472616010011204 0ustar00# # Mime types/Content Types for some common file extensions. (Apache style file format) # application/msword doc dot application/pdf pdf application/pgp-signature pgp application/postscript ps ai eps application/rtf rtf application/smil smi smil application/vnd.ms-excel xls xlb application/vnd.ms-powerpoint ppt pps pot application/zip zip application/x-java-archive jar application/x-javascript js application/x-shockwave-flash swf swfl audio/x-pn-realaudio ra rm ram audio/mpeg mpga mpega mp2 mp3 audio/x-wav wav image/bmp bmp image/gif gif image/jpeg jpeg jpg jpe image/png png image/svg+xml svg svgz image/tiff tiff tif text/html htm html xhtml text/rtf rtf video/mpeg mpeg mpg mpe video/quicktime qt mov video/x-flv flv video/vnd.rn-realvideo rv text/plain asc txt text diff log imagemanager/files/moreimages/mcith/Thumbs.db000066600000017000150472616010015274 0ustar00ࡱ>  Root Entryp Z1 Catalog-2/   !"#$%&'()*+,.V0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU  JFIF``C     C   ``" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Ϗ-=06t}Bʵ2V|NL|KpC@L?LbᏮ1l_4vors+CV5tBaF̣̯r}ARy\9KXl?HnkS̬mQx_Hnk ڨq)GIzKg`_ƴPktQOL+/ĀՍN§޿P%麆fU{{HAyKPb~yA\HI;8okRX:(q;5R{s?4c^~ͨ_9gW׃xOK32˦OB/"ʩ~![SmJgMޔ?<<ʭ}pېQUmoY(*z]EX(*F.>BǙUw?"}jϏ|_ufSeV6S2P?EmFVQxZխ5 [kf "$O09;3ſ']vM9$NMVc Ԋu]6FPfx fx ٞ->S=O??#/&hjП}v~П}v~ ?#/&hjП}v~П}v~ n45GqLo g3+藷M,-tDDr9ݙns{p,kPnSmI$mmk֠ԵHu]```[X{A42CD7B6-E9B9-4D02-B7A6-288B71AD28BA}6M  JFIF``C     C   DZ" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?O7o˷ǩg6Uk+>oU$c^K&ٷX?_K#TsH9Mo4T𗊝7EZy:}O?)S_)3̰oW]l_fi3~OSenG)VyJ~'G]udvEcsv'˷{~/O+U# ikB[?\зU>Ͻ]7}_lz'[ҡ_.X1ggsu@7uw>ib/S~ץ_Rrǚg58?|_K? V[?,w{̒|vzjimhv/5j^{[k,O?uvF딾H(-%үO6&m.x:̺e̪uXlJ 1}e]UM_NC`>O϶A=G,L/(՞-ʋJk rLv+5n'no%Z';V~ {--^O*n/hkU(by]=x\\#~_YiZƟ 5;Wn벇cs}c+ggq<3k]5ﻕj+6]kK٪'Y+K6d6~ːƮa_+%Mﯢ>jjVom?^?P^@Uݱ~z·, WM(R\8sA[;K8{/wfw|.݋*׸~W:]?_0ꪛ6}t6o,gѩ|ϟ_"tB5C;Zq(s0Y\չq#dF/7޴Q]SjZ=@ݳoxPu R;vUQEu G<ͨi6w\5R˗q4Q^ȝkK#>+'h$Hn+M+Eqq(3|st2DžT hWc#"HSpoEe ?mcith_dogleft.jpgimagemanager/files/moreimages/Thumbs.db000066600000021000150472616010014163 0ustar00ࡱ>  Root EntryMX1( Catalog-2/   !"#$%&'()*+,.b0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a  JFIF``C     C   ``" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Ϗ-=06t}Bʵ2V|NL|KpC@L?LBށLbi[ȧdr@\_p~Ŀayc+Wd_>X:(q;?i=3L¼$Q$xVx)-tٷ` ;bº։}ŭH qOC/W¶F"~=FNOI}E~-uCqs*űDnN_U,n/ ] _)u%:߄L`cfo/?SD4?="7) 3K<ג4>.h|%~1Z͝Vʉ'VvXA8޼LsR.Us귙G_\ ;ǭgV((r|zɾlc3]+2xHk\Aї&0>xQ\k:F/Vc̩?Ϊq8~Hmyr >oeV)|z.4暭{y\9 >aV)|z.6x+̪σ?"k\ImN]6xMUKǍ_aڟާkS:hHQUm܅22o}RϙGUz..BǙGUZ7q<ʭnwO.Pض|{H+0**ꄏx+j7 ݎ.iMr\@1Qa$wf"xa9ٞ->uIɜaSS(p=)tr?+?k.ȍc̏OZcՐJ}k$0=jH}~F*O|-HB2={Pd"8$g?ΩID\c 5f@c?{:TJ dd 'c,F*>\J??ƚ]}+'iEg28NO>LS~P7 rJ?r:|N=7J;xaCbXcY9?Þkk<.4 U­@'^ _O#g:@^&d Zz͕>_Rw/w l%8@ G6;M[^1լʔn+%f%?O~qҽk#M]g+}B+kVvty3I?*nIndˡ'7C2 :٥;qۧ}/xoGx>2lо7Ae ΖdfpъN,m8/?,\Nx$Z;MSHԥo>#o8O56EUiBCWΟ,O:ĒpeQ-v6n\rBs$E4 {dSENEVO;bpqQ.+wVdw,9Ƹ/FՇ hp^#hlo?ŏxizl\7c^ ǿ>YՖ{l.1+K{U<и: k3i;o'w*y.qߏЮ?T#-M7O&o|Vv1BQ2}ט_뺄Pwh2]ƙ#1ro΢OR'Qjalu+[[s9ϒI U ;z}k6 ]3;{׾xCrj nmȓPA^:^2Iz;3)h|O"t,C(;Pc$z;9 ĭ1@:ϥ,X@f3oz|(Sp1aqXngDjlD4xf(NH'F;vD,QR>bŵq4Ew9wVhWF$gsi)]yOVH<2CRO\&BҾK/ q2a뻷A_nj)q#FIqҾխoK3@=UaLWiF1JwU l[6Y>u2FT.1ׯW ?3n-@dsqiqc;# $sEљ-ZG/QxEG I؈8n@>+:i%dk'/nm/R?2B-i0 kxQL dz֊+߻s=p>utٸg9r8$yDTe$@Hn +ϧl( %d?dogleft.jpgimagemanager/files/templates/readme.txt000066600000000134150472616010014263 0ustar00The contents of this directory is used as templates when creating documents and directories.imagemanager/files/templates/another_directory/index.htm000066600000000265150472616010017637 0ustar00 Index This is a default directory index page. imagemanager/files/templates/directory/images/gotmoxie.png000066600000001727150472616010020110 0ustar00PNG  IHDRX :OgAMAOX2tEXtSoftwareAdobe ImageReadyqe<ZPLTEMn+Srʣֺ댡ƁLTSIDATxڴs Qcxͷh4m&,{?$y^j1p6 zo`2Ulq[~+qSZ+߉F}eV9LZiJݶ#%uG *+׭+jb:1nn$޹>ݎ 5)1)u!oYUP76orzM6hyR./V01{7s먫Tp[u?Ul&nj88N|W1{y#] 5Ѿ_p(hpzeerIDd|]8TLU G-c#醒O+b5~nAmE_'y#ϛe؍Olu%wiI+O[Ԥm?:ЉlT:`t NB-麏T.@-bun73Va -}vHy!pUHRW7D`:# ՕJj&?p:y i=W˹%M2Im%Gc|=LߏB6fAVH|8M%2YN?~.o! ^m6/ŨSm4IrS맰rá603 ~rsVlU6 /A--^` Q+ώ/.bgqa%`J?i~eIENDB`imagemanager/files/templates/directory/index.htm000066600000000265150472616010016117 0ustar00 Index This is a default directory index page. imagemanager/files/templates/another_document.htm000066600000000310150472616010016331 0ustar00 ${title}

        ${title}

        This is another document template. imagemanager/files/templates/document.htm000066600000000302150472616010014612 0ustar00 ${title}

        ${title}

        This is a document template. imagemanager/files/1.jpg000066600000376366150472616010011160 0ustar00JFIFddDuckyPAdobed      I  !1AQa"q2#BRbr3$4t5񂒲Cs%u67ScTv DUVWdE !1AQaq"2BR#3brS$4Cc ?5"PMNT,{xuL@|OW=ଅ$lZ|&;)KjDӟ1OF#Mel) mNzdV?ņ,hZOƏ0}f{Y0Lx-P8~BF҄M)iMt y-tŒ< Vt+Sg,\BT>(f~irs™_ti 6k525?mCQ{}$m BYF ĊQq )|bHFZJ2" kR!EH Ҏ<$%D1 ͤ:bz&1Q3FSPP5ƅ=*Қ VT{ڃn8ʐhWx],e[nV#.(%J )6팄tFJj6Һ G1Y{u`M@1`niT yqèZrJd8pxA IQ<< eU4L$V&*$ԭ\8>xAEpk#r8dYNS>uç 6 M9\$I#$8rS)#% CJÝ0K5MNbxD€# + =fW D-*A̤©b$˄PqɈ< $@Qt3nIβjب*FӝGRW<$AӝsÄBHu"DBGp:ygQ &I4qvH GaJ Ӗu9<;EDrM|ʸqlJ&j r3INC'pA"HҤ.$RHdOVg/qHDIs?Ň!1.W5Pq# 8}@yûr]".n PTtᓜ58儘5"5̧lZ^pLT (4fw~ksK$H5\?"Je%%CFΧ ND@9Nx@bR '0 '*$dW,#q|̀ΔS<3$H0@e#O~I(r1*b%?DMGa괂sƘ"UZ vJTӒ_KTU*>lD fdoI# b#OG$*kS[)> 1WX :qm}Q&; &Ǝw }sRҺj2B9QsңC\'!Dp浶T8RѩpfЭH8@Q< yb2r}uPHvDi> {'Z.C(4m]idggT|娸iUGPy6yH ( m⾣`i>8$^ݤpT)W:8RGȲ= JFe_,RdN rLԴZQJyc4S›8̲6j"T2%f,W ]8:uc$i>` $S-2 x:k 2l9U*>~5&lB!rˋ!5A F;Icn3-mASj.SKn`n[]u1IW´x(ILd\^#:p@wk ’iUJ+:uX Q I~8Яqb&*).]RQ2:uєǎ9NWLGAIpY:vK7P <1p- ]@EG' 2:oRT+OJa"ȐC5j)1PE'>8p $SAJP*28I:`јVAY)&EE!$ZX!R˵R?V,]U92v[ TŚ Iniy%d}"| ZN(;,H(|jycsk!Xꂸ)I!#0+: .~(EEtAAI7Ԟ#: UR|H5Qa%”}Y?fuϥ9)H?kVd8ETCϩj9N5t#^?z%^;Vp]@ _y1efJK9hZ}+s$R?X :ztv[ZNd}I2]INT2,E3M劌8S\1,h)N)48'eXt6ң:R_T@fD-*|ʫe6EWC槣Ԥ \qLe|hK7l1D!ձ'9ӨVbf ~(7q0ds JqlҨQi#?b7 2Lil7Iu W~;̍qQ\ .+HE 'lt:a\6JRHtgGՄ))X!Ti*FLjXZҬ:a3' I'_* 1 )hih 劤J@e&I־HʕNyQM>b)(WgQ z(()W"Tt(ZX0U]I#XRsģ9m.qp,=K? %GXnZ\[dW,ybwV8(6<ɞM"HxNXRwk(T(djxcGb%b $8 JzsLvU-pB+5e H V|S Q&Ct"+,t-:U= `-#(uz[z PAM-Tzّ,pp] wYtp? VNjgn%A?.!CEx _#ՈH(v㮥HlzU\Ńr٧e 2&*B*)3܉T̠[*!M/`,9p(IEzhu#<1,%v#F5."b Zqu(nM5$0SH`IH 8$T4\;IБZ(e rRPeIpT 8=+m(W.q03VIʛJL'/P$J$&\ONTT%UTIʃ%(F}I Fi+>Y'I  8drE?x|~XwJE"uSM(4BLA5 ^E)-GH92WO#9zMu>?<:<$xKA^uTiNCe&j+ψ4nPPOP0I"># @B~*$v\?|8RuP]G?,"Rįu:G $,9<䨓Hp^ Ҧ|X$K'"TbO1 : (hG. ygZq,rO|RP"M)BU#,7U)%#ʼ0*q|\V!Fg2.*mܢ$P8 Wo]j["B^`N<,b˪UV %%wـ|f;ve]2TN9SYw*:ʔA8M<PZh26Xu $gB8\uuߦ띶NJv^hxS%Tv%D|.ZSKH!UbY (18PupJiDrȩF> ^rW9@D Yb&۝kF|VqZhjGp"^!-0ߊjHqI#!l$\djXL%gJE@|1n@-m,24gY҂:drV0fy \ d8"Jp7yIimhOQQ@E9^se:"fJ <) Z+ `2q7N"Ƀѹi1$ ˤCRuruTPu%1#753 7 &85D8M+ \*pLδEzY[ J75ū̚A? lm5lD[I6{Y"IZNևK.(C ejD*j<hZ% yvm9.'9sG=܆M"ْHIOÝ:ݽ1{>Q߮j*Q჆!"@Eʧ,:H֤Ӈ: Dya~*H+NM4‘椗 HRr H'21['2ɮh+.U2enm5LxVYq14h@BHSƸ20ZPRxĤyh<}'u/gEn23Uj<dž%܉JT@} `b:fn6@ [ dqMU:VP̤V,ɺRP?sBR@uEG-|A9E }Ր:O??*q_gCC`$.TUSzkB#buIiŊf jրeL -q8D M8ә$,B:2ۓۭg>C c,rQ.r+KIӑ!HBN0MTYӏ`(RZ8 5S pNd,i9V|)HIT +,?4Yi<>8tRAT9/dpHB<\>i!rPМFZJy5|8A>i4xT)Jˁr8lW$ZJ9JiU*~2 j 2x爙bTB|ԈuβudFx ٗ5Nǟ2^+Dy NjS ҘP4~;^ FUx@]u#3̎pӪM ~ŀ_ úC4)L4O!d'kJJxPb#jf/i-ܛmtuu8NfpZ#m|q7QB q]ZjNNF/FqUhiU'Ƙ.ƒn&1A;Si Jr6@ P Sq^-PC4 sÍ=:_xv~!n1ĦJR*):⨻ dVp.3'qҝ%BW.̸4!N*ԜXVdWGj5%[]r7[CQ~6TJ<iX-d6E N_n0%anj/v{%4Hk2VRcV׸HeR5(QȀZ!'|0?', اˍ1Y*@/E+¸gR4tuIJT348m gȧ^|qI(#iUt)`eGK)" ɓH: TI T, U ymY68B5YSQ^: TAgrAuUCwa:̣B5RqL Vtڶȥh"; I]+Q76+oY%hTm>|du v4E{C4G-|h9<%t+m ԥ<1eaʪ  [~?`d1E@]ԴJO, 3)`8 m+ HMNKI+SN/w hpE{bPoG Q~n!+8 IJvꠗݔQe3Y?%o܍Zx(Y%N;Kp!! Kt+zw\ZJi 4*5hԝBzI,>Z5llD@!zE4+^$H9זx3oS޳Usu9]D$qQMB1`7%2'tEEF rIq RdrԓZ}4̏#@NBx|)R`X>yIJ4)tU>XN .2!75#~~8sA{nd OU)gqYnS <H9sN (MFn2uꬒd*|ct}`!;q}kqS"J7{oxrdIsB@5pT@9Rl:$QI$+N0 QPF~Y$&VJa2)# Jθtn)%+ M5T$":R՗?'%'R>HTt$Ԭ(s4ts\-E:i "Ԁu檍*hk\1IDVL)R 98\eÕh QN5OĦ?5.hEx!|~B eP̞&$:f]@:fJ6Pr!&dajQ T3ZAkg_[vd6Tڊd$V--*"ֻU,zv?Qr]nƈ,Z!iN0nVVZMp1uȍUpڊvtEۇUHHSiJB:jA@ 1`17"jZ NX:΂+y ]d5$*92^82=BM}<[+ڼRt\0=+yjnl$ C0$KE@)Aj6 5ybeK@B(ʜ1D@"hH(RHAqSxNtFIkL%P :r!L 2n9JW pECqW̡ؔ4>^\df [x8J\et"E1HBU1 3$دfFT3O )]tT$9SQ5c%mÏi3hGJIU5cYmR'm%jʄ1ƒγ`rEP7i-J(<+'@ux^ҐIetM)pC6.\]$d:`F-=h$PfxgRXai9ZKhnJ!ef /` l_.-[5I"2.ӀBLU9HRZ9f8׈SUL@ h),TYP$:/B+:G9#xZEkJp>xgRp$׍|lH&~#L:I2GQ< =T5Q?Νt4RA591&tPX$J *R<xt@Z .'Ԑ 4˖$\΃'$ÙbI/ P#<O h3K)vS0zc^P)'W+(}<'x$U+aD%Ң: UJ% A!FO-dbibB94)'\O2wF*{hg== ƃۍ4uW3c6mh+ ^e 31'l׾B] c !YU!UWs oo Ѝ1 (0fY}+҄n.IQ2#IM|qld%Iti.(NM8Rst2!isSu(")PxjˆG Sh|ڒJR(9bfN"jOr%tI-9x NS%$SWVQP%#&$]c k`Ur]-Ʒ4,x'yH! q4a I4c{o-AsI.RH $8C1B/Y Tg3LӤ:P(4k\,ߔ梠92Vr ^@YHXRfVt|1-*RДG c+TX%' bpVC!Hx;jV&D9]&UNJ I ZUUx<]|U3PZJe ˎ !$P#1> !6դUJ#%sԪI+ăߊAK·,s8vL1 8FI) gxL$FjҊ' ,^YT:LA$*,":I&:F@9pNK+ r:D/ P:iȒ D2LI'H儖IEuH@RLMk @u@:JA ? rWFYk Y鄂)\ϝ1u٢q%prp M} *F*]Qn U)) ̡+]܃h_@iƼ}dB{Q ZP~6(-tJӍ9VjQWQ*:e8 /Ju$]M<"Kj-hBE( >d嗒iI'I; Sm R4z ]gv ^fGX+p4 ?QMHRia9<RTb!ϐ$:n"-fKԄʪxW;)~ TuQuS"}s;l! O%RRm f1uh=jDe*aG1eBBC W;MԲ2 æI^3$W(x׎$I)@fO'IkH @ !8INZ@_%IIHx $'pL\1:Hq)IT猝@3GrزG0a!H")\qۛIVtkg i"6Z,́Oo!:ε6D慿e;znQs ,t+ 7`p#EiE`"dʂzW%x>8s%YDiJ ?SƜ|!ZDg- H9 ߇<:]oh~x'Tm甕ЧI&?p*"mL%)11UP55tW $V<&)d.S?q (J,BNfӗ.B^7P@¸y?jt`eἑ,%U@^%Lg}`JA!A#W/-ARsӒ})yOyb(/M +A_ rcoĶ MH1-!4SXϘRv^ST!"iRU@~8glX"f*n s\1N n"/j5,$N$TNYe&*=ѭ@ 10pPY S%L'9yb(aT#I)QZW,1K5G"' xt p%?I6P(OMR">xpR*"me`-]@w.pA8ӈREĴ=:ΛȦVi\ml59,z:*T6QtYPv+萅 jN >! K!hQq\!L1HQSnЄ/-%jJS? L2'qq ]U)92#F)[`KJRr~9$ǂTy$%-kuT B2vLFx cıXRMN[1Ԅh31A'`đJ|ԜG$SD O6leIK },P 6=^t". ᐜH^Ԟ<x>X%í ds,Z5 ,b)8&4||Mi T%Fy|\WZd(PHuk #$ #|"VWIEN쌮V丢*a(lN ;-ldGu?rbw@s2ovwayG |<ʎ8.y&#%/Ε҇'RcaDv~wo+Ƣ wJh(1hZ،=&VdɢY[f[>ZB>NƁTBȎ>*2[&΃pKP* @>Y8zX,Q(K(zv:򝈨VIJUS*>9୿䛪&љQ~)Lfcߥ ۶Jq̲j a 4ާm}Bu*7۞C! ?p2~X鶿煐#ڸ5Sld9ܹ~!MiPD:5Wۭ/Lǧ?mdD-݊y ۍ)fKIHƴf%u:gYizj 43ĝGBJqG ԅEqRs!%LV`9fR{W?'%,#4#Rm ʍl++'0, HJ$"JKsSqŀE\=^GL %co)+\N2((kQ!2㎚CbPvph4KȑyL U1esHx#%e9)k_I +YI.eSb6*`Hp"-twD$#̲&mq2hU$4YeڥW:nctҡyxZ(Cv+Uom^)x㞺FL!T]ų"3NҕjT9Waa%lr<+0֒T+ 8klO ,stH5ώ' 8$'NDpDKi3~-'%5DLU!oqdT۪V1zf0@wWxR#2WY8Şȏݚӫtv>N+ϘE1[K Um|Rh"<HJ#TÄ 'ƒ<;(.*iHiMj(/P@'ͤ2Z)L(Y@כrVgOIF C[HT>TSD|H}an=tͺ i䯅y^ %oO#Ȋ&LucV;,dWfѩ:H"k.5ILrp%%//׉{sQ]w uQ@}.-I@PΙyPa/[zs9XIqI@JUSNØL&F+;:TCx|1!D\4 JME"֮Tx KMX. &,Ȯ&"'hጀVd T|x`-꺃֏O黍jeޅt6KiRDIJ )G @+~%_!x=+zG"g^mlUjopͳoMNi*~KG?K Ҝr{ۙJDw;>4@ X|ۓJճ7WuK*R.Leo狫G,wH[xwf5ITksRH-MK&?`0tMwmfKpFoNuqqNI*iȏ,x:+c[e-dvYGf;w(X{p)= k p q5AB#\]߁X'~ SnHT9փW&II0-ํi2\9`#R S4<RS '_m$ҬQ!u Iq#1B00HV_ocH>/WQ]QV$&FB1.l%c^M>Xw3y.#R e8!COc[jBEk2,@[_OjD7L$эh':\M[&,%Hq#ƺy<̫P>~4YqƔ%Yҹݘ"Y^+$NBEMuB1 )ْ:rzS@Þ+ҟRj T1ҜɓE݇y22n_E&H+~Sl!"[J@d6J#mſm.JtyQJ犑)2FXL::Hd):X̟,$˂kZL H gp&n6 rt5yg@PRl*]P! \-ͺ|L&ʩe|\Uj7Ѩ*;tle%R PxoLpX[B\$0 BH8X'Ʋe8O1%2ˊR 8]IiBjRC册B.dK@y|0L9)*+)$5&aJI8S@(*0%0 B(G#ޢΒ֭ Rf80 R)7l* PT֔bJ%4Vu,&t-CJHTpĥܨO<0M T0;.#ĝӌ QGW*a ` ,)ei'sF < uƲ0[ P-:=B K܋hr`-\4RO!%[m~NiWLQO2 (Bs+50ϒIվP peKe JQ dX#,ZA ()0\*5?,(<isq-CfYn-3!nTxUbzn2.):rvUvx[6`D@'O{D/Cm^k>$]n맧n;k?RC1Jr}nSG2GvtmFO+Nl/ش[cۊkT+豫#OU LfHDUm86=R"ఴDPIs!a48wR6cEί:{r#+TjjI9Zf ' 7ic}-Zmhm̏eŕkMuRU¨EqH1'Qnr@(2 ?%&hs SE}9 y }<[HḍkD(DeS~,D=@TQ9r@>Jq.B W2 ,Ò wo)ŦՀt5Lnw:Dx*;pXxzv ["YWKO?-KG2DHwe7#lK헻d4Hfڝo?$~#vxm{E Bw俾QOwXXKN[d$~[#uwūHpTulwg7VƒU!N:2TI5ׯίa FsF]?9c~4tuuBc~_`d> ~?A27[QLG)@U.2:o _iܶ+=#62ܷ7a5pr$gyE(ZT)'):bs۽iQz8DpIlZŌ$HUo5MYba i7zuWFw3KmTl,Bw=VLϩqrkf7R)YjRjSw].jj%T:4ͩr;C6۔*swq}1d&J[S) :<H;+rr 흠`KƢlQ$^qn3sN;(=N;P'cUh{~[_7,稖S͓DjCi:|ًN2sD%Tgt*Ury˓M%8‘FԔΔ@G5 nީP.W=ͿHec CT#9:J[ϚHLq| G- $t㎛)49ӍF ,]ATYkD*cND1C"8%jzg`8KT|1PQ.zLRb2BR>8*`0F LڶVr,5b+FܝooPaJ +M }_ S 'N[bD,H>BPZɐFjr\"[ɌG$%,I]:e#8g#TQnyɿEȪ%<(\54V`>5%MFv_q_ٺljyTj@ qܓPJZQ ]{-pH효e?Qn_َkvmC*TDR@ *ʘ +6%I\З@d͵؟R Ҥƞr`;g.[K#Ci>@p#6)Żo k+*REgY^!mi@ʇJx"6UAԒPW-jG'j: kRy\*>QlC*תPH.6DXPgA R 9W# ,p^܃PjqZy'JO^C߼9H")yHdPMs\nw mL“Єq債),()$Vd_?suY&F"R9W' BLPʜ b (wTJzj< ړBJBJÒDbkDTҔs+"Ee:谓T)*""-(~G">8q']5㊚{{R Pjy⍶c;(3p$4bUI6lԪtåժz ~~4^ nZJ5ƙjA8pjj$#^AN("JqH')Y]cUw̄)D}.sٵ9}1oUj"]hH Gnc~O-SLt7@p@oˍoeَqFPR8wn$1zMcNc9/1nB壸}r=~^rC?|iϢ(™coiyKmP`}a?-CɲSG E?jŗOďGq2ʭ6Q wG#ё*~C Bm7OÊvb-*乹u:0,0Ԫ%3KB9WIsl[ "=_@ QU+Q' f0ԥhWaI|UqR%e-j>X?`t558 ¼+jXJtIʸ_ԬoJT-6Ay`)Mb%E*>xZ>J=4kKK ׾&!֖sI)O"0.=HI ૽ gmdlNad>۲$D 1~?/3k0KwsF-\xVD38B=AI)g1SiRNC0U5]UK}ޖظX\X t.jPKq)Ck*RTN<1ex e Tqܼ8X-gJvZ\9XmIBЅ:RJ1}q2Yl^ݏ36~ON[Fp2뇂!ƂRJ8ٛE82tW'2{wq.v W-Cjg*TT~#i(fkan,Ž[};< oqunOIvt]w=r}hvBZtuYP{eY{ubF){ w~M:!ń닅.$D%oZ԰\C[-.+s\D֏!Nܵ{Z)NjO=4YTԄƝYLbO]7d밦d%aĔ"+G oCq#B;S!ך-lq8ڊ\*S C$jy#"ʩ. (hIU$AeeA8*8%˚3V Z$@+zޠ' &:ׯBZ7}!?qDSftGmyHG 0Hֈ+WhYh)&5ۋꡎ+Ii j VWIPebE* Ie6(~XRLr PWfҜ)b9w @u! re']PdMp`@5X ((IqjR5\jP(G [0@fz4`YS`t!**zZ]rŠ,Uy{Y- C4.2VNF߭%MY5C+ WzW^+\LbӤd7BT *$%\2n{8,\.?K3HB'1ȫ́ -M굏vGX]Shl+ O0A#]n X~öM 풲R۝-erM4 ϟcYpy,+KjAn'2C;} 6ҕP +NE8cKqM8w-*@i WbZ+PiG|HPku OmoJX (Ƙh6.P˄iWL Jx £F=kX:"m{k*J@}TYr3nU$p]~cٍho)GH\)Ar!ǮT+&倍x ['?jv11ԆBܔu PRǒp-J dDDZ*r)\#i\|될xj|anu'WmRPᛤ(a8'˳[,#V Y86XŔu+[j 鳏SQ8VɁ`WƵƚaǝu(TBxPb0<"SjxDȦ9#/K J~kb <y k\-:=X(JfμU}+ &fD^Lj̴zi@CeG<0TH&;R %w Ur-5Pf=* q0C˜19)*PP 2JD^^`^*D89e>hGx مĚfSZBG B()./ }`p S]RG+:˺ b(H` Pcq>VVW.TJIs,mHGA+U!IS&J S B`-Ĝ ~CPU<!Y|:Y܄? hFJ5n* YY6+Dt!!4WЭ֔Z-%o֟ eYuDأ^tҰ9g+MgpA HʦFw.3 n@|-ԕU5;cQBTAxP;ʽX t%Hs}ZV +qwنTt7y.=EBqU$}ī %l[SuBKA ҧP$H84TЦח3'刹MEG]C/4N9i⣟$Eu,4$,2b2Z_w}8%Aҵ&}RWF8γx򮗧cX'2W\ɏ"3덢49 1VkVY #=?ciaipd,[O0)@#ҟ8 d.ͅnDgǒ7}w*lB,'%8+TU$!4S.fMA9,nyb`CWx J2f{ - j$Q TsxK%'=@f}^8II-"?å*փ㈤u: @ϑLFA”R2RCIJЏbcDlJTVj݂ 7 a%@P$ uvDpo&9( ~ e⮅)Lq)Ri?iRy 6v#%-J!(SsFfX:܋|W~yHWgh( ?hPafb2^KN!ƀ5KK ̫w^ܴ`]H2=>-/%5OM&:Yf:Rrq$ SꓘCеnĈ/ =J^aP_~)/|?U,;Somz6K[0IUGb(+v^g-CI/تe$^q `ʕ|>xδ@dG m=™^L/F\Fp8Ϳvó{VߦZ~0,ٸ3o\z ) :}HKd0?;ΈVCc"UTVI ~ 2(S~B6URVP 'M*h9qMZ3/YιUAgzKBѸ&AqHmNe;ޗLb o1s }/A j;dݵ-% HJ>YS4?V,{Z/7dY.RM9T4b[L8'3_`{ۃb}F~]L ~*sb[ \LuWqo"Xc[ Ox_9绖M(ypɗT56iwqoߐic+>6}3}떓CyM8s 8ſc(V7KNeamOivٶPlS)iUh 8XI ےk\@1/D!)Vc:*W!-4 D9G$˥_.$S % ֪Irr+W*c2p:ǨPM' /ϸү*5<;L8I-RRCr+zVο2,㿷,L{.JWs\,% ; D#"T@ W cbb]MQs3+7o~en=ɋFƼGB\(AU_b11jv7λƴLi3mwXgGZ-0q:!RtZ Yl͈<!hmJj4h6tSQuTQ$+e_w6)R6xvg?0gꕕ(%bXx"\vʯ.oHŹQ.#ܣI/2J4@$)^XۉZNoȞk* 3ՐUHZP,u%c(DqZ$Ic"8)V^ J4 qYvSlR(pc2:>dI!9pPbH9 {J i4|h2$i= u#^ZԧTc+pX欄qh[Z!4AI?XP'd@n*P%UHF&>BR޴)PTi#\*FeE&Q*eZjX'Ɉk&]!w-8!"@ |)On 鰅%CS0A9Cn!$A7WW48`#(8Kw--a %'IDH -ԔhԚQ@[afcV,?+\J{W5LٍESk_ nZ[v:c)Nt, 'H\hJXL}n-fIk;rO`E{fVyhRcf Y*QݴFr[n7.F; m:[OA(RBMTk^ .QGjfɑ$62nAkRI $݉ggQZ.v)ح.,d/}jZK%cI(R* <1nhqے뒝vfڷpC2rAABڔ$a\{Q3LVM״-nAܗ!"$T]m 4J=6uI>xϰylf$mLD~վZYXi [VM'KIP9d),ۿ*@ptbt )Ys><1bu|ZC- 9bɐҭMċ2chk\{,ӒFd:Rqg:Qb[5DW^^8ˌSe"T pLB@G" +h[AۋЭNH.,OЊ,Rx2|􁂯6eiIJ']4ˏBdTfXk\նڌeӻszcDAN\뚆.c毺;{#A4!)H]PiU2`T'U؎gr#ZBd.dWP43/k*R6Prڙb1*I帬[ M6&/aļЗu[jS|՞X pnlٶ?_X/#۞jE%@%zΧ!Hʼ}\y6|mKJRP=Y52ajrⅣ%Q)RSPJ?0SjQhR|rTE I#(1M IsP՚ӣzm)5X#xwLS11Z^`L͠ WNGJZOҴj'CB9YWLA & X*%2Plז:Fi KTG%Sq)Z*OScm2Y{ݿOoI~KV. $%:&=cm+."mTo JI<=EZMRHsǘ_\kQf]ο4?`'Ѯ* :N6G-5Q0Q,pEW>籴{mDe2\  K'JXQ}@։cuIor;~B{\8ԗTGI3P5Q'2ȍ,Ѥܭ7=Ƕn-Oۭ&v:}uR+uhب2vm(ɸt'Wojm0ebFpjoRN/R0gAˢD =F@'[o%{խoEMGm:D" a-n,A%? ܍q&ûϞi=3 Ňp[Brt )B BÙqm^d 'slYy Ӊ׾K l1Tُʛ :HӨ 3+'qW%]h4u CKu@RxSèAN?,:CQU'M4N3#K `M:U$ȂYv}/t% ҉-ƤBI\fx,,3Pd21j iTcy֨:v^w{ #)ڙT)oSL|X> r{uŁhw[?vO̡ebjv<$4T} ZHVJ!VJ2[۴o֍NAc:Z[zI#PI<0PH9ħl}Bsw= s .Br-xDQ`WON `NMl.*H_81LN\pӴ'Erq@֊1ADqFr?Z&jonGɪI-HQ8|߆B%.g!_?%hCL=*@\*9kR}f 21ॊL8S&b-u8yWҹ8+,T]k.8N-UHLBb,u GȀp TBu52I# '*ZA$Ce1?l~p]J~.}: Ȥ\OGJrWpJ=ZW.dθ[騪8I%~,!I_JCHpNXI ƴK Q朧  iLQTzsc' ta􆡙l"S4KM^(̜gݹ9+\g]͹ۨnphIیrԉ-1L.*+P)PsY`ypWB_=ESni&3#~#O;K7 ˝=Ct I\>r^d9ݻPmܟtJJڔ֥R4rJ@Kk(!]ʽzX8f-[FPIО#+b%ҤIWuBeۙcЇh, R݅uwmqβDḣ)DT-ZL+Z]s4 Żm1s'?DJòljo}v_Ť"*jX}3 CͲ^摤R+4t(bw +m1LFg}z]>d%k%R[mQ !gBGsY 1Kn6͜#>hiP(Řu2B#Jʘ  /%6QM6Oۋ-ٶj%e CP }ս]Jө$(-tωF=4Y?Bn*P!6C{rrl-|[[q,-0oB9'|n t׬XoXg-nL6ODGQlzt%@SQ\]レ},ulBdS44P'OGVef{aL~,>Sē¿ lĜRYXE  j#mkQ3o<:BXva- DF\iAJIiA!δɑ$~ӓC-,XJPWF2@fQtԤKs:-sƈӎJGUз {zR_j/rP[%E*yPDe][s).;n9gkqWO!܇r,c[6]L!I-$VH2)㇗^9W/cܛ鋤#)b I.)BR WJ?o]5Z;"̆Bw VxK6TM+U1V[Q}VD>u̒Ћ~ǸrIY)_Hm*:]2i ۊ`:oXBKa + ͤG=$U?U?%%v\$‡21p5SkQPք.FO_YQ'[=n",% >k!)YlSݜP1:c}/̬9{rNJVR)@j# >c^zHc9O0ZIK:gdE:1Q@C(egrt~2xbq JXo6Օٖ덱kQu`ATjK.Trnz3-WL^5~t{}Z *Uk/#V^$}A߿4ͿCmm=qX,1V>_[Z*L%.Zݙ!(5JKkrÛ,Omʁz;ݽiL&QSQl!h*ȷ^nU|opnF'egG}F}>tBǬKlx7;r9`SCY(WB_5N.S?*r*N*K7|u(ሚՃq0xrQSazGlMې u 5?  $:\ |q( f胂ww@Y<-eQ'tLmI^᷉P;'c -nhpOlŕݞ*Z6eiqԊq1L[%+Q 9%U4iԢ V 6:Z%ֺ||26@n&g {yf򮏬IB (4DVs#h21 X;nZa={[[Y >KX" fOaQtD68sm }MjnR RpXl'I9QrMX,elAH^ $oK#;0չdUj2&npd] H V۸ T[CUOR֣@4 3Qb,4ۊp*mjx9ҸX9*8-Qnޓ2,[n㼦1ˢSIUBV&uO(8dʺ_Fc>ܺi,"JA$ha޳LYZwvȂ[ݟmth#JJ̥ ,t]8ʼl:gM^,2Lv z]\ɾ P]g!ĸ!d !*l}+Zm,[ƐFjqj?D&0 ϶3(\M u*vl䴧݈5: JÿjJƔhGT7a`9,Ħ%D%UbNNT<2`1Dv T'Pf~-wYlW#^nnجpǏ tCv8Zˮm' ,zݎ ZL8GCCЏ*{oGbv}+iRV陹n5zD$zG2.a*ٱl;%=H *SR|NH2!8ᚼoowV+SܚA*^@pVѰΩ`o/[d$n~Jt."9[#lF5É!,aO#p'9F4 8교8S( !mu%E`Tg3Y3/`V &//ӭ@ 8$ (YRIe@{L G̋(bimBԯ 7=\GUąք$UN) 3[t5HRTe 3> #T)O,1,7P=]9`YN0 oÖhr VwX g,-䖔e\x'qQ5HfITt` E@<#|q&EPR,~ͩMQJAp‰:[Wo<Zc.ܳztf5I<:D`DR~^,kbmleB%6-&KN, ǔuFf`\zx1\2+~5\$|ty)D 뢒qmdsZd:uG,L3qƨRMQB45bN%)5PRA~&)rEiˁ4ÒE*!4Ja9N z A*DUtyuÎ%9q qŶeGL'E+^uV8]Vej{rvT]i ;% @[HeI+)UV$l5z}AxGnflKͻ3&n[N)[-jaR֑UO1M '|E>]:^޺]^~ߏG&z:iiu! u:H҂daɖ T] ǷY[{p1c[ g3-97ZIy*:k5C<r?Ln ,ێ%Pu8gcNyqKM^mF2r+_6cwٿ-~gjn=d%UO0~+bL)[7fI>Qcnͱ(Z\V!\RʙFNW4NUR 5jpҞ28*#p\];upIrpEylKwzdwթu:: VJ!M2>6H#v 7&@[665z֩ %ۣ[ҵUYWQӃU괳_!?ދ nVjKr;a_vUu)B?h>GU70yAWnvUD@j{T!40ڛ%µuăUQJtTcY `#}_@W+=J>TŴW'JjDZ-čH ,& 扅?Dz dt۩(ުAJIT1L?̉=Fq m*r2&eETblwtN۸&qeBێ}}>W)[2aҢ޷eωBGTu R7Qndz#J447wB7k'VU2ߏ@n[nS Ϟ[&~ AUQLy`XJ A%I(ҁPxBZ$u,~SE>ܫ;W(ТܕxzGR}4^䀬jFطnۚA{J WA PH7I3wޜMIM~:18c;-R lnN׸QtӦ # E78Tn۹4->%E aT2!GTe:Ghvl`}asHſ8AT@>j:_o&%-QL^BK>Y)TRaA>W)?<7-#}}w帙!*Gȍ ~qht~] z:PB}U;hw_h$׵!\J-,j2uVCQ/| D]|!j Mi"'rzEtqb`*eN3 jC">8*c :9W) Z\3(" f!)JhU1lajbTcړE%< .<1?#Y/cԇS)i:F pFr!)A[Q UP M'IQKnŠ!IQt%XrLqX~7D.+־4F.3!kqUHB+'CwɋM nl>dfZ&4Z[+iBTP ro5D:ؖVW7S׷vz6ˌf-S*iW̚|2Z#mpTᘴ@Y[&re8iVGh>\ZmjMi RTA\oVe&~?nloŀZQ{0t&zNZTPMc! |[KL%(^qv4}LXw॥"JjUQ@+vRÊy+NdLaSc+zj9SFjX&CrӍ! p$Riqy8q\Y9Rːs(qS):E\,%F@UsҁUulFdOP^أw", q-(D Tcj8r1 ɿm{i~gUٺuo(UR)f!DW[i?.m;}^u?#[v;JB 8A2nwyH=e4DvlLܲܒꥲ'[20fTտo۰,%Pيy!&}J"FP"]ݛ@fdr[G'KIDv5ԥqF9"kjl53vL7)R`4KQ7<2mW֛hm+lDDI :R<3wE &WYȄӟ'9"Z@U Yq0( |l([#zT>ɗ, G|Ds}V%kP:@QJV0K$3 G ʧ,sJ'& w˳nv5lw^\WLQ*}M^#v⹎@YAvقwou^vj<*H" %dǦإ"vPSہL-*L0Ru'M*N+$z УyYԥbEV]2Ri5p802boBi~_k5GRR[z*j[LiSi,8IZ~m;{ݖѶvǷ9i+q̹8ԥ1,֊YX~q]% 'V <+dRn[mۤ鶕IChMxTiL8ſ:kϏq㒿k%-'oWS}둶Av%(~Ͳac! >D[ޢ#˰i~'Q ̖ZCqR[~,;#*2R$W-]jd-xvM;;lw-lqn,)Kq)h&<=zyݿZJEGtƪ'.n!;7i6 +cMq(#^$"7V&2]/h[rwmYv[]N=[nMӎ P ylP p{ݎr}(SBÍҲ4cF͠. F/B PRF@g/Ӏpd%4ITe 8/šaU#Gp\Ҋ f&Jm>ԥ$aR'J -G$$ׁqe"CN4&yXHɆ)uII(և *~JX+,'޾n~\83T!0iAB%KXL"+śЋU}iYo[I Y_C\=oJքGwZ kХ)[3)Hɸ)դx#K ϼ~3ۻgsmRnK\=$Flu:qRܘwtY7T={[fޑuomcMi3 AX)[(@ETV6+2Lf'>[}L/k^v;R&A3q\d&6)t#HΊ>uۧ['s]msm/V}lߏ-o5)32M%VE*ŶB&6=-NU uݽθn}6rcv)&-7'D 6X'X W;mZL_Bi:_׎w's=P1VqoBgQ pT*Db%V~.H;b7%80A |J8|wCl2'Jp@Y7LIq *JRQQ”ݨJ` 'nXq0dmGCOukI H# B%U)bYIJWtNtmTʹuы>ICQLgl$JL/ ;=k 37F %burMGOC%ĵ'}ISz2* W冗QDb9TLܓgK$%n 䓈AI&Q+yz)ӎ$7e#*`;Fۏ9tI%J2m5gakHPKAۊ@9gD*pNi{<á>[Y*+}ħ,ϪXDc۽9FvT7 nHP8yWoRZ$mFR#,hpZ.hqg /0-])vŅijCyR^t;V: 0lPk}Rγ^;-?ƍzl HѤ-Re{f zvRJcTR */9/F-7yB؊ Pi*hi6͜)[Rؔ$!he(K)\40JF*Ж&9u2rkQC['9$0m)Rll :J_p,AOjm%1{}Y)fCc ā77XL)V *:WM)> IŇ/>ޥ~ݰ% 8R8gRkty5{iH:gwؒՌ֬RAUufqimuJԪ2s"-ky鎗TR(1}(BdU͈1㕩$A+/!>C!->+3Ҧ)aF"8BR2̲wr? c2ܸZEj:kZ"$902w8w`| 0lTn\6dDEre+zqjcHt)!)>A svU`nGֵpǺ[Ųjmrtc4WJ܎RVMRc>[ӷV7~D }v[AnciHΒxg㘲] v 'A-L'$1:kT AE}Zm)roM.Tʑ;˯ 64bdC}9X QԖGh4<JȌΤSWƭة< 1Tud nF[NPj?H4v7,pT$ohaKS.-l!5RI$ 71\ 8S)ɢ1D7~"鳯=TXMlG=gi{ZTQ<]vOĶQ\ざX/W/ D) B{e)5c?Pql;z{uBȎ :oe 4Ddnjx<̶~|eK d}J݁q[ǠgL~im\#\!"n3 Eeَ f;hmJ@၉'2*IͤJ &ʘ`@BS]J#zk5Gn'Lt>8c&Q!%*'VGo t_An!W򏴭ߙqݶezT^p;e`RN\qEe !"^ĂAbe7 lVOmLI ZYJZP9eو Zo.A- ^%ѶnEGN,Z0\n=92+N8 5oX{}^dQ=j@v;=omeկ-'ܧE2ݞLu 鴅8N`x}%p7kqyږ;- ,nfĚ џ 9cSud߽[a$1-'#܍7u5]%W;`Gs>ه%8y$2[9I2|0ܡNL '2+sC b/n{nZOZEhz*$ y8f2$I #Z_6;Lp%ʐC˖5]K2r}3YlճfZU]Z$hھ/R ~`u0G% Ɉjt~D;<;-sk3-oJktHeeZj*3Y\vdY-wy 0&ƵzU3=4UΔ56mvS$`TEӽWy>z"Y.sZa3R.K!+ Y%J*B=25 $O`o%`ioo6F;m5lr%|ġrhi3:GRS9r6 9{mzI`}*7-|j90z[ iodjI8#̈,yfRn!OOjj+H>M{:ϱ7xW#tZ!\P5W 7}߱Q.=[8p8 45A%He  =NUgRPQ>4Ixbbtܷ4gIҐSAr'x^ZvrIuJs4a'xmdȐ2>yH!9*<\X\Y:IV%LM%!%BeiI%PROyVHK<*->j_O giFJ@n#hT5J-nZ Yq1Wzϸ&ؐP&V-GP3LfNuf8W-wyI?p|1Oz?45fqN9 'Ikομ}ޜQpwYi`) S`RSL얇^_\t UK>IuCJ?J'iMD\-J,k^hH?%j8!w5bM1N\,9iVs`NŊWM)w-N}dߏ:SWUT>XwBЯ@m[}Ji PRBsޜpEӜU)@e74RLi)faMp'3 2 qCmM8]dN&\PJʊo8uKarqiFEPՖ4cʧ8*hb+0%Tt&Š q]rnrmØ 5)ƒBZ|wQ 6V^߬9n8-Jp_+3WAȔZ s/(!䰵:s1HPVz wu+o4J5vkGI伥t%HJ@R8aJ3z*]=O*G(MƟ:k6"=ͰYh:T9|vn$%aɽY@"x.6`"ɖNbTR@R.ԕ* [Wlnl~W;Kc2RvN*4i7%] BPOB+m r$veJ[xJU &jrgڛwR?Ni 7!PM8 c&6ـlV%^b8L[ k@*A+fYvXsmHzH% (P^c@5\q[+MGSZKKlPTt<LD,|7]ldD&\,_# pNLBM1tPdg_`sVmom, BxixN2-9 \aS<{mlW2,k.(еW(5q7B|KzA͂3vMN[!=^N=F#@Ƈ@%kpQD?o!?-' &H` eHHb3LShuŸQPrTc*qMSI 89|NqymPϕb8b^@ RT΄ё;iҦԶX뢋+pWʄor=ۿ֙"[Q:BhʕkuJt%bSJ?wGLYx,.Jv[ؔnO*ӍMQu ώj+CxҦB7ȅwK߰> E[*qΥqJBb4W#'̓>>\>J+/̍ܶlFݖQ:!%tdʇG$w+ ]c]Cܷ-w?nrxCn:+1Q\sP88:F\;:yI5vK y>y` Jӫy~^,}sC'?ׇ}߸mvKWf]!t2Bq(%DR9TZ5#F ;u-Y;io0›Ƹ6 ]DQ9 en`&?Z `m6V>aB$gV1?"d% \ЫIRt $dOf+6b6!f=o('QTl!g0$)D!IzJJTp5I8GNiğ$0DC_ 0L5!+SZR iޝ#.[m%kJ ht$S!mN RVY[E&yHJѡBSd3@*lQz=Z' MMu=eP Bc] ? )PBS(RÊ.+U X;oC{A} xXO[7qGfuVN]2oP:_SCn%IZTR(2>Vy 0?5NnC rBv0,7blu *Lpo=IqX!%$Svzѣ>*L{-m)޼b.ld-+b(1R0v!e7$B!.2mq(XPRJjڳd@lGvtF_FGR$( E|qE:q]1qvm4Ģ3}4M:a yU ִcV]KׯF~霠vFueӵ8)_SpL7}i˔+CH)r \ yӸhq ܭw/7m폼{El@q)`s$WܴE:~ I3a#q8;$!;,]t in+"J>re' ׎$(#4r]$FZYHqE>?ˋUe'?yAfA\lTWMq\qm?&*CDItUMzbLKDSj)8D0ۧ6BDSLPmQnם1?$(=I㉊UfSsoQⓗ /%7{y#^b!o\EܚJA (V//,zȿy q͇)y)KoR 6e5b%ShIv;Aj$PGIW9 2)KKp־:_ SJJ˶d M]i׎]Q[q"ST~Iq#1N8)i4VkxNR*>&p਑=9@ I?V.1lobg \)ćT[q u x'4|{ۨ/n챮,LȖ I\ B^2=XZB$ ssT[-PefKI% {G z}P>rvYnmkFT]I4(ꖒI yqpDY#芪[y6eΡ"鰩(XH\)O<1= Acުp,I~k%t}9m沕ɡQ1"Zu~82?T8mv"swcςiN"ZSb Yb˭'3C~V6k\rs.{m qMHSjiD@8eb`=b:wT乽7;)\tHH\7PπQٴv+`w[ 6iSZnlWTʎ($,gN`#HWq[$~"pQ8ͿDUbn j౩VH% 5 k匋vǷhGr%:IK% GˎWFh% SZH|UJiu/JhÆ.$.5P$j -'5ʟ >4m*R)&5e\-%AR뗫11#)Z%I$ A#A.Գ㈋lԼxSz>ҔȞCs*vJ+$;H=[t풜IX66QN v۷?{X˸q&{ i!*Kk|jFZ30 N=]1Ć"c%d-t߷bD"(^ ;QZH&]{`l4ե,L)m)zP㴶ߥB>~O>)kުrΨwp[z)"XR~BICN+P)AJ vPdԨ]v W;c¼n6wm4eRX*fSdH"1~ߦxgYF;7r_-v{{3>u Ν 9ycR{ #e*G0\L2n!jz%3Cjz#i`9E$-&qzUaWӲG}øq%ZKlpxqcށDqr+>ޱY[lp=.gDbJmUrek (nl#|{÷þ5QMAZ:ql>PqA7nf?+wl#۸m;NnQ7-Wx ^&@nD;{6^Di|wP颊 `Y\jŀwϽj"-.2d!#YHI9yc8dNJQ#'ܦkX7s32ﻥݪJFqFKZ5nS넸8āYg-}>sCwk[W)-Â[lRR۩ 2zwڽz?r vwvr/],nK O:p)T8sWnS`g^X!ꄹ> 2!zg>gObJ6HJxwf* w|ixݜuZCGn2J}HE/0=9w w?Ĺ G:[U%+irez svEE?)7K<864wAd%iz;f*Kkk`/B18Ϸw=%e{I[~u]s/DH4JAB1|~8AV.7<\+n[ܴFDlp1(5sc=c{TpX[ 6g.<~PJ΋oaV_e%)@qj&'1ϽH%l;.ѵܤ^_EmGynumͭ[ Kӑ给sӐB[nw2frJdigZ7 Cke)Kz=V)%Kq Yg>|8!%v.jMd%ǟ.hvץɋiYm+XsO'*td`-ed }65iq$2.֖GLuU.)#i@-s0V}(H?Gى O`涽lksp7 X_A,L)El!(N݋ba&?j[m'_I%%kz:$8Uc|nUemUmFS5z{6AV]', ]XվX3buh9vo{ͯH6K`Lס@R,ZhL , zt9on{-h sf m)r R:H_5Ce"I<$Ln-DY"n(xєuKb.N ݈b28ڏNso op#DCquRRˉ[4RCIl@C ޮmX,{ë~U}4w6J%O@$i1e ʉGadPM~X~*:aТ:M( +׎%r'ޔD!GI4GrZ*`iW Gr b< Gr|?OahKPQ:*sIďtώ,ܛX]3HYN8Zy&`ajǑHC694֞_ ?9'Ԑ\C8&tEC4rQ[*jA̎ΚO*Ӂd\~0왗~XL/mn #m5wv-wC˂+1a-jR.WOon'9l6oPcaWtG` \bYI0IKv{&IP Cȭi={ p*o/fngLn *>ҁLmX]N.ݼUàlɛ( ?(6Nئ/Wbl*SᆗQjf#ᅴT&Ƿ#m{nɏ1ˀaRiDw=BMN|0 Gq=i!߷I-"wx ,-o ?!(xgJZa u>$ZR*ݿn'[SeZh  QN-ԥLP+=ZrǷ1}F3n?4 L>N\M~8dz1.ܗ7 .0IW+׎|2tDz6q!io*c̰Ґ=܅)tQYQ!.a.اMaG5-H" %4CS,L1WնY߹H}n0ዒ z!6zSUC)ڟq:0BMqzY:U@DSէ3 ^,<-)ꐆf jYH5仦8brgڂ} X-#IȚC 0*qq.qifI(q-%N3ይb.PGȉ:Ϳe)Bϩ %I B[!Yoɑ!AE(!#Ա*=^F$Pwr^lmeP8HHd,F>0)BQȆ0 IH4"O\ B$*,O]Pp?y1C}Mjy맧R~)vIkloR豴֨ޗꓒ45郎JKPlĵ9l$Ѕ9ԩy$+P92C)[ ܭ=֤yIBPjHpr)T InҜQq]a%,Q%}5xSf*>tA]׸Gq ghFh)A:q3Ӛ͔VͷvŅ]ZBZm@'41 1W R?OΏ\x{Bg¼m&cgC)hJsθ#oJYr8zn S*\:h&xcN{4 FJn4!*>i1#JR +̳M reQZmc^Lhڼ"4㪼KrSP}11#i-Wz}cS9`&{Wg\\S C-'RZj+gVDnΩ{H*/כ}bE*gDsKΦ@3 -z9+tVL<#lL v3Ï-RQ Q %J58ڕ4!.K5WkWv>.KfoYqZ,)hJTT38:m9.St$?17<)!ôaӒPYLN_.'5i[?,Y`d=ʅ7jZ*~KKS39ccyS[v*nhv" yHfZ?D8 r4(S Cʧm#oX`*_>fmon rK;-Gs< @cu<ϥCnZ8N[DLߌ RIBd@8=y̟ygvnwT*ko* j|tǦc *+yY(`żcJӐArzTǛ 8hkq6/8P¥ORTFAi#1hi{vyj~v군XϦ;LN JV^b #qf[* ZwvBJںCNel nM;׻tͰaP #RA4 %Ne` 5dN\\RmC3)8OVQ][Lq+0P˾(@q'k-\T-Au|~XZ6RlwdLm1`@@yNQ #$҅ TI\q|S%(iɫ ]I5b?s%0d롗~GK W-t%Rv>8SJ֔]TZ w}ɴjQf %-?RGو}m1RV`%jb\B^BBR"weFB8)ݑ-EQ%o,<,DnO5^aȓ\p)JJ^n$_-JW+4X&5$]MJ9T›MY JhhOqL*m-e(ڻ mF6LH:[upIJdHAn{kѷgudVHNא$|1V޸0Uy`J (qHcH_7iҽru:R\5?/HLC %/8CZ(>8(iN[ҐXZuduU>Xc[y D]b$GSH &1Tί Q*`kʄ3X\oIJBS[VDRGj5 Qs49ʰ ɢ4v3lz$T]IOU kqc4 :[RsZi.^JY7z+jmlariV-$ґhѶq)W"X7!Je>ӥZ~L$3WWh|4J HQ#F\V&f=Rr0Upu le1] q4^x>B>#e  d14L(2iN~-D$ x0i)JyRt=55 BaӉG;W;f(*z~+4%k/YM˥ԥ8mimbK$AK!x:wU3zϪB@4'טfEt7sra!҂Bmnj{7tEž hn fnRY}ڏ|}9QjRLprB,J }Kp~'?)B?ݭڊfvR5$iN9J#5^5#9Nx:zb'Vn){-HJMBPc+< KoO_}\W "QsOf-m%Ii*ȐN,rJ@ީVzs\:RXvC)jq:rDȬW=ap#v=FyT2]eqt5s{6bJ}МtV4׈En*nGedKy~+SJmO@^^GE7F2|vr*J̆ Ni\ B3vg% VrM|HMQh%,{& 7"3UEhX#RU PH:ɔA~n wjՒ||4Ko۵MfU9ynEF|6Vjm3XRx j#l2/nmqL(]Ĝ ('*ҟ:;އ{8.r|{w&ۻATmt{hais:3^ྫ("_Sw>!{kŸ!ANݲWt<6){(C$vCkǡs@']Pr+ CW ~c+ͷ_i+N!<NXֶ* L#jwKnm#"vZwZTu\dPA'NQV!bvgnikr/m-Q.n"*iHRZ )CFi)|Ǚ= e޴(GmۂƝ׶~8ϷZt $@'`U\;ޛ<56[nڏo"֞&4!)s08? aݛ;q|V+µ㥐V@Z5 8:A$+|3/lovDh7zlFHZTk$N.?I-P#gsq`{kmʛpZdTJeF+N2mtq-\e ao׷^bce-fwqxKk*SiRoG}G R2>\Y]pի/.斴; vIxEb.M^nhHk6KtUh=PqEm(_23<8ډ;aǹRL%v9k-;lҒY-6Fu 1q( 0w-ӻlSR{J!&򤉰و!]P@N)F``O) lKoj,{rw5$&L'(4㍷GZSn9uUȷW኿wd,n6v-}gg-fk6R_7 gJ("C>X,V|v2H25wi;~ YWM ҙjClRy-!Z/Wvws~hjSkݣ>(jn&Mmr[nLmƢkVx̮Te\ }( y6Ol2$.T3"3֛tIiim-J\Uu~VXѠ{uFu_퍛 g{`޽VP-&s- =%aڼJV᪉E0\?pt7ˊc_%Uw]oL؛ u8,8a Ka)M 5Wxm Cಷ#ٓ u*[inNMPH  :݅ҲERriqBRx@pSJRВBI L~\xiZy &t4HI(+Й QE%:G>xZvJ%JNAZj)3V ^V $2$KP9jeL'̧Ý0$j'OӗiׅpSFYI2U3BlRB)˙>X^ZgX/nO>)-ȐD*E)9]XYgqʴӡd ,6N)Ǜ *QRPӹ&8!%'țat"25.'2TXvYE&MMxiM(pgyUa䘿kZKЭ5KnTҊ1@z}3QoR4R*j3&U!|R$Rm\N$ICV}6굽sXJNQ1\$doJvQ'{z Y0):|Wq<c(~3!S_ :+5& Q,]Tb"Uzz[y"4-/T9NsӮ2Qzf&RP_MOxPdF_/7  % %IHX̯o]]E].ꟷ-6$Myٶou=iMIqT A3Xo fDVh 6J @&QJT&DiFB!'ַ T(M>Xai/^at)OH+)dȭ+p05i<rwrセawQ9wؖGlk5Gr1W;qA)ZO iEŖX&T9+[rpnu$r-R[. >g0a&wbj /}j}lVjzX&$-ˉ-PT-A ͂qҷ*9HyFE+J:!dk`쾌ZǸ"}SWnFR n;(P矐{kc>>%qI+1lm`m]LuR)K$gqyLJpj~?hg%U,#ݰQHUJAթ|oRSfV[9qTt:Q2ߒmXl)n((O:TI(HsЏ)in;zU.yIUŦt qLRJNy:PGs8=/BZ܎ੲTۻ궏\SqjSrvͿ;%?Q2"uTU-)E5 &n#AIYLg.΂{{]x߬{/ykq&щza RRR; FaA,qh6d{dIݘ_(H SAꅄJT њ#O V 'r帽/oS}TXRX.KDPuDAPX>M&yچ7< mZ[oyn;PBu@ u p>m0PB#7t_$whj4{3GzRh)(SZ[:3$tF8ݽ70dGMqnl}utu֮>LBm aЬI}ĸ=Ndjw7p;9pf53S; .)&zDr";l! (*VV\:ǰLXŖ=z\:WvĔ֐B0E3\)ೆܣdm .-WR-~Jƥ[6-҇n g[bG6)vuiHE'$y^( $y?t8J'$qʔ9bqbrNKT4 Bf$$(QUH,'M儈H>8A(5*sĀu(8iU )i LU@Ϟ'UN<+LK@L\q>xuΒ]s\+}*.P_ 4>xNI?3$žPօWk8e {b:jqK^#F0HW坱:OE)!#GV%8ANj@ǒx-t 4V$ 6VHYB5H% )#6`E8 O)'Z?y:20ƃB[]PJPJ?m))6`$-Q*Ur0Hɴ,r FhJ) J0l5|zu!v鎛z%!,>dލ)JJNT(|1Lp.1B9 3yk!`i P*|tawyveKw5/)ΠԤBR NAewҢRb>TУQAEe2irDp=vI H.tBp[. (J8ptK IR}&\ZζXrCyyNҵ\J0R+j}ehJF) s1L5K*LQCl8x_8Zi(nb\`&bm/z#(6x+24+o H乻Qkr)Ki!Λ)l,e=$5*LnÄV+m3Dl(:V Nʘڤ]E2mu! iK9(Ǎp>*fU\% Ōd>E.CPH'/<TdfǸ6HVőv!?V.$RU2]\7cn&dW$2VmBӭ9qNEU[nwjMCS!HRT}KX0$GamfޕD8(2‰j&m*yT Ԣy@.LBmT?0'*ϞIv 1Iҩx8m!"KCNC*IҸ"Y+!#OTV9Sҋįr'cKuo]du?rmE(u$(;!I  Ƅ[2=rN %ꦠUi>'y㹷d6=고3<^i}Byڲ*{Ҥ(%~ <~=(nn RSֵLD7&G;y0C.L7J\ s?pksd &:4xcokvIӷDKrwK4 *:ްRxҘl81Dr6WKkx?jCh0F%Z{s{Z*uRS%d}vYnB=*Q9Pl?0Bڣl\`UJ(%` )Ē8yc|-0jׇyl4yxt*VÊb-<я?^v?|'*SESvO/"T$7?GkelVH^㷂xXRpGXLs}ȳQ=Ѻ6aKj ;DjjU'Ҟ?y5zP |ïraG܌5d߉WTBjWZ%Σ]7nIS*=qIt]~($~;p;]gN$Q'r 6Z%3q'd`Y 'ǁOI:xp>xI)SƄ':S0>Y:DorjAMI퉖.iK+K-)#B[( Ssu$%{m/=޷=ƹ%1nC6:!MWNuO,cJɃyԺ Ó.=،ܶݿ0F7pkal>lې :4t_>\,T쀔bw}gؖvv۱b ,)-z]JRC1Y9|,Aޝ햻Q{oh.ބo[Ow\[z:j &T`y7JŇޥ]wyY}ŶHжz%\-Db+[fNx>ҭ(bDg61-B,[!.z;hq0㡽, TG5`m݁aۏ\xԑHOlm3l^^*&9/hXyƕ)IKn% :u6/NIG}aq^I7θ^R1p6m[SIq r. ^hC!"Gn޵7m/˹߯ 9ȸ0➲Ð_ _Vu]APX=y06L+7f7Fw#k\ =sY+ +mb"[C!kakqYpR"Y1s8qi܊6?oIAwpZUЊBM,$Urq؎, j9QٲMVU%b-7=:NBy]Sf+JZ1Ԏ3FYn>&5Ul~n W ~ݛ6h2ـnטg!?m:Pz@QI Ή+'mW@Lq*lFKDޝnnY܊~ܙ u $/*Btt&ACW#89ZC~#}5o;O۷nvnDiihJ\CoU5z1NuipMۋS{WVQeÁ ).Qo31PDrJ) #wV@l}oœqbYnjwAQP\E`H {}A@&/%mnrZmCU/BΛ:̗ ѧRRHx>HdCol{u=bR6όBiSaht֓Ĥ(jGk6*f=if۽A-;C V֠#_<?0 yط-,H3 HKЈ[*']$ cV.d+:naks@N"MO-l}h%*FU\WU\wJT=t V\hv7Rpc2bU5FhƢ|q=w^h @冔Y8+(w)5Š`JH$Te\>$S1I>jO)Ij21Lj'$"y'pJT5ʘDdY);Y,G~ 㒠5Ù%-%;Yrn؎ )I 5ZJ`ҲçC봷oۡ]/- CG A-|ĥmrJ]]u!6p%'MPQWYqd`H; %/$S221/)Q06 R(qaJa*9,dyX'6{SiVY-+#q(ALUq ¢bz(*f[hq@dT W鲭- '**pYuqnX.d-nb)rLzu[}@J 鞊L䢄*@$9TGP"VW[6FiA3=PJ?gd-[Z?wqn){ BGݑ5ϺXӕjOUJ%K}^s"2=@s)H+tW-oQ z+ qa+mz>Ӂ̍-&Ddy:THGxzfT6JZOv9{$oyf@m8JN2V些뛊̉P$jt?ր1m*i}mZzkNU>$lM`.` ^1&ر[[rRԸ0զ4ǟkѺ n9m}4%LӢdk(BZ=E'ё f9xnpC=$inWoYq %W RPrDb?7f Bi_JَFis 8U i iIL7F5j!])jU0ٻtY- j  Q'GU( 7Io}p*n/&CHJ!ZJI'1X{ kfPveBvYqYZs0uM>έu8/hm1wę[ ylCucl):O*S1Կ"ϔ8gPĺ<)3eNb4v!Bi4f4vϡ?'ld%޲.Jc|KsUT򏊯]3nuH Fʠr cN,V?/n|gH.%rRR֑ˍ1E?k[Zc툺Z%V+mW8-꜏rㅇyq4LJʕ玐5J~Lb|YOW-UHFݽ*62[3Bʵ*ȀUu2_DN Л5[T#Fn4*} ⚊( ǟ6V8VWw29EnJ#X.iuzT\?$KFss*鳶)rT4%nΚaLai@5FF.ĿrݻsnQN: |y}R%1cPuqS.`GRH ''?َ=g\no{ ȷz}2n kJ(O:iXNÀs"YVo{iݺe尙3e͐q$0uxӦP1Z_ۂկ[~>(ueպ$nߖڣ)62^eLel%I}-I4mEL 2g-XwN'kǶ}uÜn,۴[5Q)k}N6UPi3|ϓ nˈl}\6W~ywu(*I}JiʶaegIP4!`a@aF.H6rܲVԆWҗUMjԯCq96^P?ֆڇw:jw zl Ѷ{u[HZ’j41n)HDc)jdO[׷߉hMrYpBWY:q4W2h ?֮dG/Oظn8kݶ]=rS9vt~%[]eړi)@ԥ5N AV{yTBw{H~6M ] SHLKJp-RT$kP4Ɛ'M]_[joc7q> 2.7Rfmԅ5 JxPZӎ0mꘖc/U0m{4Nk0'bKKK~^۞ۉRPmaHq'DNZ,{2'w@9n;=C֕k[&QPPau:EIJAvSeSDB(n *TUrz3mqJ)!IVn㷐8{zn7Y:>y["綧.,.nSZb>n:n-a%ZiPTi=@N؀I(Clc: ?o6~ vnr]r6-8ҧDRtҀsq $FBT6ܭl>mЕ K˒@'V_-Z,O% --HBY'Հ&GYH&>qq mIU^X:X p˔].udQ.I J;õc]VެԶLVYbHWTZ.Z[O )0NcuU5c:\"m II3gvλ`Fa}Gs>2@KF@ei&;d$iַ)*RbF)q”}~Mh8\؂޼"^Njj[AO$3yBޤD#\s*.^T SiL;|e}@[Of/%}p$wbIKZb-GuKG/o=N?Wl?.gqf=ͺ*np>\MiHZe k_>q3Edᜐ%YEWžӆ,n-KCQ !+S8)bGD2b:GM)K$fI䥒]\&S5xpFJTY1RHξ#i /O@ rRu9h[ JfAK2̮EĹ 2Ur$UCYaĺKD̵>$冁Hn9HVĊAVJknѴPnov\iOǒq(^*H*FeIu BY8f੒ԣ)oIp!!m('*מ&BbN;wiQbkó8ȉIq }PtD3yL2-^j.\HvsuQMIB21GދAB*W3őG@)q2R5:y2c6]f*~8`T*  +h t,sLdQ 4"/׆d+ԢJ5L9B2U^N3zjP- M>d[XvR֝xdz*C4_u ֩(69goZd&+q z|kQ#.],k÷Fmr9|~iqRN.Hg֨DgHEjZVq G,SVC@ D[v$RT+U ##@p,锰DFQ%5eJ !*r" C׫\ަw K'XïH$e11'2*Pp'Eʤ0Դ(r]?c~BhQ}Љ%CԔbBt.Tflݓ[G5I1mpq(zE3h {3  )_m+zf[9K4Qd F^ܑ$YYZ\ݵ/*BҝgԶ8)Q浫};w{z#D1iv;nRIW9 }@D}J߾ܟ]ySve {E8d@Z^> ƀ e2P{?k =8.8HMJsŃSF Mѵ.hn+]dɯb4n-m P45-"8N)?2lK}kιƏDiv0tIPQ :@9V<Q5O"jrm'"jܥ9:BJl:A*sW(c; ol-WWj3OR )E*,\j,yָ^/WtmպD!"*UKB:AsJSy]D9؈=ݯ9Sf"Rwt~nHis+yo'HҲ\("Y%pUss"ۭͿB]ip~DxPu2UF*s̝,Ͱ lj藣ŶʖCy D;=r<{@&\Gl}Ǹ2=n;-^ ȆK!r\XQZs#XQ bd"ތH=Y& ۃ {7[&7g_K_SEݫmSeken%HVSQ>r> = Hy}?xNL=wJZ+Zv+ThSdDqv8Km8ڷ"ܠˑKlK Xd!e) C4W[^(YGB;- ˺go&vn6AEa/\ #ǚVr_II w;U}pmۤɝ-eREySTJ rV DZ, £fKRWMD՞, 9(? @WDf\7qVRFc)Y!L&+rUvMۓ#'OH`گz^oX4s+W-!I13tH4 Cq{g@.p*[gꗘy5G$a]D+&#|T#˸|ǽ_ݶ7nߤb͑:TK]DSmiovDj,ST)VZeB=|86an2wz#!LZФ%$Uްg}ճԉ/͵1kH ZpLVݤOQ6UآQC-!YvK3߇ۿ4~K?QrJʹVc jPy:|[r4ۤVںH-e0ܪ iČI1xx8'[b]yj`c!%!Ԟ([kWQʟmn6 - #*?tmGV5.۽sv˒.6˯0RPjU[YXZTs9*z\oZxoRa{Dly$[ERm*!8=(R۹>BCD)?i v[f l&DOT,QIZBixS;I/gd}J|THAKɈQ;]A)4<=e,9ޥX?sPmwk4I#BAa .:JNFZۧ>~]X?DW십>қ܍iMU#*S.'W(ݏPeEnɷlDǻ"d-Zċ,gz TH+a) AQRN'0O1vxun+CJlx7[i ó{t1ϐ-:ܷ\З:)i =ZI4鉌sbxeB_)jrq]~jw(ٵ]Zd%O6[PR./4k#mC>(1v(Kf޷3fn[wYwJ>!Nmi-Ηnm-β G@QŤ,m*H;=pTM֫#_췭|ߠ/:Ŧsa-pJR)+V+H#SVcCm50|rଌ@ۗn&Lrnu,pHu|8 Q H" iCw_m26-e.2 ێd&<{ÊxFEC)Еz9nwHfwnDRn@w{ۛn 7KJg=ur]J90<z 4ZV)6v5-ews%\_`![-oH)Ҫ,$a̓q[XxkAl[[6X'Mn$v|IU=:jhY( ڈ10mn^wmmrwr$\ZRC(5n76[of*ʩa{qTݍnɰDoSV wHXht Bu#ZA &v. &@hPQՌa۷Vʿn'nF;5{jwŸez+Z+Z8Qo!JMv ,3矇gAo C}-ٷgj]uc m2BR[m^PfHF56H.p 9.J!\HL\(P|0` u5#XA55<x`i@:AI4)>y_L\+VZ7N䴪VfTǐu*Ҵ>fZ`/2MUjѪ;ՐeQZBG>=^>XrzߘZ۪ͮ‰#= L|VVKIp_ X8&2Tӥ9(!JA()PXWBze/f&GU68.BQIEc_D_1G*Ֆ} *Σܨޟko˞QQC.`!+>?FH (h"t*C I҃DR2PW $mے--2܊78*sHP4FdH+žu [7,X{ҁdaCC'Z4/ĘWeL:/t-JiP Ř[X䶄*[)qVIS 9bP%!,m߆=[~6Qh>q=h[ 7&}O@tR S [nAgty/0eKNO [d]Ӈ%z1*3*n! BFEk8 2ËD`&*Oy!IN^ &N hfCo"CrK: -TR0р|spYuD)뤸QBip'd [Zo.ДS׭JtzA>#,12~hft+mvM!ڹN( a(A)ύp(%[:`rb -Oo nܐYRʪeLdc '/~o, ,V T' Zt$h:W_FqH8V&LxMPs. -r殍l}ϱ-2HN筚A>`c2͹EsV3O5!èyB~b٥0%?9pIm).PW s:tK" M}F%Bς~x=q?nĦm[5 \Ch WLq/*Np'ڴbyq$u5CJSX^vVGT=BåҧDW5k ́S=;lAUn KAoJt0֐j 9PAߓ;*w0_ҷA%J1!)}@8rEoznӟ{66[iFڀ#k4,lSRZeb1<P=:&{%;64Xm2OM J *S;qψȎ}XᆯV|]6l-(^/FS;56eot[ -Q :q vsUCuomWZ>5 HITx1+2 JCUHOc>b/Xh+PW26 v#;*+ݷFvXc?o:n<^3e˳d9?lUzC៥!ߘhޯ6;}Km7=ZPڟeHDv--"ug[Sd ,?^Hmj-L1 i;jKPj<%,$ѵ[ *Ls\v^.)K)DԞ'Z"Fdm&Ckڷtx~{.gcʷ`(mZg`& D.vUf*fmmۇwA&|‹nݓ\Q 2+Ii$ШQBITg9 N9b{9=v~uu}0=!!iYS"MG fQ,VW#&l}󸯦uKF^1عۯģoiRnNФ!ʅkJxb*@ C"90Ά쯻7lBjoHr sn Ork-UKEnSc0nܸ`HwfS?ik[IB{"6_S/K S*$*BZbÒlU=i `4ͽJ $6BZJCzTaDI<·P=hw4#d]ܩ[duo64@}yHjcxe+<3glp>}netT[:T|P-> yW$rv/ⶥle q6MnwqlFx- ]U)5[R+"~&N18p#!ޭ#Z;R>8$\fZ"SGUs嶰ۏiӞ*{ #i,퀜KxKܣDwUpZdfpY Z^T#a-kRҬyoR_-D"8{9.o:=* tFV0#bGƌEm8)MVD橜|+Z ]ʈW)mJf#/F>>[(x/=tM jgo$œbAz@L4Tl&1TH9(8/=㶙ᤂx6ԄRyTq G~zUDp_5gJH +<֟cHy2[*╁1uC4[Slq̥sr |ǟn+mVԓEτOm%A Zs$c&d]?B|>uZ*~$X}"e-㎡w۴T(ӊm3J>QPKS'遱9:Dj2A*aA45Q1.t[ү฻XLGc%K\ p#Sd"V6bZsۮH!Dʐ:xZciW(;gS-&HOS?X.@ C W@IKVV{-M"I=]@GG켛WS6û5D qPYȦV֪59G\g.g], U! ^<]b\AY[%c܎pq@@lۮrr%ieTZ%yE,AUxrJؔ[~ B yˋR C+!*KtT (:B]v$5p4 zbNٷ9E+")@%Ծt [B#))X% ˆ!)c)̋se _Yqi,W Fm!L}Ȏ*US %I5 q884ybJ>%*VU,KS+aO BmZc:|p|Ηd+HB4NF*E9և Be:,Ԧ\SSj'~]T]W8A6lla8+.#HXRG1PqFDc޲7yo}Q[j"ӭZFEjk6ә,}{|ˎ܎vleA.X滏&)%mT旓I^V|ksKɊvlv mՄ摪S 햔,,u9bq2SAmB[pMKiZxW9+@S_Xm]J֟|VcI_}|˓!B~_,{h0#^YmQZS-ЀOpS4%[; {k 2Z|ƟDBۊvEU1L;my:Biw"C*ɞMEz3h~: \JV#>s뿏_.J~mf=l,Pq_R =iJgIZs့;ˌ+cժ"e*.}EMƊm$HHBS:wQ_7U뱍D9j Qtm 2ސ«:-EI&]ÒoԊ#]SM07DV!]rJg+ҥSEYmH`#]#jwgYw\h{eSe" qit}+ԄZFU2T}jEd!ˮp6͖]ӴNmf1ut2$4X{c(Ie}*hgnK mAKw?mlH0[Ң VIR ,ӡD,8{͹ [wn_`.i^6\i -, [L!0R^E~{qAN>Ҟ 5-PD}򖄨MԎXL܊.ZxEK]v\mý>pcQqǻ>Thq]rA JBT(2~1bщ{2imrgrlȐ=F*EJΒ ՍݜLܨOkeOHc۸*v!kՙ26!HQq-_5>t^Lkb2aHNnvܫ$Pm'-iimN<#HKl*Vg2"{T'l헼Iڮ&\~ޓs7%w/;5UJԧ[)M'̋KA${cZۘqžaL^͟cjc6KtK)i%d- :E4pr+M ]߷tV9ߏ)B涨"1^|;D[j-)%iW:wˆwZ6\̈́nۢM%=p~;neo*u6e#JS [z{<kwָ]/kp;+sBeQv4:4HG}վYBsPexxg⌶>d_Z}`mkouOe,I U'$ eTR[o.ˈr-R%lPxъ 4ԙj̱WJ}51&DSdSJGzG#_WKRTC=JJ*c=MT+|=N1wT˾.HReL{E7W 8k1n Q@'$}2DMShĂ[yZGO/O2s҉^&|}KEJ$%C˝1B rdvgj4y'<ůc:d ob\Xg {„RK# ht=B$nnЏI?1t+%TxW seFa6m y"I8qG׭{24h+P.! )!# ˸iR͌ ۴.6j"!1~]-;v ŀAפ2))#b@BǺ[WR?RxӊV#1)kk@Bp%))HP ##-Ґo h;я ȆͮK̴u'] RRT8cw~ͲZ8*Ly:  6HKhHU LŻ;`sEp;:UU ][Dr4h z;kj9e_tޅqO!f8⧶+4iH#*V1P"$d\CHeSa_R aE4ė~2K(u G յW0 q+Q$GqRBZb@9EyBzky 3 q R9`/D%;􇝕&C)Ĥ9!nB6|;Ck.%ֹf2)zt'xV+B6f* K[qʐҜZSe^Tx M`J[YBRJQIMAφ,8%[K Cu lF O˜%V`.*-)"3NxD*up!5PEt [iAWzEvk ZFo6GbUN2ܧT\QӇ4/#bY"4%QeDSőR5Oل/'fP C"vT]^ɿr'l2IR՟ΠX3`}'X=pۤ(4>4#2vVZToH3s! ca%BHۊkM3:.BfS[H)8З![_L( +)ROǞI&Kк>?kU"0+ȉ.e?ڏpʐm +A%2)Ċ?8O It^෾ -Xn: EƎ"W⧹nN%O;AJS 4m*(UVy8:{X1k .3Z]v[LtmTe5% !,ȯ|umש"As;}8;u@;F)nj)Wk}zeHAb@kiɝ+C+ckt+ĻaᏳ1P[{qrleW P6%vجCmec53ldl$O&p;ĶwaZHmX-Zʍ 0 e#MR\Vۭe@bNlrZeW[{?yIbSLIBKH˦ڵ uBAA#_o(XD],y꭛;reqOnb KAejQPPa8ϟcTW&X!eڭ*|q)]fҚ̒_ 4ԔE41U"?؃Cgl+Ws7ډo:ܶ_qoRJ_atA\w]m)C~\5MsUv@(* *ٶ[s[cr@pDdȊŵZ%H5cB3l )W[5 -2hm–m E4UMpEvi?dϵeZ헫10rbIӨmǢWD4U(6墣?XW<dβ9^Y/|U5 0+u PI QNx[nLky[n޽[.nLFoKBԅǒkJd*Z`Oʺ]XflO?Ӽd~?@3-5HC1uHv;H[)%tp6WdgZ?f|iɏNJDՂ!*ԈԵK<,$(BeZxd"|U߹e>ݦ|}t5tL EJ%c֐ULnG !zvZy7kž-ݐcLTn3 f3̰IMHRJyVxF>M̽-prTgZ{o]n˜ZWmόoڜiYԗT%@; IlqbdǺ]qd%X6za 5 txGȼFGp8s:7[2V)"8 WR7E7ˆ pWz0MA⨖k4[u,5[ɼm%ȳey ot 8|]@j{[Jࡾ% +m%!hiƸ=QFz(ČsQ{&JAA ӕ0GMq#ZZtSQP8jUD=.bB ר#Oo ˄au+Ҕ}mܳY:1!5ec8Xu14%K 53S5En[1RURcI}Z\_BK<7;UIcR d9eHC;:C[E%6v@$,#-Y(8)HjiRVթ*p=$p`PPMou%(h}%\V WWt*[zmM&.BM)1m_IU*|=v뽾t[M* hP)8g )&dkV9onJP㦎)ILHT/j׆7n.܇ZqىSK;QkBTΜ)%4A%hX)Fe G7F| cE_h! L8I4k]uBaǹ[Hek?zRO0j0=9#!C*2,*RI W3 Hu]R{ E<З Gqe_ 1^0 Q[(UIP4X}q[TVƌ!iҷ P8PH?µf.n:HMI1 c\efn Hᕪ僉!Y"m `OLH(_SJh: ]TRI)o rONU---w&6qg.߶ln-jCwVaRYkt<}Kg J,,g^nq˛|x{^[Vh[Cqbߒ]ZzJHQ;?QWcdKaYFoaw6L-̀m. v׃j.oǎH}44c$%!E+"Hl5Þ~9rP 7Vw8w{dՇ}qt¹?}+K ސ4dŞP _T̈۳t7y7oŶf6z -2GJ]VpSIP(d<$cgAgІp<ݱ* &R{s[XJ[VPu!l4tRhP ?^.oeӑ$c9;p͇Vyl@oWghۏiq0(;r2KCV@/BhUVSW<:U~ʷmШ6: c⤷oYpQ:sƆo嗋eBR A*bo-+?nGF$8-e*[MXJc8n}k% Lpn}ۻeʫ6V7RĄ u1x!Ixm%Tt(& OQ2˼g3Ɇfifsoq^.p͑RޔۡSMS-EqɢS(d%=3i~[əW, NJ&Ps~KLY޹΋jombmqĈd2V+ 5UTbγb/ mԺw1$Ǝ†dV9NlAő[˹"3A k=̇ЗeqM:EM1M2XOrbrpZ[gmn3^l׉y[Ie:K! %CNPN3܃0COG͎ 3gSlU,D&>#.8Qx>=FxH<68{Лnř_>~݈K;~R]qe4m i֚l hExТF @i(^Tt=t{+*MSۋ.t:ϥ,O 43zK{Esl jR Ū\"%KJ:@DW3_эŝ %]}cN{d[. Uc-Gp--tR<ǃu@D/G3mwޛ_f]-f·*L}Bi)'S(m-JW$d Cp%ur2^ Ja|)E IȄLTŻvVtbG*i> aKۛq=vǐmtVimvA*@@ =\q:X6Jdf;-IeMi 0$k5?O?юkE[hi5oJE j_b7KTե:RYq(eSNk9~}_MxEb;Vf=DԌ -/N@H9uRd8> @+6{Dö.{2Rа#AƥvDmXb]Q(WHrZk3aMld#I/qQPRgm2"*PEQQmort.Nq*i$YHc5<ˆN3`pVLBPNNZJ8ǯkC!.)+@&Ч.XHu=2 UltܑGZB .7z}Uᐥ1+ȐqQDILwTeTf9Q)Q,ZRxؼ\S%ߍo"ݠ-Kp%D%I1:`c j~7mA ^!.8 R"BfKoRThbr@ acɐ"PBUKkj_rsG@D'O"qqߋ"z3cXFqJ`y(GXt}^XzޒCVҊuBRSN5꒪/f_C~H.CL1)ҕ6XhJx)J"FOl_pK(V'#<Xd#*BKu )SYD^[ZY \@gʸV{ownչHM\BK q PRSJKn I!8j{˞޷ ]OmImO'X392*`\dX5)HRrP$ˆJ&D2 l%۶DۂdȜ6X(^5Μ1M*42m#"}Y]G>g5]Tk}79'G>~'*<7UKܜ|tJ`a֖Vcꤼ6R\EAE)"P [V>7]F͕2wNu0@Bs^ qI\xזXSTk;NPt4#@i0W&:m u+n _!<HĨ]̐HH! r1;%3@yҘ>Yi6*Α_ֿ+kgoιqW%u;OCeyJRÂxDV+Rןyp8Ƀ]'K7ݟtœ_>ܰ7)G bB-Sep+~٧9 >8͇=u1嫹____^L:d2vt4)Q(|Cm^(|p\9(sH贊. h*"d0U6*z GI4H&$W^MKZ KE$$S-Km viǙ6]l6PbNOoi7b"KKN xz:O=y=캮cďRcR/o &譵1kmc'Q N8eNpt^zwqmӭX!˶7in N!D6%%TJΞ,\wmXu'&؈-*J--F_ŊRiHkc}E{L6 kkP_WmƷŶ[%YQTi $)/`PY-d;rCoo-< Q-[+n|!g\A(iU!,@9^z2c$N>ҬwwT ⷶ7k3|^4RܸҐTJR44~UB3pÇ.EtuNVZbN|=~Nݬs ƶoռmCg*8bZo%OJH% ʸ<[HݰýY>ٺ;mK]?n?ns/ƇKQE( V5('Hp!GS8#dlyzF܅7$ݡo0w=TīlX%Ʀ(m8K*IBTzJ#t>\@IP3j~݂ʔ۰`o.{Mx!ukfLZێQR0nǮ_K N*% Llݏwn=]67{ǵ5"cHj CVH~R2mHJ&?Hl9|6'mF8:CX7Uloض}:+-Z_$8I CCziPBsƽ@HYq.rP{nܻk(m@*l̼a+Ӧ6m-%*@4_4FU_ Ua2x7N!;]׸[WPb;6QSeh%ב!Ҕjڒ\f[~:DG\pW]VŖuKosVS/%huN6҂ Jw,>‰W#F|ݔ\tWfFn%6׋cmjR.O*ՀYX;lm;{[D8cyʙuk NC%D D`{62x")cx#w:廻ɫ̒[Z\HB!+7+l@(FݲM[agEqgȔ %jZR~i3#,>?hZ?/orKzl9]-*Lf5<⺅4ʀR}UpWMOje[M^= [wn֙jGi84Q$Ti5zogn+ڊ-v+mt6m+cLCNd$[.%I)JoKNj"id'@4L%}=aa:gX?,mSat Qe(Kq>GR$ 0\ʞi<5 32!eSPbB. ֨.-InD:!)U T*sLpKN,p_X&rVJ]e7d* @D t+5cJTcyvaF_>6v~`;K)v䩯@Bjc-<ʜNVx{vZ f6J2f (3,%]FԀ*q=`nBGJ߿nz7u(%y_5#"R!/2lB:`Of/͂"jBPas)Xn%Q|V\r] l򦟏?ӄen+1TMzHְD]D Ԫ̏ 18'6;͖ej}JhU4<ғ9quݖ#}\~4tD4]Z>Ofꋒ=+mݑ/$N  lChKQE@ʴϝN:[i|+<|X˕ ^?~ZiRTt46[LW܆~,CMfw^Qw[5DHo*B$8uP[`t>FL} A;`$Ze=l8*VBOsGUL<1s{M@q#n(L.M/TeD%%]C]EUe3n$}kt"g8xo .)7d8(%]@ JC )ŻYHc NUj7e2g%J@!%FD(,hGp&Hpb:܊hjUx4"5łQ⫌56j;YˋL7i)J֦V5k +%)VEn-dkܭ~`Gbڍ0nֵm)S'C%ʗv* 3$ڇZ֧chDHoycij8TE4Qq]RԦ7)l!I[JJV4\9QBrԿA i/YQQꢓT:VD]!`@D y |U(Q;|F':Q  qtF5>T猿Zaa҃ovcFѻbDKPn˷͉3(-ӒD-N6踇 \)l31!RTJΡQR+A R'%C8l)h:dy`JaVZYJ[q'P$z!+_vs;-EuB=~U HiMScRVN2ƧGq}H{*30oK]W5E:r}IGPD+2:y5fY앳u\e:VyMuH歉8>VHLKbͷ 99.f#qz*R@\LҤC6}·Wl_!F Pm-|+偄lhdE b*%#ϷPTHq *3fɌC8Nuxxe`Jx0Vup̐fɋ2K!-qk7FX/9)ֺHmf`"G0 Hb\\kuܢ[JCCjo1zP$cӺts>ocCᥩi9jCyf;pYj)Gkڒs:^8[[Oس2xP9Ꭷi,^L|iT{nQ. pWt=7,vw<(;:ޔOw|pОA)yTFx,wqJlG"(>'{|Gt-]I"ÆE5qt~xIp{*JѼ _1w3r1گƸn+wQi*V pҚ q1Bx[tnI-%+,[PMiR8+wLJ䥈vFQz5:u#! qT 9g˲~YV9B+ʍuJ/&ᩗI=1=jJ θnͦĞ|mհ{rf[ۑ-pKC*2)J\ZY*VNU`-iPm;x۝۽ɜ/SKBlRSf ΥG=.aJ}Tt+ߙamlbQa¦]ԴQ +!( IPˬe >/ۇEF.CH3Yo;}ȒҜ=km)@P \y}fȼqf3g] 3G֫^ٛb-7޳BCvU\ևT+1Lꛍ_Lo1zXdFVc0-7Hr"xýO4= ⊨RNi9P0:e/oH룍 D#0L[Cn[gw[hfxH-޸֮HZ{KP dF4dXzM(%jٮ;kgvsor9{Hcۻ.{rcՖҶD @"1ۛm1'>n<41>;+;  wGso+lKzh`Y@4P5Q;4-}p;q]4]ӺnM46\:p2  #Ip)n(hMF_NbM=O,Rr.nF7 6fH۶X2? KR 㹕ZN<6nʨ@,=_ 8x!9ojer\ťkmĞ]wEaSn "Bp>`|N+7iT޴H&u}1nvF!o(O-%2JЅ)J*A6k7ӆY+bwUgI.[\!E[v EjTvZĥ@lveg}c-ܨDN*vmvKvӲ[N Ƿ/KH\)zR#DfIJ)C8;qIǎ|QɲP+ڶޮ-Zlw-/C)nθVjꢾ]FB0 NXQ@'[d\%\$٠Jx* >K8QiQcmqfKmC7ĹpmVJvJ: %tw5c^2_%U9#Vox۫&vWvDm(t'\(9 h+Bu"Km2I[e*TWl.p {Bۺx,|lsH]YL^% "k9m-JZz*@2vSLɩ]ٷN(H$i-57+ʕ'?&CDKs_Pm.`bmdtF%Ko8kˈ@lISn$GҔ@3NAitdoWb mIuTƝ d)(ZFY fǗۊq}/R{Oj{Av6l2WAHgm8!J+֔T"tS-P9zEVypnޅ oM}.~\vV{mcP;45f%tG)ӰN`oepqw[bi}krݹg$6P ^uZydJEdK㖛?4O"*=:afjiRt':2alXXAkV9L,.PY[j$9IEusX'Ssj*zҧ`~kA_]#[ S'Nҳ)|kusWGcò;rԋC5$Tf/_#ܓŻ{.3FvM$˱!S!2vM#%IH4e;{Ab~%n+ViN0y,lh8ΟRZhƼqp[wYzt >wNNkڷ\ⴅ̐u-!e g?SUtA&N^P..piT ZZ}Ti Ǟ\zjٰ۸7mٍ"jz$JCjқt*ӈ|$,)Gq+ r܎yIet{+(rhiX*SQ_|(ԫG .z)K{C)y14TRc3gLLpYkǁhu 2ӯ]s*u9bcqKz;Hu{Mec ,E 9kiQ=ROӤwo,'|pɐRTOlZ-} m uHUҒPMB4RBrŕJ#ǑVNgAdt&Ä":% V(R u[j2٨xwe 8 Q]+ΣuQ!Ib)>HpB9 (1aHxѓv}`11%}yHIY! AJcᴵF=bs#P$T'29'qTx"Q]yv[\5*he D{NBi;};bI_ Չ vݾqt[ "R־JJM8i쬜\딥",U!u}9*"ᎎQ)kRlkGQ`HR $`ed5.c6֐Q&PQRA@ 4_RMLڭѝ][Ȓ_%9b(OQtj++RUxPerrx0w<)Vd61$-4 *#HHa sbjڔ+}TBСGJj H&G߷RxpZeMju1R^A5̒`a7Aoܤ˹L}\JO>QI&,Ģm;$4DxjlǔzxLQlB4ɕ6]LfN- J`QSq=(vPĪ(7uUͽ~n*yEzpx~ygDjǭt->D!+"tjFX*.0YR\)/۴jN~ L_-_:I~qlnѡ8Zi!!JelR@NA<|LmAqbm#VVzڶ[6/e72+K٭z,;uƄ!jj4>yk6>$)Q;i،p;۟F[ wDUzY{[C"\cFLT4yP )P #$ߜGoT닌Y5N݋]zo;T<]%܍uoB-G\ IB)$J~DV_VFY(m+N M ѵ.6|~q[~չєB/[R~KۺRHRQ 'bHCYcevհYpNnȖbIv󽜍úZ'aQasHm)m.[@!5s'!+Ms<5s;zkJݕbaEWǚ*q%ަ)YnelN>9q:ֺ617pm4Qgߌusz\-kR&HԪpu.vQ }6>lޤnwZ+nd5<ӋV[7iБL86 %HG].[v^mGFCV*+ܑ&Tt{s+iw nDRגۯGݦ~ Qb.@({pvݵh[SW;\Xp[i ŁPQ_Ҫ`u8={ )> űLr'Z=qn2*JC{\g"MR'Ծ^ymdʃne7 PB[!塶вSJN48^ԛt۹j֔tn Ż;Pӝ-v%dlۚTO1m興bxwf @܈R;%7l6׉b-1m4 45fѺtIZu%QPQo$8[ndطl{f=M=qʲݬWENȍ4=Tw%RNkbIŻze'=:/V~8xiܐͷvA%'uF}U$hqd0Uג-td:蠒kL|Ud2S4~Xq Qi$N.!̿4<˷pB {̈́%@ j !A_p|RnKJd-Jcܡ礊.5Nd;]oQV.חjztQgqp,Κ˵J)):v5eOc$bB[,#-\1ljΖ_:RUP+Nx{U8zzef\>!Ynۛi+x*dC4K 8yxFED C;wMɉUKuS&T'L":E8wXeėh~V7owEƹdHJu9EO6FA6Aܡ,$aɹ+Oõ߷$dYlSsYK%!>B*㈢Xx_+@7bn;c$lS 7%]}QPwΜ9gS#f)♵#Td.kΡWZZ哨^u!8V[.aC΄6xrM Š pҎ@kȰyn|UIwnq6tb,'SIJʉ8CLNڈP Xʘk!+j[um!UܐVYb J/ngLXP RZ"ȍD=H΄*A([m\MjRxs{[c $4Vw#=E!{ "RCqoi~T#8m|.(kkƑbtt4m(9ebBuMKa(#$5gLQqKD"ɒ:-!KHi4Θvh Cn.{s_Ve”BW궠@ tBa*6q?qaZ ;hHa-7%b*jpWaD9xd;YOAnGHvtQQ oO5#,">6, :mt햍6[%7Mq%! Z[%p+R3W~yb@~;sUOsvgo;s&=rYSB*䲴"(NYc񍴃=^̱nq91KfKTUJ8DZAN\UP*#6e[ޓ{jKڑji@^M4(ϖ ͘rCNnRۅ}S*B,6 @RZCidTTk>Hr+bٓ>M.DOWCҖ:Jg\B=J{ߥj=ʻme IbZV())[j8aŸlcL ەCf=55rҕ-RңBEMЂ,;i*'csZ KaaђR *%+@E4+>}GH5Dت~|d4TqGI+4h2MJKj$C)7˻F}n’YJ@4f[vb`H -3mƝJȨM=CAպ0e[] s$^[*tCq)p>Ȍ#9THI-=V!-$٩UT!Zx&x"SXQf']JO*srHGIu$j"^dҘ[\o":u, H*Z"Q@଻ Vfm>!6SqvN"_4ZN3)%kt[ĕaBy>Z{Ƶy="*y2tȊ>hѢ <cLpGUQl=ŹsFNIOq"lhHң8` !e+hs.&gi-y:Ww~߶vĂ{ZЂt!Y^٠ r9d~ۅ3tE!kk)%'ZSCR6)n'vlTO,VV3!,Jb>`G!W#|Mj*nLTOc>|F:d|^iNs$PYHZn(m`J q>~q}goƳmrBR1lV<F<(`j.Yyӗԕ18-?ZΠ) (*rI<~ėo,ՓTiALN0$tɺ:epE #mȨr3PbڋL<+o P*̑1}rwQֳI?1; Æ+QelY{yP%(Rd6r*1?d}n8긏טFlkhM%qdQ :P> <{>WS˂翖oL 7&roRU"YX ω9b{:~Ȇ! BUy/YR/sݼ_%JzT9g:*DFm#@8z#AdOL~o?/ vCK*4me &}iJ))dS*hѾkpIFK1vEm-1ԹoT.aũ4[vI\*32B[]Y9cZn H)鏩%rp@,'<`WG۱R'Nֵûp%F~:utuDr#)72,hmHv&ȿWWvNW?srzV锐Y%j!-4DjҢ9}N 3E-ؐHJo] mmmliA:Z8 TVAtIͤ똑n}HipJl+5bF[T ;SEZ*KJBu04˹lm1Ql;?4ۢw5k_Aݝhh܆u0@]zP[FEBb厐G|XnbSZHw'և7tޮ߷ Omڗ؎m,E#ƈ:s9 0X37H|YWmz1'5xb+}bBeXmԘ u6R}F˜ NUނoJ mJn;ux]6dD4W]7= *<46כlN6cx;l$)q`-0SJA I4<{xBjtڛ4pݶaeԺBGnJCpʊҰLl,8+Ggl̏/nZ/&EN@y@R\mԩ(̶ZsO21]mY5јLqFnc}nD-$lܐ2f D搬P*CNQ>Z Zkrvo3ƛ$@EnharcR5)%'RBGt7|3 M.Ͱn0eP,{-XSdV#0@`n丐iI :aPCϿ\M>%UT+hK!Ι(XsCm4W5Y̌;dq_cs;48fÓřȚEE 6Ϊ\l_Ѐ{4ˤm~WGt6oV6=wMqB^$HC&LZd)!iH uqZiPfg|svyeǴCfpƟ.;"h}|m7XZthIS֚'Rycuܴ#H2&/[:|S{o.U[N`:;k BN.\a`Ia5?=n>mvn _Qbr H\q-j4oH;e۹KedQiGp6]aa.ǿEOI fkC> TFE{k&7u!*ݻ:ͤR:jw#ruHֱhh)s36-Գ̞ߗKgop[{S/Bq\Rˡ*mn(!;a64}57lO`l5mNʷ-{mҦ)*\fJtZ%-X o3Ifp(ޔhEMrJLSs}̔>!;z5(KH)$988{>j^rWfpCu0,qA5A>`R{W #w>gl7edzm%.2 Lĕe-N+qmE` $3~SuYY5;,64ǖuJ!uQ$ 9x$f5`Oj.w|ً=ž:QGƲj(AB( dq ϡ c7! %[bJSx "qs'!llM6Y®PJbXtIS6Rm(HH?k6 F>A<"cA'\0ےRPབ$xx M.cݒ<ŤZaz}DF-6mDYgե&xiі ZfZHuUJQ4'1|w"}hF%Ɨ m8( , VWwIB%Y ĵ9g=`ifCڛiնQM.~_H#{?V*a:Gwoݪ|ɶIOBUJBeM-@FE*#χ$u hrѷ{nAu[lPP!iNQRΕp@2/"4T^ۯr{Nζ=OK0 Dd7J[éKR4cS|.I&<(QIO[*&]祛d׃O-MJ-R3Ml"[ԵiJ2pDMk; dA&,ة*RuףZtt ӭ OU=1q ']jC J$=RjkÑ㢠;[ܔ]{dݣ4q74$ڷa,@j[Ru'@[ѩMT$Ep(j{kmRiquIe4 e=K5JBgPwzܯypIv-1a^߭ƾˍZ£}'K >x!eӡ-T˨ qSx+-+Ԙ[[-0ZJPVڒsZi rMN#ݮ읒n8+vC)E@Gr;JJUG3B 7O͹CluRө.z_:p mR1ZZNҝA4A<0` v(,Ef,|q]7W_[:J(hkP!MpPˈ=7D)E"+0pӁlK2EZV&  yE@CB·1al.[]L?wH8nP KGJ$ 5φ( bG0*45 JRS|q8Duq:Ct(JsR JJd!뼕PrI_ uyֹ1Ȇͯpmk%R(}8BG U@f {o:⤸%*Ejxw՘ %ے㧴I YvP{n؋T*Pr#\"dh1u8-hmYysa@u,-mw*U+P$ ח:Mm1!JQ@+Ktԇtex8TEW6;F uXZJِ γKj/HV\P*8j>K2˼HNE5Ҫ>0S7wgHWrtQNY9Iq\ʸ?2'nz Otde:y-evv;~huD454Śuw*aaVu/Hej?,41DbHI$>QMEkp1K:h RA>bKP\m;GvKO992,cV8y %' ߂͗NQjuqm[ "E)59Rm8hoOX}_Y)1۞ݍqiTr햹So[Z }'*$8hޑ=8ofmuFʵmͷo!R4kHm$+WI?UxeLgC|ֶz?LC lUj+kN61jJBۨBAb[O'|ԗXv>[j7"~YIԴPQi+DCD8>V @wɺm흳z0&u*.KCn mHcxd(ͬI"~Hw!`[\jk,ȸDLR㫊AZʟ,%KH N+'1Ŀfu=tk2f[^v{Z7\ /'._qG}iEZ У9ek &97,RAh]S6nnxu !撥HxRG oCH|0Y{ڌI9>> o_8m["p~XjR?k]hip̳OՊf{]0nNJБ&;ņ_e ǦXO<| w{)[KIƋP{[)H IyWn118AvPQ-/{6n=1Lm'nQFY*jh٥W{k{Vmi.̺S~dJ۪ e}iF!5֘٨2 0<1wX>OwlnvLr^/aGǺeCp)s:2{KaHɟeةYIDĞJ Um/ #,F@XRRA57`،Vt J}YOTInͦ& {HZU\YijKtԕ:yfGc{Hǹh*7UpKqEޙz_a.@a-VyZit}͑w?h̴^mfݭ^H* R-=$)@ ի&W}:$8y ;f[ $&;;ԝZBcEӬ4GZ#0@RRylHDGՎe"'i$7 2P|ccqfu.:*K$۪sq0RV@<.ñ7 Йms/;!ͶjauҀPa 4( p<97⳩W{~˷wn|oɳڗcKOԊrhj) +)cCcz?rۆ8`{`mrDhWm,%1qŀӡ1Q/JqdӞkc?2FMӱɳGm ܳ:Dw"Qũ9jJFSqRn Q"ֶlmɷXT/\U1#$[BuViH-i$C1 !laV3kiL"/MȲ TԴԓPP a P,p%BJg( -RkH2'ѠH` d,A 6+˅ *(l\b<)gW^8̞RTM۶n7Elg7s]$vTW2鯅0m3"NoZRE+ݴԽ]_RTW{dL3qEN}ɩvt$Gfख़ou\ԧ mqhRmd [_?L6TJwk;<[oxvH0Y: mINdc V}2UZ%PGP9EԶ@WAx = Qq7;+T.LIJO'S%UIJ 8ΎOWtA չUrܯP)t)h/+5)U5'd5 ̪Yzj6-f_KMLf>SЂ!W 4SCC9KPI3+_m8doirV]6\MR ]JsQ4$Sc`"e /;ټwkjɎ&CЕya_jC5CZVRS8C n{d,{nHktFz!,Y:A mŭ¥Y 8Muϡi1d-.Cvpeԙ(!Ff5Ghw+(x!kc9o2k--!TҖHP $q2apW !5ѐPUTPҪDe3Wy"D͹&@ ](Xe;|1!˴($u@/^l 3kM_mM?Ka$9+Ai'WS:O.aĥ:k 5 k !זڸRI L`K' GI UU,)jP JA  fJ8ˈ:]EMMk㆐ #xpœ] Su▕MOL' 5L]cFj1ɲU0A|<&jRU=$p#L%R: BE3OqDk@g<_Ou%jܭ %Jtġt݉,w:*FGRq\qJxչD| K:H> W(Df "RI)g,:d\(=tffÐ_B\mĞ)R#13 ֒vg Lԕb2k )'[]' ;b - 2 OʸAǷUlES~ٛK#)*5BR th܀`*F×mOr[c젪ESjCP'򕣐S: m*ԭx,Irݲl{zyKwk̮{-4.4vZytJ rUOeJ X5Wja3XnfC[!0UҚz"ԗ !%:@9ayUJ;pZ NҠu qLb-1KqVVJ % R0y7^soWwFLi [m-2nj%AsTݽԕ7N n*]1Kkq\%)Q%D ,c%QQ4 fNԾZY˻]myN!9/C?I M30&THDLϽY ~5eZPݞK*Z)QUqe Ȝձ2[eݫNۯRu}kĥFUm;)NY]|:h 9Uqav`{ 9]B9=Ϸ嵮}o);[{HTi]+Z QjYB1՝|>+#mכ%X5*ú:*}Ka]8r'HAȣzVGYW`6x;G 3 ݊LۢC/ȸ$u`ۙPjPK(.IVTƵ@K9dϵl:gncB+pDT?kBGOQdlJ#m8.۽^v{J*֥DĴjt8d6%J gl`[ㇸ9(߰׻f;z1yũLDR$i 4NƕaZPޔu5v.Փ`[q[n&3V<qL=%!I:Uh Dj .9P[^<ѶWʹ ፸v/ۊ*qn\RԷ I@o 82cܬmk$j8vF=TؑwXsZ%[\<ېێ} i'& H WGgȩ݃pTe聻JvX'>F5Q]2 P3;*!iGJX FJ\x8T(EۡHJPǖ*tTPvBҘRaT6`h)ډmjR(嗎 mBpG{Sc\׋mT>j !QP`y4GW }bnef1~KII} i!Z|N".pGb˼z¤-B6#B\e J@d!@Ȕ!_O¨tĺp*ČAH5ӣ䤴yDC)ܜ %kmI*C#lU_ rRDTB#!-ICcJZ)jq nBjN8i!Yxoaڻ?|3_vWKߡrYfom"qr+Se:JH2oBȜ{v[aa&g2E%̺R !QąFຮso}ܒ6m3- !ZWpLu$N8*Ҵ6R@J9G!aT"MlMɲյ =wHW7ߐ S%BTPʉ'!:c2um)ڿϲ7mFȱۢb!!4ҵ)ZIp۰Ek%k/n)FҵyoʒQzT'S)e`UrcO)%G{* rO&5mK,+}ie 8K[RRU76(@18{hnn=zm&̞Za3bǪ@SA-8 МsLY1\o 1n<=x䊻rwݟs@n!p&#aMpGԮqHi֤$Qo{A: _<[mWg޷5cu2o![܉RQ!Uy㿌L $=덐"FJkww[p-˃ eb1>uKea\q@ZreV0"2.BFDګ} '[#.g=lJa!aS(4(ז4jX㷑ZfMKk9ulKy)HWJ(A 3 j 8DZ]mWt&\sk˔ TJB~әβf%-=cX 4ɑRʹ, \Z Wp0U 2&.ynd{2FMnH1.F}-qߕ%6R:UCRTJ5R}x<9 0Lʩ^@|v,hj̃.닒ΫOB\o:4QNdw2 j{coݻ 7ƲDb 2pCk `Ii(-9HRTB"Tgw8^# ׳@vk}QoLD!@8(W~Ƚ{82R|uq*H@3|E+5\:T@NOcso ceLQ4Pȟׂ4Rد>G4ϗ%F!Ժ]UAh@ !tGh _$ MV!Y+@ uL&D=5Lt%eIUuj@9c,,Ý)%a)K 4%)GN2 ֭u%-z}u%%m %RR&b',spƇ")jziq(P`0N#ZrpZA]R4գZ J3G0=ٛz$9s[j4yWR%ূ]Gh)|ٛw:aG(WkYܻȗ9MZ,\.N8 [ WQ@@ L<']s Q,ڛvi9 $Bd>}iHhSJt]MXqM}Zb%XnhY+-GUC;"%3.4 &OHZ:(Ѱ!zVj`\AN+M?ai 4MEB}$:P-CӠ} bP"|Q}oӭ nYnCf 2B* zJs-AC,%tbxaϿJbJSœVi^tᴺq^D;=LT72STRH.xY!KZ6]."#6t>fJ)KA*)FIL#5Y|udFu&UYr/ :KQp҅~TO8cmDQEz2PҼOғUSÒy(ϊv,rݷ \6nRғ]uPZV !|Bf&j+2)E*S'Zԑ#wNt K'oגMIadD,%&j1\@dBۖMq<@PJ[HtRHdl.1D;;zmn)WYmJ 4j`3rtb[k{ ĐmIW#,L`8@}'= \4҈ 6W-գC* #rm1ʈ\E֚d_UQC#ᎆq\ "SU8 Cז-y*զcĜĢ42TybzB Z@x&NvB ^4Iz+mQ@G zޒP@?K҂V~I/* ml8tʸ7ǁ8ĺ!{bB4HYR<<&*NO&L"A$9Ίse22V-ZyVH}WgXU[vݚs-ϥ)"(R+0 rD+mIjS>+H$r+O-h CmD˗ [ Qȏu G,]DSi#%+4%թYi"hn K[[ɏm+cOj#X[$Hoh%%9@!E?.toWVYs8֍2]3yQ!NhZ}َnP8%A^s̶Fpkv{h l얜NսڻEln}jkΖ0dG IIeޔHqk_(@~p>F} (UQ'rv%7vы,KLTiLem3BUTmF%$x/0i.W{s6Փkݛjw_ݶ-ўb,*bNZg&cCsnŸv \lTMX4ΙZ[+IӨ4Q! 2I8{:uFlVb]V4å,T xSPN8v ۆH[A {C=㲧@v-WYҶ h:VTi ը_mp%|t&+lډ0\)mLʟdfi K9ZcFd➒' yʣ[pT)Խ P. հ5`X *:X/n\\ySm˭]ٹ?v*e"]J\AJXR3bZLޕUOԁ$vdZO.A3xGyFD^RƦDbU"Կݍ+r\.[⦠ ȃմܥ-l IPp.l͆Wn_n ;ž­ѱ6^RC8 HQΚ@]W4pxZ: hTy@lNۛQH$9Ty`??zD/PDAgݰ(rqԊ* .8qP:mH>P0teP\1!bf/9P*׊W}?p`<܎d6\/c7VөխtO?ޣU"6i[L*j4bz-@@b̋Y*9Ymi\7#< ƖqA+[VZA , RvoiOXUomZrVQN' gxXkm}ܬʝczcÎf3wԊr'`%&읊95wŵ-U2J!GqtuTopQ .gbk57F@VoMy"CbO)uC 9B灆͋Lklsɉ،'LQ5,)Kiu9=_Iu[|Ȱ]p.kC+Vڒ q-{вOUi7./(K Tۥ-aG3ƕQ& mm3Hf$Kn-.us*μ1 Q"wBN3e[rM)j䷁YJ:JI Jy \=,d=B$Pyaw%ꮚЁ _8L=)]ҳHK,%Ie65qZ9j$Ԕ Uu.3uTWR5~xև$<Di:,T5,,U6Hn&!Qm(̄gQDcy4}*-+h~Â!D ڷWaE[OdCYC8 KۭV1EFUfgog#m^̘/7 qEԚЁUTP`Z8J`%05,۞nz88 VO`"U:C(z['Flwv3-IC.8uiP9kRHSyu;b6C0aڭPȅ2cI5j38qYQ9d\-SL!_[h[o*]iRqk8vVie-ět+<(Ng4J\jqD;ɐ eJ%c2=l3[PGA%C\u~~XX*) Ty HxV@dKolfJ0-.GQBTie0cФ J2Ȍ6kRR'dI)PΚA*%Jيs6Cc&i]ZSPtu(R|N7FAaO4lB:]h}-Rs ,0OVD|LWhBԞg&xV*x(H9a$U S I%ԄQ!UP&!mwBmm;$."mmRv.#b[ZF)>n91'p_N׈oOi{Yw5&<ی%֥V EjĜfe;aUdr>߼6;3?Kppm;mGKQ[nUI84x8b*o|lVauDIopt8t"t\,[ e02b܌2tmI["⵰Kf"LdiוB])$ABh A r\T&L1p{d_L;2vu}D2쑇uY_NJe~]F#2<=䅢\YSw]qvn vTb]!)Cer1+^bq(q`$ r@o-}I \+[CKwU?hGPAY[mŚοi%LH1 0I۫ 轾Sr2Cs{7po5 |IlO! )n 4+ 0lpQJ27EB%2n1ҋ~(9Y)n4RTujd& 8 {ֽXD>g>wۻym[~׳OpC2z|i&ڤ8&+b>b)%\$ĉ@o\CpzKl-v2Ee*ok A+! xR-zM)vw=ǿuH/ߒn|Ӭ;z[MKpz'%~+JFZztH^M7g5$0UܻZs.LfndΤ%%eZ֔t $AafZ㧚vEm> ?2(,Δ)R +m N@:FbqP0#}}C6@ܳ%&ϙomrd>[ְ ?꣩&iu>~(N(dlwr^ H:\4OeJ-Ym@^ qG>(T.z4q ^3q" J#B-mЀT8>nx ߷rc*:$knZcmH1:!.u )5E:cKQPv$+p`͕23g[6Uh[aj}nkJr*$Q.)H3[tĜ(X,Ejq[yemٜ%rzV.B:54Gf>ۊ6?.زym/vnKC2#ˉP\ы^%@Tђۖdh2 W.k ]>XN.u >I)dr] &{}Nq)VzBI<gvNsQaqQ#ÒڪS<Ɋv?׊]?Qnb?黏\2dIN;`[ry!]"%-8M(^?Bۗ_%,?7ߍa,^)trA?1xB?\Hҩ$_!Ϋ$&ӂau{\?;7sBv\GsX'R=F.x%_n&(Ze?Mb[ش^Ckkn ҪG@]S5[U) bGӑVՒH++cgҫw1DA w[8_!_G1 }#Yb$IZ[S('[UZW3?^B:#&9 h^,N<@*FFy(5꿬sbvZ(_O/,ӄ PQW?CpbS.U(?R~# R v/0KÄr?0Max1 J) +B' bb*eI[;o?/BBU?V2˷5yZ/j |Q,R_Dtxx$4࿀g9&*!PJ dʟ.آ*-gxb6QXf/I墶ovw˞0_ V?㏡3W&^)53?‘+F^gZ%7M+D>q{o_Cq{~*?ۿB5?)xU_)|N<=+*3yTm9-ٯ yz}{vqTHFj1e=j [Gd];տpUSNZvee\gnMg۳6#t/Ooaj5v[\rX[ω;k2!i핌ϸ?V?x$q[7?kE$sf;pSw?|Cgc*+-Uټt~ϊ2{8 Y{(>3>+Fj˓*q^(ټuُZNCϪW52Hj934i %>bgƕDqt 듌Η#68+*IOrYuxr9dWwBRhXP0T ri:IsH,rMs}yF.MKz<-d[7 qFd+#t ~ң7 `sn9ٵaDʔk-%4kx$FyP3޽wjTie07^ih8Nܩc[>7w aD'𮚘դYSJF=7Cz$ĬU,HO"?A^_e.wzn(t8f߃5{ yj^^;ӴtG/1GAvkR-oSV/h#qv#pȍ#;*^ +D&}]fEׯK\Ys&@au:]s!۹A\ϖҚ\z'Y36;q?\j&TiNUܒ8=:ZC$Y@$tJφt[`WpIF8$U0ގ:6G4٭"7zjM鄍BΫk-._G,1-(`N4D usߠfЂOҞ&59MS{NWs7}}ᶒ#57_n}{ư5(جlLʟ=H]ËV_8 ZaW<{ʦ{68tlt֪=S|D19J̺ppZēMF.8Nkا()#UdG3pVt pI~FW Pk S~Q^kKCMٜ-dѷҴe|hw;_.$bdCxWVb pSE9Iӳf %+G^M-8dw;^Yf.e9Ĭ  cEy85;(+KC+Nhi0vw+`0zS>,) <=(ZGZ[BХĨnٺ_QEoJOu?imagemanager/files/mcith/Thumbs.db000066600000017000150472616010013144 0ustar00ࡱ>  Root Entry@g1 Catalog.20Q   !"#$%&'()*+,-W/V123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU  JFIF``C     C   ``" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Ϗ-=06t}Bʵ2V|NL|KpC@L?L[ `񧇭)X_"_w /Z=~n)Z|Kl`F8Bл` o-]I:5+_K/K[]r0č9=+q<a%$KV'A}GR׆PI=&M4"p0I 1ɯ: dVx..Rz4駉ǪI-Nw}22$PyeR>.O+Tm0W¿\JQ^SPƋH-($T"$I ~Fx=zw9dqDBmgˢr !A#nf}._CkZe{0gb*N'1{xBGw_fRa4m&x_Tv9޾ f]:l%2^Z1h/ #` Ẓ̯jmQ|#X:> E[ƥI $ '& :k22jA_ൿtƯ~oee|ΞBGU<.3޲o>2XEsW|̹}4_&+?qe/Ɍ0_EkW<Α1X*q3oN_,y[}eq\BϛGU_3ދ!g4yygBϘhxU_3ދ!gͬr7`*6|sH+gSe1Mƞ0_EmSyRoB/"ǿΚ1(?,yy[}.ṷ!c̣̪EÔQUmދQU}֍\|2[4EqK6-7;??|ʬmJe1#.ڍ~#vwc˫ZjGs&AEI"وarwgO??]yPNsiIM4<=j>/2mƍo go gxFև̛yq<[B}?<[B}>z.?kC~G_MѼ?ٞ->ٞ->S=O?kC~G_MѼ?ٞ->ٞ->S=O??#/&ikg. gW~1/o9]:Yn[~$*s2 0X׌ ```^5{A42CD7B6-E9B9-4D02-B7A6-288B71AD28BA}*bҘ E JFIF``C     C   &Z" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? t7×aӠ"ה<=+ -1v2m:4[jƉ _L>п{{_7G0?uTwފJk x?XwMض>-]Z"fׯ˫ T'2XƷnA}.)wCq|6W y4 /͹˺wū |Gv }ܭ hOx3ܗDk}w2]#7-TTRQ=d.1rg./T$u? Njvr_ZK4m5_)~*||7.fll-o#oȊ^gB>Z|˗Nc[GhDwWC=3O |j+i%k YVlPtnuE ^owWcJ, >WS ghf+_E|4*^mů|1p!6ֽK?fYt?'1T$ǮWQO.FOV< v~Qg*O|o6a;{􍉺_>[NJDAחvٷo^ Cyy3gY^%Go?e|s\|چ( % xUҵ+2%g|WOUnW{F7j&篗gtGI^=nR{{9[g~T}&^~ϓ:G_Fc3K>M-x,%HmN|XZo5+7bibDw_Wؿ~ KP6^iݬR،kpyi*N҉UmOڔjj'.+DcxD6'% ¿mt\מ [m>X($J?+3Au_ țZYᾋۯβbrt {<~w246e/7vJ'-iƟӮ_yη.IZ+in'TeUijZۚV]=nWb<[Op92>{ox'R_G ރZ3JO{dS1Zޡ]p/fb8\ |\eJueQSvy$3/8uvo{_X'F]>bD_(Wv9K{3\,41˷]û)XE8cِP6(Q|%+ea $spp?v?KEé'bVU٨ZrkWykXuޯ<9}iK!K%1G߻_"{ފ+9QW>.\48ihYZ, =s{.>sqcw5Ly~qW"4iZ{6q}4{%9Ot8нk|E{IKǟcmcith_1.jpgۄII6j׭AQj~?3imagemanager/files/Thumbs.db000066600000011000150472616010012032 0ustar00ࡱ> Root Entry` 1 Catalog'.  !"#$%&  JFIF``C     C   (`" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ? 43B| y6A^s92S$6{zW7>5g~`E|ž.5; ],Z">o}&g(\5;o"$6 /8p+j: R)$fU/Ė"/tȷ, !&UI ̤`־, K m|~`qXk_~8r+v9#cZZF$t-v']v\t˯xS 2}qs^el*UpJS8wGvACu S`[$T_<6O-nlV0,xm+Ok ͂{;ۏ̤cQT.5ՏJ<%헵YJ> $VffT`+s`֖egom 3؏Zv'JIH\2n_py6P*+a3?A>ؔ'p[_)ic]c{mq"x u>|xS]>ҵ,4:|P'a;Tn7שjN+mUϧP:M7zYkO H˴ױ7+o k=t7M|֬$f./ZD1t c9kGkS(V(8uM{J[-^lK%լ%.$2?ZP׵ ip=Ŧ|J2AlN%T&r.slבàwGKfWݷ#8\ڽ?wש612 zh:=O $~ǘk-$E8Q1Vgklx~{Qú>Cm<+%Qro繸(X7m^Mmao!>b$+I!I8#Ev6V(ڊ+b*9{<^>'3h.BH~2F<_B|S_oKh",?MY*wr+s*TU5h~*O%md #\CNጞ =ntwAe'ry$QE|6Rtٵ{f")5~~ʟQuˤV6~u (YKim┄|s֊+W:Q}UFP``1.jpgimagemanager/language/default.php000066600000000047150472616010013110 0ustar00imagemanager/language/index.php000066600000000047150472616010012573 0ustar00imagemanager/language/language.php000066600000006317150472616010013255 0ustar00dispatchEvent("onPreInit", array($type)); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch auth event to make authenticators override config options $man->isAuthenticated(); $langPack =& $man->getLangPack(); $groups =& $langPack->getGroups(); // TinyMCE specific format if ($format == "tinymce") { echo "tinyMCE.addToLang('',{\n"; $group = $groups['tinymce']; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});"; } else if ($format == "tinymce_3_x") { echo "tinyMCE.addI18n('" . $langPack->getLanguage() . "',{\n"; $group = $groups['tinymce']; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});"; } else if ($format == "old") { // Normal MC manager format echo "mox.require(['mox.lang.LangPack'], function() {\n"; foreach ($groups as $groupName => $group) { echo "mox.lang.LangPack.add('en', '" . $groupName . "', {\n"; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});\n\n"; } echo "\n});\n\n"; echo "function translatePage() {"; echo "if (mox && mox.lang && mox.lang.LangPack)"; echo "mox.lang.LangPack.translatePage();"; echo "}"; } else { $content = ""; echo "var MCManagerI18n = {\n"; $groupNames = $groupIDs ? explode(',', $groupIDs) : array_keys($groups); foreach ($groupNames as $group) { if (strlen($content) > 0) $content .= ','; $content .= "'" . $group . "':{\n"; $group = $groups[$group]; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) $content .= ","; $content .= "\n"; } $content .= "}"; } echo $content . "};"; } ?>imagemanager/language/im/fr.xml000066600000015641150472616010012517 0ustar00
        Francis THOMAS (frato@lecentre.net) This is the french language pack for the MCImageManager.
        Moxiecode Gestionnaire d'images Gestionnaire d'images Crer dossier Rafrachir Uploader une image Aide Modifier Supprimer Afficher Insrer Ajouter aux favoris Dossier slectionn Retirer des favoris Chargement... filtrer Ok Oui Non prc. suiv. Rcupration des informations de l'image, patientez... Crer Anuller Valider Enregistrer Action interdite en mode dmonstration. Aucun fichier trouv pour le chemin : {path}. Vous ne disposez pas des droits sur ce dossier/fichier. Vous ne disposez pas des droits en criture sur ce dossier. Le fichier/dossier n'a pas t trouv. Nom de fichier non valide. Impossible de supprimer le favoris de votre liste de favoris. Le template slectionn n'existe pas. Un dossier du mme nom existe dj. Erreur, impossible de crer le dossier. Upload annule, vrifiez les droits en criture sur le dossier. Un fichier du mme nom existe dj. Le fichier que vous essayez de charger est trop volumineux. Suppression impossible. Erreur, recadrage impossible. Erreur, redimensionnement impossible. Rotation impossible. Retournement impossible. Enregistrement impossible. Fichier enregistr. Keepalive request. Fichier(s) supprim(s). Le dossier a t cr. Upload termin. Recadrage termin. Redimensionnement termin. Rotation termine. Retournement termin. Catgories Dossiers Favoris Historique Affichage Type d'affichage Vignette Liste images par page Voulez-vous vraiment supprimer cette image ? Suivant Prcdent Dimensions Voulez-vous vraiment retirer cette image de vos favoris ? Crer dossier Insrez le nom du dossier crer. Template : -- Slection template -- Nom du dossier : Crer dans : Cration du dossier, patientez... Upload Utilisez ce formulaire pour uploader vos fichiers. Extensions valides : Taille maximum : Fichier uploader : Nom de destination : Uploader dans : Uploader Parcourir Upload en cours, patientez... Modification de l'image Sauver image Revenir la dernire sauvegarde Recadrer l'image Redimensionner image Traitement de l'image, patientez... Conserver les proportions g : h : L : H : Enregistrer sous Inverser Rotation Horizontal Vertical Sauvegarde de l'image, patientez... Revenir la dernire sauvegarde ? Chargement... Insrer image
        imagemanager/language/im/nl.xml000066600000011714150472616010012516 0ustar00
        Duraserve - T. de Roode - tinymce@intrnet.nl This is the Dutch language pack for the MCImageManager.
        Filemanager knop Map aanmaken Verversen Upload een nieuwe afbeelding Fout: Er zijn geen schrijfrechten voor deze map. Fout: U heeft geen rechten om deze actie uit te voeren. Map aanmaken Specificeer de naam voor de aan te maken map Template: -- Selecteer template -- Map naam: Maak in: Maken Annuleren Fout: U moet een map naam opgeven. Fout: U moet een map template selecteren. Fout: De geselecteerde template kan niet worden gevonden. Fout: Deze map naam is niet toegestaan. Fout: Er bestaat reeds een map met deze naam. Uploaden Gebruik het formulier om bestanden te uploaden. Upload in: Toegestane bestandstypen: Maximale upload grootte: Bestand voor uploaden: Als bestandsnaam: Er dient een naam voor het te uploaden bestand te worden gespecificeerd. Uploaden Toevoegen upload Annuleren Fout: Er bestaat reeds een bestand met deze naam. Fout: Het bestand dat u probeert te uploaden is te groot. Verwijderen Moxiecode Image Manager Image Manager Categorie: Map: Breedte: Hoogte: Type: Grootte: Schaal: Weet u zeker dat u dit bestand wilt verwijderen? Er zijn geen afbeeldingen binnen deze map gevonden. Afbeelding bestand BMP afbeelding PNG afbeelding JPEG afbeelding GIF afbeelding TIFF afbeelding Geen schrijfrechten, tijdelijke bestanden kunnen niet worden aangemaakt. Laden van informatie... Afbeelding opslaan Terug naar laatst opgeslagen afbeelding Verander selectie kleur Afbeelding uitsnijden Formaat van afbeelding aanpassen Afbeelding aan het bewerken, een moment geduld... Verfijn proporties l: t: b: h: Gebruik de selectie functie om een gedeelte bij te snijden. U moet een hoogte en breedte specificeren als u het formaat van de afbeelding aan wilt passen. Bestandsnaam: Bekijken Afbeelding bekijken Volgende afbeelding Eerste afbeelding Laatste afbeelding Toetsenbord sneltoets: SPACE,N,RIGHTARROW,PAGE DOWN Toetsenbord sneltoets: P,LEFTARROW,PAGE UP
        imagemanager/language/im/de.xml000066600000010742150472616010012475 0ustar00
        Moxiecode Systems AB This is the German language pack for the MCImageManager.
        Dateimanager Verzeichnis erstellen Neu laden Datei hochladen Fehler: Keine Schreibrechte fr dieses Verzeichnis. Fehler: Ihre Rechte reichen nicht aus, um diese Aktion durchzufhren. Verzeichnis erstellen Geben Sie einen Name fr das Verzeichnis ein. Vorlage: -- Vorlage whlen -- Verzeichnis: Erstellen in: Erstellen Abbrechen Fehler: Sie mssen einen Namen fr das Verzeichnis angeben. Fehler: Sie mssen eine Vorlage whlen. Fehler: Die gewhlte Vorlage konnte nicht gefunden werden. Fehler: Der angegebene Verzeichnisname ist ungltig. Fehler: Es existiert bereits ein Verzeichnis mit diesem Namen. Hochladen Benutzen Sie das Formular, um neue Dateien hochzuladen. Speichern in: Gltige Dateitypen: Max. Dateigre: Datei: Speichern als: Sie mssen einen Dateinamen angeben. Hochladen Weitere Datei hochladen Abbrechen Fehler: Es existiert bereits eine Datei mit diesem Namen. Fehler: Die Datei ist zu gross. Entfernen Moxiecode Image Manager Image Manager Verzeichnis whlen: Breite: Hhe: Typ: Gre: Skalierung: Diese Datei wirklich lschen? In diesem Verzeichnis sind keine Bilder. Bild BMP Bild PNG Bild JPEG Bild GIF Bild TIFF Bild No write access, temporary files can not be created. Bild speichern Neu laden Rahmenfarbe ndern Bild zurechtschneiden Gre ndern Bild wird bearbeitet, Bitte warten... Proportionen beibehalten l: t: w: h: Use the selection tool to select an area to crop. You must insert a width and height in order to resize the image. Vorschau zurck vor Tastatur Krzel: SPACE,N,RIGHTARROW,PAGE DOWN Tastatur Krzel: P,LEFTARROW,PAGE UP
        imagemanager/language/im/ja_utf-8.xml000066600000010723150472616010013521 0ustar00
        Moxiecode Systems AB This is the japanese unicode language pack for the MCImageManager.
        ファイル管理に行く フォルダ新規作成 更新 イメージをアップロード エラー:アクセス権利がありません エラー:アクセス権利がありません フォルダ新規作成 フォルダ名を記入してください テンプレート: -- テンプレートを選択 -- フォルダ名: 作成先: 作成 キャンセル エラー:名前を設定していない エラー: フォルダのテンプレートを選択する必要がある エラー: 選択されたテンプレートがない。 エラー:そのフォルダ名が無効 エラー:そのフォルダがすでに存在する アップロード ファイルをアップロードのフォルム アップロード先: 有効拡張形式: 最大のサイズ: アップロードするファイル名: ファイル名: ファイル名が必要 アップロード アップロードを追加 キャンセル エラー:そのファイルがすでに存在する エラー:そのファイルが大きすぎる 取り除く イメージ管理 イメージ管理 フォルダを選択: 幅: 高さ: 種類: サイズ: スケール: 削除しますか? イメージがありません イメージ BMP形式 PNG形式 JPEG形式 GIF形式 TIFF形式 書込み権利がありません イメージを保存 保存したイメージに戻る 選択色を交換 切り抜き イメージサイズ変更 イメージを整備中 縦横比を固定 左: 上: 幅: 高さ: プレビュー ショートカットキー: スペース,N,→,次のページへ ショートカットキー: P,←,前のページへ
        imagemanager/language/im/ca.xml000066600000024752150472616010012476 0ustar00
        Moxiecode Systems AB Aquest s el paquet d'idioma en catal de MCFileManager.
        Fitxer Executable Fitxer d'Imatge Fitxer Comprimit Fitxer HTML o Script Fitxer de Mitjans Fitxer de so Fitxer Flash Fitxer Powerpoint Fitxer de Document Document d'Office Fitxer Adobe acrobat Fitxer Excel Fitxer de text Fitxer XML Moxiecode File Browser Moxiecode File Browser Nom de Fitxer Mida Data de Modificaci Esteu segurs de voler tallar i moure els Fitxers seleccionats? Esteu segurs de voler copiar els Fitxers seleccionats? Esteu segurs de voler collocar els Fitxers seleccionats del portapapers? Esteu segurs de voler esborrar els Fitxers seleccionats? Esteu segurs de voler descomprimir el Fitxer seleccionat?\n Si el Fitxer comprimit s massa gran, l'acci trigar una estona. Els segents Fitxers han estat esborrats degut a que no sn Fitxers comprimits (zip). Crear Directori Crear Fitxer Actualitzar Pujar un Fitxer nou Descarregar Fitxers seleccionats Propietats de Fitxer/Directori Tallar Fitxers/directoris seleccionats Copiar Fitxers/directoris seleccionats Enganxar Fitxers/directoris seleccionats Esborrar Fitxers/directoris seleccionats Descomprimir el Fitxer seleccionat Comprimir els Fitxers/directoris seleccionats Canviar a ImageManager Directori Directori Arrel Alternar amb Tots Error: El Fitxer/directori {path} ja existeix. Error: No teniu accs a esborrar Fitxers o Directoris. Error: El directori {path} no ha pogut ser esborrat ja que no s buit. Informaci de Fitxer / Directori Informaci de Directori Informaci de Fitxer Data de creaci: Data de Modificaci: Accs: Directori: Subdirectoris: Fitxers: Mida total: Nom: Mida: descripci: Previsualitzar No es pot previsualitzar. Seleccionar Veure Lectura No lectura Escriptura No escriptura Propietats de Fitxer / Directori Propietats de Fitxer / Directori Propietats a: Nom: Guardar Cancellar Error: Un fitxer o directori amb el nom especificat ja existeix. Crear directori Introduu el nom del directori que voleu crear. Plantilla: -- Seleccionar Plantilla -- Nom del Directori: Crear a: Crear Cancellar Error: Cal que especifiqueu un nom. Error: Cal que seleccioneu una plantilla. Error: La plantilla seleccionada no s'ha pogut localitzar. Error: El nom del directori que intenteu crear s invlid.\\ninclou carcters no vlidos com ara: :; Error: El nom del directori especificat ja existeix. Crear document Ompleneu el formulari per crear un nou document a partir de la plantilla. Plantilla: -- Seleccionar Plantilla -- Cal que escrigueu un nom de Fitxer per al nou document. Nom de Fitxer: Crear a: Crear Cancellar Error: Cal que especifiqueu el nom del document. Error: Cal que seleccioneu una plantilla. Error: La plantilla seleccionada no s'ha pogut trobar. Error: El nom del fitxer que intenteu crear no s vlid.\\ninclou carcters no vlids com ara:;. Error: El nom del fitxer ja existeix. Pujar Useu el formulari per pujar fitxers. Pujar a: Extensions vlides: Mida mxima permesa: Fitxer per pujar: Amb nom de fitxer: Cal que escrigueu un nom de fitxer per al fitxer que vulgueu pujar. Pujar Agregar Casella Cancellar Error: El fitxer que intenteu pujar ja existeix. Error: El fitxer que intenteu pujar sobrepassa el lmit de la mida permesa. Treure Resum de fitxer comprimit Resum dels fitxers comprimits seleccionats. Nom del fitxer comprimit: Carpeta actual: Fitxers reescrits: Nom Mida Cmida Existeix Estat Creat Descomprimir Cancellar Enrera Tancar Acceptat Denegat Passat Fallit S No Crear zip Escrigueu el nom del fitxer zip que voleu crear. El fitxer zip ser creat a: Nom: Cal que escrigueu un nom. Crear Cancellar
        imagemanager/language/im/en.xml000066600000024713150472616010012512 0ustar00
        ctepeo spam@ctepeo.net Русская версия
        Менеджер загрузки и вставки картинок Файловый менеджер Создать папку Обновить Загрузить Помощь Редактировать Удалить Просмотр Вставить Текущая папка Загружаю... Фильтр Ок Да Нет Пред След Загружаю картинки, секундочку... Страница из Добавить в избранное Удалить из избранного Создать Отмена Принять Сохранить This action is restricted in demo mode. Не могу найти картинку: {path}. Не хватает прав доступа к файлу/папке. Запись в папку невозможна Файл/папка не найдены Некорректное имя файла. Отсутствует выбранный шаблон. Папка с выбранным именем уже существует Ошибка создания папки Ошибка загрузки, не достаточно прав Файл с указанным именем уже существует Слишком большой файл Ошибка удаления файла(ов) Ошибка при обрезании фотографии Ошибка при обрезании фотографии Ошибка при вращении картинки Ошибка при переворачивании картинки Ошибка при сохранении Ошибка при удалении из избранного Файл сохранён Поддерживаю соединение... Файл(ы) успешно удалены Папка успешно создана Загрузка прошла успешно. Обрезание фотографии прошло успешно. Изменение размеров фотографии прошло успешно. Вращение фотографии прошло успешно. Переворачивание фотографии прошло успешно. Категории Папки Избранное История Просмотр Режим просмотра: Предпросмотр Текстом картинка/страница Удалить файл? Горячие клавиши: Пробел,N,Стрелка вправо,PAGE DOWN Горячие клавиши: P,Стрелка влево,PAGE UP Измерение Удалить из избранного? Создать папку Введите имя создаваемой папки Шаблон: -- Шаблоны -- Имя папки: Создать в: Создаю папку, секундочку... Загрузка Используйте форму для загрузки файлов Допустимые расширения: Максимальный размер файла: Файл для загрузки: Добавить как: Путь: Загрузить Добавить файл(ы) Загружаю... Файлы уже загружены, хотите отменить загрузку? {files} файлов (размер {size}) ожидают загрузки. {loaded} из {total} загружено на скорости {speed}/сек. Отменить загрузку Добавить ещё? Загрузить на сервер Загрузка отменена Выберите файлы При возникновении ошибок воспользуйтесь {a}классическим загрузчиком{/a}. Удалить Файл Размер Статус Ни одного корректного файла не было выбрано, попробуйте ещё Редактор изображений Сохранить Вернуть Обрезать Изменить размер Обрабатываю фотографию, секундочку... Сохранить пропорцию Слева Сверху Ширина Высота Сохранить как Перевернуть Повернуть Перезагрузить Горизонтально Вертикально Сохраняю картинку, секундочку... Вернуться? Загружаю картинку, секундочку... Точно не хотите сохранить изменения? Вставить картинку Заменить картинку Редактировать картинку Избранное Добавить в избранное Удалить из избранного Удалить из избранного Ошибка при удалении из избранного История
        imagemanager/language/im/sv.xml000066600000021165150472616010012536 0ustar00
        Moxiecode Systems AB (spam@moxiecode.com) This is the Swedish language pack for the MCImageManager.
        Moxiecode Image Mananger File manager Skapa katalog Uppdatera Ladda upp Hjlp Redigera Radera Visa Vlj Katalog Laddar... Filter Ok Ja Nej Fregende Nsta Tarut bild information, var god vnta... Sida av Lgg till favorit Radera favorit Skapa Avbryt Applicera Spara Denna operation r inte tillten i demostrations lget. Kunde inte hitta filsystem fr: {path}. Inga rttigheter till katalogen/filen. Inga skrivrttigheter till katalogen/filen. Filen/katalogen kunde inte hittas. Filens namn r inte valid. Den valda mallen kunde inte hittas. En katalog med det angivna namnet finns redan. Kunde inte skapa katalog. Kunde inte ladda up fil, kolla s den har skrivaccess. En fil med det angivna namnet finns redan. Filen du frsker ladda upp r fr stor. Kunde inte radera filer/kataloger. Kunde inte beskra bilden. Kunde inte skalaom bilden. Kunde inte rotera bilden. Kunde inte spegelvnda bilden. Kunde inte spara bilden. Kunde inte radera favoriten. Filen blev sparad. Hll vid liv. Rederingen av filerna/katalogerna lyckades. Katalogen har skapats. Uppladdningen r genomfrd. Beskrningen lyckades. Omskalningen lyckades. Rotationen lyckades. Spegelvndingen lyckades. Kategories Kataloger Favoriter Historik Vy Lge: Tumnaglar Text lista bilder per sida r du sker p att du vill radera denna fil/katalog? Tangentbordsgenvgar: SPACE,N,RIGHTARROW,PAGE DOWN Tangentbordsgenvgar: P,LEFTARROW,PAGE UP Dimensioner r du sker p att du vill radera denna favorit? Skapa katalog Fyll i namnet p katalogen du vill skapa. Mall: -- Vlj mall -- Katalogens namn: Skapa i: Skapar katalog, var god vnta... Ladda upp Vlj filer att ladda upp nedan. Godknnda filndelser: Max storlek: Fill att ladda upp: Filnamn: Skvg: Ladda upp Lgg till fil(er) Laddar upp fil, var god vnta... Filer hller p att laddas upp, r du sker p att du vill avbryta? Du har {files} filer (totalt {size}) som vntar p att f bli uppladdade. {loaded} av {total} uppladdade med hastigheten {speed}/s. Avbryt uppladdning Lgg till fler? Ladda upp till servern Upladdningen avbruten Vlj filer Om du har problem att ladda upp kan du alltid anvnda den {a}enkla upladdaren{/a}. Radera Fil Storlek Status Du mste vlja ngra korrekta filer. Bildredigeraren Spara terg Beskr Skalaom Bearbetar bild, var god vnta... Behll proportioner Vnster Toppen Bredd Hjd Spara som Spegelvnd Rotera Ladda om Horizontell Vertical Sparar bild, vad god vnta... r du sker p att du vill tergr till den senast sparade bild versionen? Laddar bilden, var god vnta... r du sker p att du inte vill spara frndringarna du gjorde p bilden? Infoga bild Byt bild Redigera bild Favoriter Lgg till favorit(er) Radera favorit r du sker p att du vill radera favoriten? Raderingen av favoriten misslyckades.. Historik
        imagemanager/language/im/nb.xml000066600000015330150472616010012502 0ustar00
        Knut B. Jacobsen (knut.jacobsen@gmail.com) +47 900 80 241 This is the Norwegian (bokml) language pack for the MCImageManager.
        Moxiecode Image Mananger Fil utforsker Opprett mappe. Oppfrisk Opplasting Hjelp Editer Slett Vis Innsett Legg til favoritter Velg mappe. Fjern favoritt Laster... Filter Ok Ja Nei Forrige Neste Henter bildedata, vent... Opprett Kanseller Utfr Lagre Denne handlingen er avgrenset i demo. modus. Filsystem ikke funnet for bane: {path}. Ingen tilgang til denne fil/mappe. Mappen har ikke skrive tillatelse. Fil/mappe ikke funnet. Filnavn ikke gyldig. Kunne ikke fjerne favoritten fra favorittlisten din. Valgt template mangler. Mappe med valgt navn finnes allerede. Feil: Kunne ikke opprette mappe. Opplasting feilet, sjekk mappens skrive tillatelser. Fil med oppgitt navn finnes allerede. Filen du prver laste opp er for stor. Kunne ikke slette fil(er). Kunne ikke beskjre bildet. Kunne ikke endre strrelsen p bildet. Rotering var ikke vellykket. Vend var ikke vellykket. Lagring var ikke vellykket. Fil er lagret OK. Keepalive foresprsel. Fil(er) er slettet OK. Mappe er opprettet OK. Opplastet OK. Beskjr vellykket. Skaler vellykket. Rotering vellykket. Vend vellykket. Kategorier Mapper Favoritter Histore Vis Vis modus: Thumbnails Tekstliste bilder/side Er det sikkert at du vil fjerne filen? Tastatur snarvei: SPACE,N,RIGHTARROW,PAGE DOWN Tastatur snarvei: P,LEFTARROW,PAGE UP Dimensjoner Er det sikkert at du vil fjerne dette fra din favorittliste? Opprett mappe. Gi inn navn p mappen du nsker opprette. Template: -- Velg template -- Mappe navn: Opprett i: Oppretter mappe, vent... Opplasting Bruk formular for opplasting av filer. Gyldige filtyper: Max opplastings strrelse: Fil til opplasting: Som filnavn: Bane: Last opp Legg til fil(er) Moxiecode ImageManager Editor Lagre Angre Beskjr Skaler Bearbeider bilde, vent... Behold proporsjoner Venstre Topp Bredde Hyde Lagre som Vend Roter Oppfrisk Horisontalt Vertikalt Lagrer bilde, vent... Er det sikkert at du vil reversere til sist lagrede bilde? Laster bilde, vent... Innsett bilde
        imagemanager/language/im/nn.xml000066600000015331150472616010012517 0ustar00
        Knut B. Jacobsen (knut.jacobsen@gmail.com) +47 900 80 241 This is the Norwegian (nynorsk) language pack for the MCImageManager.
        Moxiecode Image Mananger Fil utforsker Opprett mappe. Oppfrisk Opplasting Hjelp Editer Slett Vis Innsett Legg til favoritter Velg mappe. Fjern favoritt Laster... Filter Ok Ja Nei Forrige Neste Henter bildedata, vent... Opprett Kanseller Utfr Lagre Denne handlingen er avgrenset i demo. modus. Filsystem ikke funnet for bane: {path}. Ingen tilgang til denne fil/mappe. Mappen har ikke skrive tillatelse. Fil/mappe ikke funnet. Filnavn ikke gyldig. Kunne ikke fjerne favoritten fra favorittlisten din. Valgt template mangler. Mappe med valgt navn finnes allerede. Feil: Kunne ikke opprette mappe. Opplasting feilet, sjekk mappens skrive tillatelser. Fil med oppgitt navn finnes allerede. Filen du prver laste opp er for stor. Kunne ikke slette fil(er). Kunne ikke beskjre bildet. Kunne ikke endre strrelsen p bildet. Rotering var ikke vellykket. Vend var ikke vellykket. Lagring var ikke vellykket. Fil er lagret OK. Keepalive foresprsel. Fil(er) er slettet OK. Mappe er opprettet OK. Opplastet OK. Beskjr vellykket. Skaler vellykket. Rotering vellykket. Vend vellykket. Kategorier Mapper Favoritter Histore Vis Vis modus: Thumbnails Tekstliste bilder/side Er det sikkert at du vil fjerne filen? Tastatur snarvei: SPACE,N,RIGHTARROW,PAGE DOWN Tastatur snarvei: P,LEFTARROW,PAGE UP Dimensjoner Er det sikkert at du vil fjerne dette fra din favorittliste? Opprett mappe. Gi inn navn p mappen du nsker opprette. Template: -- Velg template -- Mappe navn: Opprett i: Oppretter mappe, vent... Opplasting Bruk formular for opplasting av filer. Gyldige filtyper: Max opplastings strrelse: Fil til opplasting: Som filnavn: Bane: Last opp Legg til fil(er) Moxiecode ImageManager Editor Lagre Angre Beskjr Skaler Bearbeider bilde, vent... Behold proporsjoner Venstre Topp Bredde Hyde Lagre som Vend Roter Oppfrisk Horisontalt Vertikalt Lagrer bilde, vent... Er det sikkert at du vil reversere til sist lagrede bilde? Laster bilde, vent... Innsett bilde
        imagemanager/index.php000066600000002741150472616010011013 0ustar00dispatchEvent("onPreInit", array($type)); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once($path); $config = $man->getConfig(); $suffix = ""; if ($domain) $suffix .= "?domain=" . $domain; // Dispatch onInit event if ($man->isAuthenticated()) { $man->dispatchEvent("onInit"); header("Location: pages/". $config["general.theme"] ."/" . $page . $suffix); die(); } else { $_SESSION['isLoggedIn'] = true; $_SESSION['user'] = $_POST['login']; $man->dispatchEvent("onInit"); header("Location: pages/". $config["general.theme"] ."/" . $page . $suffix); die(); } ?>imagemanager/stream/default.php000066600000000045150472616010012616 0ustar00imagemanager/stream/index.php000066600000000045150472616010012301 0ustar00imagemanager/stream/stream.php000066600000007706150472616010012500 0ustar00load('../pages/' . $theme . '/resources.xml'); if ($type) { $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $config = $man->getConfig(); // Load plugin resources $plugins = explode(',', $config["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); } $file = $resources->getFile($package, $file); header('Content-type: ' . $file->getContentType()); readfile($file->getPath()); die(); } if ($cmd == "") die("No command."); $chunks = explode('.', $cmd); $type = $chunks[0]; $method = $cmd = $chunks[1]; // Clean up type, only a-z stuff. $type = preg_replace("/[^a-z]/i", "", $type); if ($type == "") die("No type set."); // Include Base and Core and Config. $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $config = $man->getConfig(); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch onAuthenticate event if ($man->isAuthenticated()) { if ($_SERVER["REQUEST_METHOD"] == "GET") { $args = $_GET; // Dispatch event before starting to stream $man->dispatchEvent("onBeforeStream", array($cmd, &$args)); // Check command, do command, stream file. $man->dispatchEvent("onStream", array($cmd, &$args)); // Dispatch event after stream $man->dispatchEvent("onAfterStream", array($cmd, &$args)); } else if ($_SERVER["REQUEST_METHOD"] == "POST") { $args = array_merge($_POST, $_GET); $json = new Moxiecode_JSON(); // Dispatch event before starting to stream $man->dispatchEvent("onBeforeUpload", array($cmd, &$args)); // Check command, do command, stream file. $result = $man->executeEvent("onUpload", array($cmd, &$args)); $data = $result->toArray(); if (isset($args["chunk"])) { // Output JSON response to multiuploader die('{method:\'' . $method . '\',result:' . $json->encode($data) . ',error:null,id:\'m0\'}'); } else { // Output JSON function echo ''; } // Dispatch event after stream $man->dispatchEvent("onAfterUpload", array($cmd, &$args)); } } else { if (isset($_GET["format"]) && ($_GET["format"] == "flash")) header("HTTP/1.1 405 Method Not Allowed"); die('{"result":{login_url:"' . addslashes($config["authenticator.login_page"]) . '"},"id":null,"error":{"errstr":"Access denied by authenicator.","errfile":"","errline":null,"errcontext":"","level":"AUTH"}}'); } ?>imagemanager/editor_plugin_src.js000066600000035162150472616010013247 0ustar00/** * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ (function() { window.mcImageManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'image,media' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; i'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinymce.DOM.encode(v); } } )); } }, v)); }); }, getInfo : function() { return mcImageManagerPlugin.getInfo(); }, createControl: function(n, cm) { var t = this, c, ed = t.editor, v; switch (n) { case 'insertimage': v = ed.getParam('imagemanager_insert_template'); if (v instanceof Array) { c = cm.createMenuButton('insertimage', { title : 'imagemanager_insertimage_desc', image : t.url + '/pages/im/img/insertimage.gif', icons : false }); c.onRenderMenu.add(function(c, m) { tinymce.each(v, function(v) { m.add({title : v.title, onclick : function() { ed.execCommand('mceInsertImage', false, v); }}); }); }); } else { c = cm.createButton('insertimage', { title : 'imagemanager_insertimage_desc', image : t.url + '/pages/im/img/insertimage.gif', onclick : function() { ed.execCommand('mceInsertImage', false, {template : v}); } }); } return c; } return null; } }); tinymce.PluginManager.add('imagemanager', tinymce.plugins.ImageManagerPlugin); tinymce.ScriptLoader.load((tinymce.PluginManager.urls['imagemanager'] || tinymce.baseURL + '/plugins/imagemanager')+ '/language/index.php?type=im&format=tinymce_3_x&group=tinymce&prefix=imagemanager_'); } // Setup TinyMCE 2.x plugin if (window.TinyMCE_Engine) { var TinyMCE_ImageManagerPlugin = { setup : function() { var b = (window.realTinyMCE || tinyMCE).baseURL; mcImageManager.baseURL = b + '/plugins/imagemanager/js'; document.write(''); }, initInstance : function(ed) { ed.settings.file_browser_callback = 'mcImageManager.filebrowserCallBack'; mcImageManager.settings.handle = tinyMCE.getParam('imagemanager_handle', mcImageManager.settings.handle); }, getControlHTML : function(cn) { switch (cn) { case "insertimage": return tinyMCE.getButtonHTML(cn, 'lang_imagemanager_insertimage_desc', '{$pluginurl}/pages/im/img/insertimage.gif', 'mceInsertImage', false); } return ""; }, getInfo : function() { return mcImageManagerPlugin.getInfo(); }, execCommand : function(id, el, cmd, ui, v) { var ed = tinyMCE.getInstanceById(id); if (cmd == 'mceInsertImage') { mcImageManager.browse(tinyMCE.extend({ path : tinyMCE.getParam("imagemanager_path"), rootpath : tinyMCE.getParam("imagemanager_rootpath"), remember_last_path : tinyMCE.getParam("imagemanager_remember_last_path"), custom_data : tinyMCE.getParam("imagemanager_custom_data"), insert_filter : tinyMCE.getParam("imagemanager_insert_filter"), oninsert : function(o) { var ci = o.focusedFile.custom; if (!ci.thumbnail_url) { ci.thumbnail_url = url; ci.twidth = ci.width; ci.theight = ci.height; } ed.execCommand('mceInsertContent', false, mcImageManagerPlugin.replace( tinyMCE.getParam('imagemanager_insert_template', ''), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinyMCE.xmlEncode(v); } } )); } }, v)); return true; } return false; } }; TinyMCE_ImageManagerPlugin.setup(); tinyMCE.addPlugin('imagemanager', TinyMCE_ImageManagerPlugin); } })(); imagemanager/config.php000066600000020776150472616010011161 0ustar00imagemanager/includes/general.php000066600000010474150472616010013131 0ustar00 $value) $newarray[formatParam($name, $sanitize)] = formatParam($value, $sanitize); return $newarray; } return formatParam($httpRequestInput[$name], $sanitize); } function formatParam($str, $sanitize = false) { if ($sanitize) $str = preg_replace("/[^0-9a-z\-_,]+/i", "", $str); if (ini_get("magic_quotes_gpc")) $str = stripslashes($str); return $str; } function getClassName($obj) { return strtolower(get_class($obj)); } /** * Check if a value is true/false. * * @param string $str True/False value. * @return bool true/false */ function checkBool($str, $def = false) { if ($str === true) return true; if ($str === false) return false; $str = strtolower($str); if ($str == "true") return true; return $def; } /** * Returns a file extention from a path. * * @param string $path Path to grab extention from. * @return string File extention. */ function getFileExt($path) { $ar = explode('.', $path); return strtolower(array_pop($ar)); } /** * Returns the mime type of an path by resolving it agains a apache style "mime.types" file. * * @param String $path path to Map/get content type by * @patam String $mime_File Absolute filepath to mime.types style file. * @return String mime type of path or an empty string on failue. */ function mapMimeTypeFromUrl($path, $mime_file) { if (($fp = fopen($mime_file, "r"))) { $ar = explode('.', $path); $ext = strtolower(array_pop($ar)); while (!feof ($fp)) { $line = fgets($fp, 4096); $chunks = preg_split("/(\t+)|( +)/", $line); for ($i=1; $igetLogger(); if (!$mcLogger) { $mcLogger = new Moxiecode_Logger(); // Set logger options $mcLogger->setPath(dirname(__FILE__) . "/../logs"); $mcLogger->setMaxSize("100kb"); $mcLogger->setMaxFiles("10"); $mcLogger->setFormat("{time} - {message}"); } return $mcLogger; } function debug($msg) { $args = func_get_args(); $log =& getLogger(); $log->debug(implode(', ', $args)); } function info($msg) { $args = func_get_args(); $log =& getLogger(); $log->info(implode(', ', $args)); } function error($msg) { $args = func_get_args(); $log =& getLogger(); $log->error(implode(', ', $args)); } function warn($msg) { $args = func_get_args(); $log =& getLogger(); $log->warn(implode(', ', $args)); } function fatal($msg) { $args = func_get_args(); $log =& getLogger(); $log->fatal(implode(', ', $args)); } ?>imagemanager/classes/ManagerPlugin.php000066600000020410150472616010014063 0ustar00imagemanager/classes/Authenticators/IPAuthenticator.php000066600000002303150472616010017373 0ustar00getConfig(); $ipNums = split(',', $config['IPAuthenticator.ip_numbers']); $currentIP = $this->_ip2int($_SERVER["REMOTE_ADDR"]); foreach ($ipNums as $ip) { $ipRange = split('-', $ip); if (count($ipRange) == 1 && $this->_ip2int($ipRange[0]) == $currentIP) return true; if (count($ipRange) == 2 && $currentIP >= $this->_ip2int($ipRange[0]) && $currentIP <= $this->_ip2int($ipRange[1])) return true; } return false; } function _ip2int($addr) { $ips = split("\.", $addr); return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256); } } // Add plugin to MCManager $man->registerPlugin("IPAuthenticator", new Moxiecode_IPAuthenticator()); ?>imagemanager/classes/Authenticators/BaseAuthenticator.php000066600000001215150472616010017736 0ustar00registerPlugin("BaseAuthenticator", new Moxiecode_BaseAuthenticator()); ?>imagemanager/classes/Authenticators/SessionAuthenticator.php000066600000005301150472616010020507 0ustar00getConfig(); // Support both old and new format $loggedInKey = isset($config['SessionAuthenticator.logged_in_key']) ? $config['SessionAuthenticator.logged_in_key'] : $config["authenticator.session.logged_in_key"]; $userKey = isset($config['SessionAuthenticator.user_key']) ? $config['SessionAuthenticator.user_key'] : $config["authenticator.session.user_key"]; $pathKey = isset($config['SessionAuthenticator.path_key']) ? $config['SessionAuthenticator.path_key'] : $config["authenticator.session.path_key"]; $rootPathKey = isset($config['SessionAuthenticator.rootpath_key']) ? $config['SessionAuthenticator.rootpath_key'] : $config["authenticator.session.rootpath_key"]; $configPrefix = (isset($config['SessionAuthenticator.config_prefix']) ? $config['SessionAuthenticator.config_prefix'] : "mcmanager") . "."; // Switch path if (isset($_SESSION[$pathKey])) $config['filesystem.path'] = $_SESSION[$pathKey]; // Switch root if (isset($_SESSION[$rootPathKey])) $config['filesystem.rootpath'] = $_SESSION[$rootPathKey]; $user = isset($_SESSION[$userKey]) ? $_SESSION[$userKey] : ""; $user = preg_replace('/[\\\\\\/:]/i', '', $user); // Override by prefix foreach ($_SESSION as $key => $value) { if (strpos($key, $configPrefix) === 0) $config[substr($key, strlen($configPrefix))] = $value; } foreach ($config as $key => $value) { // Skip replaceing {$user} in true/false stuff if ($value === true || $value === false) continue; $value = str_replace('${user}', $user, $value); $config[$key] = $value; } return isset($_SESSION[$loggedInKey]) && checkBool($_SESSION[$loggedInKey]); } } // Add plugin to MCManager $man->registerPlugin("SessionAuthenticator", new Moxiecode_SessionAuthenticator()); ?>imagemanager/classes/ImageManager/ImageManagerPlugin.php000066600000103001150472616010017341 0ustar00setConfig($mcImageManagerConfig, false); $man->setLangPackPath("im"); return false; } return true; } /** * Gets executed when a RPC command is to be executed. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { switch ($cmd) { case "getMediaInfo": return $this->_getMediaInfo($man, $input); case "resizeImage": $result = new Moxiecode_ResultSet("status,file,message"); $file = $man->getFile($input["path"]); /* if ($man->verifyFile($file, "edit") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result->toArray(); }*/ $filedata = array(); $filedata["path"] = $man->encryptPath($file->getAbsolutePath()); $filedata["width"] = isset($input["width"]) ? $input["width"] : 0; $filedata["height"] = isset($input["height"]) ? $input["height"] : 0; $filedata["target"] = isset($input["target"]) ? $input["target"] : ""; $filedata["temp"] = isset($input["temp"]) ? $input["temp"] : ""; $this->_resizeImage($man, $file, $filedata, $result); return $result->toArray(); case "cropImage": $result = new Moxiecode_ResultSet("status,file,message"); $file = $man->getFile($input["path"]); /* if ($man->verifyFile($file, "edit") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result->toArray(); }*/ $filedata = array(); $filedata["path"] = $man->encryptPath($file->getAbsolutePath()); $filedata["width"] = $input["width"]; $filedata["height"] = $input["height"]; $filedata["top"] = $input["top"]; $filedata["left"] = $input["left"]; $filedata["target"] = isset($input["target"]) ? $input["target"] : ""; $filedata["temp"] = isset($input["temp"]) ? $input["temp"] : ""; $this->_cropImage($man, $file, $filedata, $result); return $result->toArray(); case "rotateImage": $result = new Moxiecode_ResultSet("status,file,message"); $file = $man->getFile($input["path"]); /* if ($man->verifyFile($file, "edit") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result->toArray(); }*/ $filedata = array(); $filedata["path"] = $file->getAbsolutePath(); $filedata["angle"] = $input["angle"]; $filedata["target"] = isset($input["target"]) ? $input["target"] : ""; $filedata["temp"] = isset($input["temp"]) ? $input["temp"] : ""; $this->_rotateImage($man, $file, $filedata, $result); return $result->toArray(); case "flipImage": $result = new Moxiecode_ResultSet("status,file,message"); $file = $man->getFile($input["path"]); /* if ($man->verifyFile($file, "edit") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result->toArray(); }*/ $filedata = array(); $filedata["path"] = $file->getAbsolutePath(); $filedata["vertical"] = isset($input["vertical"]) ? $input["vertical"] : false; $filedata["horizontal"] = isset($input["horizontal"]) ? $input["horizontal"] : false; $filedata["target"] = isset($input["target"]) ? $input["target"] : ""; $filedata["temp"] = isset($input["temp"]) ? $input["temp"] : ""; $this->_flipImage($man, $file, $filedata, $result); return $result->toArray(); case "saveImage": $config = $man->getConfig(); $result = new Moxiecode_ResultSet("status,file,message"); $file = $man->getFile($input["path"]); if (checkBool($config["general.demo"])) { $result->add("FAILED", $man->encryptPath($input["target"]), "{#error.demo}"); $this->_cleanUp($man, $file->getParent()); return $result->toArray(); } /*if ($man->verifyFile($file, "edit") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); $this->_cleanUp($man, $file->getParent()); return $result->toArray(); }*/ $filedata = array(); $filedata["path"] = $file->getAbsolutePath(); if (isset($input["target"]) && $input["target"] != "") { $targetFile = $man->getFile(utf8_encode($file->getParent()), $input["target"]); $filedata["target"] = utf8_encode($targetFile->getAbsolutePath()); } $this->_saveImage($man, $file, $filedata, $result); $this->_cleanUp($man, $file->getParent()); return $result->toArray(); } return null; } /** * Gets called when data is streamed to client. This method should setup * HTTP headers, content type etc and simply send out the binary data to the client and the return false * ones that is done. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onStream(&$man, $cmd, $input) { switch ($cmd) { case "thumb": return $this->_streamThumb($man, $input); } return null; } /** * Gets called before a file action occurs for example before a rename or copy. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param BaseFile $file1 File object 1 for example from in a copy operation. * @param BaseFile $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeFileAction(&$man, $action, $file1, $file2) { if ($action == DELETE_ACTION) { // Delete format images $config = $file1->getConfig(); if (checkBool($config['filesystem.delete_format_images'])) { $imageutils = new $config['thumbnail']; $imageutils->deleteFormatImages($file1->getAbsolutePath(), $config["upload.format"]); $imageutils->deleteFormatImages($file1->getAbsolutePath(), $config["edit.format"]); } } return true; } /** * Gets called after a file action was perforem for example after a rename or copy. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param string $file1 File object 1 for example from in a copy operation. * @param string $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onFileAction(&$man, $action, $file1, $file2) { switch ($action) { case ADD_ACTION: $config = $file1->getConfig(); if ($config["upload.format"]) { $imageutils = new $config['thumbnail']; $imageutils->formatImage($file1->getAbsolutePath(), $config["upload.format"], $config['upload.autoresize_jpeg_quality']); } if (checkBool($config["upload.create_thumbnail"])) $thumbnail = $this->_createThumb($man, $file1); if (checkBool($config['upload.autoresize'])) { $ext = getFileExt($file1->getName()); if (!in_array($ext, array('gif', 'jpeg', 'jpg', 'png'))) return true; $imageInfo = @getimagesize($file1->getAbsolutePath()); $fileWidth = $imageInfo[0]; $fileHeight = $imageInfo[1]; $imageutils = new $config['thumbnail']; $percentage = min($config['upload.max_width'] / $fileWidth, $config['upload.max_height'] / $fileHeight); if ($percentage <= 1) $result = $imageutils->resizeImage($file1->getAbsolutePath(), $file1->getAbsolutePath(), round($fileWidth * $percentage), round($fileHeight * $percentage), $ext, $config['upload.autoresize_jpeg_quality']); } break; case DELETE_ACTION: $config = $file1->getConfig(); if ($config['thumbnail.delete'] == true) { $thumbnailFolder = $man->getFile(dirname($file1->getAbsolutePath()) ."/". $config['thumbnail.folder']); $thumbnailPath = $thumbnailFolder->getAbsolutePath() . "/" . $config['thumbnail.prefix'] . basename($file1->getAbsolutePath()); $thumbnail = $man->getFile($thumbnailPath); if ($thumbnail->exists()) $thumbnail->delete(); // Check if thumbnail directory should be deleted if ($thumbnailFolder->exists()) { $files = $thumbnailFolder->listFiles(); if (count($files) == 0) $thumbnailFolder->delete(); } } break; } return true; // Pass to next plugin } /** * Gets called when custom data is to be added for a file custom data can for example be * plugin specific name value items that should get added into a file listning. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param BaseFile $file File reference to add custom info/data to. * @param string $type Where is the info needed for example list or info. * @param Array $custom Name/Value array to add custom items to. * @return bool true/false if the execution of the event chain should continue. */ function onCustomInfo(&$man, &$file, $type, &$input) { // Is file and image $config = $file->getConfig(); $input["editable"] = false; if ($file->isFile() && ($type == "list" || $type == "insert" || $type == "info")) { // Should we get config on each file here? //$config = $file->getConfig(); $ext = getFileExt($file->getName()); if (!in_array($ext, array('gif', 'jpeg', 'jpg', 'png', 'bmp'))) return true; $imageutils = new $config['thumbnail']; $canEdit = $imageutils->canEdit($ext); $imageInfo = @getimagesize($file->getAbsolutePath()); $fileWidth = $imageInfo[0]; $fileHeight = $imageInfo[1]; $targetWidth = $config['thumbnail.width']; $targetHeight = $config['thumbnail.height']; // Check thumnail size if ($config['thumbnail.scale_mode'] == "percentage") { $percentage = min($config['thumbnail.width'] / $fileWidth, $config['thumbnail.height'] / $fileHeight); if ($percentage <= 1) { $targetWidth = round($fileWidth * $percentage); $targetHeight = round($fileHeight * $percentage); } else { $targetWidth = $fileWidth; $targetHeight = $fileHeight; } } $input["thumbnail"] = true; // Check against config. if (($config["thumbnail.max_width"] != "" && $fileWidth > $config["thumbnail.max_width"]) || ($config["thumbnail.max_height"] != "" && $fileHeight > $config["thumbnail.max_height"])) $input["thumbnail"] = false; else { $input["twidth"] = $targetWidth; $input["theight"] = $targetHeight; } // Get thumbnail URL if ($type == "insert") { $thumbFile = $man->getFile($file->getParent() . "/" . $config['thumbnail.folder'] . "/" . $config['thumbnail.prefix'] . $file->getName()); if ($thumbFile->exists()) $input["thumbnail_url"] = $man->convertPathToURI($thumbFile->getAbsolutePath(), $config['preview.wwwroot']); } $input["width"] = $fileWidth; $input["height"] = $fileHeight; $input["editable"] = $canEdit; } return true; } // * * * * * * * Private methods /** * SaveImage * TODO: Check for PX or % */ function _saveImage(&$man, &$file, &$filedata, &$result) { $config =& $file->getConfig(); // Find out if we have a temp file. $ext = getFileExt($file->getName()); if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } // To file to save if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); return; } if (strpos($file->getName(), "mcic_") !== 0) $tmpImage = "mcic_". md5(session_id() . $file->getName()) . "." . $ext; else $tmpImage = $file->getName(); $tempFile =& $man->getFile(utf8_encode(dirname($file->getAbsolutePath()) . "/" . $tmpImage)); $tempFile->setTriggerEvents(false); /* Failed when mcic_ was found due to exclude in filesystem conf if ($man->verifyFile($tempFile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($tempFile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } */ // NOTE: add check for R/W if ($tempFile->exists()) { if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); // Delete format images $config = $targetfile->getConfig(); $imageutils = new $config['thumbnail']; $imageutils->deleteFormatImages($targetfile->getAbsolutePath(), $config["upload.format"]); // Just ignore it if it's the same file if ($tempFile->getAbsolutePath() != $targetfile->getAbsolutePath()) { if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } if ($targetfile->exists()) $targetfile->delete(); $tempFile->renameTo($targetfile); $targetfile->importFile(); // Reformat if ($config["edit.format"]) { $imageutils = new $config['thumbnail']; $imageutils->formatImage($targetfile->getAbsolutePath(), $config["edit.format"], $config['edit.jpeg_quality']); } } $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.save_success}"); } else { $file->delete(); $tempFile->renameTo($file); $file->importFile(); $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.save_success}"); } } else { if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); // Just ignore it if it's the same file if ($file->getAbsolutePath() != $targetfile->getAbsolutePath()) { if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } if ($targetfile->exists()) $targetfile->delete(); $file->copyTo($targetfile); $targetfile->importFile(); } $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.save_success}"); } else { // No temp, no target, abort! $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.save_failed}"); } } } /** * CropImage * TODO: Check for PX or % */ function _cropImage(&$man, &$file, &$filedata, &$result) { $ext = getFileExt($file->getName()); $config = $file->getConfig(); $imageutils = new $config['thumbnail']; if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } // To file to crop if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); return; } if ($filedata["temp"]) { if (strpos($file->getName(), "mcic_") !== 0) $tmpImage = "mcic_". md5(session_id() . $file->getName()) . "." . $ext; else $tmpImage = $file->getName(); $tempFile =& $man->getFile(dirname($file->getAbsolutePath()) . "/" . $tmpImage); $tempFile->setTriggerEvents(false); $status = $imageutils->cropImage($file->getAbsolutePath(), $tempFile->getAbsolutePath(), $filedata["top"], $filedata["left"], $filedata["width"], $filedata["height"], $ext, $config["edit.jpeg_quality"]); if ($status) { $tempFile->importFile(); $result->add("OK", $man->encryptPath($tempFile->getAbsolutePath()), "{#message.crop_success}"); } else { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.crop_failed}"); } } else { if (checkBool($config["general.demo"])) { $result->add("FAILED", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); if ($targetfile->isDirectory()) { $targetfile = $man->getFile($man->addTrailingSlash($targetfile->getAbsolutePath()) . $file->getName()); } if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } } else $targetfile = $file; $status = $imageutils->cropImage($file->getAbsolutePath(), $targetfile->getAbsolutePath(), $filedata["top"], $filedata["left"], $filedata["width"], $filedata["height"], $ext, $config["edit.jpeg_quality"]); if ($status) { $targetfile->importFile(); $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.crop_success}"); } else { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), "{#error.no_access}"); } } } /** * ResizeImage */ function _resizeImage(&$man, &$file, &$filedata, &$result) { $ext = getFileExt($file->getName()); $config = $file->getConfig(); $imageutils = new $config['thumbnail']; if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } // To file to resize if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); return; } if ($filedata["temp"]) { if (strpos($file->getName(), "mcic_") !== 0) $tmpImage = "mcic_". md5(session_id() . $file->getName()) . "." . $ext; else $tmpImage = $file->getName(); $tempFile =& $man->getFile(dirname($file->getAbsolutePath()) . "/" . $tmpImage); $tempFile->setTriggerEvents(false); $status = $imageutils->resizeImage($file->getAbsolutePath(), $tempFile->getAbsolutePath(), $filedata["width"], $filedata["height"], $ext, $config["edit.jpeg_quality"]); if ($status) { $tempFile->importFile(); $result->add("OK", $man->encryptPath($tempFile->getAbsolutePath()), "{#message.resize_success}"); } else { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.resize_failed}"); } } else { if (checkBool($config["general.demo"])) { $result->add("FAILED", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); if ($targetfile->isDirectory()) { $targetfile = $man->addTrailingSlash($man->getFile($targetfile->getAbsolutePath()) . $file->getName()); } if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } } else $targetfile = $file; $status = $imageutils->resizeImage($file->getAbsolutePath(), $targetfile->getAbsolutePath(), $filedata["width"], $filedata["height"], $ext, $config["edit.jpeg_quality"]); if ($status) { $targetfile->importFile(); $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.resize_success}"); } else { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), "{#error.resize_failed}"); } } } /** * RotateImage */ function _rotateImage(&$man, &$file, &$filedata, &$result) { $ext = getFileExt($file->getName()); $config = $file->getConfig(); $imageutils = new $config['thumbnail']; if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } // To file to rotate if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); return; } if ($filedata["temp"]) { if (strpos($file->getName(), "mcic_") !== 0) $tmpImage = "mcic_". md5(session_id() . $file->getName()) . "." . $ext; else $tmpImage = $file->getName(); $tempFile =& $man->getFile(dirname($file->getAbsolutePath()) . "/" . $tmpImage); $tempFile->setTriggerEvents(false); $status = $imageutils->rotateImage($file->getAbsolutePath(), $tempFile->getAbsolutePath(), $ext, $filedata["angle"], $config["edit.jpeg_quality"]); if ($status) { $tempFile->importFile(); $result->add("OK", $man->encryptPath($tempFile->getAbsolutePath()), "{#message.rotate_success}"); } else { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.rotate_failed}"); } } else { if (checkBool($config["general.demo"])) { $result->add("FAILED", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); if ($targetfile->isDirectory()) { $targetfile = $man->addTrailingSlash($man->getFile($targetfile->getAbsolutePath()) . $file->getName()); } if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } } else $targetfile = $file; $status = $imageutils->rotateImage($file->getAbsolutePath(), $targetfile->getAbsolutePath(), $ext, $filedata["angle"], $config["edit.jpeg_quality"]); if ($status) { $targetfile->importFile(); $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.rotate_success}"); } else { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), "{#error.rotate_failed}"); } } } /** * FlipImage */ function _flipImage(&$man, &$file, &$filedata, &$result) { $ext = getFileExt($file->getName()); $config = $file->getConfig(); $imageutils = new $config['thumbnail']; if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } // To file to flip if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); return; } if ($filedata["temp"]) { if (strpos($file->getName(), "mcic_") !== 0) $tmpImage = "mcic_". md5(session_id() . $file->getName()) . "." . $ext; else $tmpImage = $file->getName(); $tempFile =& $man->getFile(dirname($file->getAbsolutePath()) . "/" . $tmpImage); $tempFile->setTriggerEvents(false); $status = $imageutils->flipImage($file->getAbsolutePath(), $tempFile->getAbsolutePath(), $ext, $filedata["vertical"], $filedata["horizontal"]); if ($status) { $tempFile->importFile(); $result->add("OK", $man->encryptPath($tempFile->getAbsolutePath()), "{#message.flip_success}"); } else { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.flip_failed}"); } } else { if (checkBool($config["general.demo"])) { $result->add("FAILED", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if ($filedata["target"] != "") { $targetfile = $man->getFile($filedata["target"]); if ($targetfile->isDirectory()) { $targetfile = $man->addTrailingSlash($man->getFile($targetfile->getAbsolutePath()) . $file->getName()); } if ($man->verifyFile($targetfile, "edit") < 0) { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), $man->getInvalidFileMsg()); return; } } else $targetfile = $file; $status = $imageutils->flipImage($file->getAbsolutePath(), $targetfile->getAbsolutePath(), $ext, $filedata["vertical"], $filedata["horizontal"], $config["edit.jpeg_quality"]); if ($status) { $targetfile->importFile(); $result->add("OK", $man->encryptPath($targetfile->getAbsolutePath()), "{#message.flip_success}"); } else { $result->add("FAILED", $man->encryptPath($targetfile->getAbsolutePath()), "{#error.flip_failed}"); } } } /** * Clean up temp files, input is dir path. */ function _cleanUp(&$man, $path) { $filedir =& $man->getFile($path); $config = $filedir->getConfig(); if ($man->verifyFile($filedir, "edit") < 0) return; // If we can't access this dir, we just return. if (!$filedir->canWrite()) return; // Delete old files $files = $filedir->listFiles(); foreach ($files as $file) { if (strpos($file->getName(), "mcic_") === 0 && time() - $file->getLastModified() > 3600) { $file->setTriggerEvents(false); $file->delete(); } } } /** * Lists file. */ function _getMediaInfo(&$man, $input) { // Convert URL to path if (isset($input["url"])) { $url = parse_url($input["url"]); $input["path"] = $man->resolveURI($url["path"]); if (!$man->verifyPath($input["path"])) trigger_error(sprintf("Could not resolve URL: %s to a filesystem path. Could be that the image is outside the configured filesystem.rootpath.", $input["url"]), FATAL); } $file =& $man->getFile($input["path"]); $config = $file->getConfig(); $parent =& $file->getParentFile(); $files = array(); if ($parent->isDirectory()) { // Setup file filter $fileFilter = new Moxiecode_BasicFileFilter(); //$fileFilter->setDebugMode(true); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); $fileFilter->setOnlyFiles(true); // List files $files =& $parent->listFilesFiltered($fileFilter); } $match = false; $prev = ""; $next = ""; foreach($files as $curfile) { if ($curfile->getAbsolutePath() == $file->getAbsolutePath()) { $match = true; continue; } else if (!$match) $prev = $curfile->getAbsolutePath(); if ($match) { $next = $curfile->getAbsolutePath(); break; } } $ext = getFileExt($file->getName()); // Input default size? $width = "425"; $height = "350"; // All types that getimagesize support $imagearray = array('gif', 'jpg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'jpc', 'jp2', 'jpx', 'jb2', 'swc', 'iff', 'wbmp', 'xbm'); if (in_array($ext, $imagearray)) { $sizeinfo = @getimagesize($file->getAbsolutePath()); if ($sizeinfo) { $width = $sizeinfo[0]; $height = $sizeinfo[1]; } } $result = new Moxiecode_ResultSet("name,path,url,size,type,created,modified,width,height,attribs,next,prev,custom"); $custom = array(); $man->dispatchEvent("onCustomInfo", array(&$file, "info", &$custom)); $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $url = $man->removeTrailingSlash($config['preview.urlprefix']) . $man->convertPathToURI($file->getAbsolutePath(), $config['preview.wwwroot']); $result->add( utf8_encode($file->getName()), $man->encryptPath($file->getAbsolutePath()), utf8_encode($url), $file->getLength(), $ext, date($config['filesystem.datefmt'], $file->getCreationDate()), date($config['filesystem.datefmt'], $file->getLastModified()), $width, $height, $attribs, $man->encryptPath($next), $man->encryptPath($prev), $custom); return $result->toArray(); } function _createThumb(&$man, &$file) { $config = $file->getConfig(); $imageutils = new $config['thumbnail']; $ext = getFileExt($file->getName()); $canEdit = $imageutils->canEdit($ext); if (!in_array($ext, array('gif', 'jpeg', 'jpg', 'png', 'bmp'))) return false; // Check if we have an EXIF JPG file. if (($config['thumbnail.use_exif'] == true) && (function_exists("exif_thumbnail")) && (strtolower($ext) == "jpg" || strtolower($ext) == "jpeg")) { $image = @exif_thumbnail($file->getAbsolutePath(), $exif_width, $exif_height, $exif_type); if ($image !== false) return false; } // Check for thumbnails $havethumbnail = true; // No folder or not enabled = no thumbnail, could check for thumbnail folder and delete it perhaps? if (($config['thumbnail.folder'] == "") || ($config['thumbnail.enabled'] == false)) $havethumbnail = false; // If we dont have GD we dont have a thumbnail. if (!$canEdit) $havethumbnail = false; // Check so that we aren't inside a thumbnail folder. $parentFile = $file->getParentFile(); if ($config['thumbnail.folder'] == $parentFile->getName()) $havethumbnail = false; // Ok, no thumbnail? Then lets just stream the original image. if (!$havethumbnail) return false; // Ok, we have a thumbnail or should generate one, now lets check some stuff about it. $thumbnailFolder = $man->getFile(dirname($file->getAbsolutePath()) ."/". $config['thumbnail.folder']); if ((!$thumbnailFolder->exists()) && ($config['thumbnail.auto_generate'] == true)) $thumbnailFolder->mkdir(); $thumbnailPath = $thumbnailFolder->getAbsolutePath() . "/" . $config['thumbnail.prefix'] . basename($file->getAbsolutePath()); $thumbnail = $man->getFile(utf8_encode($thumbnailPath)); $thumbnail->setTriggerEvents(false); $thumbnailQuality = $config['thumbnail.jpeg_quality']; $thumbnailResult = false; $imageInfo = @getimagesize($file->getAbsolutePath()); $fileWidth = $imageInfo[0]; $fileHeight = $imageInfo[1]; $fileType = $imageInfo[2]; $thumbnailType = $fileType; // Calculate thumbnail width and height $targetWidth = $config['thumbnail.width']; $targetHeight = $config['thumbnail.height']; if ($config['thumbnail.scale_mode'] == "percentage") { $percentage = min($config['thumbnail.width'] / $fileWidth, $config['thumbnail.height'] / $fileHeight); if ($percentage <= 1) { $targetWidth = round($fileWidth * $percentage); $targetHeight = round($fileHeight * $percentage); } else { $targetWidth = $fileWidth; $targetHeight = $fileHeight; } } if ($thumbnail->exists()) { $thumbnailInfo = @getimagesize($thumbnail->getAbsolutePath()); $thumbnailWidth = $thumbnailInfo[0]; $thumbnailHeight = $thumbnailInfo[1]; $thumbnailType = $thumbnailInfo[2]; // Check width and height against config //debug($thumbnailHeight . " - " . $targetHeight . " - " . $thumbnailWidth . " - " . $targetWidth); if (($thumbnailHeight != $targetHeight) || ($thumbnailWidth != $targetWidth)) { $thumbnail->delete(); $thumbnailResult = $imageutils->resizeImage($file->getAbsolutePath(), $thumbnail->getAbsolutePath(), $targetWidth, $targetHeight, $ext, $thumbnailQuality); } // Check modificationdate against original image if ($file->getLastModified() != $thumbnail->getLastModified()) { $thumbnail->delete(); $thumbnailResult = $imageutils->resizeImage($file->getAbsolutePath(), $thumbnail->getAbsolutePath(), $targetWidth, $targetHeight, $ext, $thumbnailQuality); } if ($thumbnailResult) $thumbnail->setLastModified($file->getLastModified()); } else if ((!$thumbnail->exists()) && ($config['thumbnail.auto_generate'] == true)) { $thumbnailResult = $imageutils->resizeImage($file->getAbsolutePath(), $thumbnail->getAbsolutePath(), $targetWidth, $targetHeight, $ext, $thumbnailQuality); if ($thumbnailResult) { $thumbnailInfo = @getimagesize($thumbnail->getAbsolutePath()); $thumbnailType = $thumbnailInfo[2]; $thumbnail->setLastModified($file->getLastModified()); $thumbnail->importFile(); } } // failsafe check if ($thumbnail->exists() && $thumbnailType) return $thumbnail; return false; } function _streamThumb(&$man, $input) { if (!$man->verifyPath($input["path"]) < 0) { trigger_error("Path verification failed.", FATAL); die(); } $path = $man->decryptPath($input["path"]); $file =& $man->getFile($path); $ext = getFileExt($file->getName()); $config = $file->getConfig(); $urlprefix = $man->toUnixPath($config['preview.urlprefix']); $urlsuffix = $man->toUnixPath($config['preview.urlsuffix']); // NOTE: Verify more stuff here before proceeding. if ($man->verifyFile($file, "thumbnail", $config) < 0) { trigger_error("Path verification failed.", FATAL); die(); } //$imageutils = new $config['thumbnail']; //$canEdit = $imageutils->canEdit($ext); // Check if we have an EXIF JPG file. if (($config['thumbnail.use_exif'] == true) && (function_exists("exif_thumbnail")) && (strtolower($ext) == "jpg" || strtolower($ext) == "jpeg")) { $image = @exif_thumbnail($file->getAbsolutePath(), $exif_width, $exif_height, $exif_type); if ($image !== false) { header('Content-type: '. image_type_to_mime_type($exif_type)); echo $image; return null; } } $thumbnail = $this->_createThumb($man, $file); if ($thumbnail != false) { header('Content-type: ' . mapMimeTypeFromUrl($thumbnail->getName(), "../" . $config['stream.mimefile'])); if (!readfile($thumbnail->getAbsolutePath())) header("Location: ". $urlprefix . $man->convertPathToURI($thumbnail->getAbsolutePath(), $config['preview.wwwroot']) . $urlsuffix); } else { header('Content-type: ' . mapMimeTypeFromUrl($file->getName(), "../" . $config['stream.mimefile'])); if (!readfile($file->getAbsolutePath())) header("Location: " . $urlprefix . $man->convertPathToURI($file->getAbsolutePath(), $config['preview.wwwroot']) . $urlsuffix); } return null; } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("imagemanager", new Moxiecode_ImageManagerPlugin(), "im"); ?>imagemanager/classes/ImageManager/Utils/MCImageToolsGD.php000066600000055377150472616010017471 0ustar00canEdit($ext)) return false; $this->_quality = $quality; $this->_source = $source; $this->_target = $target; $this->_width = $width; $this->_height = $height; $this->_ext = $ext; $ar = explode('.', $target); $this->_targetExt = strtolower(array_pop($ar)); switch ($ext) { case "gif": return $this->_resizeGif(); case "jpg": case "jpe": case "jpeg": return $this->_resizeJpg(); case "png": return $this->_resizePng(); case "bmp": return false; } return false; } /** * Generates a rotated image as the target file, from the source file * @param String $source Absolute source path. * @param String $target Absolute source target. * @param String $ext Extension of the image. * @param Int $angle Angle to set the angle. * @param String $bgc Background color. * @param Int $quality Quality in percent, 0-100. * @return Bool true or false depending on success or not. */ function rotateImage($source, $target, $ext, $angle = "90", $bgc = "0", $quality = "") { if (!$this->canEdit($ext)) return false; $this->_angle = $angle; $this->_source = $source; $this->_target = $target; $this->_quality = $quality; $this->_ext = $ext; $this->_bgc = $bgc; switch ($ext) { case "gif": return $this->_rotateGif(); case "jpg": case "jpe": case "jpeg": return $this->_rotateJpg(); case "png": return $this->_rotatePng(); case "bmp": return false; } return false; } /** * Generates a cropped image as the target file, from the source file * @param String $source Absolute source path. * @param String $target Absolute source target. * @param Int $top Top of crop. * @param Int $left Left of crop. * @param Int $height Height of image. * @param Int $width Width of the image. * @param String $ext Extension of the image. * @param Int $quality Quality in percent, 0-100. * @return Bool true or false depending on success or not. */ function cropImage($source, $target, $top, $left, $width, $height, $ext, $quality="") { if (!$this->canEdit($ext)) return false; $this->_left = $left; $this->_top = $top; $this->_quality = $quality; $this->_source = $source; $this->_target = $target; $this->_width = $width; $this->_height = $height; $this->_ext = $ext; switch ($ext) { case "gif": return $this->_cropGif(); case "jpg": case "jpe": case "jpeg": return $this->_cropJpg(); case "png": return $this->_cropPng(); case "bmp": return false; } } /** * Generates a flipped image as the target file, from the source file * @param String $source Absolute source path. * @param String $target Absolute source target. * @param String $ext Extension of the image. * @param Bool $vert Vertical or not (Horizontal). * @param Int $quality Quality in percent, 0-100. * @return Bool true or false depending on success or not. */ function flipImage($source, $target, $ext, $vert = false, $hori = false, $quality="") { if (!$this->canEdit($ext)) return false; $this->_source = $source; $this->_target = $target; $this->_ext = $ext; $this->_vert = $vert; $this->_hori = $hori; $this->_quality = $quality; switch ($ext) { case "gif": return $this->_flipGif(); case "jpg": case "jpe": case "jpeg": return $this->_flipJpg(); case "png": return $this->_flipPng(); case "bmp": return false; } } /** * Internal function for cropping gif images. * @return Bool true or false depending on success or not. */ function _cropGif() { $source = ImagecreateFromGif($this->_source); $image = ImageCreate($this->_width, $this->_height); $transparent = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, $this->_width, $this->_width, $transparent); imagecolortransparent($image, $transparent); ImageCopyResampled($image, $source, 0, 0, $this->_left, $this->_top, $this->_width, $this->_height, $this->_width, $this->_height); ImageDestroy($source); $result = ImageGif($image, $this->_target); ImageDestroy($image); return $result; } /** * Internal function for cropping png images. * @return Bool true or false depending on success or not. */ function _cropPng() { $source = ImagecreateFromPng($this->_source); if ($this->_isPNG8($this->_source)) $image = ImageCreate($this->_width, $this->_height); else $image = ImageCreateTrueColor($this->_width, $this->_height); imagealphablending($image, false); imagesavealpha($image, true); ImageCopyResampled($image, $source, 0, 0, $this->_left, $this->_top, $this->_width, $this->_height, $this->_width, $this->_height); ImageDestroy($source); $result = ImagePng($image, $this->_target); ImageDestroy($image); return $result; } /** * Internal function for cropping Jpg images. * @return Bool true or false depending on success or not. */ function _cropJpg() { $source = ImagecreateFromJpeg($this->_source); $image = ImageCreateTrueColor($this->_width, $this->_height); ImageCopyResampled($image, $source, 0, 0, $this->_left, $this->_top, $this->_width, $this->_height, $this->_width, $this->_height); ImageDestroy($source); // this should set it to same file if ($this->_quality != "") $result = ImageJpeg($image, $this->_target, $this->_quality); else $result = ImageJpeg($image, $this->_target); ImageDestroy($image); return $result; } /** * Internal function for resizing gif images. * @return Bool true or false depending on success or not. */ function _resizeGif() { $source = ImagecreateFromGif($this->_source); $image = ImageCreate($this->_width, $this->_height); //imagealphablending($thumbnail, true); //imagesavealpha($thumbnail,true); $transparent = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, $this->_width, $this->_height, $transparent); imagecolortransparent($image, $transparent); ImageCopyResampled($image, $source, 0, 0, 0, 0, $this->_width, $this->_height, ImageSX($source), ImageSY($source)); ImageDestroy($source); switch ($this->_targetExt) { case 'gif': $result = ImageGif($image, $this->_target); break; case 'jpeg': case 'jpg': if ($this->_quality != "") $result = ImageJpeg($image, $this->_target, $this->_quality); else $result = ImageJpeg($image, $this->_target); break; case 'png': $result = ImagePng($image, $this->_target); break; } ImageDestroy($image); return $result; } /** * Internal function for resizing png images. * @return Bool true or false depending on success or not. */ function _resizePng() { $source = imagecreatefrompng($this->_source); if ($this->_isPNG8($this->_source)) $image = ImageCreate($this->_width, $this->_height); else $image = ImageCreateTrueColor($this->_width, $this->_height); imagealphablending($image, true); imagesavealpha($image, true); $transparent = imagecolorallocatealpha($image, 255, 255, 255, 0); imagefilledrectangle($image, 0, 0, $this->_width, $this->_height, $transparent); imagecolortransparent($image, $transparent); ImageCopyResampled($image, $source, 0, 0, 0, 0, $this->_width, $this->_height, ImageSX($source), ImageSY($source)); ImageDestroy($source); switch ($this->_targetExt) { case 'gif': $result = ImageGif($image, $this->_target); break; case 'jpeg': case 'jpg': if ($this->_quality != "") $result = ImageJpeg($image, $this->_target, $this->_quality); else $result = ImageJpeg($image, $this->_target); break; case 'png': $result = ImagePng($image, $this->_target); break; } ImageDestroy($image); return $result; } /** * Internal function for resizing jpg images. * @return Bool true or false depending on success or not. */ function _resizeJpg() { $source = ImageCreateFromJpeg($this->_source); $image = ImageCreateTrueColor($this->_width, $this->_height); ImageCopyResampled($image, $source, 0, 0, 0, 0, $this->_width, $this->_height, ImageSX($source), ImageSY($source)); ImageDestroy($source); $result = false; switch ($this->_targetExt) { case 'gif': $result = ImageGif($image, $this->_target); break; case 'jpeg': case 'jpg': if ($this->_quality != "") $result = ImageJpeg($image, $this->_target, $this->_quality); else $result = ImageJpeg($image, $this->_target); break; case 'png': $result = ImagePng($image, $this->_target); break; } ImageDestroy($image); return $result; } function _rotateJpg() { $image = ImagecreateFromJpeg($this->_source); $width = imagesx($image); $height = imagesy($image); switch ($this->_angle) { case 90: $fill = imagecreatetruecolor ($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy($fill, $image, $height-$y-1, $x, $x, $y, 1, 1); break; case 180: $this->_hori = true; $this->_vert = true; return $this->_flipJpg(); case 270: $fill = imagecreatetruecolor ($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy($fill, $image, $y, $width-$x-1, $x, $y, 1, 1); break; } ImageDestroy($image); $result = ImageJpeg($fill, $this->_target); ImageDestroy($fill); return $result; } function _rotatePng() { $image = ImagecreateFromPng($this->_source); $width = imagesx($image); $height = imagesy($image); switch ($this->_angle) { case 90: if ($this->_isPNG8($this->_source)) $fill = ImageCreate($height, $width); else $fill = ImageCreateTrueColor($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy ($fill, $image, $height-$y-1, $x, $x, $y, 1, 1); break; case 180: $this->_hori = true; $this->_vert = true; return $this->_flipPng(); case 270: if ($this->_isPNG8($this->_source)) $fill = ImageCreate($height, $width); else $fill = ImageCreateTrueColor($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy ($fill, $image, $y, $width-$x-1, $x, $y, 1, 1); break; } ImageDestroy($image); $result = ImagePng($fill, $this->_target); ImageDestroy($fill); return $result; } function _rotateGif() { $image = ImagecreateFromGif($this->_source); $width = imagesx($image); $height = imagesy($image); switch ($this->_angle) { case 90: $fill = imagecreatetruecolor ($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy($fill, $image, $height-$y-1, $x, $x, $y, 1, 1); break; case 180: $this->_hori = true; $this->_vert = true; return $this->_flipGif(); case 270: $fill = imagecreatetruecolor ($height, $width); for ($x=0; $x<$width; $x++) for ($y=0; $y<$height; $y++) imagecopy($fill, $image, $y, $width-$x-1, $x, $y, 1, 1); break; } ImageDestroy($image); $result = ImageGif($fill, $this->_target); ImageDestroy($fill); return $result; } function _flipPng() { $source = ImagecreateFromPng($this->_source); $width = imagesx($source); $height = imagesy($source); if ($this->_isPNG8($this->_source)) $image = ImageCreate($height, $width); else $image = ImageCreateTrueColor($height, $width); if ($this->_hori) { for ($i=0; $i<$width; $i++) ImageCopyResampled($image, $source, $width - $i - 1, 0, $i, 0, 1, $height, 1, $height); if ($this->_vert) ImageCopyResampled($source, $image, 0, 0, 0, 0, $width, $height, $width, $height); } if ($this->_vert) { for ($i=0; $i<$height; $i++) ImageCopyResampled($image, $source, 0, $height - $i - 1, 0, $i, $width, 1, $width, 1); } ImageDestroy($source); $result = ImagePng($image, $this->_target); ImageDestroy($image); return $result; } function _flipJpg() { $source = ImagecreateFromJpeg($this->_source); $width = imagesx($source); $height = imagesy($source); $image = ImageCreateTrueColor($width, $height); $processed = false; if ($this->_hori) { for ($i=0; $i<$width; $i++) ImageCopyResampled($image, $source, $width - $i - 1, 0, $i, 0, 1, $height, 1, $height); $processed = true; } if ($this->_vert) { for ($i=0; $i<$height; $i++) ImageCopyResampled($image, $source, 0, $height - $i - 1, 0, $i, $width, 1, $width, 1); if ($this->_vert) ImageCopyResampled($source, $image, 0, 0, 0, 0, $width, $height, $width, $height); $processed = true; } ImageDestroy($source); if ($processed) $result = ImageJpeg($image, $this->_target); else $result = false; ImageDestroy($image); return $result; } function _flipGif() { $source = ImagecreateFromGif($this->_source); $width = imagesx($source); $height = imagesy($source); $image = ImageCreateTrueColor($width, $height); if ($this->_hori) { for ($i=0; $i<$width; $i++) ImageCopyResampled($image, $source, $width - $i - 1, 0, $i, 0, 1, $height, 1, $height); ImageCopyResampled($image, $source, 0, $height - $i - 1, 0, $i, $width, 1, $width, 1); if ($this->_vert) ImageCopyResampled($source, $image, 0, 0, 0, 0, $width, $height, $width, $height); } if ($this->_vert) { for ($i=0; $i<$height; $i++) ImageCopyResampled($image, $source, 0, $height - $i - 1, 0, $i, $width, 1, $width, 1); } ImageDestroy($source); $result = ImageGif($image, $this->_target); ImageDestroy($image); return $result; } function _getPNGHeader($path) { $fp = fopen($path, "rb"); if ($fp) { $magic = fread($fp, 8); if ($magic == "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A" ) { // Is PNG // Read chunks while (!feof($fp)) { $buff = fread($fp, 4); if (strlen($buff) != 4) break; $chunk = unpack('Nlen', $buff); $chunk['type'] = fread($fp, 4); if (strlen($chunk['type']) != 4) break; // Found header then read it if ($chunk['type'] == 'IHDR') { $buff = fread($fp, 13); $header = unpack('Nwidth/Nheight/Cbits/Ctype/Ccompression/Cfilter/Cinterlace', $buff); fclose($fp); return $header; } // Jump to next chunk and skip CRC fseek($fp, $chunk['len'] + 4, SEEK_CUR); } } fclose($fp); } return null; } function _isPNG8($path) { $header = $this->_getPNGHeader($path); return $header && $header['type'] == 3; } function _isPNG24($path) { $header = $this->_getPNGHeader($path); return $header && $header['type'] == 2; } function hasFunctions($list) { $list = split(",", $list); foreach($list as $item) { if (!function_exists($item)) return false; } return true; } /** * Get the support with current GD. * @param String $type Extensions of image. * @return Array An array with booleans, crop, resize, rotate. */ function getEditSupport($type) { $rotate = function_exists("imagerotate"); $crop = false; $resize = false; switch ($type) { case "jpg": $resize = $this->hasFunctions("ImageCreateTrueColor,ImageCopyResampled,ImageSX,ImageSY"); $crop = $this->hasFunctions("ImageCreateTrueColor,ImageCopyResampled"); break; case "gif": $resize = $this->hasFunctions("imagecolorallocate,imagefilledrectangle,imagecolortransparent,ImageCopyResampled,ImageSX,ImageSY"); $crop = $this->hasFunctions("imagecolorallocate,imagefilledrectangle,imagecolortransparent,ImageCopyResampled"); break; case "png": $resize = $this->hasFunctions("imagecolorallocate,imagefilledrectangle,imagecolortransparent,ImageCopyResampled,ImageSX,ImageSY"); $crop = $this->hasFunctions("imagealphablending,imagesavealpha,ImageColorTransparent,ImageCopyResampled,ImageCreateTrueColor"); break; } return array($crop, $resize, $rotate); } /** * Formats a image based in the input parameter. * * Format parameters: * %f - Filename. * %e - Extension. * %w - Image width. * %h - Image height. * %tw - Target width. * %th - Target height. * %ow - Original width. * %oh - Original height. * * Example: 320x240|gif=%f_%w_%h.gif,320x240=%f_%w_%h.%e */ function formatImage($path, $format, $quality = 90) { $chunks = explode(',', $format); $imageInfo = @getimagesize($path); $width = $imageInfo[0]; $height = $imageInfo[1]; foreach ($chunks as $chunk) { if (!$chunk) continue; $parts = explode('=', $chunk); $actions = array(); $fileName = preg_replace('/\..+$/', '', basename($path)); $extension = preg_replace('/^.+\./', '', basename($path)); $targetWidth = $newWidth = $width; $targetHeight = $newHeight = $height; $items = explode('|', $parts[0]); foreach ($items as $item) { switch ($item) { case "gif": case "jpg": case "jpeg": case "png": $extension = $item; break; default: $matches = array(); if (preg_match('/\s?([0-9]+)\s?x([0-9]+)\s?/', $item, $matches)) { $actions[] = "resize"; $targetWidth = $matches[1]; $targetHeight = $matches[2]; } } } // Add default action if (count($actions) == 0) $actions[] = "resize"; // Scale it if ($targetWidth != $width || $targetHeight != $height) { $scale = min($targetWidth / $width, $targetHeight / $height); $newWidth = $scale > 1 ? $width : floor($width * $scale); $newHeight = $scale > 1 ? $height : floor($height * $scale); } // Build output path $outPath = $parts[1]; $outPath = str_replace("%f", $fileName, $outPath); $outPath = str_replace("%e", $extension, $outPath); $outPath = str_replace("%ow", "" . $width, $outPath); $outPath = str_replace("%oh", "" . $height, $outPath); $outPath = str_replace("%tw", "" . $targetWidth, $outPath); $outPath = str_replace("%th", "" . $targetHeight, $outPath); $outPath = str_replace("%w", "" . $newWidth, $outPath); $outPath = str_replace("%h", "" . $newHeight, $outPath); $outPath = dirname($path) . '/' . $outPath; $this->_mkdirs(dirname($outPath)); foreach ($actions as $action) { switch ($action) { case 'resize': //debug($path, $outPath); $this->resizeImage($path, $outPath, $newWidth, $newHeight, "", $quality); break; } } } } /** * Deletes formats for the specified image. * * Format parameters: * %f - Filename. * %e - Extension. * %w - Image width. * %h - Image height. * %tw - Target width. * %th - Target height. * %ow - Original width. * %oh - Original height. * * Example: 320x240|gif=%f_%w_%h.gif,320x240=%f_%w_%h.%e */ function deleteFormatImages($path, $format) { $chunks = explode(',', $format); $imageInfo = @getimagesize($path); $width = $imageInfo[0]; $height = $imageInfo[1]; foreach ($chunks as $chunk) { if (!$chunk) continue; $parts = explode('=', $chunk); $fileName = preg_replace('/\..+$/', '', basename($path)); $extension = preg_replace('/^.+\./', '', basename($path)); $targetWidth = $newWidth = $width; $targetHeight = $newHeight = $height; $items = explode('|', $parts[0]); foreach ($items as $item) { switch ($item) { case "gif": case "jpg": case "jpeg": case "png": $extension = $item; break; default: $matches = array(); if (preg_match('/\s?([0-9]+)\s?x([0-9]+)\s?/', $item, $matches)) { $targetWidth = $matches[1]; $targetHeight = $matches[2]; } } } // Scale it if ($targetWidth != $width || $targetHeight != $height) { $scale = min($targetWidth / $width, $targetHeight / $height); $newWidth = $scale > 1 ? $width : floor($width * $scale); $newHeight = $scale > 1 ? $height : floor($height * $scale); } // Build output path $outPath = $parts[1]; $outPath = str_replace("%f", $fileName, $outPath); $outPath = str_replace("%e", $extension, $outPath); $outPath = str_replace("%ow", "" . $width, $outPath); $outPath = str_replace("%oh", "" . $height, $outPath); $outPath = str_replace("%tw", "" . $targetWidth, $outPath); $outPath = str_replace("%th", "" . $targetHeight, $outPath); $outPath = str_replace("%w", "" . $newWidth, $outPath); $outPath = str_replace("%h", "" . $newHeight, $outPath); $outPath = dirname($path) . '/' . $outPath; if (file_exists($outPath)) unlink($outPath); } } /** * Check for the GD functions that are beeing used. * @param String $type Extensions of image. * @return Bool true or false depending on success or not. */ function canEdit($type) { // just make a quick check, we dont need to loop if we can't find GD at all. if (!function_exists("gd_info")) return false; $gdUsedFunctions = array(); // Check type specific functions switch ($type) { case "jpg": $gdUsedFunctions[] = "ImagecreateFromJpeg"; $gdUsedFunctions[] = "ImageJpeg"; break; case "gif": $gdUsedFunctions[] = "ImagecreateFromGif"; $gdUsedFunctions[] = "ImageGif"; break; case "png": $gdUsedFunctions[] = "ImagecreateFromPng"; $gdUsedFunctions[] = "ImagePng"; break; default: return false; } // check so that each function exists foreach ($gdUsedFunctions as $function) { if (!function_exists($function)) { trigger_error("Function " . $function . " does not exist.", WARNING); return false; } } return true; } function _mkdirs($path, $rights = 0777) { $path = preg_replace('/\/$/', '', $path); $dirs = array(); // Figure out what needs to be created while ($path) { if (file_exists($path)) break; $dirs[] = $path; $pathAr = explode("/", $path); array_pop($pathAr); $path = implode("/", $pathAr); } // Create the dirs $dirs = array_reverse($dirs); foreach ($dirs as $path) { if (!@is_dir($path) && strlen($path) > 0) mkdir($path, $rights); } } } ?>imagemanager/classes/FileSystems/LocalFileImpl.php000066600000061433150472616010016267 0ustar00_manager =& $manager; $this->_type = $type; if ($child_name != "") $this->_absPath = $this->_manager->removeTrailingSlash($absolute_path) . "/" . $child_name; else $this->_absPath = $absolute_path; // Force it absolute if (strpos($this->_absPath, '..') !== false) $this->_absPath = $this->_manager->toUnixPath(realpath($this->_absPath)); } /** * Set a bool regarding events triggering. * * @param Bool $trigger Trigger or not to trigger. */ function setTriggerEvents($trigger) { $this->_events = $trigger; } /** * Returns bool if events are to be triggered or not. * * @return Bool bool for triggering events or not. */ function getTriggerEvents() { return $this->_events; } /** * Returns the parent files absolute path. * * @return String parent files absolute path. */ function getParent() { $pathAr = explode("/", $this->_absPath); array_pop($pathAr); $path = implode("/", $pathAr); // TODO: Check this return ($path == "") ? null : $path; } /** * Returns the parent files File instance. * * @return File parent files File instance or false if there is no more parents. */ function &getParentFile() { $file = new Moxiecode_LocalFileImpl($this->_manager, $this->getParent()); return $file; } /** * Returns the file name of a file. * * @return string File name of file. */ function getName() { return basename($this->_manager->toOSPath($this->_absPath)); } /** * Returns the absolute path of the file. * * @return String absolute path of the file. */ function getAbsolutePath() { return $this->_absPath; } /** * Imports a local file to the file system, for example when users upload files. * * @param String $local_absolute_path Absolute path to local file to import. */ function importFile($local_absolute_path = "") { $this->_clearCache(); // Add action if ($this->_events) { if ($this->isFile()) { $this->_manager->dispatchEvent("onBeforeFileAction", array(ADD_ACTION, &$this)); $this->_manager->dispatchEvent("onFileAction", array(ADD_ACTION, &$this)); } else { $this->_manager->dispatchEvent("onBeforeFileAction", array(MKDIR_ACTION, &$this)); $this->_manager->dispatchEvent("onFileAction", array(MKDIR_ACTION, &$this)); } } // Chmod the file if (($mask = $this->_getConfigValue("filesystem.local.file_mask", false)) !== false) @chmod($this->_manager->toOSPath($this->_absPath), intval($mask, 8)); // Chown the file if (($owner = $this->_getConfigValue("filesystem.local.file_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($this->_absPath), $owner); } /** * Returns true if the file exists. * * @return boolean true if the file exists. */ function exists() { if (isset($this->_statCache['exists'])) return $this->_statCache['exists']; // Returns false if safe mode is on and the user/group is not the same as apache return ($this->_statCache['exists'] = file_exists($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the file is a directory. * * @return boolean true if the file is a directory. */ function isDirectory() { if (!$this->exists()) return $this->_type == MC_IS_DIRECTORY; if (isset($this->_statCache['is_dir'])) return $this->_statCache['is_dir']; return ($this->_statCache['is_dir'] = is_dir($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the file is a file. * * @return boolean true if the file is a file. */ function isFile() { if (!$this->exists()) return $this->_type == MC_IS_FILE; if (isset($this->_statCache['is_file'])) return $this->_statCache['is_file']; return ($this->_statCache['is_file'] = is_file($this->_manager->toOSPath($this->_absPath))); } /** * Returns last modification date in ms as an long. * * @return long last modification date in ms as an long. */ function getLastModified() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][9]; } /** * Returns creation date in ms as an long. * * @return long creation date in ms as an long. */ function getCreationDate() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][10]; } /** * Returns true if the files is readable. * * @return boolean true if the files is readable. */ function canRead() { if (isset($this->_statCache['is_readable'])) return $this->_statCache['is_readable']; return ($this->_statCache['is_readable'] = is_readable($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the files is writable. * * @return boolean true if the files is writable. */ function canWrite() { // Check parent if (!$this->exists()) { $file =& $this->getParentFile(); if ($this->getAbsolutePath() == $file->getAbsolutePath()) return false; return $file->canWrite(); } if (isset($this->_statCache['is_writeable'])) return $this->_statCache['is_writeable']; // Is windows if (DIRECTORY_SEPARATOR == "\\") { $path = $this->_manager->toOSPath($this->_absPath); if (is_file($path)) { $fp = @fopen($path, 'ab'); if ($fp) { fclose($fp); return true; } } else if (is_dir($path)) { $tmpnam = time() . md5(uniqid('iswritable')); if (@touch($path . '\\' . $tmpnam)) { unlink($path . '\\' . $tmpnam); return true; } } return false; } // Other OS:es return ($this->_statCache['is_writeable'] = is_writeable($this->_manager->toOSPath($this->_absPath))); } /** * Returns file size as an long. * * @return long file size as an long. */ function getLength() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][7]; } /** * Copies this file to the specified file instance. * * @param File $dest File to copy to. * @return boolean true - success, false - failure */ function copyTo(&$dest) { $this->_clearCache(); if ($dest->exists()) return false; // Copy in to your self? if (strpos($dest->getAbsolutePath(), $this->getAbsolutePath()) === 0) return false; // Different file system then import if (getClassName($dest) != 'moxiecode_localfileimpl') return $dest->importFile($this->getAbsolutePath()); $dest->_clearCache(); if ($this->isDirectory()) { $handle_as_add_event = true; $treeHandler = new _LocalCopyDirTreeHandler($this->_manager, $this, $dest, $handle_as_add_event); $this->listTree($treeHandler); return true; } else { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(COPY_ACTION, &$this, &$dest)); $status = $this->_absPath == $dest->_absPath || copy($this->_manager->toOSPath($this->_absPath), $this->_manager->toOSPath($dest->_absPath)); // Chmod the file if (($mask = $dest->_getConfigValue("filesystem.local.file_mask", false)) !== false) @chmod($this->_manager->toOSPath($dest->_absPath), intval($mask, 8)); // Chown the file if (($owner = $dest->_getConfigValue("filesystem.local.file_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($dest->_absPath), $owner); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(COPY_ACTION, &$this, &$dest)); return $status; } } /** * Deletes the file. * * @param boolean $deep If this option is enabled files will be deleted recurive. * @return boolean true - success, false - failure */ function delete($deep = false) { if (!$this->exists()) return false; $this->_clearCache(); if (is_dir($this->_manager->toOSPath($this->_absPath))) { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(RMDIR_ACTION, &$this)); if ($deep) { // Get all the files $treeHandler = new _LocalDeleteDirTreeHandler($this->_manager, $this); $this->listTree($treeHandler); // Delete the files $files = array_reverse($treeHandler->getFiles()); foreach ($files as $file) $file->delete(); // Hmm, should be better return true; } if (($status = rmdir($this->_manager->toOSPath($this->_absPath))) && ($this->_events)) $this->_manager->dispatchEvent("onFileAction", array(RMDIR_ACTION, &$this)); } else { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(DELETE_ACTION, &$this)); if (($status = unlink($this->_manager->toOSPath($this->_absPath))) && ($this->_events)) $this->_manager->dispatchEvent("onFileAction", array(DELETE_ACTION, &$this)); } return $status; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Returns an array of BaseFile instances based on the specified filter instance. * * @param FileFilter &$filter FileFilter instance to filter files by. * @return Array array of File instances based on the specified filter instance. */ function &listFilesFiltered(&$filter) { $dir = $this->_absPath; $files = array(); $dirs = array(); $fileArray = array(); $dirArray = array(); if ($fHnd = opendir($this->_manager->toOSPath($dir))) { // Is there a trailing slash on the dir? Get rid of it //if ($dir[sizeof($dir)] == "/") // $dir = substr($dir, 0, sizeof($dir) -1); while (false !== ($file = readdir($fHnd))) { if ($file == "." || $file == "..") continue; // Returns false if safe mode is on and the user/group is not the same as apache $path = $dir . "/" . $file; if (file_exists($path)) { // We are at root! if ($dir == "/") $dir = ""; if (is_file($path)) $fileArray[] = $file; else $dirArray[] = $file; } } // Close handle closedir($fHnd); sort($dirArray); sort($fileArray); // Add dirs foreach ($dirArray as $adir) { $file = new Moxiecode_LocalFileImpl($this->_manager, $dir . "/" . $adir); if ($filter->accept($file) < 0) continue; array_push($files, $file); } // Add files foreach ($fileArray as $afile) { $file = new Moxiecode_LocalFileImpl($this->_manager, $dir . "/" . $afile); if ($filter->accept($file) < 0) continue; array_push($files, $file); } } return $files; } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. */ function listTree(&$file_tree_handler) { $this->_listTree($this, $file_tree_handler, new Moxiecode_DummyFileFilter(), 0); } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file * if the file filter accepts the file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. * @param FileTreeHandler &$file_filter FileFilter instance to filter files by. */ function listTreeFiltered(&$file_tree_handler, &$file_filter) { $this->_listTree($this, $file_tree_handler, $file_filter, 0); } /** * Creates a new directory. * * @return boolean true- success, false - failure */ function mkdir() { $this->_clearCache(); if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(MKDIR_ACTION, &$this)); $tpl = $this->_getConfigValue("filesystem.local.directory_template", false); if ($tpl) $status = copy($this->_manager->toAbsPath($tpl), $this->_manager->toOSPath($this->_absPath)); else $status = mkdir($this->_manager->toOSPath($this->_absPath)); // Chmod the dir if (($mask = $this->_getConfigValue("filesystem.local.directory_mask", false)) !== false) @chmod($this->_manager->toOSPath($this->_absPath), intval($mask, 8)); // Chown the dir if (($owner = $this->_getConfigValue("filesystem.local.directory_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($this->_absPath), $owner); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(MKDIR_ACTION, &$this)); return $status; } /** * Renames/Moves this file to the specified file instance. * * @param File $dest File to rename/move to. * @return boolean true- success, false - failure */ function renameTo(&$dest) { $this->_clearCache(); // Already exists if ($dest->exists()) return false; if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(RENAME_ACTION, &$this, &$dest)); if ($this->_absPath != $dest->_absPath) $status = rename($this->_manager->toOSPath($this->_absPath), $this->_manager->toOSPath($dest->_absPath)); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(RENAME_ACTION, &$this, &$dest)); $isFile = is_file($this->_manager->toOSPath($this->_absPath)); // Chmod the file/directory if (($mask = $dest->_getConfigValue("filesystem.local." . ($isFile ? "file" : "directory") . "_mask", false)) !== false) @chmod($this->_manager->toOSPath($dest->_absPath), intval($mask, 8)); // Chown the file/directory if (($owner = $dest->_getConfigValue("filesystem.local." . ($isFile ? "file" : "directory") . "_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($dest->_absPath), $owner); return $status; } /* * Sets the last-modified time of the file or directory. * * @param String $datetime The new date/time to set the file, in timestamp format * @return boolean true- success, false - failure */ function setLastModified($datetime) { $this->_clearCache(); return touch($this->_manager->toOSPath($this->_absPath), $datetime); } /** * Opens a file stream by the specified mode. The default mode is rb. * * @param String $mode Mode to open file by, r, rb, w, wb etc. * @return FileStream File stream implementation for the file system. */ function &open($mode = 'rb') { $this->_clearCache(); $stream = new Moxiecode_LocalFileStream($this, $mode); return $stream; } // * * Private methods function _clearCache() { $this->_statCache = array(); } /** * Lists files recursive, and places the files in the specified array. */ function _listTree($file, &$file_tree_handler, &$file_filter, $level) { $state = $file_tree_handler->CONTINUE; if ($file_filter->accept($file)) { $state = $file_tree_handler->handle($file, $level); if ($state == $file_tree_handler->ABORT || $state == $file_tree_handler->ABORT_FOLDER) return $state; } $files = $file->listFiles(); foreach ($files as $file) { if ($file_filter->accept($file)) { if ($file->isFile()) { // This is some weird shit! //if (!is_object($file_filter)) $state = $file_tree_handler->handle($file, $level); } else { $state = $this->_listTree($file, $file_tree_handler, $file_filter, ++$level); --$level; } } if ($state == $file_tree_handler->ABORT) return $state; } return $file_tree_handler->CONTINUE; } /** * Returns a merged name/value array of config elements. * * @return Array Merged name/value array of config elements. */ function getConfig() { $globalConf = $this->_manager->getConfig(); // Not cached config if (!$this->_config) { $localConfig = array(); $this->_config = $globalConf; // Get files up the tree $accessFiles = array(); $file =& $this; if ($file->isFile()) $file =& $file->getParentFile(); while ($file->exists() && $file->getAbsolutePath() != "/") { $accessFile = new Moxiecode_LocalFileImpl($this->_manager, $file->getAbsolutePath(), $globalConf["filesystem.local.access_file_name"]); if ($accessFile->exists()) $accessFiles[] = $accessFile; // Is not a valid path break loop if (!$this->_manager->verifyPath($file->getParent())) break; $file =& $file->getParentFile(); } // Parse and merge $allowoverrideKeys = array(); foreach ($this->_config as $key => $value) { $keyChunks = explode('.', $key); if ($keyChunks[count($keyChunks)-1] == "allow_override") { foreach (explode(',', $value) as $keySuffix) { $keyChunks[count($keyChunks)-1] = $keySuffix; $allowoverrideKeys[] = implode('.', $keyChunks); } } } foreach (array_reverse($accessFiles) as $accessFile) { $config = array(); // Parse ini file if (($fp = fopen($this->_manager->toOSPath($accessFile->getAbsolutePath()), "r"))) { while (!feof($fp)) { $line = trim(fgets($fp)); // Skip comments if (substr($line, 0, 1) == "#") continue; // Split rows if (($pos = strpos($line, "=")) !== FALSE) $config[substr($line, 0, $pos)] = substr($line, $pos+1); } fclose($fp); } // Handle local config values $curDir = $this->isFile() ? $this->getParent() : $this->getAbsolutePath(); if ($accessFile->getParent() == $curDir) { foreach ($config as $key => $value) { if (substr($key, 0, 1) == '_') $localConfig[substr($key, 1)] = $value; } } // Parse allow keys and deny keys $denyOverrideKeys = array(); foreach ($config as $key => $value) { $keyChunks = explode('.', $key); $lastChunk = $keyChunks[count($keyChunks)-1]; if ($lastChunk == "allow_override" || $lastChunk == "deny_override") { foreach (explode(',', $value) as $keySuffix) { $keyChunks[count($keyChunks)-1] = $keySuffix; $allowDenyKey = implode('.', $keyChunks); if (in_array($allowDenyKey, $allowoverrideKeys)) { if ($lastChunk == "allow_override") $allowoverrideKeys[] = $allowDenyKey; else $denyOverrideKeys[] = $allowDenyKey; } } } } // Remove the denied keys from the allow list /* foreach ($denyOverrideKeys as $denyKey) { for ($i=0; $i $value) { $validAllKey = false; foreach ($allowoverrideKeys as $allowkey) { if (strpos($allowkey, "*") > 0) { $allowkey = str_replace("*", "", $allowkey); // echo $allowkey . "," . $key . strpos($allowkey, $key) . "
        "; if (strpos($key, $allowkey) === 0) { $validAllKey = true; break; } } } if ((in_array($key, $allowoverrideKeys) || $validAllKey) && !in_array($key, $denyOverrideKeys)) { if (strpos($value, '${') !== false) $value = str_replace('${configpath}', $accessFile->getParent(), $value); $this->_config[$key] = $value; } } } // Variable substitute the values foreach ($this->_config as $key => $value) { if (!is_array($value) && strpos($value, '${') !== false) { if ($this->isFile()) $path = $this->getAbsolutePath(); else $path = $this->getParent(); $value = str_replace('${path}', $path, $value); $value = str_replace('${rootpath}', $this->_manager->toUnixPath($this->_manager->_rootPaths[0]), $value); // Handle multiple rootpaths for ($i=0; $i_manager->_rootPaths); $i++) $value = str_replace('${rootpath' . $i . '}', $this->_manager->toUnixPath($this->_manager->_rootPaths[$i]), $value); $this->_config[$key] = $value; } } // Force local config foreach ($localConfig as $key => $value) { //$this->_config[$key] = $value; $validAllKey = false; foreach ($allowoverrideKeys as $allowkey) { if (strpos($allowkey, "*") > 0) { $allowkey = str_replace("*", "", $allowkey); // echo $allowkey . "," . $key . strpos($allowkey, $key) . "
        "; if (strpos($key, $allowkey) === 0) { $validAllKey = true; break; } } } if ((in_array($key, $allowoverrideKeys) || $validAllKey) && !in_array($key, $denyOverrideKeys)) { if (strpos($value, '${') !== false) $value = str_replace('${configpath}', $accessFile->getParent(), $value); $this->_config[$key] = $value; } } /* foreach ($this->_config as $key => $value) { if (in_array($key, $allowoverrideKeys)) { // Seems to be a variable if (strpos($value, '${') !== false) { $matches = array(); preg_match_all('/\${(.*)}/i', $value, $matches); var_dump($matches); foreach ($matches as $match) $this->_config[$key] = str_replace('${' . $match . '}', $this->_config[$match], $this->_config[$key]); } } }*/ } return $this->_config; } /** * Returns a config value by the specified key. * * @param String key Key to return value by. * @param String default_value Optional default value. * @return String Value returned from config. */ function _getConfigValue($key, $default_value = "") { $config = $this->getConfig(); if (isset($config[$key])) return $config[$key] ? $config[$key] : $default_value; else return $default_value; } function _chown($path, $owner) { if ($owner == "") return; $owner = explode(":", $owner); // Only user if (count($owner) == 1) array_push($owner, ""); // Hmm if (count($owner) != 2) return; // Set user if ($owner[0] != "") @chown($path, $owner[0]); // Set group if ($owner[1] != "") @chgrp($path, $owner[1]); } function _cmpByName($file1, $file2) { $al = strtolower($file1->getName()); $bl = strtolower($file2->getName()); if ($al == $bl) return 0; return $al > $bl ? 1 : -1; } } class _LocalCopyDirTreeHandler extends Moxiecode_FileTreeHandler { var $_fromFile; var $_destFile; var $_manager; var $_handle_as_add_event; function _LocalCopyDirTreeHandler(&$manager, $from_file, $dest_file, $handle_as_add_event) { $this->_manager = $manager; $this->_fromFile = $from_file; $this->_destFile = $dest_file; $this->_handle_as_add_event = $handle_as_add_event; } /** * Handles a file instance while looping an tree of directories. * * @param File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $toPath = $this->_destFile->getAbsolutePath(); $toPath .= substr($file->getAbsolutePath(), strlen($this->_fromFile->getAbsolutePath())); $toFile = $this->_manager->getFile($toPath); //debug($file->getAbsolutePath() . "->" . $toPath); // Do action if ($file->isDirectory()) $toFile->mkdir(); else $file->copyTo($toFile); return $this->CONTINUE; } } class _LocalDeleteDirTreeHandler extends Moxiecode_FileTreeHandler { var $_manager; var $_dir; var $_files; function _LocalDeleteDirTreeHandler(&$manager, $dir) { $this->_manager = $manager; $this->_dir = $dir; $this->_files = array(); } /** * Returns all the files and dirs. * * @return Array All the files and dirs. */ function getFiles() { return $this->_files; } /** * Handles a file instance while looping an tree of directories. * * @param File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $this->_files[] = $file; //$file->delete(); return $this->CONTINUE; } } class Moxiecode_LocalFileStream extends Moxiecode_FileStream { var $_fp; var $_file; function Moxiecode_LocalFileStream(&$file, $mode) { $this->_file = $file; $this->_fp = fopen($file->getAbsolutePath(), $mode); } function skip($bytes) { $pos = ftell($this->_fp); fseek($this->_fp, $bytes, SEEK_CUR); return ftell($this->_fp) - $pos; } function read($len = 1024) { return fread($this->_fp, $len); } function readToEnd() { $data = ""; while (($chunk = $this->read(1024)) != null) $data .= $chunk; return $data; } function write($buff, $len = -1) { if ($len == -1) return fwrite($this->_fp, $buff); return fwrite($this->_fp, $buff, $len); } function close() { $this->_file->_clearCache(); @fclose($this->_fp); $this->_fp = null; } } ?>imagemanager/classes/FileSystems/BaseFileImpl.php000066600000010530150472616010016077 0ustar00_manager =& $manager; $this->_type = $type; if ($child_name != "") $this->_absPath = $this->_manager->removeTrailingSlash($absolute_path) . "/" . $child_name; else $this->_absPath = $absolute_path; } /** * Set a bool regarding events triggering. * * @param Bool $trigger Trigger or not to trigger. */ function setTriggerEvents($trigger) { $this->_events = $trigger; } /** * Returns bool if events are to be triggered or not. * * @return Bool bool for triggering events or not. */ function getTriggerEvents() { return $this->_events; } /** * Returns the parent files absolute path. * * @return String parent files absolute path. */ function getParent() { $pathAr = explode("/", $this->getAbsolutePath()); array_pop($pathAr); $path = implode("/", $pathAr); return ($path == "") ? "/" : $path; } /** * Returns the file name of a file. * * @return string File name of file. */ function getName() { return basename($this->_absPath); } /** * Returns the absolute path of the file. * * @return String absolute path of the file. */ function getAbsolutePath() { return $this->_absPath; } /** * Returns true if the file is a directory. * * @return boolean true if the file is a directory. */ function isDirectory() { if (!$this->exists()) return $this->_type == MC_IS_DIRECTORY; return is_dir($this->_manager->toOSPath($this->_absPath)); } /** * Returns true if the file is a file. * * @return boolean true if the file is a file. */ function isFile() { if (!$this->exists()) return $this->_type == MC_IS_FILE; return !$this->isDirectory(); } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. */ function listTree(&$file_tree_handler) { $this->_listTree($this, $file_tree_handler, new Moxiecode_DummyFileFilter(), 0); } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file * if the file filter accepts the file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. * @param FileTreeHandler &$file_filter FileFilter instance to filter files by. */ function listTreeFiltered(&$file_tree_handler, &$file_filter) { $this->_listTree($this, $file_tree_handler, $file_filter, 0); } // * * Private methods /** * Lists files recursive, and places the files in the specified array. */ function _listTree($file, &$file_tree_handler, &$file_filter, $level) { $state = $file_tree_handler->CONTINUE; if ($file_filter->accept($file)) { $state = $file_tree_handler->handle($file, $level); if ($state == $file_tree_handler->ABORT || $state == $file_tree_handler->ABORT_FOLDER) return $state; } $files = $file->listFiles(); foreach ($files as $file) { if ($file_filter->accept($file)) { if ($file->isFile()) { // This is some weird shit! //if (!is_object($file_filter)) $state = $file_tree_handler->handle($file, $level); } else { $state = $this->_listTree($file, $file_tree_handler, $file_filter, ++$level); --$level; } } if ($state == $file_tree_handler->ABORT) return $state; } return $file_tree_handler->CONTINUE; } } ?>imagemanager/classes/FileSystems/BaseFile.php000066600000014545150472616010015267 0ustar00imagemanager/classes/FileSystems/FileStream.php000066600000002526150472616010015644 0ustar00imagemanager/classes/FileSystems/RootFileImpl.php000066600000002617150472616010016157 0ustar00_manager; $files = array(); $roots = $man->getRootPaths(); foreach ($roots as $root) { $file = $man->getFile($root); // Configured root doesn't exists if (!$file->exists()) { error("Configured root: " . $root . " could not be found."); continue; } if ($filter->accept($file)) $files[] = $file; } return $files; } } ?>imagemanager/classes/FileSystems/FileTreeHandler.php000066600000011423150472616010016602 0ustar00_onlyFiles = false; $this->_onlyDirs = false; } /** * Sets only files mode. * * @param bool $only_files true if only files should be added to output. */ function setOnlyFiles($only_files) { $this->_onlyFiles = $only_files; } /** * Gets only files mode. * * @return bool true if only files should be added to output. */ function getOnlyFiles() { return $this->_onlyFiles; } /** * Sets only dirs mode. * * @param bool $only_dirs true if only dirs should be added to output. */ function setOnlyDirs($only_dirs) { $this->_onlyDirs = $only_dirs; } /** * Gets only dirs mode. * * @return bool true if only dirs should be added to output. */ function getOnlyDirs() { return $this->_onlyDirs; } /** * Sets the max level to include in tree parse. * * @param int $level max level to include in tree parse. */ function setMaxLevel($level) { $this->_maxLevel = $level; } /** * Sets is the result is to be built in to an array or not. * The result is returned by getFileArray when the tree list completes. * Note: The default value of this state is false. * * @param boolean $state True if the result is to be built in to an array or not. */ function setMakeArray($state) { $this->_makeArray = $state; if ($this->_makeArray) $this->_array = array(); } /** * Returns the tree as an array of MCE_File instances. This method * will not return anything if the setMakeArray isn't set to true. * * @return Array Array of MCE_File instances. */ function &getFileArray() { return $this->_array; } /** * Handles a file instance while looping an tree of directories. * * @param MCE_File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $add = true; if (is_array($this->_array) && $this->_onlyDirs && $file->isFile()) $add = false; if (is_array($this->_array) && $this->_onlyFiles && $file->isDir()) $add = false; if ($add) $this->_array[] = $file; if ($this->_maxLevel && $level >= $this->_maxLevel) return $this->ABORT_FOLDER; return $this->CONTINUE; } /**#@-*/ } class Moxiecode_ConfigFilteredFileTreeHandler extends Moxiecode_BasicFileTreeHandler { var $_config; /** * Handles a file instance while looping an tree of directories. * * @param MCE_File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { if ($file->isDirectory() || !is_array($this->_config)) { if ($level == 0) return parent::handle($file, $level); else $parentFile = $file->getParentFile(); $this->_config = $parentFile->getConfig(); } $filter = new Moxiecode_BasicFileFilter(); $filter->setIncludeFilePattern($this->_config['filesystem.include_file_pattern']); $filter->setExcludeFilePattern($this->_config['filesystem.exclude_file_pattern']); $filter->setIncludeDirectoryPattern($this->_config['filesystem.include_directory_pattern']); $filter->setExcludeDirectoryPattern($this->_config['filesystem.exclude_directory_pattern']); $filter->setOnlyDirs($this->_onlyDirs); if (!$filter->accept($file)) return $this->ABORT_FOLDER; return parent::handle($file, $level); } } ?>imagemanager/classes/FileSystems/FileFilter.php000066600000026267150472616010015646 0ustar00_filters = array(); } /** * Adds a new filter to check. * * @param Moxiecode_FileFilter $file_filter Filter to add. */ function addFilter(&$file_filter) { $this->_filters[] = $file_filter; } /** * Returns true or false if the file is accepted or not. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { for ($i = 0; $i < count($this->_filters); $i++) { $state = $this->_filters[$i]->accept($file); if ($state < 0) return $state; } return 1; } } /** * DummyFileFiler this filter accepts all files. * * @package mce.core */ class Moxiecode_DummyFileFilter extends Moxiecode_FileFilter { /** * Returns true or false if the file is accepted or not. * Note: This dummb method allways returns true. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { return true; } } // Define reason constants define('BASIC_FILEFILTER_ACCEPTED', 1); define('BASIC_FILEFILTER_INVALID_EXTENSION', -1); define('BASIC_FILEFILTER_INVALID_NAME', -2); /** * Basic file filter, this class handles some common filter problems * and is possible to extend if needed. * * @package mce.core */ class Moxiecode_BasicFileFilter extends Moxiecode_FileFilter { /**#@+ * @access private */ var $_excludeFolders; var $_includeFolders; var $_excludeFiles; var $_includeFiles; var $_includeFilePattern; var $_excludeFilePattern; var $_includeDirectoryPattern; var $_excludeDirectoryPattern; var $_filesOnly; var $_dirsOnly; var $_includeWildcardPattern; var $_excludeWildcardPattern; var $_extensions; var $_maxLevels; var $_debug; /**#@+ * @access public */ /** * Main constructor. */ function BasicFileFilter() { $this->_debug = false; $this->_extensions = ""; } /** * Sets if debug mode is on or off, default off. * * @param boolean $state if true debug mode is enabled. */ function setDebugMode($state) { $this->_debug = $state; } /** * Sets if only files are to be accepted in result. * * @param boolean $files_only True if only files are to be accepted. */ function setOnlyFiles($files_only) { $this->_filesOnly = $files_only; } /** * Sets if only dirs are to be accepted in result. * * @param boolean $dirs_only True if only dirs are to be accepted. */ function setOnlyDirs($dirs_only) { $this->_dirsOnly = $dirs_only; } /** * Sets maximum number of directory levels to accept. * * @param int $max_levels Maximum number of directory levels to accept. */ function setMaxLevels($max_levels) { $this->_maxLevels = $max_levels; } /** * Sets a comma separated list of valid file extensions. * * @param String $extensions Comma separated list of valid file extensions. */ function setIncludeExtensions($extensions) { if ($extensions == "*" || $extensions == "") return; $this->_extensions = explode(',', strtolower($extensions)); } /** * Sets comma separated string list of filenames to exclude. * * @param String $files separated string list of filenames to exclude. */ function setExcludeFiles($files) { if ($files != "") $this->_excludeFiles = split(',', $files); } /** * Sets comma separated string list of filenames to include. * * @param String $files separated string list of filenames to include. */ function setIncludeFiles($files) { if ($files != "") $this->_includeFiles = split(',', $files); } /** * Sets comma separated string list of foldernames to exclude. * * @param String $folders separated string list of foldernames to exclude. */ function setExcludeFolders($folders) { if ($folders != "") $this->_excludeFolders = split(',', $folders); } /** * Sets comma separated string list of foldernames to include. * * @param String $folders separated string list of foldernames to include. */ function setIncludeFolders($folders) { if ($folders != "") $this->_includeFolders = split(',', $folders); } /** * Sets a regexp pattern that is used to accept files path parts. * * @param String $pattern regexp pattern that is used to accept files path parts. */ function setIncludeFilePattern($pattern) { $this->_includeFilePattern = $pattern; } /** * Sets a regexp pattern that is used to deny files path parts. * * @param String $pattern regexp pattern that is used to deny files path parts. */ function setExcludeFilePattern($pattern) { $this->_excludeFilePattern = $pattern; } /** * Sets a regexp pattern that is used to accept directory path parts. * * @param String $pattern regexp pattern that is used to accept directory path parts. */ function setIncludeDirectoryPattern($pattern) { $this->_includeDirectoryPattern = $pattern; } /** * Sets a regexp pattern that is used to deny directory path parts. * * @param String $pattern regexp pattern that is used to deny directory path parts. */ function setExcludeDirectoryPattern($pattern) { $this->_excludeDirectoryPattern = $pattern; } /** * Sets a wildcard pattern that is used to accept files path parts. * * @param String $pattern wildcard pattern that is used to accept files path parts. */ function setIncludeWildcardPattern($pattern) { if ($pattern != "") $this->_includeWildcardPattern = $pattern; } /** * Sets a wildcard pattern that is used to deny files path parts. * * @param String $pattern wildcard pattern that is used to deny files path parts. */ function setExcludeWildcardPattern($pattern) { if ($pattern != "") $this->_excludeWildcardPattern = $pattern; } /** * Returns true or false if the file is accepted or not. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { $name = $file->getName(); $absPath = $file->getAbsolutePath(); $isFile = $file->isFile(); // Handle exclude folders if (is_array($this->_excludeFolders)) { foreach ($this->_excludeFolders as $folder) { if (strpos($absPath, $folder) != "") { if ($this->_debug) debug("File denied \"" . $absPath . "\" by \"excludeFolders\"."); return BASIC_FILEFILTER_INVALID_NAME; } } } // Handle include folders if (is_array($this->_includeFolders)) { $state = false; foreach ($this->_includeFolders as $folder) { if (strpos($absPath, $folder) != "") { $state = true; break; } } if (!$state) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFolders\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle exclude files if (is_array($this->_excludeFiles) && $isFile) { foreach ($this->_excludeFiles as $fileName) { if ($name == $fileName) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeFiles\"."); return BASIC_FILEFILTER_INVALID_NAME; } } } // Handle include files if (is_array($this->_includeFiles) && $isFile) { $state = false; foreach ($this->_includeFiles as $fileName) { if ($name == $fileName) { $state = true; break; } } if (!$state) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFiles\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle file patterns if ($isFile) { if ($this->_dirsOnly) { if ($this->_debug) debug("File denied \"" . $absPath . "\" by \"dirsOnly\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude pattern if ($this->_excludeFilePattern && preg_match($this->_excludeFilePattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeFilePattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle include pattern if ($this->_includeFilePattern && !preg_match($this->_includeFilePattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFilePattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } } else { if ($this->_filesOnly) { if ($this->_debug) debug("Dir denied \"" . $absPath . "\" by \"filesOnly\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude pattern if ($this->_excludeDirectoryPattern && preg_match($this->_excludeDirectoryPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeDirectoryPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle include pattern if ($this->_includeDirectoryPattern && !preg_match($this->_includeDirectoryPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeDirectoryPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle include wildcard pattern if ($this->_includeWildcardPattern && !$this->_fnmatch($this->_includeWildcardPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeWildcardPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude wildcard pattern if ($this->_excludeWildcardPattern && $this->_fnmatch($this->_excludeWildcardPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeWildcardPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle file exntetion pattern if (is_array($this->_extensions) && $isFile) { $ar = explode('.', $absPath); $ext = strtolower(array_pop($ar)); $valid = false; foreach ($this->_extensions as $extension) { if ($extension == $ext) { $valid = true; break; } } if (!$valid) return BASIC_FILEFILTER_INVALID_EXTENSION; } return BASIC_FILEFILTER_ACCEPTED; } function _fnmatch($pattern, $file) { return ereg($this->_fnmatch2regexp(strtolower($pattern)), strtolower($file)); } function _fnmatch2regexp($str) { $s = ""; for ($i = 0; $iimagemanager/classes/ManagerEngine.php000066600000100001150472616010014025 0ustar00_plugins = array(); $this->_prefixes = array(); $this->_rootPaths = array(); $this->_config = array(); $this->_type = $type; } /** * Sets the name/value array of config options. This method will also force some relative config option paths to absolute. * * @param Array $config Name/value array of config options. * @param bool $setup_values True/false if the paths etc of the config should be set to default values or not. */ function setConfig($config, $setup_values = true) { $this->_rootPaths = array(); if ($setup_values) { // Auto add rootpaths and force them absolute in config $newRoots = array(); $roots = explode(';', $config['filesystem.rootpath']); foreach ($roots as $root) { $rootParts = explode('=', $root); // Unnamed root if (count($rootParts) == 1) { $rootParts[0] = $this->removeTrailingSlash($this->toAbsPath($rootParts[0])); $this->addRootPath($rootParts[0]); } // Named root if (count($rootParts) == 2) { $rootParts[1] = $this->removeTrailingSlash($this->toAbsPath($rootParts[1])); $this->addRootPath($rootParts[1]); } $newRoots[] = implode('=', $rootParts); } $config['filesystem.rootpath'] = implode(';', $newRoots); // Force absolute path if ($config['filesystem.path'] == "") $config['filesystem.path'] = $this->_rootPaths[0]; else $config['filesystem.path'] = $this->removeTrailingSlash($this->toAbsPath($config['filesystem.path'])); // Setup absolute wwwroot if (isset($config['preview.wwwroot']) && $config['preview.wwwroot']) $config['preview.wwwroot'] = $this->toUnixPath($this->toAbsPath($config['preview.wwwroot'])); else $config['preview.wwwroot'] = $this->getSiteRoot(); // Setup preview.urlprefix if ($config["preview.urlprefix"]) { if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") $config["preview.urlprefix"] = str_replace("{proto}", "https", $config["preview.urlprefix"]); else $config["preview.urlprefix"] = str_replace("{proto}", "http", $config["preview.urlprefix"]); $config["preview.urlprefix"] = str_replace("{host}", $_SERVER['HTTP_HOST'], $config["preview.urlprefix"]); $config["preview.urlprefix"] = str_replace("{port}", $_SERVER['SERVER_PORT'], $config["preview.urlprefix"]); } } $this->_config =& $config; } function getType() { return $this->_type; } function setLangPackPath($path) { $this->_langPackPath = $path; } function getLangPackPath() { return $this->_langPackPath; } /** * Returns a LanguagePack instance of the current language pack. * * @return LanguagePack Instance of the current language pack. */ function &getLangPack() { if (!$this->_language) { $config = $this->getConfig(); $this->_language = new Moxiecode_LanguagePack(); $this->_language->load($this->toAbsPath("language/" . $this->_langPackPath . "/" . $config['general.language'] . ".xml")); } return $this->_language; } /** * Returns a lang item by group and key. * * @param string $group Language group to look in. * @param string $item Item to get inside group. * @param Array $replace Name/Value array of variables to replace in language pack. * @return string Language pack string loaded from XML file. */ function getLangItem($group, $item, $replace = array()) { $pack =& $this->getLangPack(); $string = $pack->get($group, $item); foreach ($replace as $key => $val) $string = str_replace("{". $key ."}", $val, $string); return $string; } /** * Returns an array of plugin paths to be loaded/required/includes. * * @return Array Array of file paths to load. */ function getPluginPaths() { global $basepath; $config = $this->getConfig(); $plugins = array(); if (isset($config["general.plugins"]) && $config["general.plugins"]) $plugins = preg_split("/,/i", $config["general.plugins"]); $out = array(); foreach($plugins as $plugin) { if (!isset($this->_plugins[strtolower($plugin)])) { // Check for single file plugins if (file_exists($basepath . "../plugins/" . $plugin . ".php")) $out[] = "plugins/" . $plugin . ".php"; else $out[] = "plugins/" . $plugin . "/". $plugin . ".php"; } } // Check the string first if ($config["authenticator"] == "") $config["authenticator"] = "BaseAuthenticator"; $authenticators = array(); // Check string for delimiter, preg_split returns php warning if delimiter is not found! if (strpos($config["authenticator"], "+") || strpos($config["authenticator"], "|")) $authenticators = preg_split("/\+|\|/i", $config["authenticator"], -1, PREG_SPLIT_NO_EMPTY); if (count($authenticators) != 0) { foreach ($authenticators as $auth) { // Check for single file plugins if (!isset($this->_plugins[strtolower($auth)])) { if (file_exists($basepath . "../plugins/" . $auth . ".php")) $out[] = "plugins/" . $auth . ".php"; else $out[] = "plugins/" . $auth . "/". $auth . ".php"; } } } else { if (!isset($this->_plugins[strtolower($config["authenticator"])])) { if (file_exists($basepath . "Authenticators/" . $config["authenticator"] . ".php")) $out[] = "classes/Authenticators/" . $config["authenticator"] . ".php"; else if (file_exists($basepath . "../plugins/" . $config["authenticator"] . ".php")) $out[] = "plugins/" . $config["authenticator"] . ".php"; else $out[] = "plugins/" . $config["authenticator"] . "/" . $config["authenticator"] . ".php"; } } // Check so that they all exists foreach ($out as $path) { if (!file_exists($basepath . "../" . $path)) trigger_error("Plugin could not be found: " . $path, FATAL); } return $out; } /** * Adds a path to the list of root paths. * * @param String $path Path to add must be a absolute path. */ function addRootPath($path) { $this->_rootPaths[] = $path; } /** * Returns an array of root paths. * * @return Array Root paths. */ function getRootPaths() { return $this->_rootPaths; } /** * Returns a plugin by id/name. * * @param String $name Plugin id/name. * @return MCManagerPlugin instance object. */ function getPlugin($name) { return isset($this->_plugins[$name]) ? $this->_plugins[$name] : null; } /** * Returns a true/false check for plugin. * * @param String $name Plugin id/name. * @return Bool true/false */ function hasPlugin($name) { return isset($this->_plugins[$name]); } /** * Returns a name/value array of plugins. * * @return Array name/value array of MCManagerPlugin instances. */ function getPlugins() { return $this->_plugins; } /** * Registers a plugin by id/name. * * @param $name Id/name to register plugin by. * @param $plugin Plugin instance to register/add to list. * * @return SmallMCEPlugin The added plugin instance. */ function ®isterPlugin($name, &$plugin, $prefix = false) { $name = strtolower($name); $this->_plugins[$name] =& $plugin; if ($prefix != false) $this->_prefixes[$name] = $prefix; return $plugin; } /** * Returns the MCManager config as name/value array. * * @return Array MCManager config as name/value array. */ function &getConfig() { return $this->_config; } /** * Returns the a config item by name. * * @param string $key Config item key to retrive. * @param string $def Default value to return. * @return mixed config item by name. */ function getConfigItem($key, $def = false) { return isset($this->_config[$key]) ? $this->_config[$key] : $def; } /** * Returns a merged JS config. It will only export configured items controlled by the allow_export suffix. * * @return Array Name/Value array of JS config options. */ function &getJSConfig($config = false, $prefixes = '*') { $encrypted = array("filesystem.path", "filesystem.rootpath", "filesystem.directory_templates"); $jsConfig = array(); $prefixes = explode(",", $prefixes); if (!$config) $config = $this->getConfig(); foreach ($config as $name => $value) { $pos = strpos($name, ".allow_export"); if ($pos > 0) { $names = explode(",", $value); $prefix = substr($name, 0, $pos); if (in_array("*", $prefixes) || in_array($prefix, $prefixes)) { foreach ($names as $key) { $key = $prefix . "." . $key ; // Encrypt some paths if (in_array($key, $encrypted)) $jsConfig[$key] = "" . $this->encryptPath($config[$key]); else $jsConfig[$key] = "" . is_bool($config[$key]) ? ($config[$key] ? "true" : "false") : $config[$key]; } } } } return $jsConfig; } /** * Encrypts the specified path so that it doesn't contain full paths on the client side of the application. * * @param string $path Path to encrypt. * @return string Encrypted short path. */ function encryptPath($path) { $config = $this->getConfig(); if (checkBool($config['general.encrypt_paths'])) { $count = 0; foreach ($this->_rootPaths as $rootPath) { // Needs encryption? if ($rootPath != "/") $path = str_replace($rootPath, "{" . $count++ . "}", $path); } } return utf8_encode($path); } /** * Decrypts the specified path from a non absolute path to a absolute path. * * @param string $path Path to decrypt. * @return string Decrypted absolute path. */ function decryptPath($path) { if (!$path) return ""; $count = 0; $path = $this->toUnixPath($path); // Is relative path if (!(strpos($path, '/') === 0 || strpos($path, ':') !== false || strpos($path, '{') !== false)) $path = realpath(dirname(__FILE__) . '/../' . $path); foreach ($this->_rootPaths as $rootPath) $path = str_replace("{" . $count++ . "}", $rootPath, $path); $path = str_replace("{default}", $this->_config["filesystem.path"], $path); return $path; } /** * isAuthenticated checks against the configuration and sends events to auth plugins. * This method will also call the onBeforeInit, onInit and onAfterInit methods if the user was authenticated. * * @return bool Returns true if authenticated, false if not. */ function isAuthenticated() { $config = $this->getConfig(); $authenticators = strtolower($config["authenticator"]); // Check the string first if ($authenticators != "" && $authenticators != "BaseAuthenticator") { if (strpos($authenticators, "|") && strpos($authenticators, "+")) trigger_error("You can not use both + and | at the same time for adding authenticators.", FATAL); $pass = false; // Check for AND authenticators if (strpos($authenticators, "+")) { $authArray = preg_split("/\+/i", $authenticators, -1, PREG_SPLIT_NO_EMPTY); if (!$authArray) trigger_error("No Authenticator could be used.", FATAL); // Verify that all authenticators exists foreach($authArray as $auth) { if (!$this->hasPlugin($auth)) trigger_error("Authenticator \"". htmlentities($auth) ."\" was not found.", FATAL); } // Default to true $pass = true; // Send AND event foreach ($authArray as $auth) { $plugin = $this->getPlugin($auth); if ($pass && !$plugin->onAuthenticate($this)) $pass = false; } // Check for OR authentocator string } else if (strpos($authenticators, "|")) { $authArray = preg_split("/\|/i", $authenticators, -1, PREG_SPLIT_NO_EMPTY); if (!$authArray) trigger_error("No Authenticator could be used.", FATAL); // Verify that all authenticators exists foreach ($authArray as $auth) { if (!$this->hasPlugin($auth)) trigger_error("Authenticator \"". htmlentities($auth) ."\" was not found.", FATAL); } // Default to false $pass = false; // Send OR event foreach ($authArray as $auth) { $plugin = $this->getPlugin($auth); if ($plugin->onAuthenticate($this)) $pass = true; } } else { $plugin = $this->getPlugin($authenticators); if ($plugin->onAuthenticate($this)) $pass = true; } } else $pass = true; // Is authenticated, call onInit if ($pass) $this->dispatchEvent("onInit"); // Set config again to update rootpaths etc $this->setConfig($this->_config); return $pass; } /** * Dispatches a event to all registered plugins. This method will loop through all plugins and call the specific event if this * event method returns false the chain will be terminated. * * @param String $event Event name to be dispatched for example onAjaxCommand. * @param Array $args Optional array with arguments. * @return Bool Returns true of a plugin returned true, false if not. */ function dispatchEvent($event, $args=false) { // Setup event arguments $keys = array_keys($this->_plugins); for ($i=0; $i_plugins[$keys[$i]]; // Valid prefix if (isset($this->_prefixes[$keys[$i]])) { if ($this->_type != $this->_prefixes[$keys[$i]]) continue; } switch ($event) { case "onAuthenticate": if (!$plugin->onAuthenticate($this)) return false; break; case "onInit": if (!$plugin->onInit($this)) return false; break; case "onPreInit": if (!$plugin->onPreInit($this, $args[0])) return false; break; case "onLogin": if (!$plugin->onLogin($this)) return false; break; case "onLogout": if (!$plugin->onLogout($this)) return false; break; case "onBeforeFileAction": if (!isset($args[2])) $args[2] = null; if (!$plugin->onBeforeFileAction($this, $args[0], $args[1], $args[2])) return false; break; case "onFileAction": if (!isset($args[2])) $args[2] = null; if (!$plugin->onFileAction($this, $args[0], $args[1], $args[2])) return false; break; case "onBeforeRPC": if (!$plugin->onBeforeRPC($this, $args[0], $args[1])) return false; break; case "onBeforeStream": if (!$plugin->onBeforeStream($this, $args[0], $args[1])) return false; break; case "onStream": if (!$plugin->onStream($this, $args[0], $args[1])) return false; break; case "onAfterStream": if (!$plugin->onAfterStream($this, $args[0], $args[1])) return false; break; case "onBeforeUpload": if (!$plugin->onBeforeUpload($this, $args[0], $args[1])) return false; break; case "onAfterUpload": if (!$plugin->onAfterUpload($this, $args[0], $args[1])) return false; break; case "onCustomInfo": if (!$plugin->onCustomInfo($this, $args[0], $args[1], $args[2])) return false; break; case "onListFiles": if (!$plugin->onListFiles($this, $args[0], $args[1])) return false; break; case "onInsertFile": if (!$plugin->onInsertFile($this, $args[0])) return false; break; } } return true; } /** * Executes a event in all registered plugins if a plugin returns a object or array the execution chain will be * terminated. * * @param String $event Event name to be dispatched for example onAjaxCommand. * @param Array $args Optional array with arguments. * @return Bool Returns true of a plugin returned true, false if not. */ function executeEvent($event, $args=false) { // Setup event arguments $keys = array_keys($this->_plugins); for ($i=0; $i_plugins[$keys[$i]]; // Valid prefix if (isset($this->_prefixes[$keys[$i]])) { if ($this->_type != $this->_prefixes[$keys[$i]]) continue; } switch ($event) { case "onRPC": $result =& $plugin->onRPC($this, $args[0], $args[1]); if (!is_null($result)) return $result; break; case "onUpload": $result =& $plugin->onUpload($this, $args[0], $args[1]); if (!is_null($result)) return $result; break; } } return null; } function getInvalidFileMsg() { return $this->_invalidFileMsg; } /** * Returns the wwwroot if it fails it will trigger a fatal error. * * @return String wwwroot or null string if it was impossible to get. */ function getSiteRoot() { // Check config if (isset($this->_config['preview.wwwroot']) && $this->_config['preview.wwwroot']) return $this->toUnixPath(realpath($this->_config['preview.wwwroot'])); // Try script file if (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["SCRIPT_FILENAME"])) { $path = str_replace($this->toUnixPath($_SERVER["SCRIPT_NAME"]), "", $this->toUnixPath($_SERVER["SCRIPT_FILENAME"])); if (is_dir($path)) return $this->toUnixPath(realpath($path)); } // If all else fails, try this. if (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["PATH_TRANSLATED"])) { $path = str_replace($this->toUnixPath($_SERVER["SCRIPT_NAME"]), "", str_replace("//", "/", $this->toUnixPath($_SERVER["PATH_TRANSLATED"]))); if (is_dir($path)) return $this->toUnixPath(realpath($path)); } // Check document root if (isset($_SERVER['DOCUMENT_ROOT'])) return $this->toUnixPath(realpath($_SERVER['DOCUMENT_ROOT'])); trigger_error("Could not resolve WWWROOT path, please set an absolute path in preview.wwwroot config option. Check the Wiki documentation for details.", FATAL); return null; } /** * Returns a absolute file system path of a absolute URI path for example /mydir/myfile.htm * will be resolved to /www/mywwwroot/mydir/myfile.htm. * * @param String $uri Absolute URI path for example /mydir/myfile.htm * @param String $root Option site root to use. * @return String Absolute file system path or empty string on failure. */ function resolveURI($uri, $root = false) { // Use default root if not specified if (!$root) $root = $this->getSiteRoot(); return realpath($root . $uri); } /** * Returns a site absolute path from a absolute file system path for example /www/mywwwroot/mydir/myfile.htm * will be converted to /mydir/myfile.htm. * * @param String $abs_path Absolute path for example /mydir/myfile.htm * @return String Site absolute path (URI) or empty string on failure. */ function convertPathToURI($abs_path, $root = false) { $log =& $this->getLogger(); // No root defined use specified root if (!$root) $root = $this->getSiteRoot(); if (!$root) { trigger_error("Could not resolve WWWROOT path, please set an absolute path in preview.wwwroot config option.", FATAL); die(); } if ($root == "/") { if ($log && $log->isDebugEnabled()) $log->info("ConvertPathToURI: SiteRoot=" . $root . ", Path: " . $abs_path . " -> URI: " . $abs_path); return $abs_path; } $uri = substr($abs_path, strlen($root)); if ($log && $log->isDebugEnabled()) $log->info("ConvertPathToURI: SiteRoot=" . $root . ", Path: " . $abs_path . " -> URI: " . $uri); return $uri; } /** * Converts a URI such as /somedir/somefile.gif to /system/path/somedir/somefile.gif * * @param String $uri URI to convert to path. * @param String $root Optional site root to use. * @return String Path out of URI. */ function convertURIToPath($uri, $root = false) { $log =& $this->getLogger(); if (!$root) $root = $this->getSiteRoot(); if ($log && $log->isDebugEnabled()) $log->info("ConvertURIToPath: SiteRoot=" . $root . ", URI: " . $uri . " -> Path: " . $this->removeTrailingSlash($root) . $uri); return $this->removeTrailingSlash($root) . $uri; } /** * Converts an path into a visualy presentatble path. So that special folder names * gets translated and root paths gets replaced with their names. * * @param String $path Path to convert into a visual path. * @return String Visual path based on input path. */ function toVisualPath($path, $root = false) { $fs = "file"; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } $path = $this->decryptPath($path); // Speficied root if ($root) { $pos = strpos($path, $root); if ($pos === 0) $path = substr($path, strlen($root)); if ($path == "") $path = "/"; // Re-attach fs if ($fs != "file") $path = $fs . "://" . $path; return $this->encryptPath($path); } // Use config roots $rootNames = $this->_getRootNames(); foreach ($rootNames as $rootPath => $name) { $pos = strpos($path, $rootPath); if ($pos === 0) { $path = substr($path, strlen($rootPath)); if ($name == "/") $name = ""; $path = "/" . $name . $path; } } if (!$path) $path = "/"; // Re-attach fs if ($fs != "file") $path = $fs . "://" . $path; return $this->encryptPath($path); } /** * Verifies that a path is within the parent path. * * @param String $parent_path Parent path that must contain the path. * @param String $path Path that must contained the parent path. * @return Bool true if it's valid, false if it's not. */ function isChildPath($parent_path, $path) { return strpos(strtolower($path), strtolower($parent_path)) === 0; } /** * Checks if a specific tool is enabled or not. * * @param string $tool Tool to check for. * @param Array $config Name/Value config array to check tool against. * @return bool true/false if the tool is enabled or not. */ function isToolEnabled($tool, $config = false) { if (!$config) $config = $this->getConfig(); $ar = explode(',', $config['general.disabled_tools']); if (in_array($tool, $ar)) return false; $ar = explode(',', $config['general.tools']); if (in_array($tool, $ar)) return true; return false; } /** * Verifies that the specified path is within valid root paths. * * @param String $path Path to verify. * @return Bool true if the path is valid, false if it's invalid. */ function verifyPath($path) { $fs = "file"; $valid = false; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } // Filesystem wasn't found if (!isset($this->_fileSystems[$fs])) { trigger_error($this->getLangItem("error", "no_filesystem", array("path" => $path)), FATAL); die(); } $path = $this->decryptPath($path); // /../ is never valid if (indexOf($this->addTrailingSlash($path), "/../") != -1) return false; if ($fs != 'file') return true; foreach ($this->_rootPaths as $rootPath) { if ($this->isChildPath($rootPath, $path)) $valid = true; } return $valid; } /** * Returns the file system for a path for file if it couldn't be extracted. * * @param string $path Path to get FS from. * @return string Filesystem for path. */ function getFSFromPath($path) { $fs = "file"; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) $fs = $matches[1]; return $fs; } /** * Verifies that the specified file is valid agains the filters specified in config. * * @param String $path Path to verify. * @param String $action Action to get config options by. * @param Array $config Name/Value array of config options. * @return int Reason why it was denied. */ function verifyFile($file, $action = false, $config = false) { $config = $config ? $config : $file->getConfig(); // Verify filesystem config $fileFilter = new Moxiecode_BasicFileFilter(); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); $this->_invalidFileMsg = "{#error.invalid_filename}"; $status = $fileFilter->accept($file); if ($status != BASIC_FILEFILTER_ACCEPTED) { if ($status == BASIC_FILEFILTER_INVALID_NAME) { if ($file->isFile() && isset($config['filesystem.invalid_file_name_msg'])) $this->_invalidFileMsg = $config['filesystem.invalid_file_name_msg']; else if (!$file->isFile() && isset($config['filesystem.invalid_directory_name_msg'])) $this->_invalidFileMsg = $config['filesystem.invalid_directory_name_msg']; if (!$this->_invalidFileMsg) $this->_invalidFileMsg = "{#error.invalid_filename}"; } return $status; } // Verify action specific config $fileFilter = new Moxiecode_BasicFileFilter(); if ($action) { if (isset($config[$action . '.include_directory_pattern'])) $fileFilter->setIncludeDirectoryPattern($config[$action . '.include_directory_pattern']); if (isset($config[$action . '.exclude_directory_pattern'])) $fileFilter->setExcludeDirectoryPattern($config[$action . '.exclude_directory_pattern']); if (isset($config[$action . '.include_file_pattern'])) $fileFilter->setIncludeFilePattern($config[$action . '.include_file_pattern']); if (isset($config[$action . '.exclude_file_pattern'])) $fileFilter->setExcludeFilePattern($config[$action . '.exclude_file_pattern']); if (isset($config[$action . '.extensions'])) $fileFilter->setIncludeExtensions($config[$action . '.extensions']); } else return BASIC_FILEFILTER_ACCEPTED; $status = $fileFilter->accept($file); if ($status != BASIC_FILEFILTER_ACCEPTED) { if ($status == BASIC_FILEFILTER_INVALID_NAME) { $this->_invalidFileMsg = "{#error.invalid_filename}"; if ($file->isFile()) { if (isset($config[$action . '.invalid_file_name_msg'])) $this->_invalidFileMsg = $config[$action . '.invalid_file_name_msg']; } else { if (isset($config[$action . '.invalid_directory_name_msg'])) $this->_invalidFileMsg = $config[$action . '.invalid_directory_name_msg']; } } return $status; } return BASIC_FILEFILTER_ACCEPTED; } /** * Returns a file object represtentation of a file path this * will also do security checks agains the list of valid paths * so that file IO can't be done outside the valid paths. * * @param String $path Path to return as File object. * @param String $file_name Optional file name. * @param String $type Optional file type. * @return File File object representation of a file. */ function &getFile($path, $file_name = "", $type = MC_IS_FILE) { $path = utf8_decode($path); $file_name = utf8_decode($file_name); $fs = 'file'; $matches = array(); $oldpath = $path; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } // Filesystem wasn't found if (!isset($this->_fileSystems[$fs])) { trigger_error($this->getLangItem("error", "no_filesystem", array("path" => $path)), FATAL); die(); } $path = $this->decryptPath($path); $path = $this->removeTrailingSlash($this->toUnixPath($path)); // Verfiy path if no file was returned if ($fs == 'file' && !$this->verifyPath($path)) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } // Validate file name if ($fs == 'file' && $file_name) { if (preg_match('/[\\\\\\/:]+/', $file_name, $matches)) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } } // Get file instance $file = new $this->_fileSystems[$fs]($this, $path, $file_name, $type); // Verfiy path if no file was returned if ($fs == 'file' && !$this->verifyPath($file->getAbsolutePath())) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } return $file; } /** * Converts a relative path to absolute path. * * @param string $path Path to convert to absolute. * @param string $basepath Optional base path default to ../. */ function toAbsPath($path, $basepath = false) { $path = $this->toUnixPath($path); if (!$basepath) $basepath = dirname(__FILE__) . "/../"; // Is absolute unix or windows if (substr($path, 0, 1) == '/' || strpos($path, ":") !== false) { // Resolve symlinks $tmp = realpath($path); if ($tmp) $path = $tmp; return $this->toUnixPath($path); } $path = $this->toUnixPath($this->addTrailingSlash($this->toUnixPath(realpath($basepath))) . $path); // Local FS and exists remove any ../../ if (strpos($path, "://") === false && file_exists($path)) $path = $this->toUnixPath(realpath($path)); return $path; } /** * Converts a Unix path to OS specific path. * * @param String $path Unix path to convert. */ function toOSPath($path) { return str_replace("/", DIRECTORY_SEPARATOR, $path); } /** * Converts a OS specific path to Unix path. * * @param String $path OS path to convert to Unix style. */ function toUnixPath($path) { return str_replace(DIRECTORY_SEPARATOR, "/", $path); } /** * Adds a trailing slash to a path. * * @param String path Path to add trailing slash on. * @return String New path with trailing slash. */ function addTrailingSlash($path) { if (strlen($path) > 0 && $path[strlen($path)-1] != '/') $path .= '/'; return $path; } /** * Removes the trailing slash from a path. * * @param String path Path to remove trailing slash from. * @return String New path without trailing slash. */ function removeTrailingSlash($path) { // Is root if ($path == "/") return $path; if ($path == "") return $path; if ($path[strlen($path)-1] == '/') $path = substr($path, 0, strlen($path)-1); return $path; } /** * Adds a new file system bu name. * * @param String $protocol File protocol like zip/ftp etc. * @param String $file_system Name of class to create instances by. */ function registerFileSystem($protocol, $file_system) { $this->_fileSystems[$protocol] = $file_system; } /** * Returns a logger instance. * * @return Logger New logger instance. */ function &getLogger() { if (!$this->_logger) { $log = new Moxiecode_Logger(); $null = null; // PHP why!!! Other languages can return null if (!checkBool($this->getConfigItem("log.enabled"))) return $null; // Set logger options $log->setLevel($this->getConfigItem("log.level", "fatal")); $log->setPath($this->toAbsPath($this->getConfigItem("log.path", "logs"))); $log->setFileName($this->getConfigItem("log.filename", "{level}.log")); $log->setFormat($this->getConfigItem("log.format", "[{time}] [{level}] {message}")); $log->setMaxSize($this->getConfigItem("log.max_size", "100k")); $log->setMaxFiles($this->getConfigItem("log.max_files", "10")); $this->_logger = $log; } return $this->_logger; } // * * * * * * * Private methods function _getRootNames() { $config = $this->getConfig(); $output = array(); $roots = explode(';', $config['filesystem.rootpath']); foreach ($roots as $root) { $rootParts = explode('=', $root); if (count($rootParts) > 1) $output[$rootParts[1]] = $rootParts[0]; else { $output[$rootParts[0]] = basename($root); // If it's root if ($output[$rootParts[0]] == "") $output[$rootParts[0]] = "/"; } } return $output; } /**#@-*/ } ?>imagemanager/classes/CorePlugin.php000066600000074056150472616010013420 0ustar00getConfig(); // Register local and root file system $man->registerFileSystem('file', isset($config['filesystem']) ? $config['filesystem'] : 'Moxiecode_LocalFileImpl'); $man->registerFileSystem('root', 'Moxiecode_RootFileImpl'); return true; } /** * Gets executed when a RPC command is to be executed. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { switch ($cmd) { case "deleteFiles": return $this->_deleteFile($man, $input); case "listFiles": return $this->_listFiles($man, $input); case "createDirs": return $this->_createDirs($man, $input); case "getConfig": return $this->_getConfig($man, $input); case "insertFiles": return $this->_insertFiles($man, $input); case "loopBack": return $this->_loopBack($input); case "keepAlive": return $this->_keepAlive($man, $input); } return null; } /** * Gets called when data is streamed to client. This method should setup * HTTP headers, content type etc and simply send out the binary data to the client and the return false * ones that is done. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onStream(&$man, $cmd, $input) { $config = $man->getConfig(); // Download stream if ($cmd == "download") { if ($man->verifyPath($input["path"])) { $file =& $man->getFile($input["path"]); $config = $file->getConfig(); if ($man->verifyFile($file, "download") > 0 && $file->exists()) { // Get the mimetype, need to go to ../ parent folder cause... well we have to. //$mimeType = mapMimeTypeFromUrl($file->getAbsolutePath(), "../". $config['stream.mimefile']); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $file->getName() . "\""); // Stream data $stream =& $file->open('rb'); if ($stream) { while (($buff = $stream->read()) != null) echo $buff; $stream->close(); } return false; } } else { header('HTTP/1.0 404 Not found'); header('status: 404 Not found'); echo "Requested resource could not be found. Or access was denied."; die(); } // Do not pass to next return false; } // Normal stream if ($cmd == "streamFile") { if (!$man->verifyPath($input["path"]) < 0) { trigger_error("Path verification failed.", FATAL); die(); } $file = $man->getFile($input["path"]); $config = $file->getConfig(); if (!$file->exists()) { trigger_error("File not found.", FATAL); die(); } else { if (getClassName($file) == 'moxiecode_localfileimpl') { // Redirect to data $url = $man->removeTrailingSlash($config['preview.urlprefix']) . $man->convertPathToURI($file->getParent() . "/" . str_replace("+", "%20", urlencode($file->getName())), $config["preview.wwwroot"]) . $config['preview.urlsuffix']; // Passthrough rnd if (isset($input["rnd"])) $url .= (strpos($url, "?") === false ? "?" : "&") . "rnd=" . $input["rnd"]; header('location: ' . $url); die(); } else { // Verify that we can stream this one if ($man->verifyFile($file, "stream") < 0) { header('HTTP/1.0 404 Not found'); header('status: 404 Not found'); echo "Requested resource could not be found. Or access was denied."; die(); } // Get the mimetype, need to go to ../ parent folder cause... well we have to. $mimeType = mapMimeTypeFromUrl($file->getAbsolutePath(), "../". $config['stream.mimefile']); header("Content-type: " . $mimeType); // Stream data $stream =& $file->open('rb'); if ($stream) { while (($buff = $stream->read()) != null) echo $buff; $stream->close(); } } return false; } } // Devkit commands switch ($cmd) { case "viewServerInfo": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); phpinfo(); break; case "downloadServerInfo": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); // Get all ini settings $data = ini_get_all(); // Setup all headers header("Content-type: text/plain; charset=UTF-8"); header("Content-Disposition: attachment; filename=dump.txt"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); echo "# Config from config.php" . "\r\n\r\n"; foreach ($config as $key => $value) { if (is_bool($value)) echo $key . "=" . ($value ? "true" : "false") . "\r\n"; else echo $key . "=" . $value . "\r\n"; } // Dump INI settings echo "\r\n# PHP INI settings file\r\n\r\n"; foreach ($data as $key => $value) echo $key . "=" . $value['local_value'] . "\r\n"; // Dump function support echo "\r\n# Function check" . "\r\n\r\n"; $functions = array( "ImagecreateFromJpeg", "ImageJpeg", "ImagecreateFromGif", "ImageGif", "ImagecreateFromPng", "ImagePng", "gzdeflate", "gzinflate" ); foreach ($functions as $function) echo $function . "=" . (function_exists($function) ? "ok" : "missing") . "\r\n"; // Dump rootpath access echo "\r\n# Rootpath access" . "\r\n\r\n"; foreach ($man->getRootPaths() as $rootpath) { $stat = stat($rootpath); echo $rootpath . "\r\n"; echo " is_readable=" . (is_readable($rootpath) ? "readable" : "not readable") . "\r\n"; echo " is_writable=" . (is_writable($rootpath) ? "writable" : "not writable") . "\r\n"; foreach ($stat as $key => $value) echo " " . $key . "=" . $value . "\r\n"; } break; case "viewLog": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); header('Content-type: text/plain'); if ($input['level'] == "debug") echo @file_get_contents("../logs/debug.log"); else echo @file_get_contents("../logs/error.log"); break; case "clearLog": header('Content-type: text/plain'); if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); if ($input['level'] == "debug") $log = "../logs/debug.log"; else $log = "../logs/error.log"; @unlink($log); for ($i=0; $i<10; $i++) @unlink($log . "." . $i); echo "Logs cleared."; break; } // Pass to next return true; } /** * Gets called when data is streamed/uploaded from client. This method should take care of * any uploaded files and move them to the correct location. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return object Result object data or null if the event wasn't handled. */ function onUpload(&$man, $cmd, $input) { if ($cmd == "upload") { // Setup response $result = new Moxiecode_ResultSet("status,file,message"); $path = $man->decryptPath($input["path"]); $config = $man->getConfig(); if ($man->verifyPath($path)) { $file =& $man->getFile($path); $config = $file->getConfig(); $maxSizeBytes = preg_replace("/[^0-9]/", "", $config["upload.maxsize"]); if (strpos((strtolower($config["upload.maxsize"])), "k") > 0) $maxSizeBytes *= 1024; if (strpos((strtolower($config["upload.maxsize"])), "m") > 0) $maxSizeBytes *= (1024 * 1024); // Is chunked upload if (isset($input["chunk"])) { $filename = $input["name"]; $chunk = intval($input["chunk"]); $chunks = intval($input["chunks"]); // No access, tool disabled if (in_array("upload", explode(',', $config['general.disabled_tools'])) || !$file->canWrite() || !checkBool($config["filesystem.writable"])) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); return $result; } $file =& $man->getFile($path, $filename, MC_IS_FILE); if ($man->verifyFile($file, "upload") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result; } // Hack attempt if ($filename == $config['filesystem.local.access_file_name']) { $result->add("MCACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); return $result; } // Only peform IO when not in demo mode if (!checkBool($config['general.demo'])) { if ($chunk == 0 && $file->exists() && (!isset($config["upload.overwrite"]) || $config["upload.overwrite"] == false)) { $result->add("OVERWRITE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.file_exists}"); return $result; } if ($chunk == 0 && $file->exists() && $config["upload.overwrite"] == true) $file->delete(); // Write file $stream =& $file->open($chunk == 0 ? 'wb' : 'ab'); if ($stream) { $in = fopen("php://input", "rb"); if ($in) { while ($buff = fread($in, 4096)) $stream->write($buff); } $stream->close(); } // Check file size if ($file->getLength() > $maxSizeBytes) { $file->delete(); $result->add("SIZE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.error_to_large}"); return $result; } // Verify uploaded file, if it fails delete it $status = $man->verifyFile($file, "upload"); if ($status < 0) { $file->delete(); $result->add("FILTER_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result; } // Import file when all chunks are complete if ($chunk == $chunks - 1) { clearstatcache(); debug($chunk, $chunks, filesize($file->getAbsolutePath()), $chunk == 0 ? 'wb' : 'ab'); $file->importFile(); } } $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.upload_ok}"); return $result; } else { // Ok lets check the files array out. for ($i=0; isset($_FILES['file' . $i]['tmp_name']); $i++) { $filename = utf8_encode($input["name" . $i]); // Do nothing in demo mode if (checkBool($config['general.demo'])) { $result->add("DEMO_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.demo}"); continue; } // No access, tool disabled if (in_array("upload", explode(',', $config['general.disabled_tools'])) || !$file->canWrite() || !checkBool($config["filesystem.writable"])) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); continue; } // Get ext to glue back on $ext = ""; if (strpos(basename($_FILES['file' . $i]['name']), ".") > 0) { $ar = explode('.', basename($_FILES['file' . $i]['name'])); $ext = array_pop($ar); } $file =& $man->getFile($path, $filename . "." . $ext, "", MC_IS_FILE); if ($man->verifyFile($file, "upload") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } $config = $file->getConfig(); if (is_uploaded_file($_FILES['file' . $i]['tmp_name'])) { // Hack attempt if ($filename == $config['filesystem.local.access_file_name']) { @unlink($_FILES['file' . $i]['tmp_name']); $result->add("MCACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); continue; } if ($file->exists() && (!isset($config["upload.overwrite"]) || $config["upload.overwrite"] == false)) { @unlink($_FILES['file' . $i]['tmp_name']); $result->add("OVERWRITE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.file_exists}"); continue; } if ($file->exists() && $config["upload.overwrite"] == true) $file->delete(); if (getClassName($file) == 'moxiecode_localfileimpl') { if (!move_uploaded_file($_FILES['file' . $i]['tmp_name'], $file->getAbsolutePath())) { $result->add("RW_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.upload_failed}"); continue; } // Dispatch add event $file->importFile(); } else $file->importFile($_FILES['file' . $i]['tmp_name']); if ($file->getLength() > $maxSizeBytes) { $file->delete(); $result->add("SIZE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.error_to_large}"); continue; } // Verify uploaded file, if it fails delete it $status = $man->verifyFile($file, "upload"); if ($status < 0) { $file->delete(); $result->add("FILTER_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.upload_ok}"); } else $result->add("GENERAL_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.upload_failed}"); } } } else $result->add("PATH_ERROR", $man->encryptPath($path), "{#error.upload_failed}"); return $result; } } // * * * * * * * * Private methods function _deleteFile(&$man, &$input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input["path" . $i]); $i++) { $file =& $man->getFile($input["path" . $i]); $config = $file->getConfig(); if (checkBool($config['general.demo'])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.demo}"); continue; } if (!$man->isToolEnabled("delete", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); continue; } if ($man->verifyFile($file, "delete") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$file->canWrite()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!checkBool($config["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } if ($file->delete($config['filesystem.delete_recursive'])) $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.delete_success}"); else $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.delete_failed}"); } return $result->toArray(); } function _insertFiles(&$man, $input) { $result = new Moxiecode_ResultSet("name,path,url,size,type,created,modified,attribs,custom"); $indata = array(); for ($i=0; isset($input['path' . $i]); $i++) { $custom = array(); $file = $man->getFile($input["path". $i]); if (!$file->exists()) { trigger_error("{#error.file_not_exists}", FATAL); die; } $ar = explode('.', $file->getName()); $ext = array_pop($ar); $man->dispatchEvent("onCustomInfo", array(&$file, "insert", &$custom)); $status = $man->dispatchEvent("onInsertFile", array(&$file)); $config = $file->getConfig(); $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $url = $man->removeTrailingSlash($config['preview.urlprefix']) . $man->convertPathToURI($file->getAbsolutePath(), $config["preview.wwwroot"]); $result->add($file->getName(), $man->encryptPath($file->getAbsolutePath()), utf8_encode($url), $file->getLength(), $ext, $file->getCreationDate(), $file->getLastModified(), $attribs, $custom); } return $result->toArray(); } function _listDefault(&$man, $file, $input, &$result, $filter_root_path) { $config = $man->getConfig(); // Setup input file filter $inputFileFilter = new Moxiecode_BasicFileFilter(); if (isset($input['include_directory_pattern']) && $input['include_directory_pattern']) $inputFileFilter->setIncludeDirectoryPattern($input['include_directory_pattern']); if (isset($input['exclude_directory_pattern']) && $input['exclude_directory_pattern']) $inputFileFilter->setExcludeDirectoryPattern($input['exclude_directory_pattern']); if (isset($input['include_file_pattern']) && $input['include_file_pattern']) $inputFileFilter->setIncludeFilePattern($input['include_file_pattern']); if (isset($input['exclude_file_pattern']) && $input['exclude_file_pattern']) $inputFileFilter->setExcludeFilePattern($input['exclude_file_pattern']); if (isset($input['extensions']) && $input['extensions']) $inputFileFilter->setIncludeExtensions($input['extensions']); // If file doesn't exists use default path if (!$file->exists()) { $file = $man->getFile($config['filesystem.path']); $result->setHeader("path", $man->encryptPath($file->getAbsolutePath())); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($file->getAbsolutePath()) : $man->encryptPath($file->getAbsolutePath())); } // List files $config = $file->getConfig(); if ($file->isDirectory()) { // Setup file filter $fileFilter = new Moxiecode_BasicFileFilter(); //$fileFilter->setDebugMode(true); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); // If file is hidden then try the parent if ($fileFilter->accept($file) <= 0) { $file = $file->getParentFile(); $result->setHeader("path", $man->encryptPath($file->getAbsolutePath())); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($file->getAbsolutePath()) : $man->encryptPath($file->getAbsolutePath())); } if (isset($input["filter"]) && $input["filter"] != null) $fileFilter->setIncludeWildcardPattern($input["filter"]); if (isset($input["only_dirs"]) && checkBool($input["only_dirs"])) $fileFilter->setOnlyDirs(true); else if (!checkBool($config["filesystem.list_directories"], true) || (isset($input["only_files"]) && checkBool($input["only_files"]))) $fileFilter->setOnlyFiles(true); // List files $combinedFilter = new Moxiecode_CombinedFileFilter(); $combinedFilter->addFilter($fileFilter); $combinedFilter->addFilter($inputFileFilter); $files =& $file->listFilesFiltered($combinedFilter); $showparent = isset($input["no_parent"]) ? checkBool($input["no_parent"]) : true; $showparent = $showparent && $man->verifyPath($file->getParent()); if (!isset($input["only_dirs"])) $showparent = $showparent && checkBool($config["filesystem.list_directories"], true); // Add parent if ($showparent && !isset($input["only_files"])) { // Remove files below root if ($filter_root_path && getClassName($file) == 'moxiecode_localfileimpl') { if (!$man->isChildPath($filter_root_path, $file->getParent())) return $files; } if ($file->getAbsolutePath() != $filter_root_path) $result->add("..", $man->encryptPath($file->getParent()), -1, "parent", "", "", "", array()); } } else trigger_error("The specified path is not a directory. Probably an incorrect setting for the filesystem.rootpath option.", FATAL); return $files; } /** * Lists files. */ function _listFiles(&$man, $input) { $result = new Moxiecode_ResultSet("name,path,size,type,created,modified,attribs,custom"); $config = $man->getConfig(); $files = array(); $rootNames = $man->_getRootNames(); $filterRootPath = isset($input["root_path"]) && $input["root_path"] != null ? $man->toAbsPath($man->decryptPath($input["root_path"])) : null; if (isset($input["path"]) && $input["path"]) { // URL specified if (isset($input["url"]) && $input["path"] == '{default}') $input["path"] = $man->convertURIToPath($input["url"]); if (isset($input['remember_last_path'])) { if ($input['remember_last_path'] !== 'auto') $remember = checkBool($input['remember_last_path']); else $remember = checkBool($config['general.remember_last_path']); if ($remember) { if (isset($_COOKIE["MCManager_". $man->getType() . "_lastPath"]) && $input["path"] == '{default}') { $tmpPath = $_COOKIE["MCManager_". $man->getType() . "_lastPath"]; if ($man->getFSFromPath($tmpPath) == "file" && $tmpPath) $input["path"] = $tmpPath; } else { if ($man->getFSFromPath($input["path"]) == "file") setcookie("MCManager_". $man->getType() . "_lastPath", $input["path"], time() + (3600*24*30)); // 30 days } } } $input["path"] = $man->toAbsPath($man->decryptPath($input["path"])); $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"]) : $man->encryptPath($input["path"])); // Move path inside rootpath if it's localfs if ($filterRootPath && $man->getFSFromPath($input["path"]) == 'file') { if (!$man->isChildPath($filterRootPath, $input["path"])) $input["path"] = $filterRootPath; $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"], $filterRootPath) : $man->encryptPath($input["path"])); } // Not valid path use default path if ($man->getFSFromPath($input["path"]) == 'file' && !$man->verifyPath($input["path"])) { $input["path"] = $config['filesystem.path']; $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"]) : $man->encryptPath($input["path"])); } $file =& $man->getFile($input["path"]); $config = $file->getConfig(); $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $result->setHeader("attribs", $attribs); $files = $this->_listDefault($man, $file, $input, $result, $filterRootPath); } else { trigger_error("ListFiles input not valid.", FATAL); die(); } if (isset($input["page_size"])) { if ($file->getAbsolutePath() != $filterRootPath && $man->verifyPath($file->getParent())) $pageSize = $input["page_size"] - 1; else $pageSize = $input["page_size"]; $pages = ceil(count($files) / $pageSize); // Setup response $result->setHeader("pages", $pages > 1 ? $pages : 1); $result->setHeader("count", count($files)); if (!isset($input["page"])) $input["page"] = 0; // Remove non visible files $files = array_slice($files, ($input["page"] * $pageSize), $pageSize); } // Add directories $listFS = $man->getFSFromPath($input["path"]); foreach ($files as $file) { // Remove files below root if ($filterRootPath && $listFS == 'file') { if (!$man->isChildPath($filterRootPath, $file->getAbsolutePath())) continue; } // Setup fields $custom = array(); // Attribs: R = Read, W = Write (cut/delete/rename), D = Download, S = Stream/Preview, I = Insert $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $cdate = date($config['filesystem.datefmt'], $file->getCreationDate()); $mdate = date($config['filesystem.datefmt'], $file->getLastModified()); $filePath = $man->encryptPath($file->getAbsolutePath()); if ($file->isFile()) $type = getFileExt($file->getName()); else $type = "folder"; $man->dispatchEvent("onCustomInfo", array(&$file, "list", &$custom)); // Special treatment of roots $name = $file->getName(); if ($input["path"] == "root:///") { foreach ($rootNames as $rootPath => $rootName) { if ($file->getAbsolutePath() == $rootPath) { $name = $rootName; break; } } } $result->add(utf8_encode($name), $filePath, $file->isFile() ? $file->getLength() : -1, $type, $cdate, $mdate, $attribs, $custom); } if (isset($input["config"])) $result->setConfig($man->getJSConfig($config, $input["config"])); return $result->toArray(); } function _filterFile(&$file, $input) { $config = $file->getConfig(); // Setup file filter $fileFilter = new Moxiecode_BasicFileFilter(); //$fileFilter->setDebugMode(true); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); if (isset($input["only_dirs"]) && checkBool($input["only_dirs"])) $fileFilter->setOnlyDirs(true); return ($fileFilter->accept($file) > 0); } function _createDirs(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); // Get input data $path = $man->decryptPath($input['path']); $dir =& $man->getFile($path); $config = $dir->getConfig(); if (checkBool($config["general.demo"])) { $result->add("DEMO_ERROR", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if (!$man->isToolEnabled("createdir", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } for ($i=0; isset($input['name' . $i]); $i++) { // Get dir info $name = $input['name' . $i]; $template = false; if (isset($input['template' . $i])) $template = $man->decryptPath($input['template' . $i]); // Setup target file $file =& $man->getFile($path, $name, MC_IS_DIRECTORY); if ($man->verifyFile($file, "createdir") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } // Check write access if (!checkBool($config["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } // Setup template dir if ($template) { $templateFile =& $man->getFile($template, "", MC_IS_DIRECTORY); if (!$templateFile->exists()) { $result->add("TEMPLATE_ERROR", $man->encryptPath($templateFile->getAbsolutePath()), "{#error.template_missing}"); continue; } if ($man->verifyFile($templateFile, "createdir") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } else $templateFile = null; // Check if target exists if ($file->exists()) { $result->add("EXISTS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.folder_exists}"); continue; } // Create directory if ($templateFile) $status = $templateFile->copyTo($file); else $status = $file->mkdir(); if ($status) $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.directory_ok}"); else $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); } return $result->toArray(); } function _getConfig(&$man, $input) { $globalConfig = $man->getConfig(); if (!isset($input['prefixes'])) $input["prefixes"] = "*"; // If debug mode return all if (!isset($input['path']) && isset($input['debug']) && checkBool($globalConfig['general.debug'])) return $man->getConfig(); if (!isset($input['path'])) { trigger_error("{#error.file_not_exists}", FATAL); die; } $file =& $man->getFile($input['path']); if (!$file->exists()) { trigger_error("{#error.file_not_exists}", FATAL); die; } $config = $file->getConfig(); // If debug mode return all if (isset($input['debug']) && checkBool($globalConfig['general.debug'])) return $config; return $man->getJSConfig($config, $input["prefixes"]); } /** * Simple keepalive function. */ function _keepAlive(&$man, $input) { $result = new Moxiecode_ResultSet("status,time,message"); $man->dispatchEvent("onKeepAlive"); // Return status KEEPALIVE, current time on server and message. $result->add("KEEPALIVE", time(), "{#message.keepalive}"); return $result->toArray(); } /** * Simple loopback function. Used for debugging purposes of the RPC functionality. */ function _loopBack($input) { return $input; } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("core", new Moxiecode_CorePlugin()); ?>imagemanager/classes/Utils/LanguagePack.php000066600000021437150472616010014766 0ustar00_header = array(); $this->_items = array(); $this->_cdataArr = array(); $this->_currentTarget = ""; $this->_currentLanguage = "en"; $this->_currentDir = "ltr"; $this->_header["major"] = 0; $this->_header["minor"] = 1; $this->_header["releasedate"] = date("Y-m-d"); } function setLanguage($language) { $this->_currentLanguage = $language; } function getLanguage() { return $this->_currentLanguage; } /* Loads XML string */ function loadXML($data) { // Check encoding on data preg_match('//m', $data, $matches); $encoding = "UTF-8"; // Found XML encoding if (count($matches) > 1) $encoding = strtoupper($matches[1]); $this->_encoding = $encoding; // OMG! PHP Xpath is crappy, cant detect CDATA, haxx! $data = preg_replace("/<\!\[CDATA\[/", "_parser = xml_parser_create($encoding); // Auto detect for PHP4/PHP5 xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_set_character_data_handler($this->_parser, "_saxCharacterData"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if (!xml_parse($this->_parser, $data, true)) trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), E_USER_ERROR); xml_parser_free($this->_parser); } /* Loads XML file */ function load($file) { if (($fp = @fopen($file, "r"))) { $data = ''; while (!feof($fp)) $data .= fread($fp, 8192); fclose($fp); if (ini_get("magic_quotes_gpc")) $data = stripslashes($data); $this->loadXML($data); } else trigger_error("Could not open XML: ". $file, E_USER_ERROR); } function save($file, $enc="UTF-8") { if (($fp = @fopen($file, "w"))) { fwrite($fp, $this->toString($enc)); fclose($fp); } else trigger_error("Could not open XML for writing: ". $file, E_USER_ERROR); } function getGroups() { return $this->_items[$this->_currentLanguage]["data"]; } function setGroups($groups) { $this->_items[$this->_currentLanguage]["data"] = $groups; } function getGroup($name) { return $this->_items[$this->_currentLanguage]["data"][$name]; } function get($target, $name) { return isset($this->_items[$this->_currentLanguage]["data"][$target][$name]) ? $this->_items[$this->_currentLanguage]["data"][$target][$name] : ("$" . $name . "$"); } function set($target, $name, $value, $cdata = 3) { if ($cdata != 3) { if (!isset($this->_cdataArr[$this->_currentLanguage])) $this->_cdataArr[$this->_currentLanguage] = array(); if (!isset($this->_cdataArr[$this->_currentLanguage][$target])) $this->_cdataArr[$this->_currentLanguage][$target] = array(); $this->_cdataArr[$this->_currentLanguage][$target][$name] = $cdata; } if (!isset($this->_items[$this->_currentLanguage]["data"][$target])) $this->_items[$this->_currentLanguage]["data"][$target] = array(); $this->_items[$this->_currentLanguage]["data"][$target][$name] = $value; } function getLanguageTitle() { return $this->_items[$this->_currentLanguage]["title"]; } function setAuthor($author) { $this->_header["author"] = $author; } function getAuthor() { return $this->_header["author"]; } function setVersion($major, $minor, $releasedate) { $this->_header["major"] = $major; $this->_header["minor"] = $minor; $this->_header["releasedate"] = $releasedate; } function getMinor() { return $this->_header["minor"]; } function getMajor() { return $this->_header["major"]; } function getReleaseDate() { return $this->_header["releasedate"]; } function getDescription() { return $this->_header["description"]; } function setDescription($description) { $this->_header["description"] = $description; } function createLanguage($lang, $dir, $title) { $this->_currentLanguage = $lang; $this->_items[$lang] = array("dir" => $dir, "title" => $title, "data" => array()); } function updateLanguage($target, $lang, $dir, $title) { $this->_currentLanguage = $lang; $this->_items[$lang] = $this->_items[$target]; unset($this->_items[$target]); $this->_items[$lang]["dir"] = $dir; $this->_items[$lang]["title"] = $title; $this->_cdataArr[$lang] = $this->_cdataArr[$target]; unset($this->_cdataArr[$target]); } // * * Private methods function _saxStartElement($parser, $name, $attrs) { $this->_tag = $name; $this->_tagAttrs = $attrs; $this->_tagContent = ""; switch($name) { case "LANGUAGE": $this->_currentLanguage = $this->_tagAttrs["CODE"]; $this->_currentDir = $this->_tagAttrs["DIR"]; $this->_items[$this->_currentLanguage] = array("dir" => $this->_currentDir, "title" => $this->_tagAttrs["TITLE"], "data" => array()); break; case "GROUP": $this->_currentTarget = $this->_tagAttrs["TARGET"]; $this->_items[$this->_currentLanguage]["data"][$this->_tagAttrs["TARGET"]] = array(); break; } } function _saxEndElement($parser, $name) { preg_match('/^#CDATA#/', $this->_tagContent, $matches); $this->_tagContent = preg_replace("/^#CDATA#/", "", $this->_tagContent); if (count($matches) == 0) $this->_tagContent = trim($this->_tagContent); switch($name) { case "ITEM": if (count($matches) != 0) { if (!isset($this->_cdataArr[$this->_currentLanguage])) $this->_cdataArr[$this->_currentLanguage] = array(); if (!isset($this->_cdataArr[$this->_currentLanguage][$this->_currentTarget])) $this->_cdataArr[$this->_currentLanguage][$this->_currentTarget] = array(); $this->_cdataArr[$this->_currentLanguage][$this->_currentTarget][$this->_tagAttrs["NAME"]] = true; } $this->_items[$this->_currentLanguage]["data"][$this->_currentTarget][$this->_tagAttrs["NAME"]] = $this->_tagContent; break; case "AUTHOR": $this->_header["author"] = $this->_tagContent; break; case "VERSION": $this->_header["minor"] = trim($this->_tagAttrs["MINOR"]); $this->_header["major"] = trim($this->_tagAttrs["MAJOR"]); $this->_header["releasedate"] = trim($this->_tagAttrs["RELEASEDATE"]); break; case "DESCRIPTION": $this->_header["description"] = $this->_tagContent; break; } // Clear memory! $this->_tagContent = ""; $this->_tag = ""; $this->_tagAttrs = ""; } function _saxCharacterData($parser, $data) { $this->_tagContent .= $data; } function xmlEncode($str) { if (strtolower($this->_encoding) == "utf-8") return utf8_encode(htmlspecialchars($str, ENT_QUOTES, $this->_encoding)); return htmlspecialchars($str, ENT_QUOTES, $this->_encoding); } function toString($enc = "") { $oldenc = ""; if ($enc == "") $enc = $this->_encoding; else { $oldenc = $this->_encoding; $this->_encoding = $enc; } $doc = ""; $doc .= ''. "\n"; $doc .= ''. "\n"; $doc .= '
        '. "\n"; $doc .= ' '. $this->xmlEncode($this->_header["author"]) .''. "\n"; $doc .= ' '. "\n"; $doc .= ' '. $this->xmlEncode($this->_header["description"]) .''. "\n"; $doc .= '
        '. "\n"; foreach($this->_items as $code => $language) { $doc .= ' '. "\n"; foreach($language["data"] as $target => $group) { $doc .= ' '. "\n"; foreach($group as $name => $item) { if (isset($this->_cdataArr[$code]) && isset($this->_cdataArr[$code][$target]) && isset($this->_cdataArr[$code][$target][$name]) && $this->_cdataArr[$code][$target][$name]) { $doc .= ' '. "\n"; } else $doc .= ' '. $this->xmlEncode($item) .''. "\n"; } $doc .= ' '. "\n"; } $doc .= ' '. "\n"; } $doc .= '
        '. "\n"; if ($oldenc != "") $this->_encoding = $oldenc; return $doc; } } ?>imagemanager/classes/Utils/Error.php000066600000016374150472616010013541 0ustar00id = $id; } function handleError($errno, $errstr, $errfile, $errline, $errcontext) { global $man, $config; $error = array(); $log = false; $error['title'] = ""; $error['break'] = false; $error['errstr'] = $errstr; //$error['errcontext'] = $errcontext; $error['errcontext'] = ""; $error['errfile'] = ""; $error['errline'] = ""; // Add file and line only in debug mode if (isset($man)) { $config = $man->getConfig(); $log = $man->getLogger(); if (checkBool($config['general.debug'])) { $error['errfile'] = $errfile; $error['errline'] = $errline; } } switch ($errno) { case E_USER_ERROR: $error['title'] = "Fatal Error"; $error['break'] = true; break; case E_USER_NOTICE: $error['title'] = "Notice"; $error['break'] = false; break; case E_USER_WARNING: $error['title'] = "Warning"; $error['break'] = true; break; case E_PARSE: $error['title'] = "PHP Parse Error"; $error['break'] = true; if ($log) $log->fatal($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_ERROR: $error['title'] = "PHP Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_WARNING: $error['title'] = "PHP Warning"; $error['break'] = false; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_CORE_ERROR: $error['title'] = "PHP Error : Core Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_CORE_WARNING: $error['title'] = "PHP Error : Core Warning"; $error['break'] = true; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_COMPILE_ERROR: $error['title'] = "PHP Error : Compile Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_COMPILE_WARNING: $error['title'] = "PHP Error : Compile Warning"; $error['break'] = true; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_NOTICE: $error['title'] = "PHP Notice"; $error['break'] = false; if ($log) $log->info($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_STRICT: $error['title'] = "PHP Strict"; $error['break'] = false; if ($log) $log->info($error['title'] . " (" . $errno . ")" . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; } // Add error number $error['title'] = $error['title'] . " (". $errno .")"; return $error; } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function JSONErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { unset($data['break']); unset($data['title']); $data['level'] = "FATAL"; $json = new Moxiecode_JSON(); $result = new stdClass(); $result->result = null; $result->id = 'err'; $result->error = $data; echo $json->encode($result); die(); } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function JSErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { echo 'alert(\'' . addslashes($data['errstr']) . '\');'; die(); } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function StreamErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { if ($_SERVER["REQUEST_METHOD"] == "GET") { header("HTTP/1.1 500 Internal server error"); die($errstr); } else { unset($data['break']); unset($data['title']); $data['level'] = "FATAL"; $json = new Moxiecode_JSON(); $result = new stdClass(); $result->result = null; $result->id = 'err'; $result->error = $data; echo ''; die(); } } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function HTMLErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { die($errstr); } } ?>imagemanager/classes/Utils/ClientResources.php000066600000006443150472616010015555 0ustar00_settings = array_merge($default, $settings); $this->_files = array(); } function isDebugEnabled() { return $this->_debug; } function getSetting($name, $default = false) { return isset($this->_settings["name"]) ? $this->_settings["name"] : $default; } function getPackageIDs() { return array_keys($this->_files); } function &getFile($package, $file_id) { $files = $this->getFiles($package); foreach ($files as $file) { if ($file->getId() == $file_id) return $file; } return null; } function getFiles($package) { return isset($this->_files[$package]) ? $this->_files[$package] : array(); } function load($xml_file) { $this->_path = dirname($xml_file); if (!file_exists($xml_file)) return; $fp = @fopen($xml_file, "r"); if ($fp) { $data = ''; while (!feof($fp)) $data .= fread($fp, 8192); fclose($fp); if (ini_get("magic_quotes_gpc")) $data = stripslashes($data); } $this->_parser = xml_parser_create('UTF-8'); xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if (!xml_parse($this->_parser, $data, true)) trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), E_USER_ERROR); xml_parser_free($this->_parser); } // * * Private methods function _saxStartElement($parser, $name, $attrs) { switch ($name) { case "RESOURCES": if (!$this->_debug) $this->_debug = isset($attrs["DEBUG"]) && $attrs["DEBUG"] == 'yes'; break; case "PACKAGE": $this->_packageID = isset($attrs["ID"]) ? $attrs["ID"] : 'noid'; if (!isset($this->_files[$this->_packageID])) $this->_files[$this->_packageID] = array(); break; case "FILE": $this->_files[$this->_packageID][] = new Moxiecode_ClientResourceFile( isset($attrs["ID"]) ? $attrs["ID"] : "", str_replace("\\", DIRECTORY_SEPARATOR, $this->_path . '/' . $attrs["PATH"]), !isset($attrs["KEEPWHITESPACE"]) || $attrs["KEEPWHITESPACE"] != "yes", isset($attrs["TYPE"]) ? $attrs["TYPE"] : '' ); break; } } function _saxEndElement($parser, $name) { } } class Moxiecode_ClientResourceFile { /**#@+ @access private */ var $_id, $_contentType, $_path, $_remove_whitespace; /**#@-*/ function Moxiecode_ClientResourceFile($id, $path, $remove_whitespace, $content_type) { $this->_id = $id; $this->_path = $path; $this->_remove_whitespace = $remove_whitespace; $this->_contentType = $content_type; } function isRemoveWhitespaceEnabled() { return $this->_remove_whitespace; } function getId() { return $this->_id; } function getContentType() { return $this->_contentType; } function getPath() { return $this->_path; } } ?>imagemanager/classes/Utils/JSCompressor.php000066600000017337150472616010015041 0ustar00_items = array(); $default = array( 'expires_offset' => '10d', 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'patch_ie' => true, 'remove_firebug' => false, 'name' => '' ); $this->_settings = array_merge($default, $settings); $this->_lastUpdate = 0; } /** * Add raw contents as part of the concatenation/compression. This method should only be used if * you really need to. * * @param String $content Content to add as part of the concatenation process. */ function addContent($content) { $this->_items[] = array('content', $content); } /** * Adds a file to the concatenation/compression process. * * @param String $path Path to the file to include in the compressed package/output. * @param bool $whitespace Set this state to false to skip whitespace removal for the specified file. */ function addFile($path, $whitespace = true) { $this->_items[] = array('file', $path, $whitespace); $mtime = @filemtime($path); if ($mtime > $this->_lastUpdate) $this->_lastUpdate = $mtime; } /** * Compress and output all files that got added to the process by addFile. */ function compress() { $key = ""; foreach ($this->_items as $item) $key .= $item[1]; // Setup some variables $cacheFile = $this->_settings['cache_dir'] . "/"; if ($this->_settings['name']) $cacheFile .= preg_replace('/[^a-z0-9_]/i', '', $this->_settings['name']); else $cacheFile .= md5($key); $supportsGzip = false; $content = ""; $encodings = array(); // Check if it supports gzip if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING']))); if ($this->_settings['gzip_compress'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('gzencode') && !ini_get('zlib.output_compression')) { $enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip"; $supportsGzip = true; $cacheFile .= ".gz"; } else $cacheFile .= ".js"; // Set headers header("Content-type: text/javascript;charset=" . $this->_settings['charset']); header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $this->_parseTime($this->_settings['expires_offset'])) . " GMT"); header("Cache-Control: public, max-age=" . $this->_parseTime($this->_settings['expires_offset'])); // Output explorer workaround or compressed file if (!isset($_GET["gz"]) && $supportsGzip && $this->_settings['patch_ie'] && strpos($_SERVER["HTTP_USER_AGENT"], "MSIE") !== false) { // Build request URL $url = $_SERVER["PHP_SELF"]; if (isset($_SERVER["QUERY_STRING"]) && $_SERVER["QUERY_STRING"]) $url .= "?" . $_SERVER["QUERY_STRING"] . "&gz=1"; else $url .= "?gz=1"; // This script will ensure that the gzipped script gets loaded on IE versions with the Gzip request chunk bug echo 'var gz;try {gz = new XMLHttpRequest();} catch(gz) { try {gz = new ActiveXObject("Microsoft.XMLHTTP");}'; echo 'catch (gz) {gz = new ActiveXObject("Msxml2.XMLHTTP");}}'; echo 'gz.open("GET", "' . $url . '", false);gz.send(null);eval(gz.responseText);'; die(); } // Use cached file if ($this->_settings['disk_cache'] && file_exists($cacheFile) && @filemtime($cacheFile) == $this->_lastUpdate) { if ($supportsGzip) header("Content-Encoding: " . $enc); echo $this->_getFileContents($cacheFile); return; } // Load content foreach ($this->_items as $item) { if ($item[0] == 'file') $chunk = $this->_getFileContents($item[1]); else $chunk = $item[1]; // Remove UTF-8 BOM if (substr($chunk, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) $chunk = substr($chunk, 3); if ($this->_settings['remove_whitespace'] && $item[2]) $chunk = $this->_removeWhiteSpace($chunk); if (!$item[2]) $chunk = "\n" . $chunk . ";\n"; $content .= $chunk; } // Remove firebug calls if ($this->_settings['remove_firebug']) $content = preg_replace('/console\\.[^;]+;/', '', $content); // GZip content if ($supportsGzip) { header("Content-Encoding: " . $enc); $content = gzencode($content, 9, FORCE_GZIP); } // Write cache file if ($this->_settings['disk_cache']) { if (!is_dir($this->_settings['cache_dir'])) @mkdir($this->_settings['cache_dir']); $this->_putFileContents($cacheFile, $content); if (@file_exists($cacheFile)) @touch($cacheFile, $this->_lastUpdate); } // Output content to client echo $content; } /**#@+ @access private */ function _removeWhiteSpace($content) { $this->_strings = array(); $this->_count = 0; // Replace strings and regexps $content = preg_replace_callback('/\\\\(\"|\'|\\/)/', array(&$this, '_encode'), $content); // Replace all \/, \", \' with tokens $content = preg_replace_callback('/(\'[^\'\\n\\r]*\')|("[^"\\n\\r]*")|(\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?))|([^\\w\\x24\\/\'"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', array(&$this, '_strToItems'), $content); // Remove comments $content = preg_replace('/(\\/\\/[^\\n\\r]*[\\n\\r])|(\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/)/', '', $content); // Remove whitespace $content = preg_replace('/[\r\n]+/', ' ', $content); $content = preg_replace('/\s*([=&|!+\\-\\/?:;,\\^\\(\\)\\{\\}<>%]+)\s*/', '$1', $content); $content = preg_replace('/(;)\s+/', '$1', $content); $content = preg_replace('/\s+/', ' ', $content); // Restore strings and regexps $content = preg_replace_callback('/@([^]+)/', array(&$this, '_itemsToStr'), $content); $content = preg_replace_callback('/#([^]+)/', array(&$this, '_decode'), $content); // Restore all \/, \", \' return $content; } function _putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } function _getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fread($fp, 1024); fclose($fp); return $content; } function _strToItems($matches) { $this->_strings[] = $matches[0]; return '@' . ($this->_count++) . ''; } function _itemsToStr($matches) { return $this->_strings[intval($matches[1])]; } function _encode($matches) { $this->_strings[] = $matches[0]; return '#' . ($this->_count++) . ''; } function _decode($matches) { return $this->_strings[intval($matches[1])]; } function _parseTime($time) { $multipel = 1; // Hours if (strpos($time, "h") != false) $multipel = 60 * 60; // Days if (strpos($time, "d") != false) $multipel = 24 * 60 * 60; // Months if (strpos($time, "m") != false) $multipel = 24 * 60 * 60 * 30; // Trim string return intval($time) * $multipel; } /**#@-*/ } ?>imagemanager/classes/Utils/Logger.class.php000066600000012531150472616010014762 0ustar00_path = ""; $this->_filename = "{level}.log"; $this->setMaxSize("100k"); $this->_maxFiles = 10; $this->_level = MC_LOGGER_DEBUG; $this->_format = "[{time}] [{level}] {message}"; } /** * Sets the current log level, use the MC_LOGGER constants. * * @param int $level Log level instance for example MC_LOGGER_DEBUG. */ function setLevel($level) { if (is_string($level)) { switch (strtolower($level)) { case "debug": $level = MC_LOGGER_DEBUG; break; case "info": $level = MC_LOGGER_INFO; break; case "warn": case "warning": $level = MC_LOGGER_WARN; break; case "error": $level = MC_LOGGER_ERROR; break; case "fatal": $level = MC_LOGGER_FATAL; break; default: $level = MC_LOGGER_FATAL; } } $this->_level = $level; } /** * Returns the current log level for example MC_LOGGER_DEBUG. * * @return int Current log level for example MC_LOGGER_DEBUG. */ function getLevel() { return $this->_level; } function setPath($path) { $this->_path = $path; } function getPath() { return $this->_path; } function setFileName($file_name) { $this->_filename = $file_name; } function getFileName() { return $this->_filename; } function setFormat($format) { $this->_format = $format; } function getFormat() { return $this->_format; } function setMaxSize($size) { // Fix log max size $logMaxSizeBytes = intval(preg_replace("/[^0-9]/", "", $size)); // Is KB if (strpos((strtolower($size)), "k") > 0) $logMaxSizeBytes *= 1024; // Is MB if (strpos((strtolower($size)), "m") > 0) $logMaxSizeBytes *= (1024 * 1024); $this->_maxSizeBytes = $logMaxSizeBytes; $this->_maxSize = $size; } function getMaxSize() { return $this->_maxSize; } function setMaxFiles($max_files) { $this->_maxFiles = $max_files; } function getMaxFiles() { return $this->_maxFiles; } function debug($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_DEBUG, implode(', ', $args)); } function info($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_INFO, implode(', ', $args)); } function warn($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_WARN, implode(', ', $args)); } function error($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_ERROR, implode(', ', $args)); } function fatal($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_FATAL, implode(', ', $args)); } function isDebugEnabled() { return $this->_level >= MC_LOGGER_DEBUG; } function isInfoEnabled() { return $this->_level >= MC_LOGGER_INFO; } function isWarnEnabled() { return $this->_level >= MC_LOGGER_WARN; } function isErrorEnabled() { return $this->_level >= MC_LOGGER_ERROR; } function isFatalEnabled() { return $this->_level >= MC_LOGGER_FATAL; } function _logMsg($level, $message) { $roll = false; if ($level < $this->_level) return; $logFile = $this->toOSPath($this->_path . "/" . $this->_filename); switch ($level) { case MC_LOGGER_DEBUG: $levelName = "DEBUG"; break; case MC_LOGGER_INFO: $levelName = "INFO"; break; case MC_LOGGER_WARN: $levelName = "WARN"; break; case MC_LOGGER_ERROR: $levelName = "ERROR"; break; case MC_LOGGER_FATAL: $levelName = "FATAL"; break; } $logFile = str_replace('{level}', strtolower($levelName), $logFile); $text = $this->_format; $text = str_replace('{time}', date("Y-m-d H:i:s"), $text); $text = str_replace('{level}', strtolower($levelName), $text); $text = str_replace('{message}', $message, $text); $message = $text . "\r\n"; // Check filesize if (file_exists($logFile)) { $size = @filesize($logFile); if ($size + strlen($message) > $this->_maxSizeBytes) $roll = true; } // Roll if the size is right if ($roll) { for ($i=$this->_maxFiles-1; $i>=1; $i--) { $rfile = $this->toOSPath($logFile . "." . $i); $nfile = $this->toOSPath($logFile . "." . ($i+1)); if (@file_exists($rfile)) @rename($rfile, $nfile); } @rename($logFile, $this->toOSPath($logFile . ".1")); // Delete last logfile $delfile = $this->toOSPath($logFile . "." . ($this->_maxFiles + 1)); if (@file_exists($delfile)) @unlink($delfile); } // Append log line if (($fp = @fopen($logFile, "a")) != null) { @fputs($fp, $message); @fflush($fp); @fclose($fp); } } /** * Converts a Unix path to OS specific path. * * @param String $path Unix path to convert. */ function toOSPath($path) { return str_replace("/", DIRECTORY_SEPARATOR, $path); } } ?>imagemanager/classes/Utils/JSON.php000066600000027146150472616010013220 0ustar00_data = $data; $this->_len = strlen($data); $this->_pos = -1; $this->_location = JSON_IN_BETWEEN; $this->_lastLocations = array(); $this->_needProp = false; } function getToken() { return $this->_token; } function getLocation() { return $this->_location; } function getTokenName() { switch ($this->_token) { case JSON_BOOL: return 'JSON_BOOL'; case JSON_INT: return 'JSON_INT'; case JSON_STR: return 'JSON_STR'; case JSON_FLOAT: return 'JSON_FLOAT'; case JSON_NULL: return 'JSON_NULL'; case JSON_START_OBJ: return 'JSON_START_OBJ'; case JSON_END_OBJ: return 'JSON_END_OBJ'; case JSON_START_ARRAY: return 'JSON_START_ARRAY'; case JSON_END_ARRAY: return 'JSON_END_ARRAY'; case JSON_KEY: return 'JSON_KEY'; } return 'UNKNOWN'; } function getValue() { return $this->_value; } function readToken() { $chr = $this->read(); if ($chr != null) { switch ($chr) { case '[': $this->_lastLocation[] = $this->_location; $this->_location = JSON_IN_ARRAY; $this->_token = JSON_START_ARRAY; $this->_value = null; $this->readAway(); return true; case ']': $this->_location = array_pop($this->_lastLocation); $this->_token = JSON_END_ARRAY; $this->_value = null; $this->readAway(); if ($this->_location == JSON_IN_OBJECT) $this->_needProp = true; return true; case '{': $this->_lastLocation[] = $this->_location; $this->_location = JSON_IN_OBJECT; $this->_needProp = true; $this->_token = JSON_START_OBJ; $this->_value = null; $this->readAway(); return true; case '}': $this->_location = array_pop($this->_lastLocation); $this->_token = JSON_END_OBJ; $this->_value = null; $this->readAway(); if ($this->_location == JSON_IN_OBJECT) $this->_needProp = true; return true; // String case '"': case '\'': return $this->_readString($chr); // Null case 'n': return $this->_readNull(); // Bool case 't': case 'f': return $this->_readBool($chr); default: // Is number if (is_numeric($chr) || $chr == '-' || $chr == '.') return $this->_readNumber($chr); return true; } } return false; } function _readBool($chr) { $this->_token = JSON_BOOL; $this->_value = $chr == 't'; if ($chr == 't') $this->skip(3); // rue else $this->skip(4); // alse $this->readAway(); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _readNull() { $this->_token = JSON_NULL; $this->_value = null; $this->skip(3); // ull $this->readAway(); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _readString($quote) { $output = ""; $this->_token = JSON_STR; $endString = false; while (($chr = $this->peek()) != -1) { switch ($chr) { case '\\': // Read away slash $this->read(); // Read escape code $chr = $this->read(); switch ($chr) { case 't': $output .= "\t"; break; case 'b': $output .= "\b"; break; case 'f': $output .= "\f"; break; case 'r': $output .= "\r"; break; case 'n': $output .= "\n"; break; case 'u': $output .= $this->_int2utf8(hexdec($this->read(4))); break; default: $output .= $chr; break; } break; case '\'': case '"': if ($chr == $quote) $endString = true; $chr = $this->read(); if ($chr != -1 && $chr != $quote) $output .= $chr; break; default: $output .= $this->read(); } // String terminated if ($endString) break; } $this->readAway(); $this->_value = $output; // Needed a property if ($this->_needProp) { $this->_token = JSON_KEY; $this->_needProp = false; return true; } if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _int2utf8($int) { $int = intval($int); switch ($int) { case 0: return chr(0); case ($int & 0x7F): return chr($int); case ($int & 0x7FF): return chr(0xC0 | (($int >> 6) & 0x1F)) . chr(0x80 | ($int & 0x3F)); case ($int & 0xFFFF): return chr(0xE0 | (($int >> 12) & 0x0F)) . chr(0x80 | (($int >> 6) & 0x3F)) . chr (0x80 | ($int & 0x3F)); case ($int & 0x1FFFFF): return chr(0xF0 | ($int >> 18)) . chr(0x80 | (($int >> 12) & 0x3F)) . chr(0x80 | (($int >> 6) & 0x3F)) . chr(0x80 | ($int & 0x3F)); } } function _readNumber($start) { $value = ""; $isFloat = false; $this->_token = JSON_INT; $value .= $start; while (($chr = $this->peek()) != -1) { if (is_numeric($chr) || $chr == '-' || $chr == '.') { if ($chr == '.') $isFloat = true; $value .= $this->read(); } else break; } $this->readAway(); if ($isFloat) { $this->_token = JSON_FLOAT; $this->_value = floatval($value); } else $this->_value = intval($value); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function readAway() { while (($chr = $this->peek()) != null) { if ($chr != ':' && $chr != ',' && $chr != ' ') return; $this->read(); } } function read($len = 1) { if ($this->_pos < $this->_len) { if ($len > 1) { $str = substr($this->_data, $this->_pos + 1, $len); $this->_pos += $len; return $str; } else return $this->_data[++$this->_pos]; } return null; } function skip($len) { $this->_pos += $len; } function peek() { if ($this->_pos < $this->_len) return $this->_data[$this->_pos + 1]; return null; } } /** * This class handles JSON stuff. * * @package MCManager.utils */ class Moxiecode_JSON { function Moxiecode_JSON() { } function decode($input) { $reader = new Moxiecode_JSONReader($input); return $this->readValue($reader); } function readValue(&$reader) { $this->data = array(); $this->parents = array(); $this->cur =& $this->data; $key = null; $loc = JSON_IN_ARRAY; while ($reader->readToken()) { switch ($reader->getToken()) { case JSON_STR: case JSON_INT: case JSON_BOOL: case JSON_FLOAT: case JSON_NULL: switch ($reader->getLocation()) { case JSON_IN_OBJECT: $this->cur[$key] = $reader->getValue(); break; case JSON_IN_ARRAY: $this->cur[] = $reader->getValue(); break; default: return $reader->getValue(); } break; case JSON_KEY: $key = $reader->getValue(); break; case JSON_START_OBJ: case JSON_START_ARRAY: if ($loc == JSON_IN_OBJECT) $this->addArray($key); else $this->addArray(null); $cur =& $obj; $loc = $reader->getLocation(); break; case JSON_END_OBJ: case JSON_END_ARRAY: $loc = $reader->getLocation(); if (count($this->parents) > 0) { $this->cur =& $this->parents[count($this->parents) - 1]; array_pop($this->parents); } break; } } return $this->data[0]; } // This method was needed since PHP is crapy and doesn't have pointers/references function addArray($key) { $this->parents[] =& $this->cur; $ar = array(); if ($key) $this->cur[$key] =& $ar; else $this->cur[] =& $ar; $this->cur =& $ar; } function getDelim($index, &$reader) { switch ($reader->getLocation()) { case JSON_IN_ARRAY: case JSON_IN_OBJECT: if ($index > 0) return ","; break; } return ""; } function encode($input) { switch (gettype($input)) { case 'boolean': return $input ? 'true' : 'false'; case 'integer': return (int) $input; case 'float': case 'double': return (float) $input; case 'NULL': return 'null'; case 'string': return $this->encodeString($input); case 'array': return $this->_encodeArray($input); case 'object': return $this->_encodeArray(get_object_vars($input)); } return ''; } function encodeString($input) { // Needs to be escaped if (preg_match('/[^a-zA-Z0-9]/', $input)) { $output = ''; for ($i=0; $i_utf82utf16($char))); } if (($byte & 0xF0) == 0xE0) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2])); $i += 2; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xF8) == 0xF0) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]))); $i += 3; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xFC) == 0xF8) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]), ord($input[$i + 4]))); $i += 4; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xFE) == 0xFC) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]), ord($input[$i + 4]), ord($input[$i + 5]))); $i += 5; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } else if ($byte < 128) $output .= $input[$i]; } } return '"' . $output . '"'; } return '"' . $input . '"'; } function _utf82utf16($utf8) { if (function_exists('mb_convert_encoding')) return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); switch (strlen($utf8)) { case 1: return $utf8; case 2: return chr(0x07 & (ord($utf8[0]) >> 2)) . chr((0xC0 & (ord($utf8[0]) << 6)) | (0x3F & ord($utf8[1]))); case 3: return chr((0xF0 & (ord($utf8[0]) << 4)) | (0x0F & (ord($utf8[1]) >> 2))) . chr((0xC0 & (ord($utf8[1]) << 6)) | (0x7F & ord($utf8[2]))); } return ''; } function _encodeArray($input) { $output = ''; $isIndexed = true; $keys = array_keys($input); for ($i=0; $iencodeString($keys[$i]) . ':' . $this->encode($input[$keys[$i]]); $isIndexed = false; } else $output .= $this->encode($input[$keys[$i]]); if ($i != count($keys) - 1) $output .= ','; } return $isIndexed ? '[' . $output . ']' : '{' . $output . '}'; } } ?> imagemanager/classes/Utils/CSSCompressor.php000066600000014545150472616010015153 0ustar00_items = array(); $default = array( 'expires_offset' => '10d', 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'convert_urls' => true, 'name' => '' ); $this->_settings = array_merge($default, $settings); $this->_lastUpdate = 0; } /** * Add raw contents as part of the concatenation/compression. This method should only be used if * you really need to. * * @param String $content Content to add as part of the concatenation process. */ function addContent($content) { $this->_items[] = array('content', $content); } /** * Adds a file to the concatenation/compression process. * * @param String $path Path to the file to include in the compressed package/output. * @param bool $whitespace Set this state to false to skip whitespace removal for the specified file. */ function addFile($path, $whitespace = true) { $this->_items[] = array('file', $path, $whitespace); $mtime = @filemtime($path); if ($mtime > $this->_lastUpdate) $this->_lastUpdate = $mtime; } /** * Compress and output all files that got added to the process by addFile. */ function compress() { $key = ""; foreach ($this->_items as $item) $key .= $item[1]; // Setup some variables $cacheFile = $this->_settings['cache_dir'] . "/"; if ($this->_settings['name']) $cacheFile .= preg_replace('/[^a-z0-9_]/i', '', $this->_settings['name']); else $cacheFile .= md5($key); $supportsGzip = false; $content = ""; $encodings = array(); // Check if it supports gzip if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING']))); if ($this->_settings['gzip_compress'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('gzencode') && !ini_get('zlib.output_compression')) { $enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip"; $supportsGzip = true; $cacheFile .= ".gz"; } else $cacheFile .= ".css"; // Set headers header("Content-type: text/css;charset=" . $this->_settings['charset']); header("Cache-Control: must-revalidate"); // Must be there for IE 6 header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $this->_parseTime($this->_settings['expires_offset'])) . " GMT"); // Use cached file if ($this->_settings['disk_cache'] && file_exists($cacheFile) && @filemtime($cacheFile) == $this->_lastUpdate) { if ($supportsGzip) header("Content-Encoding: " . $enc); echo $this->_getFileContents($cacheFile); return; } // Load content foreach ($this->_items as $item) { if ($item[0] == 'file') $chunk = $this->_getFileContents($item[1]); else $chunk = $item[1]; // Remove UTF-8 BOM if (substr($chunk, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) $chunk = substr($chunk, 3); if (!preg_match('/[\r\n]$/', $chunk)) $chunk .= "\n"; if ($this->_settings['remove_whitespace'] && $item[2]) $chunk = $this->_removeWhiteSpace($chunk); // Convert urls if ($this->_settings['convert_urls']) { $chunk = preg_replace('/\\$base/', dirname($_SERVER['SCRIPT_NAME']), $chunk); $chunk = preg_replace('/url\\([\'"]?(?!\\/|http)/', '$0' . dirname($item[1]) . '/', $chunk); } $content .= $chunk; } // GZip content if ($supportsGzip) { header("Content-Encoding: " . $enc); $content = gzencode($content, 9, FORCE_GZIP); } // Write cache file if ($this->_settings['disk_cache']) { if (!is_dir($this->_settings['cache_dir'])) @mkdir($this->_settings['cache_dir']); $this->_putFileContents($cacheFile, $content); if (@file_exists($cacheFile)) @touch($cacheFile, $this->_lastUpdate); } // Output content to client echo $content; } /**#@+ @access private */ function _removeWhiteSpace($content) { // Remove comments $content = preg_replace('/(\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/)/', '', $content); // Remove whitespace at the beginning and end of CSS $content = preg_replace('/^[\r\n]+/', '', $content); $content = preg_replace('/[\r\n]+$/', "\n", $content); // Remove redundant linebreaks $content = preg_replace('/\r\n/', "\n", $content); $content = preg_replace('/\n+/', "\n", $content); // Remove whitespace before/after styles inside rules $content = preg_replace('/\\{\\s*(.*?)\\s*\\}/', '{$1}', $content); // Remove remove whitespace between style rules and after the last one $content = preg_replace('/;\\s+/', ';', $content); $content = preg_replace('/\\{([^\\}]+);\\}/', '{$1}', $content); // Remove whitespace between : $content = preg_replace('/\\s*\\:\\s*/', ':', $content); return $content; } function _putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } function _getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fread($fp, 1024); fclose($fp); return $content; } function _parseTime($time) { $multipel = 1; // Hours if (strpos($time, "h") != false) $multipel = 60 * 60; // Days if (strpos($time, "d") != false) $multipel = 24 * 60 * 60; // Months if (strpos($time, "m") != false) $multipel = 24 * 60 * 60 * 30; // Trim string return intval($time) * $multipel; } /**#@-*/ } ?>imagemanager/classes/Utils/ResultSet.php000066600000002526150472616010014374 0ustar00_cols = explode(',', $cols); $this->_rows = array(); $this->_config = null; } function add() { $this->_rows[] = func_get_args(); } function setHeader($name, $value) { $this->_header[$name] = $value; } function setConfig($config) { $this->_config = $config; } function getRowCount() { return count($this->_rows); } function getRows() { $rowsArr = array(); for ($i=0; $i_rows);$i++) $rowsArr[] = $this->getRow($i); return $rowsArr; } function getRow($index) { if ($index < 0) return null; $row = $this->_rows[$index]; $obj = array(); for ($i=0; $i_cols[$i]] = $row[$i]; return $obj; } function toArray() { $ar = array( "header" => $this->_header, "columns" => $this->_cols, "data" => $this->_rows ); if (is_array($this->_config)) $ar["config"] = $this->_config; return $ar; } } ?>imagemanager/login_session_auth.php000066600000002163150472616010013576 0ustar00Wiki for more details.'; if (isset($_POST['submit_button'])) { // If password match, then set login if ($_POST['login'] == $username && $_POST['password'] == $password && $password) { // Set session session_start(); $_SESSION['isLoggedIn'] = true; $_SESSION['user'] = $_POST['login']; // Override any config option //$_SESSION['imagemanager.filesystem.rootpath'] = 'some path'; //$_SESSION['filemanager.filesystem.rootpath'] = 'some path'; // Redirect header("location: " . $_POST['return_url']); die; } else $msg = "Wrong username/password."; }*/ $_SESSION['isLoggedIn'] = true; $_SESSION['user'] = $_POST['login']; header("location: " . $_POST['return_url']); die; ?> imagemanager/docs/license.html000066600000015106150472616010012432 0ustar00 Commercial license - MCI1

        Commercial license - MCI1

        End User License Agreement For Moxiecode ImageManager (MCImageManager)

        This license is for 1 copy of the Moxiecode ImageManager Software on 1 web site.

        THE MOXIECODE IMAGEMANAGER SOFTWARE LICENSE AGREEMENT

        This License Agreement is a legal agreement between you ("LICENSEE") (either an individual or a single entity) and Moxiecode Systems AB ("MOXIECODE") for the software product Moxiecode ImageManager which includes computer software and electronic documentation (collectively the "SOFTWARE"). Read it carefully before completing the installation process and using the SOFTWARE. If you did not obtain this copy of the SOFTWARE legally, please destroy the copy immediately.

        By installing, copying, or otherwise using the SOFTWARE, you agree to be bound by the terms of this License Agreement.

        If you do not agree to the terms of this License Agreement, MOXIECODE is unwilling to license the SOFTWARE. In such event, you may not install, copy or otherwise use the SOFTWARE.

        YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU HAVE READ THIS LICENSE, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.

        1. Using the SOFTWARE

        If you have purchased a license for the SOFTWARE, subject to the terms and conditions of this Agreement, MOXIECODE grants you, LICENSEE, a limited, non-exclusive, non-transferable, non-sublicenseable license to install one (1) copy of the SOFTWARE only on one (1) single web site and use that copy of the SOFTWARE only in accordance with this Agreement.

        LICENSEE may use the SOFTWARE to operate in conjunction with other SOFTWARE.

        If the SOFTWARE is to be installed on multiple web sites (development web sites not included), a separate SOFTWARE license must be acquired for each individual web site.

        LICENSEE may make a copy of the SOFTWARE solely for backup or archival purposes, provided that LICENSEE reproduces and includes all copyright and other proprietary notice(s) on the copy.

        2. Restrictions

        LICENSEE may not:
        (i) Rent, lease, lend, transfer or otherwise transfer rights to the SOFTWARE.
        (ii) Translate, adapt, modify the SOFTWARE or create derivative works based upon the SOFTWARE or any part thereof except configuration.
        (iii) Distribute copies of the SOFTWARE.
        (iv) Electronically transfer the SOFTWARE over a network, a telephone circuit or the Internet to a non-LICENCEE.
        (v) Remove any proprietary notices or labels on the SOFTWARE.
        (vi) Use the SOFTWARE to encode, reproduce or copy any material or intellectual property you do not have the right to encode, reproduce or copy.

        3. Termination

        This License Agreement is effective until terminated. MOXIECODE may terminate this License Agreement if LICENSEE fails to comply with the terms and conditions of this License Agreement. In such event, LICENSEE must destroy all copies of the SOFTWARE and all of its component parts. All provisions relating the ownership, disclaimer of warranties, limitation of liability and the general provisions shall survive the termination of this License Agreement.

        4. Ownership

        The SOFTWARE is licensed, NOT sold. The foregoing License Agreement gives LICENSEE limited rights to use the SOFTWARE. All rights, title and interest, including all copyrights, in and to the SOFTWARE and any copies LICENSEE is permitted to make herein are exclusively owned by MOXIECODE and/or its suppliers and are protected by copyright, trademark and trade secret law and international treaties. MOXIECODE retains all rights not expressly granted to LICENSEE in this License Agreement.

        5. Limited Warranty.

        MOXIECODE warrants to you that for a period of fifteen (15) days from the date of purchase, as evidenced by a copy of the receipt, the media on which SOFTWARE is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, SOFTWARE is provided "AS IS". Your exclusive remedy and MOXIECODE's entire liability under this limited warranty will be at MOXIECODE's option to replace SOFTWARE or refund the fee paid for SOFTWARE.

        6. DISCLAIMER OF WARRANTY.

        UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.

        7. LIMITATION OF LIABILITY.

        TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL MOXIECODE OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF MOXIECODE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will MOXIECODE's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for SOFTWARE under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose.

        9. Governing Law.

        Any action related to this Agreement will be governed by Swedish law. No choice of law rules of any jurisdiction will apply.

        10. Severability.

        If any provision of this Agreement is held to be unenforceable, This Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate.

        11. Entire Agreement

        This License Agreement constitutes the entire agreement between LICENSEE and MOXIECODE and supersedes any other prior agreements or understandings, whether oral or written, regarding the SOFTWARE. If a provision of this agreement is deemed null and void, invalid or without effect, the remainder of this agreement shall remain in effect.

        imagemanager/examples.html000066600000006753150472616010011706 0ustar00 MCImageManager Example

        Simple example

        This is the most simple form of integration.

        [MCImageManager]

        Relative URL example

        This example will output the selected files as relative to the current document.

        [MCImageManager]

        Absolute URL with document_base_url option

        This example will output the selected files as absolute URLs but with a different domain prefix.

        [MCImageManager]

        Absolute URL without host

        This example will output the selected files as absolute URLs but without the protocol and host name parts.

        [MCImageManager]

        Specify default path

        This example shows how the default path can be specified with JavaScript, it also disables the remember last path feature.

        [MCImageManager]

        Specify rootpath

        This example shows how the rootpath can be specified with JavaScript.

        [MCImageManager]

        Custom JavaScript insert script

        This example shows how one could implement a custom insertion JavaScript.

        [MCImageManager]

        Custom filter script

        This example shows you how to change/filter data passed back.

        [MCImageManager]

        Filtered file list example

        This is the most simple form of integration.

        [MCImageManager]

        media/moxieplayer.swf000066600000047014150472616010010716 0ustar00CWS xݽ XS8<3&7 (⎊q"BX*K$MuZ]oukwjukwMBPpr̙3g{R0S!QPLCdqH( 6l9aa $Ԓ/qV#""F#lvplk(Fު5L@ZfXlmT3u.9yfF2S76kX@(SifimQڜI7-FjlVHL6>*:Ӓ36 .ϰEYh4wΒkO :w$r2&Q= 2HrZ,Q]YxQ]-Mԁ\a-/ uPZRRR򩂃 xb?~-皚)MY9f}`Y;DJ*j| u[س|}跩84v>[g4ekS;9)Qm<([[mC@Sfy6%v Sئv5M67h䴩 uau6Ҭ6b n@\K^v&H}ͳ/=bҧO&l^ɐg6Чqx9$Kg4Xam{s3ځVP=Yځ:ْۦv8$-f)7O؆& Pgfx;FeY2Ek)W9Z Fϵ N+9pblL$2, 9Yee)͸TCSqvo#o 9:TrthVۿyϦAEm&mCʙ?r1̬\VRٹU1 mnJ\(:hUV4ꄳl,]f%({DV^745!u:Nh>-zw>I[8m~FCN?J*:gS})}v/^L5w>>yww[>mwVor,0/B^?40geq3:%}w3qz-ι0ϟ0J/ѠRD:7s~|zԃktPC{z_QCj8w3_9Drگ=d_ߟe;qYџ^j׮]'׳KSj ۴yKz|IoOOh&=D̩'Yk;:sܝewݓԊU[<{pyca{D`F߹{WG]{~v2y[[^G-=1yy_s]>r5V֫d}W_IJ-Ϭؙz+U7^XcիWl߳ڛӸ!5ӂwo=[?qЪ4m/}Ǖ ۾ #Q}nTzkhȩE7'?i2;ꋙ]nu䧒ޟ|es3Y~ScLﶶz"ɶGa߸8/~U7.vN]'W^4%k[A(:5bec Kskf\T{>ù9G{,02VLkY\2мDXcݫ +Vg6;u֢ Qc|dGXj~bq3ac8yŻZd]yɟd既Çmi}kۘO//#Q/ |t\ٝS|vq;}{/x|UovY\ӳF;?&TsCtJҋ7#Ok;o+_}x“ٕ/rJ7Z[6./fly钺ͬv~ɼעcwD m?V}ŭGG++|-?ڞgj?Zs|U :ϦW_ŻD\L+z`uﮎ Դ˖cTjb}K>>E cTP=N?M:/D^gفVUIʂA͟|wpMƜ}Jv.{ѩ&ܻ_nT^~W\=!~mΛEi sׯl}n==%jI/Z_dph|?fW|pu7>TVmNɾۃ^~V+˅ǷmѢEjTpyL:'\7<^ rryV/~#œgo?MW/=68Ǜ=jCCpy COE)T>tWx2Ou:6pǭaEr:}lSsۤ\3`◱C^MzkMG۷Ov ~VOMƎ¤z&}w;:큺ie1*ϞwoeCTL͙}$̜~e͒ si_ye)vlxkuHD|]#7=3dtzo+cw86=̣IFX`BBրIܮsy;K|Wu}Mc-?筛g%Og70Sڼx;tdQp͞[o5ol[ߧy*%=\W5b~^#R;Oxf5ͭ?Bs۶=Rr&YK_/>n?L~zf8s=&4!I7eV\i:64MWjO/ۼ5?1KՌL ^uIи™!m<ЁeOP}˔k{ϛ6muˊ~5xgҲ%lmSG.zAJ +a6ozVz +)aπ+OpbY؃S|O;ں/\ٔ{ݚ(†Y恵OxCdZ~޼Oݫ_MO'5 wǩnbw_P빗ϊO[30&쵫?m:;aգU5ڞ ϝ+o5=dӵLɎ_ngft>*g̾fl뗾tO7n?_>+<~=QnT`+qOm36%yj'+[g`y87N|JBH/YI7a+-ZgmWt+sG^|^[AKjKN=5j#n|Wc}}AZ{/T8t rNg>0#3g=@l%7~ckf|z 7O%-̹F6\n ͿO=kp&߀gooS4O<&wj4믯&9s?U؞jڨc4uquo]:\M[-(K U撃ϓ_4pu/[卟|XMPZ]ҼU.aaھ{*4o ,}cBHVn̜A=#>bT B!XζY%l ao=cAh˅ R*^H5:WW-Ѧ8qyfs"G`eY\^6AYL6>i׼ Bd dCJۛlYWΊ.<#ED"rMkl"1 pO_NGkX!Ooɒw/\yR6J?t;s ?V[ dR)ڽ-גϵV!Q =()Xk劃˓ 3͙7RqޒD6G/,M:YCu\w|wvύ1`|>A*H` XtUr\&ق'l3^mjkliNYmf&&MeUXuZqkNth,xga,C҃Y PDKE!Wϔw>˒6Y8PI }hl~p[a=~wZ-{|OewCjodTL(֦3sF/k$V|l?m.=YZ Cl{޲\Dk1j%R*^AzAUPeӷw]kI1S.LfЅV9\nsvkgdhI44ґUm)Y9JTavOɖ*[(1QI[UkyN\Şt<= :[֜C%?皻׉JX.*[W!av.S irʝK˕}*Χ3r`"= ձљl>Xr2ݪuJ+5K^3%f2[&׊A\>a0oCI2#Huץ"2oli0< ܹ68UZn9 #-n~ʩlU-GM;SiJŗPnn^WYdNQ]A3{\ZJs(wی`Ta٫SohVF]v{]p. J,3Ĭz&,*ptz6PSΥz++e bLd]AQqD:ka9'MON/dzdp^ޥOʼW^SXNdֽ۽D{IdmA!CVe͵ʨ˙+Ϧ{tuDQJ% ryjc9l +*Īut(x:5ztN:EwtbĦn~Η䬟JlUl.p@DK91{l jw)P1roξf[5 =b'kz4 mڸyx*?f[xz0XYCUOrỲWC{$1){x>$vd:Չ'&i)X @^A\m͊~Iӡݑ= `g2)6jiΉJŘOܽS`2yic$E?z6KPP]y^;fuդ%Dw[U :4OODTB',pcr`js&DzLfzB,Vxde1>!qy,zɻk@"`\rY0Yn4(JT{}"  9?06bN~d 5b,'8Rf [bX+h3?Z$)2\p9zsb6ho[ 4RY+,P`˥!X4n(YfD?W8k9:ĐaҚK!tX4ڒf1i3: ,w,#CdYOS<9`zx oɵraTC=8,ֲ! aPF]/vptZmd>}Ii A[7~ RBDumנcE76IOj:}RB5JENPFdyz0t9zҷ!Zד~l :P}ϑn<(|+Mz b@-wEa2g&o %v ~*2e?A?HU/a]q=~DoD*keO+xd H>R~_Ery&b\9MXQp|@` v ,ZBN$쏛xN<&R<3QuO蚔yFgLR)#k {::fg QR)8`T !IjN_T?IlB\*~ ({X 32RѾA$XLDgks:KΐnTKYUܞLӝ!t>k$Rk^C pPsc@m8 !)}S6NzPqp,2ol:k0@OKŐ?%>_?, H i@ DzX6Pڍ{q>hbp〿C˞Ddl9}Ҹ)RN*EJ1" -VJ)%UR*ᠸW~@Uh𸏫!bTM6kޢe+TḵMX2maYOFs1 :'2;WRk+,Q.&[VemZ=lL TQCJ{ KV RA |%,U . ZPGY= .D5x m$HCE |l"ংl.([ʖgHl-(^me;e (ce((; xA (?eAUAMP~"( 8I% %#ྂ_S.M_s2?)?O3 ~&7@3 ~Y_gr,Wq &< ~ ~gB_ 0,XP|@[,4V,`DI|0`tf0`\y,X` Re?,X`jk ɿŜk 7 0t&xx3v1vx”1 a S0v0,TP<BQc?Ϗ8 p \!T8r u u[uCE_o|w?\:  p.0v z ,x 5J!d8F|-(cA=L BÉDh4` SAtX` 2" B*P^`z!l;<]Dws `/>h@t1>D#P> p qx'9/xD49"?Ox$(^_q \;PT?tM[D ; p><x )PK":CD_KP5"f 0N P F 0`<'qB$D>'$K699W )|ϩsB8y=P38wD&@dpel9sX`b%K9!fz`Mfo `;Oqh90 bwɇ(`?WU琎 Gy z`PS$'_zb7> } V \9(n pP'o({ \"% '`r^8/sP5/!-]j)5p`% ㅘVy3_I@jd#! 0`L9Oɼ| }N{aL)82.ė.]_/#T+1-r?X3HUH?Tf*gRבʐC+rQP*l*Å9?ked'%6, Ͽ!ʔ'u »d)a91_HH  )j@C\5TI ԤI $\-^B,eBr"PxxP OJyP| "(yz ƨ$!C?NP/%A)_r(+҆IiC.c8t# 9r!gH 9Hș ׿r[HFA= ,Ѣѐ8rc g 9X千\8 !7; rM D}9r_M0=94OF@ʡ!h$ę੐~A-D?@~4Drhx69:υt"mJ|/a*!]R8yS!ʩei3 f吟i4b]*+fļu\xkyA!@Z-k :0Z/ ~!:hA q M0Րrh DXucbp6nĀ6n;!݂wvv=X^ Ѹڃ/X"`'b0h]hD;c#>A6O@I1:Bj*"1=JtTŨf=yt@t$K)(zB_8ElYz9Xgo,9H/@U+%HĿAz_M;Bz_һ:p ,MP/1G]`v7J-#oâT*ƐT!%h$i܇[HAȏ1FEc!%hyG)AcO @J)BJ4 !%3 %h&yY4ty\yrh>yrh!y Erh1y%ҥj5yCHsEJ0ɫא&#!]C`yY!h=)uɷnC(oC[h U!R@X"%L)&x<\#R ? D* MϢ n!x6epg0:ѯ= F/Iw\ ¯| h9kTu9\W7VIG8GdH axrPh0 $x3?Sy_0= 1iOx g}5<}q&a|Ux!Y-AMEX%_ *Dp\c,sp/=җ ]IWjbXC손8(?\n YRpaB:N 롽a İʑa3IDE$a.ҷVFt>~EN"i N"*BvM$@k+@+*텆a1$ mhxG!g0 S،i]$ RLAOQȹY85X]u&{Bf$ДhW.!9LPj`c@AFІzfP'!"~696(sQzA0lqAR[@Ezh N=I,="(S3vP:H,{Q}S:h:0Y=E v-=>h)rxӹVPLۃЂ4IB=,0I'>x!aMR&z7!g7`7Ԃpt5㦳jI:gX|q F R^w[ <$l9-<糪D8{J* A 90cY:o9Db"9XN% H;0 ߑv Wai*L$픮$ULy9 p vCK=[ |!Ƃ\6J@Q5H/eW<AB,AqIAO]G,4\!!g-dD"T;1AԯHCA@.#4&z&(bBU JQJ G+ьoll *P NiiқTjh ,s@r, \9PFR9;COz'kotCӥ[C<v~PHiWAUEP6&GC|-",wEqw ɣ]Kl/\w$l9.\K)-^/y).i{Z2."XkLO[`'bִ>TEae 5 JPw|L*KuUl jv}o:vC -RIE)Y!@cJrֵQ$<$O OD+׃^:1j": 1$u,Q$Ʊ$uQ&q$u7B=ʋ%/9\Y4VEꙘVpaURI I{C(3'u#ގcI5qM1Z[ 'Ɂ"f ơf jʪxKƚ,Kʩ_'NVO'cvf͞)*NcW^gH4g1oG)aBtzo Yv\ ь3xV֌P1d7 > PܵzT(tY(RR80rNZU |yF]щBK?1:ZV!lBr IK 6$pQQ7Q9Y Z%ԃJf M(D7Bm8e[KTn-map_9хZAF}Q v*m`lLR|P)Iȵk/ZĵkI 9!Q^<OƱkM}(Dݯd7$I,'2F_t_5T۵ S?2Zekh=톞XH6SCta&U_uY"\l7$zRޒv9V="B8^vC/ƉRn-"DOz3^QD׈}j-tXvېhF1 5f ; "3Mdڻ-qn1`5IL$Q)JThehNG Z*SqS9Tz @k?vZԊէƪ> hłv1zqD[WwbAQ B-WnLEcFڻ WŢ&E*ȍPoj>C6L1$"鄤`h:l!Nfp5L}4CRH ^0]"Y=UUꄩLX1t_BxVN +WdOIh@N t=&8c{Jf]wN$F`:N@;9};"<[ $&)ASŀ| ] ~C>1$00(. zRG<^üm(BۘF5WwzMWzEWP )q`/ U *N!8J'T@VLJ;dJNqǖ:x.u.%8[g镏N|$q&-q{7G\R r; bt '!V>O~{I٬lesVZP)}L&cgh@LG|oC"Po`1!(ҿ'X3,D[a 1ORgeNz=Q ?R*C4iD9 TF&N7|1@uK:1y"0!2b-Ņ؅ P-/XvrDi.؂Ey*"3}bx?02'+sÝ(+ax%V5 KSٹUn; ;tV3*{"ҫH?b^]nH/*7ҏťהCz.K!KKI-rI/+:7OX!j9I?aUͅTN-/gn=eí`ñ Ӌq8ұ6Tc,g nc=cc*] 匵m՞HF6Rkd/"BF2|? 9vJ }וӶѶL>kaΨ oͣlmā+! fF_ VN?[J^`05M%1"kqN:!{P|X1R_RSۀ H KHPk\Ik7eԥe36L%E]LڙBqѢQ%>+̸SVfW>!"ٛJ( ՛JY?HX 3k2"*ET(x=OpdaUD"j2*QEMe?*ER0-LZ8ϯC^b Kv-G/]5v%:J681lK.zOPpvL/\??Q*@eTa OlK|{R.JyOzyݔn.RgUR ntu͠3 x^%p0)NmԅSsӜ >˩qHبzx ?SƵ6q 6sxOF$:INnK3 a G$CR*-!>KJ2 `@8Ϥ\ٔ"m0wNמrq8R'} cptZ Dqި`fqTKQlJ& I⦒"t?(Poȇ"8MX5-W 5%}:HS9%<{s^ > 'n؋<;8l<5pP 2e£+02Ψ_0L}'fALŮ T(性l8d܋}j 1`ãZA켢*AJ88Ѯ)5pX{+|ωٸAtl#߽{J 6KFH q?N银iŭA{WiwL@y2d0}y'4vbCy`Nj2ŎJW ӱKE;#]80 Qwwt@$54G0*3Ec<& 胰PؓL:AK_;9enT]XRuuhP"0lw*:vt |;om3.ELBAqIIԛq&IE[qIMۈq6e4S`ݕ7 3nlY}ΥUctVLJE9/6>.ʛXq*N  =t;dMcjL\E"UOQn47O"ewiq!fF@7B6ph˘v?!_яyBp^VЏ6 8qv0}Fp4!`7ر7xN~SG=jdBxAC1B|˃^89z_(ǃZfdboS1_I]b0!}NXKd|̩DFƩ#}7 8.n q!/kxP2a<)7 KbLōz&Zfif}oaH#h\ @-Lx4Ǹ\`ǃ@yākncB"-\`(RlR7ʟ~s@0U1hHZhD#2 PԹ W\9[Q2SaElGZ0R\oRY"EPTZ_l;;;AEXC.KxyzX .cPط2#CRmہb8ߴO,7vG~%jǥ쇼z9^AWPH\*vlEڄI<=7Лn@ɐWҳjt 8Dŵ"zԟq" V2G:R)Dո(~:gQZI΢\΢B5SEH(w<(NĎiV/UODώU(T8߉C1諪 ŽQ׉Ѡ u WB%-mɷ%7#/ƻt_w%П07H=M!vQ.RO.SLȦGN'A 4TfGm.]ї΀j-I0NaTC2VC! {38[*ePztz CS1խȋ7#wI| 8?7\|Itv_ ?ØH.C؉p);!E<qq gځ0[(wJsR⢼((Y%hiШ}ӏ#i< YaWAP h{l 7y<{j FQ_YSds+H!|BY? Qhϟ_$i3V@߽00){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){G.params.flashvars=N}K=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){G.params[O]=""+P})}}G=z.attr("data-mce-json");if(!G){return}G=g.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}if(q.name==="Iframe"){x=new b("iframe",1);tinymce.each(d,function(i){var n=z.attr(i);if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&n.length>0){x.attr(i,n)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new b("script",1).attr("type","text/javascript");y=new b("#text",3);y.value="write"+q.name+"("+g.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new b("video",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A'); function get(id) { return document.getElementById(id); } function clone(obj) { var i, len, copy, attr; if (null == obj || "object" != typeof obj) return obj; // Handle Array if ('length' in obj) { copy = []; for (i = 0, len = obj.length; i < len; ++i) { copy[i] = clone(obj[i]); } return copy; } // Handle Object copy = {}; for (attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); } return copy; } function getVal(id) { var elm = get(id); if (elm.nodeName == "SELECT") return elm.options[elm.selectedIndex].value; if (elm.type == "checkbox") return elm.checked; return elm.value; } function setVal(id, value, name) { if (typeof(value) != 'undefined' && value != null) { var elm = get(id); if (elm.nodeName == "SELECT") selectByValue(document.forms[0], id, value); else if (elm.type == "checkbox") { if (typeof(value) == 'string') { value = value.toLowerCase(); value = (!name && value === 'true') || (name && value === name.toLowerCase()); } elm.checked = !!value; } else elm.value = value; } } window.Media = { init : function() { var html, editor, self = this; self.editor = editor = tinyMCEPopup.editor; // Setup file browsers and color pickers get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media'); get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media'); get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media'); get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media'); get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media'); get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image'); html = self.getMediaListHTML('medialist', 'src', 'media', 'media'); if (html == "") get("linklistrow").style.display = 'none'; else get("linklistcontainer").innerHTML = html; if (isVisible('filebrowser')) get('src').style.width = '230px'; if (isVisible('video_filebrowser_altsource1')) get('video_altsource1').style.width = '220px'; if (isVisible('video_filebrowser_altsource2')) get('video_altsource2').style.width = '220px'; if (isVisible('audio_filebrowser_altsource1')) get('audio_altsource1').style.width = '220px'; if (isVisible('audio_filebrowser_altsource2')) get('audio_altsource2').style.width = '220px'; if (isVisible('filebrowser_poster')) get('video_poster').style.width = '220px'; editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor)); self.setDefaultDialogSettings(editor); self.data = clone(tinyMCEPopup.getWindowArg('data')); self.dataToForm(); self.preview(); updateColor('bgcolor_pick', 'bgcolor'); }, insert : function() { var editor = tinyMCEPopup.editor; this.formToData(); editor.execCommand('mceRepaint'); tinyMCEPopup.restoreSelection(); editor.selection.setNode(editor.plugins.media.dataToImg(this.data)); tinyMCEPopup.close(); }, preview : function() { get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true); }, moveStates : function(to_form, field) { var data = this.data, editor = this.editor, mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src; defaultStates = { // QuickTime quicktime_autoplay : true, quicktime_controller : true, // Flash flash_play : true, flash_loop : true, flash_menu : true, // WindowsMedia windowsmedia_autostart : true, windowsmedia_enablecontextmenu : true, windowsmedia_invokeurls : true, // RealMedia realmedia_autogotourl : true, realmedia_imagestatus : true }; function parseQueryParams(str) { var out = {}; if (str) { tinymce.each(str.split('&'), function(item) { var parts = item.split('='); out[unescape(parts[0])] = unescape(parts[1]); }); } return out; }; function setOptions(type, names) { var i, name, formItemName, value, list; if (type == data.type || type == 'global') { names = tinymce.explode(names); for (i = 0; i < names.length; i++) { name = names[i]; formItemName = type == 'global' ? name : type + '_' + name; if (type == 'global') list = data; else if (type == 'video' || type == 'audio') { list = data.video.attrs; if (!list && !to_form) data.video.attrs = list = {}; } else list = data.params; if (list) { if (to_form) { setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : ''); } else { delete list[name]; value = getVal(formItemName); if ((type == 'video' || type == 'audio') && value === true) value = name; if (defaultStates[formItemName]) { if (value !== defaultStates[formItemName]) { value = "" + value; list[name] = value; } } else if (value) { value = "" + value; list[name] = value; } } } } } } if (!to_form) { data.type = get('media_type').options[get('media_type').selectedIndex].value; data.width = getVal('width'); data.height = getVal('height'); // Switch type based on extension src = getVal('src'); if (field == 'src') { ext = src.replace(/^.*\.([^.]+)$/, '$1'); if (typeInfo = mediaPlugin.getType(ext)) data.type = typeInfo.name.toLowerCase(); setVal('media_type', data.type); } if (data.type == "video" || data.type == "audio") { if (!data.video.sources) data.video.sources = []; data.video.sources[0] = {src: getVal('src')}; } } // Hide all fieldsets and show the one active get('video_options').style.display = 'none'; get('audio_options').style.display = 'none'; get('flash_options').style.display = 'none'; get('quicktime_options').style.display = 'none'; get('shockwave_options').style.display = 'none'; get('windowsmedia_options').style.display = 'none'; get('realmedia_options').style.display = 'none'; get('embeddedaudio_options').style.display = 'none'; if (get(data.type + '_options')) get(data.type + '_options').style.display = 'block'; setVal('media_type', data.type); setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars'); setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc'); setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign'); setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume'); setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks'); setOptions('video', 'poster,autoplay,loop,muted,preload,controls'); setOptions('audio', 'autoplay,loop,preload,controls'); setOptions('embeddedaudio', 'autoplay,loop,controls'); setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height'); if (to_form) { if (data.type == 'video') { if (data.video.sources[0]) setVal('src', data.video.sources[0].src); src = data.video.sources[1]; if (src) setVal('video_altsource1', src.src); src = data.video.sources[2]; if (src) setVal('video_altsource2', src.src); } else if (data.type == 'audio') { if (data.video.sources[0]) setVal('src', data.video.sources[0].src); src = data.video.sources[1]; if (src) setVal('audio_altsource1', src.src); src = data.video.sources[2]; if (src) setVal('audio_altsource2', src.src); } else { // Check flash vars if (data.type == 'flash') { tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) { if (value == '$url') data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || ''; }); } setVal('src', data.params.src); } } else { src = getVal("src"); // YouTube *NEW* if (src.match(/youtu.be\/[a-z1-9.-_]+/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; data.type = 'iframe'; src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; setVal('src', src); setVal('media_type', data.type); } // YouTube if (src.match(/youtube.com(.+)v=([^&]+)/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; data.type = 'iframe'; src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1]; setVal('src', src); setVal('media_type', data.type); } // Google video if (src.match(/video.google.com(.+)docid=([^&]+)/)) { data.width = 425; data.height = 326; data.type = 'flash'; src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en'; setVal('src', src); setVal('media_type', data.type); } if (data.type == 'video') { if (!data.video.sources) data.video.sources = []; data.video.sources[0] = {src : src}; src = getVal("video_altsource1"); if (src) data.video.sources[1] = {src : src}; src = getVal("video_altsource2"); if (src) data.video.sources[2] = {src : src}; } else if (data.type == 'audio') { if (!data.video.sources) data.video.sources = []; data.video.sources[0] = {src : src}; src = getVal("audio_altsource1"); if (src) data.video.sources[1] = {src : src}; src = getVal("audio_altsource2"); if (src) data.video.sources[2] = {src : src}; } else data.params.src = src; // Set default size setVal('width', data.width || (data.type == 'audio' ? 300 : 320)); setVal('height', data.height || (data.type == 'audio' ? 32 : 240)); } }, dataToForm : function() { this.moveStates(true); }, formToData : function(field) { if (field == "width" || field == "height") this.changeSize(field); if (field == 'source') { this.moveStates(false, field); setVal('source', this.editor.plugins.media.dataToHtml(this.data)); this.panel = 'source'; } else { if (this.panel == 'source') { this.data = clone(this.editor.plugins.media.htmlToData(getVal('source'))); this.dataToForm(); this.panel = ''; } this.moveStates(false, field); this.preview(); } }, beforeResize : function() { this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); }, changeSize : function(type) { var width, height, scale, size; if (get('constrain').checked) { width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10); height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10); if (type == 'width') { this.height = Math.round((width / this.width) * height); setVal('height', this.height); } else { this.width = Math.round((height / this.height) * width); setVal('width', this.width); } } }, getMediaListHTML : function() { if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) { var html = ""; html += ''; return html; } return ""; }, getMediaTypeHTML : function(editor) { function option(media_type, element) { if (!editor.schema.getElementRule(element || media_type)) { return ''; } return '' } var html = ""; html += ''; return html; }, setDefaultDialogSettings : function(editor) { var defaultDialogSettings = editor.getParam("media_dialog_defaults", {}); tinymce.each(defaultDialogSettings, function(v, k) { setVal(k, v); }); } }; tinyMCEPopup.requireLangPack(); tinyMCEPopup.onInit.add(function() { Media.init(); }); })(); media/js/embed.js000066600000003511150472616010007657 0ustar00/** * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. */ function writeFlash(p) { writeEmbed( 'D27CDB6E-AE6D-11cf-96B8-444553540000', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', 'application/x-shockwave-flash', p ); } function writeShockWave(p) { writeEmbed( '166B1BCA-3F9C-11CF-8075-444553540000', 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', 'application/x-director', p ); } function writeQuickTime(p) { writeEmbed( '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', 'video/quicktime', p ); } function writeRealMedia(p) { writeEmbed( 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', 'audio/x-pn-realaudio-plugin', p ); } function writeWindowsMedia(p) { p.url = p.src; writeEmbed( '6BF52A52-394A-11D3-B153-00C04F79FAA6', 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', 'application/x-mplayer2', p ); } function writeEmbed(cls, cb, mt, p) { var h = '', n; h += ''; h += ' 0) flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value); }); if (flashVarsOutput.length) data.params.flashvars = flashVarsOutput; params = editor.getParam('flash_video_player_params', { allowfullscreen: true, allowscriptaccess: true }); tinymce.each(params, function(value, name) { data.params[name] = "" + value; }); } }; data = node.attr('data-mce-json'); if (!data) return; data = JSON.parse(data); typeItem = this.getType(node.attr('class')); style = node.attr('data-mce-style') if (!style) { style = node.attr('style'); if (style) style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img')); } // Handle iframe if (typeItem.name === 'Iframe') { replacement = new Node('iframe', 1); tinymce.each(rootAttributes, function(name) { var value = node.attr(name); if (name == 'class' && value) value = value.replace(/mceItem.+ ?/g, ''); if (value && value.length > 0) replacement.attr(name, value); }); for (name in data.params) replacement.attr(name, data.params[name]); replacement.attr({ style: style, src: data.params.src }); node.replace(replacement); return; } // Handle scripts if (this.editor.settings.media_use_script) { replacement = new Node('script', 1).attr('type', 'text/javascript'); value = new Node('#text', 3); value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, { width: node.attr('width'), height: node.attr('height') })) + ');'; replacement.append(value); node.replace(replacement); return; } // Add HTML5 video element if (typeItem.name === 'Video' && data.video.sources[0]) { // Create new object element video = new Node('video', 1).attr(tinymce.extend({ id : node.attr('id'), width: node.attr('width'), height: node.attr('height'), style : style }, data.video.attrs)); // Get poster source and use that for flash fallback if (data.video.attrs) posterSrc = data.video.attrs.poster; sources = data.video.sources = toArray(data.video.sources); for (i = 0; i < sources.length; i++) { if (/\.mp4$/.test(sources[i].src)) mp4Source = sources[i].src; } if (!sources[0].type) { video.attr('src', sources[0].src); sources.splice(0, 1); } for (i = 0; i < sources.length; i++) { source = new Node('source', 1).attr(sources[i]); source.shortEnded = true; video.append(source); } // Create flash fallback for video if we have a mp4 source if (mp4Source) { addPlayer(mp4Source, posterSrc); typeItem = self.getType('flash'); } else data.params.src = ''; } // Add HTML5 audio element if (typeItem.name === 'Audio' && data.video.sources[0]) { // Create new object element audio = new Node('audio', 1).attr(tinymce.extend({ id : node.attr('id'), width: node.attr('width'), height: node.attr('height'), style : style }, data.video.attrs)); // Get poster source and use that for flash fallback if (data.video.attrs) posterSrc = data.video.attrs.poster; sources = data.video.sources = toArray(data.video.sources); if (!sources[0].type) { audio.attr('src', sources[0].src); sources.splice(0, 1); } for (i = 0; i < sources.length; i++) { source = new Node('source', 1).attr(sources[i]); source.shortEnded = true; audio.append(source); } data.params.src = ''; } if (typeItem.name === 'EmbeddedAudio') { embed = new Node('embed', 1); embed.shortEnded = true; embed.attr({ id: node.attr('id'), width: node.attr('width'), height: node.attr('height'), style : style, type: node.attr('type') }); for (name in data.params) embed.attr(name, data.params[name]); tinymce.each(rootAttributes, function(name) { if (data[name] && name != 'type') embed.attr(name, data[name]); }); data.params.src = ''; } // Do we have a params src then we can generate object if (data.params.src) { // Is flv movie add player for it if (/\.flv$/i.test(data.params.src)) addPlayer(data.params.src, ''); if (args && args.force_absolute) data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); // Create new object element object = new Node('object', 1).attr({ id : node.attr('id'), width: node.attr('width'), height: node.attr('height'), style : style }); tinymce.each(rootAttributes, function(name) { var value = data[name]; if (name == 'class' && value) value = value.replace(/mceItem.+ ?/g, ''); if (value && name != 'type') object.attr(name, value); }); // Add params for (name in data.params) { param = new Node('param', 1); param.shortEnded = true; value = data.params[name]; // Windows media needs to use url instead of src for the media URL if (name === 'src' && typeItem.name === 'WindowsMedia') name = 'url'; param.attr({name: name, value: value}); object.append(param); } // Setup add type and classid if strict is disabled if (this.editor.getParam('media_strict', true)) { object.attr({ data: data.params.src, type: typeItem.mimes[0] }); } else { object.attr({ classid: "clsid:" + typeItem.clsids[0], codebase: typeItem.codebase }); embed = new Node('embed', 1); embed.shortEnded = true; embed.attr({ id: node.attr('id'), width: node.attr('width'), height: node.attr('height'), style : style, type: typeItem.mimes[0] }); for (name in data.params) embed.attr(name, data.params[name]); tinymce.each(rootAttributes, function(name) { if (data[name] && name != 'type') embed.attr(name, data[name]); }); object.append(embed); } // Insert raw HTML if (data.object_html) { value = new Node('#text', 3); value.raw = true; value.value = data.object_html; object.append(value); } // Append object to video element if it exists if (video) video.append(object); } if (video) { // Insert raw HTML if (data.video_html) { value = new Node('#text', 3); value.raw = true; value.value = data.video_html; video.append(value); } } if (audio) { // Insert raw HTML if (data.video_html) { value = new Node('#text', 3); value.raw = true; value.value = data.video_html; audio.append(value); } } var n = video || audio || object || embed; if (n) node.replace(n); else node.remove(); }, /** * Converts a tinymce.html.Node video/object/embed to an img element. * * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this: * * * The JSON structure will be like this: * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}} */ objectToImg : function(node) { var object, embed, video, iframe, img, name, id, width, height, style, i, html, param, params, source, sources, data, type, lookup = this.lookup, matches, attrs, urlConverter = this.editor.settings.url_converter, urlConverterScope = this.editor.settings.url_converter_scope, hspace, vspace, align, bgcolor; function getInnerHTML(node) { return new tinymce.html.Serializer({ inner: true, validate: false }).serialize(node); }; function lookupAttribute(o, attr) { return lookup[(o.attr(attr) || '').toLowerCase()]; } function lookupExtension(src) { var ext = src.replace(/^.*\.([^.]+)$/, '$1'); return lookup[ext.toLowerCase() || '']; } // If node isn't in document if (!node.parent) return; // Handle media scripts if (node.name === 'script') { if (node.firstChild) matches = scriptRegExp.exec(node.firstChild.value); if (!matches) return; type = matches[1]; data = {video : {}, params : JSON.parse(matches[2])}; width = data.params.width; height = data.params.height; } // Setup data objects data = data || { video : {}, params : {} }; // Setup new image object img = new Node('img', 1); img.attr({ src : this.editor.theme.url + '/img/trans.gif' }); // Video element name = node.name; if (name === 'video' || name == 'audio') { video = node; object = node.getAll('object')[0]; embed = node.getAll('embed')[0]; width = video.attr('width'); height = video.attr('height'); id = video.attr('id'); data.video = {attrs : {}, sources : []}; // Get all video attributes attrs = data.video.attrs; for (name in video.attributes.map) attrs[name] = video.attributes.map[name]; source = node.attr('src'); if (source) data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)}); // Get all sources sources = video.getAll("source"); for (i = 0; i < sources.length; i++) { source = sources[i].remove(); data.video.sources.push({ src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'), type: source.attr('type'), media: source.attr('media') }); } // Convert the poster URL if (attrs.poster) attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name); } // Object element if (node.name === 'object') { object = node; embed = node.getAll('embed')[0]; } // Embed element if (node.name === 'embed') embed = node; // Iframe element if (node.name === 'iframe') { iframe = node; type = 'Iframe'; } if (object) { // Get width/height width = width || object.attr('width'); height = height || object.attr('height'); style = style || object.attr('style'); id = id || object.attr('id'); hspace = hspace || object.attr('hspace'); vspace = vspace || object.attr('vspace'); align = align || object.attr('align'); bgcolor = bgcolor || object.attr('bgcolor'); data.name = object.attr('name'); // Get all object params params = object.getAll("param"); for (i = 0; i < params.length; i++) { param = params[i]; name = param.remove().attr('name'); if (!excludedAttrs[name]) data.params[name] = param.attr('value'); } data.params.src = data.params.src || object.attr('data'); } if (embed) { // Get width/height width = width || embed.attr('width'); height = height || embed.attr('height'); style = style || embed.attr('style'); id = id || embed.attr('id'); hspace = hspace || embed.attr('hspace'); vspace = vspace || embed.attr('vspace'); align = align || embed.attr('align'); bgcolor = bgcolor || embed.attr('bgcolor'); // Get all embed attributes for (name in embed.attributes.map) { if (!excludedAttrs[name] && !data.params[name]) data.params[name] = embed.attributes.map[name]; } } if (iframe) { // Get width/height width = iframe.attr('width'); height = iframe.attr('height'); style = style || iframe.attr('style'); id = iframe.attr('id'); hspace = iframe.attr('hspace'); vspace = iframe.attr('vspace'); align = iframe.attr('align'); bgcolor = iframe.attr('bgcolor'); tinymce.each(rootAttributes, function(name) { img.attr(name, iframe.attr(name)); }); // Get all iframe attributes for (name in iframe.attributes.map) { if (!excludedAttrs[name] && !data.params[name]) data.params[name] = iframe.attributes.map[name]; } } // Use src not movie if (data.params.movie) { data.params.src = data.params.src || data.params.movie; delete data.params.movie; } // Convert the URL to relative/absolute depending on configuration if (data.params.src) data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object'); if (video) { if (node.name === 'video') type = lookup.video.name; else if (node.name === 'audio') type = lookup.audio.name; } if (object && !type) type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; if (embed && !type) type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; // for embedded audio we preserve the original specified type if (embed && type == 'EmbeddedAudio') { data.params.type = embed.attr('type'); } // Replace the video/object/embed element with a placeholder image containing the data node.replace(img); // Remove embed if (embed) embed.remove(); // Serialize the inner HTML of the object element if (object) { html = getInnerHTML(object.remove()); if (html) data.object_html = html; } // Serialize the inner HTML of the video element if (video) { html = getInnerHTML(video.remove()); if (html) data.video_html = html; } data.hspace = hspace; data.vspace = vspace; data.align = align; data.bgcolor = bgcolor; // Set width/height of placeholder img.attr({ id : id, 'class' : 'mceItemMedia mceItem' + (type || 'Flash'), style : style, width : width || (node.name == 'audio' ? "300" : "320"), height : height || (node.name == 'audio' ? "32" : "240"), hspace : hspace, vspace : vspace, align : align, bgcolor : bgcolor, "data-mce-json" : JSON.serialize(data, "'") }); } }); // Register plugin tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin); })(); media/media.htm000066600000112052150472616010007423 0ustar00 {#media_dlg.title}
        {#media_dlg.general}
         
        x   
        {#media_dlg.preview}
        {#media_dlg.advanced}
         
        {#media_dlg.html5_video_options}
         
         
         
        {#media_dlg.embedded_audio_options}
        {#media_dlg.html5_audio_options}
         
         
        {#media_dlg.flash_options}
        {#media_dlg.qt_options}
         
         
        {#media_dlg.wmp_options}
        {#media_dlg.rmp_options}
         
        {#media_dlg.shockwave_options}
        {#media_dlg.source}
        media/img/flv_player.swf000066600000026624150472616010011303 0ustar00CWSax| \S$pr/EO΀ ѐEUEzZj[jjjkov?xowfvvfvf`KsBj)@=%hjjJe 6( UH |F5PT! (5y$DxLB[ 4SH e>aJPBIB.&䫴>$)sIC=؇ޓ!g}o^ӣzT G)!;tQTPPƏ-Z>C=>A×迨֡ 幻GJ?쑱"Ӫھ{SVes¶ŋe^cKqy? 5~E^LhQD5޿ˬ<+O߅i8jοMN6,?D~#5d([T;nJ = DAqfy9 ^)jrp@/o ɰ&6ٸT+Tɠj؎A:;0)Yp<\<0B k*ۥO2FD G0cۥB_HXޕA!A$B,D`(it Z[J~ЬَW+ EH.,225S*H+*QZTi (_֠RBoư(EYԐZf0贤h07JQPBcե< dXQkU(L"J02JP΀M WҖ 22>>U0BS~ 4H]{>Coұ~PeH`P R0#,ẠP~O(ӱ¥X4'ҫ*%'vI)zbҨ |:6K>K'iU*" oPFQjЁ:S(eĚ_4egVm}3L+Yc@Q1`|e%^b{: nn| r06m> tZ*("DHa0(hO Tz@*y#[aI{+ 4VQ(׫K qDu?aZ YP4mO~*,Jl76F1FG✔Jbcj$HA@TUU?L @#NX D tUZFU(JB@EA=;Fuѱ[TNTKgPdfFir̅JT1(oo(Y+,UU"uŝQ~YAW R خ5~ZZTb-. a0)0L@-QjthEѮ54!Ƞ *uQoH8Q&2V_*(?@o=Д)@cVAgT -F2iG)P%3j3*$ӫ2ʊ .2ء,+"QPyN:uh αZQiqqªVBgV\:g~c6^0 He<_b-n>QBj`^?!8sjRBjvؖ*.. AxFzP2 2p5 nټ3o,V/6~JhD%v~+ B H)a+rZZ xXXM!peI 9'# @ C12;d^ #$e.H"# Iyqv&e/\)@= I"D|HlLZ$7|IԑCDI٦L<4Tˎe'q!5\ сmvV_t/sB7,21")!ǽ 2Me-h]+""`7tycMǶ@m<W}9!FPMc46- dZa_ <aZ7Yѳ#T0 '<[ӏB,ZX';2 I5e0DU:1k|97L%jc!gociأ6l|`1wcۃp4ޒ5SN8F9߃ j'n3ds((LIw%㥙ԟ0@;A I9|SiEpY4W0QBr["7a%HH1B4+ΈY:2dytw;@E<S\Z0&$9z\X9ɷd\_RI3&*y%#BjjEF\NBu+"=>x:1پ}@q6c4 8Tm}2"<<$rod/Y_">l+ snAQ>> DdDwVD?"_N/|hKqH c)7aV$>#}?5y8NfDXD`Vj&T#nad!aoWP.,,K: d;dnv.H]XL=eSmk/+5L ԌxC;+/֝0 D_[8qZ81=5a4VihwDHz"OA)XBbm 9a'>x[yZ+umH&Ҩ/)Lދ:бZM?1<;.CrOYt2ӓ>G#2\e!DjN`5[V' (XefZ4eSWji\kS p ti$D _;8 m(q|Nvc&x#\LV mZHݖ3, (WS^.9ܡ2fOQ!I`R-h&nRZ;4Wk3Auo7czW0 'Li$B$MeNצɠ=tF$6f5kTBҥG mMmDdB ŒQ[۬FīY!fRj6M&`#\ 隓 Cvt*|EDPM'ɗ=Po)ePҜ/ΉM$j%dGEl@G`i\ xl}k6ペJFe 9@ǥ3i ;7e#0femw\7g>FlX&o|UH_!aQ)/+{:5[6zζ^DaLCb$s'L[8^`o*pqi\!!jvߡE35^R=59ྋ"^ n" İ$1S* 좽!hɛVUev}}=rwր?IoF  (n<p'JjѬ΅>rU_: ˳jNV \t|ɪK:מ+wꮮbu0Og9rJ$}%W5-p܅T8mf4tDW17_id 3Ƣ¦5]\]uQ>kWYwhvRؑK]B {{F5c$SX}pn9E%\\r{nN9 6ɢu$c\.a?y5]l<$35Ҩaӂ8=8qgmD#dO *1 wY9~5@#eHA QכkF8} [cQYKHɒ&Mg@cZB >kwPq B)mAScN"a;K`+dO|eT~,`3ݾ  ge ?iC6@ nPs^UT,$nN]+B{mn@ R-MÍJlBL@L0Y4i*.ܮrww#A0lN.q0LNkw=VŮNPs1d!,4rb>z1C1L#wPweXJD$;8 0;wH%*.m[x",[6խ6%㾌.ʹf>9''N{9lO}gYw]O6'V[3׺ʼ^ ]_YkFFM5#{O*.NPt}-r6c{_~<4Y\RTD_MCkq [[̅9g~vz~"犤;o"@ޠ+]op"꽶ፄQ{ v2ySڝin>]mSz|? >~own5=須VPHW礤)W(<^޶^, ^)?_=eOWZy5˥߿zUoZvw{%MGw҃KoG; g¦W=+䚝~[ώkl^9u|Q[QcRVgSV?,C[Ӻ!nG9>i?tZ25W߻ρ·.KSK+ccOUXPW6sꮑ&]y;OK{XlwxɃwGflc6qBỮsyCcؑ+?y. ԨsC.!k/dйYg ]ffjp׏7?&D"ܽq|+iN٭lnދUuOg(c6=pf_π}kԭx%]/W3 I=-r^BѰ=;< uI5R~vLWɹNwxV_k=2|ِ;w<~7.U)Vʛ+&NN[7hkNdCo 9ÉCZwҸ_ȟ\l7|0j×Nd!oGݴ}y;ܚ:s{#NOoV$>&gːSxqpț{y留'ľ_1v)uG`g݉{ϡU].ȍ1qF꥞%k\n޻W~I#9~~SuMaњXg8V^Լ}cc[Ԙ0'w GFnx¸={L~÷.3{7HPgE§ILWݿ+yyٛroonK?.pOq+;n1ו%ΏJ %Ÿt96緝㤮>YY`ەR]^Qk_^w*tUmO q{ޥ?nzXz9s5p5c*8"p8b-XFGe sAVŚ}s-]Zw ֿtKtǠeuukJg-|KϽ { oJLslcw:(,oh=Od'O'ްU믟ͨ>#n;uvb0˫٩Q_1~1[fV#!T5~Y~]xڔ'φ|t蓛n虻}fV Nh$^_hg}ͱ7&]<)Go-Yjʸ#~#cW h?>gT;?z>om/ԍܔrxm 燷%hy[k|MgVnT%2ڧႺ=WMיV_?8Wr^|/jt*kv׆fhԜGʏv4vFh$_b$tt&3xk=  rX3!iAkQ4N ՁiA+|k% "! 1o/-W֋1\z2+VŁʙr8$-Ä`Wxr/;e[@GOS־~=ۓ{4z9,]lPrYl7y}n a+Uf:LW2dAHΤHOwP.ш"ey׶V:|Vݩaƭ욲dk[W]F5`\t5`GtwqL1DbtC{xvi\E14xdLtafˠxBL]˴B+"#*˼Žh5H}<Dz#I=շ %7gvN1|ϻGnyB <4)~[\|gӓTWW7/'է}}}c*ޞ57Bn%N{pvo}ĉr̷:ooZ{r\I8l}㌇n]sĂG?,G }dMЍ\W[/ F\1Ž$%pC2V?3|K"#$7ؒD{;(~SQ{[1(^UA@5u@G|P̠FSh^H@^_mtf_Y\gz)0" $.r/qDЧv-DzD{H.Bw2p>ڵkESSq\ze%e 9g xnBCL:ݹA],FϹk# DkVB8mb#iLD8ntYuD#ux z"  #7S ,V ". ;*?5;" <_ ,\" !;media/img/trans.gif000066600000000053150472616010010221 0ustar00GIF89a!,D;media/img/windowsmedia.gif000066600000000637150472616010011574 0ustar00GIF89a?uS-ѩaY0@G愅p+fҎG,LWKqxwwV&^qKNCiiimKx+tnV^K~3fp!BWuWr(a;vTHo9!?," %lhhD 4],G:jͤ\fఄTs5 !*$/  ;-!&1/<'9;=7+; :78(3.2 "+%?>))'=., ? ., B 2%3cB(  ~;media/img/realmedia.gif000066600000000667150472616010011030 0ustar00GIF89a%RPM@kű@=;.+)c5xHVusq}$pX Jfff!,%' 0){for(m=j+1;m=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();tabfocus/editor_plugin_src.js000066600000005567150472616010012446 0ustar00/** * 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.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; tinymce.create('tinymce.plugins.TabFocusPlugin', { init : function(ed, url) { function tabCancel(ed, e) { if (e.keyCode === 9) return Event.cancel(e); } function tabHandler(ed, e) { var x, i, f, el, v; function find(d) { el = DOM.select(':input:enabled,*[tabindex]:not(iframe)'); function canSelectRecursive(e) { return e.nodeName==="BODY" || (e.type != 'hidden' && !(e.style.display == "none") && !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); } function canSelectInOldIe(el) { return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; } function isOldIe() { return tinymce.isIE6 || tinymce.isIE7; } function canSelect(el) { return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); } each(el, function(e, i) { if (e.id == ed.id) { x = i; return false; } }); if (d > 0) { for (i = x + 1; i < el.length; i++) { if (canSelect(el[i])) return el[i]; } } else { for (i = x - 1; i >= 0; i--) { if (canSelect(el[i])) return el[i]; } } return null; } if (e.keyCode === 9) { v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); if (v.length == 1) { v[1] = v[0]; v[0] = ':prev'; } // Find element to focus if (e.shiftKey) { if (v[0] == ':prev') el = find(-1); else el = DOM.get(v[0]); } else { if (v[1] == ':next') el = find(1); else el = DOM.get(v[1]); } if (el) { if (el.id && (ed = tinymce.get(el.id || el.name))) ed.focus(); else window.setTimeout(function() { if (!tinymce.isWebKit) window.focus(); el.focus(); }, 10); return Event.cancel(e); } } } ed.onKeyUp.add(tabCancel); if (tinymce.isGecko) { ed.onKeyPress.add(tabHandler); ed.onKeyDown.add(tabCancel); } else ed.onKeyDown.add(tabHandler); }, getInfo : function() { return { longname : 'Tabfocus', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); })(); nonbreaking/editor_plugin.js000066600000001660150472616010012254 0ustar00(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();nonbreaking/editor_plugin_src.js000066600000002674150472616010013131 0ustar00/** * 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() { tinymce.create('tinymce.plugins.Nonbreaking', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceNonBreaking', function() { ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? ' ' : ' '); }); // Register buttons ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'}); if (ed.getParam('nonbreaking_force_tab')) { ed.onKeyDown.add(function(ed, e) { if (e.keyCode == 9) { e.preventDefault(); ed.execCommand('mceNonBreaking'); ed.execCommand('mceNonBreaking'); ed.execCommand('mceNonBreaking'); } }); } }, getInfo : function() { return { longname : 'Nonbreaking space', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } // Private methods }); // Register plugin tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking); })();autosave/editor_plugin.js000066600000006760150472616010011614 0ustar00(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s| |<\/?p[^>]*>|]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()]*>|]*>/gi, "").length > 0) { // Show confirm dialog if the editor isn't empty ed.windowManager.confirm( PLUGIN_NAME + ".warning_message", function(ok) { if (ok) self.restoreDraft(); } ); } else self.restoreDraft(); } }); // Enable/disable restoredraft button depending on if there is a draft stored or not ed.onNodeChange.add(function() { var controlManager = ed.controlManager; if (controlManager.get(RESTORE_DRAFT)) controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft()); }); ed.onInit.add(function() { // Check if the user added the restore button, then setup auto storage logic if (ed.controlManager.get(RESTORE_DRAFT)) { // Setup storage engine self.setupStorage(ed); // Auto save contents each interval time setInterval(function() { self.storeDraft(); ed.nodeChanged(); }, settings.autosave_interval); } }); /** * This event gets fired when a draft is stored to local storage. * * @event onStoreDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onStoreDraft = new Dispatcher(self); /** * This event gets fired when a draft is restored from local storage. * * @event onStoreDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onRestoreDraft = new Dispatcher(self); /** * This event gets fired when a draft removed/expired. * * @event onRemoveDraft * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event. * @param {Object} draft Draft object containing the HTML contents of the editor. */ self.onRemoveDraft = new Dispatcher(self); // Add ask before unload dialog only add one unload handler if (!unloadHandlerAdded) { window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler; unloadHandlerAdded = TRUE; } }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @method getInfo * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Auto save', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, /** * Returns an expiration date UTC string. * * @method getExpDate * @return {String} Expiration date UTC string. */ getExpDate : function() { return new Date( new Date().getTime() + this.editor.settings.autosave_retention ).toUTCString(); }, /** * This method will setup the storage engine. If the browser has support for it. * * @method setupStorage */ setupStorage : function(ed) { var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK"; self.key = PLUGIN_NAME + ed.id; // Loop though each storage engine type until we find one that works tinymce.each([ function() { // Try HTML5 Local Storage if (localStorage) { localStorage.setItem(testKey, testVal); if (localStorage.getItem(testKey) === testVal) { localStorage.removeItem(testKey); return localStorage; } } }, function() { // Try HTML5 Session Storage if (sessionStorage) { sessionStorage.setItem(testKey, testVal); if (sessionStorage.getItem(testKey) === testVal) { sessionStorage.removeItem(testKey); return sessionStorage; } } }, function() { // Try IE userData if (tinymce.isIE) { ed.getElement().style.behavior = "url('#default#userData')"; // Fake localStorage on old IE return { autoExpires : TRUE, setItem : function(key, value) { var userDataElement = ed.getElement(); userDataElement.setAttribute(key, value); userDataElement.expires = self.getExpDate(); try { userDataElement.save("TinyMCE"); } catch (e) { // Ignore, saving might fail if "Userdata Persistence" is disabled in IE } }, getItem : function(key) { var userDataElement = ed.getElement(); try { userDataElement.load("TinyMCE"); return userDataElement.getAttribute(key); } catch (e) { // Ignore, loading might fail if "Userdata Persistence" is disabled in IE return null; } }, removeItem : function(key) { ed.getElement().removeAttribute(key); } }; } }, ], function(setup) { // Try executing each function to find a suitable storage engine try { self.storage = setup(); if (self.storage) return false; } catch (e) { // Ignore } }); }, /** * This method will store the current contents in the the storage engine. * * @method storeDraft */ storeDraft : function() { var self = this, storage = self.storage, editor = self.editor, expires, content; // Is the contents dirty if (storage) { // If there is no existing key and the contents hasn't been changed since // it's original value then there is no point in saving a draft if (!storage.getItem(self.key) && !editor.isDirty()) return; // Store contents if the contents if longer than the minlength of characters content = editor.getContent({draft: true}); if (content.length > editor.settings.autosave_minlength) { expires = self.getExpDate(); // Store expiration date if needed IE userData has auto expire built in if (!self.storage.autoExpires) self.storage.setItem(self.key + "_expires", expires); self.storage.setItem(self.key, content); self.onStoreDraft.dispatch(self, { expires : expires, content : content }); } } }, /** * This method will restore the contents from the storage engine back to the editor. * * @method restoreDraft */ restoreDraft : function() { var self = this, storage = self.storage, content; if (storage) { content = storage.getItem(self.key); if (content) { self.editor.setContent(content); self.onRestoreDraft.dispatch(self, { content : content }); } } }, /** * This method will return true/false if there is a local storage draft available. * * @method hasDraft * @return {boolean} true/false state if there is a local draft. */ hasDraft : function() { var self = this, storage = self.storage, expDate, exists; if (storage) { // Does the item exist at all exists = !!storage.getItem(self.key); if (exists) { // Storage needs autoexpire if (!self.storage.autoExpires) { expDate = new Date(storage.getItem(self.key + "_expires")); // Contents hasn't expired if (new Date().getTime() < expDate.getTime()) return TRUE; // Remove it if it has self.removeDraft(); } else return TRUE; } } return false; }, /** * Removes the currently stored draft. * * @method removeDraft */ removeDraft : function() { var self = this, storage = self.storage, key = self.key, content; if (storage) { // Get current contents and remove the existing draft content = storage.getItem(key); storage.removeItem(key); storage.removeItem(key + "_expires"); // Dispatch remove event if we had any contents if (content) { self.onRemoveDraft.dispatch(self, { content : content }); } } }, "static" : { // Internal unload handler will be called before the page is unloaded _beforeUnloadHandler : function(e) { var msg; tinymce.each(tinyMCE.editors, function(ed) { // Store a draft for each editor instance if (ed.plugins.autosave) ed.plugins.autosave.storeDraft(); // Never ask in fullscreen mode if (ed.getParam("fullscreen_is_enabled")) return; // Setup a return message if the editor is dirty if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload")) msg = ed.getLang("autosave.unload_msg"); }); return msg; } } }); tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave); })(tinymce); directionality/editor_plugin.js000066600000002465150472616010013006 0ustar00(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();directionality/editor_plugin_src.js000066600000003712150472616010013651 0ustar00/** * 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() { tinymce.create('tinymce.plugins.Directionality', { init : function(ed, url) { var t = this; t.editor = ed; ed.addCommand('mceDirectionLTR', function() { var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); if (e) { if (ed.dom.getAttrib(e, "dir") != "ltr") ed.dom.setAttrib(e, "dir", "ltr"); else ed.dom.setAttrib(e, "dir", ""); } ed.nodeChanged(); }); ed.addCommand('mceDirectionRTL', function() { var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock); if (e) { if (ed.dom.getAttrib(e, "dir") != "rtl") ed.dom.setAttrib(e, "dir", "rtl"); else ed.dom.setAttrib(e, "dir", ""); } ed.nodeChanged(); }); ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'}); ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'}); ed.onNodeChange.add(t._nodeChange, t); }, getInfo : function() { return { longname : 'Directionality', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods _nodeChange : function(ed, cm, n) { var dom = ed.dom, dir; n = dom.getParent(n, dom.isBlock); if (!n) { cm.setDisabled('ltr', 1); cm.setDisabled('rtl', 1); return; } dir = dom.getAttrib(n, 'dir'); cm.setActive('ltr', dir == "ltr"); cm.setDisabled('ltr', 0); cm.setActive('rtl', dir == "rtl"); cm.setDisabled('rtl', 0); } }); // Register plugin tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality); })();inlinepopups/editor_plugin.js000066600000027205150472616010012507 0ustar00(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.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(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_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:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","
        "));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();inlinepopups/template.htm000066600000030313150472616010011624 0ustar00 Template for dialogs
        Blured
        Content
        Statusbar text.
        Focused
        Content
        Statusbar text.
        Statusbar
        Content
        Statusbar text.
        Statusbar, Resizable
        Content
        Statusbar text.
        Resizable, Maximizable
        Content
        Statusbar text.
        Blurred, Maximizable, Statusbar, Resizable
        Content
        Statusbar text.
        Maximized, Maximizable, Minimizable
        Content
        Statusbar text.
        Blured
        Content
        Statusbar text.
        Alert
        This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message.
        Ok
        Confirm
        This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message. This is a very long error message.
        Ok Cancel
        inlinepopups/skins/clearlooks2/window.css000066600000014741150472616010014676 0ustar00/* Clearlooks 2 */ /* Reset */ .clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block} /* General */ .clearlooks2 {position:absolute; direction:ltr} .clearlooks2 .mceWrapper {position:static} .mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%} .clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)} .clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none} /* Top */ .clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px} .clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)} .clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)} .clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0} .clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold} .clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0} .clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px} .clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0} .clearlooks2 .mceFocus .mceTop span {color:#FFF} /* Middle */ .clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0} .clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)} .clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0} .clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF} .clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)} /* Bottom */ .clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px} .clearlooks2 .mceBottom {left:0; bottom:0; width:100%} .clearlooks2 .mceBottom div {top:0} .clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px} .clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px} .clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0} .clearlooks2 .mceBottom span {display:none} .clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px} .clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0} .clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px} .clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0} .clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px} /* Actions */ .clearlooks2 a {width:29px; height:16px; top:3px;} .clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0} .clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0} .clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0} .clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0} .clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px} .clearlooks2 .mceMovable .mceMove {display:block} .clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px} .clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px} .clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px} .clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px} .clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} .clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px} .clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px} .clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px} .clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px} /* Resize */ .clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px} .clearlooks2 .mceResizable .mceResize {display:block} .clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none} .clearlooks2 .mceMinimizable .mceMin {display:block} .clearlooks2 .mceMaximizable .mceMax {display:block} .clearlooks2 .mceMaximized .mceMed {display:block} .clearlooks2 .mceMaximized .mceMax {display:none} .clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize} .clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize} .clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize} .clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;} .clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize} .clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize} .clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize} .clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize} /* Alert/Confirm */ .clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0} .clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px} .clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal} .clearlooks2 a:hover {font-weight:bold;} .clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5} .clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px} .clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)} .clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px} .clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto} .clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} inlinepopups/skins/clearlooks2/img/horizontal.gif000066600000001401150472616010016276 0ustar00GIF89a-P$%'êu}~鳧ùȿǵ=:8!.,-PpH,$el:ШtJVSجvzxL.hznhN% !$"HNXȰÇ#J\@ŋ3jܨǏ CI2ɓ(S\ɲ%0cʜI8sɳ JѣH (]ʴӧPJJիXjׯ`Ê۠ٳhӪ]˶۷o!ȝKݻx˗ LÈ'vǐ#KL˘3kyϠCMӨQ3Xͺװc@۸s޽ Nȓ+_μУK>݄سkν;ËOӫ_Ͼ_˟Ͽ(h& 6 „Vhfyv!x.($h(,0(.;inlinepopups/skins/clearlooks2/img/vertical.gif000066600000000124150472616010015717 0ustar00GIF87a , @!(AK( 8vu)~*F ;inlinepopups/skins/clearlooks2/img/button.gif000066600000000420150472616010015420 0ustar00GIF87aPccc,PPC8;qdihjLm,tJxpH<H1ɜ-P@ZجvvoްxL΂贚z^6|>~vz"w7ħ/! ;inlinepopups/skins/clearlooks2/img/confirm.gif000066600000001613150472616010015547 0ustar00GIF87a y7*T xg(Z[3ʜ[ūu=ѻnKc+؈,Meх+9CRڃL5\D~z3~ %zn)E"<jT,-E΂-wIܕ@T8»aʡ_Ȯ}I:TµІ2aû{_}a݊#׳^]ݏ1ƘPőU{79P|y, xx O O x]H[#f#[H]I_f_I #JE# FW̯F œɽMMy T =yQ QPf~8 *8瀓 j{Aj zR3|,dп$Ədp #Aw=`"=Phs$ `AQiph)8ډMQɈT@C P⽓-NU;C2 ^ V%rΡfwtd> q yC:j(SMu! C@k+S&YI6[1!x a$mXT6>GX@CKR$9OƄc'#X FE ys=@…&łܭra ֱÉ}Up-H"FčI;inlinepopups/skins/clearlooks2/img/alert.gif000066600000001452150472616010015222 0ustar00GIF87a {nn \\ܣ<<66CCJJ888CCdd--QQ33yyWWiivvkj<<llbb$$uuEE׎ڴMLpp++$$eeKKRRÌͳ==AAdd::))::JJjjWWPP((;;ħɣп%%%ƪ00ccIIϺ̱֘~ȟ^]עUU,,ڌyy||٭QPNNđƘBB__??mm 㺺߀bbսwv, z{k1q1/r6#n0Sw((E{0*44<:{l y$W 7za=t^ LZf]y[dD'L1t%oAU' &6 >Uc-ܴ#K%QlÆs%(Ñ"<88Cpj":)Fj$&s_xS-*B",d yj9HǬ[4iuG  HhACvfCˀZ-aH˻xtfBŃ|1 vPBݑѶɣA B(CӨH倠4r A!+r=ąب !üЛ fЙ?$ν?f ӧG@;inlinepopups/skins/clearlooks2/img/buttons.gif000066600000002253150472616010015611 0ustar00GIF89at0n{Q[c787k|`r~WdpZiu^n|\kyy{x!,t0Fdi&l;nr-bA|c#B,< Ak6LTL9:z:9D;{>9u|ͻ߿u}Ả?5سk^}{ޱw߾u?~˟?*&{P5 6蠃 >@ '>HaJ] Thpb*B/17X\60DbHNUF7ALdP"YeS2 ې[F))iPyfd)fn&`&w U|矀g~G(,ꨟP 餔Vj^馒f駔z *Q)`ꩨ*R 묧J[+XfkU T*`&.6 JK-k\n+W޺njعƞXnټλY^oڿ Zy\[fE-'1ʕMpƲ'2v!{{%ww) (s|57\ l2+ b!^hv F@$T#;5,v>v5xyƪLMep')q7)fy ~>*yz(/y 0~>j(Jz{+Ȯ>k뮿 {F{l/{j;inlinepopups/skins/clearlooks2/img/corners.gif000066600000001615150472616010015567 0ustar00GIF89a'I=:8 }݂~ދ釚uù볧η̴%+ҭٴ!I,'@II)HH)H#@G 9 G@91, 1,I4%C$%4$CƯ##H/./.ĭH-D /yX%Sb B"h(EIb SB>(P "(pBaJ &=Ip03HUt`SgfAV UUa" ݹqe+o߽(] *!n@AY)@ ڊч ؈:j> `#} ܀B g FFrWwPNSرrԭ+N|')); Event.add(id, 'keyup', function(evt) { var VK_ESCAPE = 27; if (evt.keyCode === VK_ESCAPE) { f.button_func(false); return Event.cancel(evt); } }); Event.add(id, 'keydown', function(evt) { var cancelButton, VK_TAB = 9; if (evt.keyCode === VK_TAB) { cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0]; if (cancelButton && cancelButton !== evt.target) { cancelButton.focus(); } else { DOM.get(id + '_ok').focus(); } return Event.cancel(evt); } }); } // Register events mdf = Event.add(id, 'mousedown', function(e) { var n = e.target, w, vp; w = t.windows[id]; t.focus(id); if (n.nodeName == 'A' || n.nodeName == 'a') { if (n.className == 'mceClose') { t.close(null, id); return Event.cancel(e); } else if (n.className == 'mceMax') { w.oldPos = w.element.getXY(); w.oldSize = w.element.getSize(); vp = DOM.getViewPort(); // Reduce viewport size to avoid scrollbars vp.w -= 2; vp.h -= 2; w.element.moveTo(vp.x, vp.y); w.element.resizeTo(vp.w, vp.h); DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight}); DOM.addClass(id + '_wrapper', 'mceMaximized'); } else if (n.className == 'mceMed') { // Reset to old size w.element.moveTo(w.oldPos.x, w.oldPos.y); w.element.resizeTo(w.oldSize.w, w.oldSize.h); w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight); DOM.removeClass(id + '_wrapper', 'mceMaximized'); } else if (n.className == 'mceMove') return t._startDrag(id, e, n.className); else if (DOM.hasClass(n, 'mceResize')) return t._startDrag(id, e, n.className.substring(13)); } }); clf = Event.add(id, 'click', function(e) { var n = e.target; t.focus(id); if (n.nodeName == 'A' || n.nodeName == 'a') { switch (n.className) { case 'mceClose': t.close(null, id); return Event.cancel(e); case 'mceButton mceOk': case 'mceButton mceCancel': f.button_func(n.className == 'mceButton mceOk'); return Event.cancel(e); } } }); // Make sure the tab order loops within the dialog. Event.add([id + '_left', id + '_right'], 'focus', function(evt) { var iframe = DOM.get(id + '_ifr'); if (iframe) { var body = iframe.contentWindow.document.body; var focusable = DOM.select(':input:enabled,*[tabindex=0]', body); if (evt.target.id === (id + '_left')) { focusable[focusable.length - 1].focus(); } else { focusable[0].focus(); } } else { DOM.get(id + '_ok').focus(); } }); // Add window w = t.windows[id] = { id : id, mousedown_func : mdf, click_func : clf, element : new Element(id, {blocker : 1, container : 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 == 0 && 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 DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true'); } 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.x, top : vp.y, width : vp.w - 2, height : vp.h - 2}); DOM.setAttrib(id, 'aria-hidden', 'false'); t.focus(id); t._fixIELayout(id, 1); // Focus ok button if (DOM.get(id + '_ok')) DOM.get(id + '_ok').focus(); t.count++; return w; }, focus : function(id) { var t = this, w; if (w = 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; if (w.focussedElement) { w.focussedElement.focus(); } else if (DOM.get(id + '_ok')) { DOM.get(w.id + '_ok').focus(); } else if (DOM.get(w.id + '_ifr')) { DOM.get(w.id + '_ifr').focus(); } } }, _addAll : function(te, ne) { var i, n, t = this, dom = 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=2; i ix) { fw = w; ix = w.zIndex; } }); return fw; }, setTitle : function(w, ti) { var e; w = this._findId(w); if (e = DOM.get(w + '_title')) e.innerHTML = DOM.encode(ti); }, alert : function(txt, cb, s) { var t = this, w; w = t.open({ title : t, type : 'alert', button_func : function(s) { if (cb) cb.call(s || t, s); t.close(null, w.id); }, content : DOM.encode(t.editor.getLang(txt, txt)), inline : 1, width : 400, height : 130 }); }, confirm : function(txt, cb, s) { var t = this, w; w = t.open({ title : t, type : 'confirm', button_func : function(s) { if (cb) cb.call(s || t, s); t.close(null, w.id); }, content : DOM.encode(t.editor.getLang(txt, txt)), inline : 1, width : 400, height : 130 }); }, // Internal functions _findId : function(w) { var t = this; if (typeof(w) == 'string') return w; each(t.windows, function(wo) { var ifr = DOM.get(wo.id + '_ifr'); if (ifr && w == ifr.contentWindow) { w = wo.id; return false; } }); return w; }, _fixIELayout : function(id, s) { var w, img; 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 e = DOM.get(id + '_resize_' + v); DOM.setStyles(e, { width : s ? e.clientWidth : '', height : s ? e.clientHeight : '', cursor : DOM.getStyle(e, 'cursor', 1) }); DOM.setStyle(id + "_bottom", 'bottom', '-1px'); e = 0; }); // Fixes graphics glitch if (w = 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(e, i) { 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); })(); advimage/image.htm000066600000027113150472616010010127 0ustar00 {#advimage_dlg.dialog_title}
        {#advimage_dlg.general}
        {#advimage_dlg.preview}
        {#advimage_dlg.tab_appearance}
        {#advimage_dlg.example_img} Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
        x px
         
        {#advimage_dlg.swap_image}
         
         
        {#advimage_dlg.misc}
         
        advimage/css/advimage.css000066600000001223150472616010011404 0ustar00#src_list, #over_list, #out_list {width:280px;} .mceActionPanel {margin-top:7px;} .alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;} .checkbox {border:0;} .panel_wrapper div.current {height:305px;} #prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} #align, #classlist {width:150px;} #width, #height {vertical-align:middle; width:50px; text-align:center;} #vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;} #class_list {width:180px;} input {width: 280px;} #constrain, #onmousemovecheck {width:auto;} #id, #dir, #lang, #usemap, #longdesc {width:200px;} advimage/editor_plugin.js000066600000001427150472616010011535 0ustar00(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();advimage/js/image.js000066600000030070150472616010010363 0ustar00var ImageDialog = { preInit : function() { var url; tinyMCEPopup.requireLangPack(); if (url = tinyMCEPopup.getParam("external_image_list_url")) document.write(''); }, init : function(ed) { var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'); tinyMCEPopup.resizeToInnerSize(); this.fillClassList('class_list'); this.fillFileList('src_list', fl); this.fillFileList('over_list', fl); this.fillFileList('out_list', fl); 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.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\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.replace(/ /g, '%20'), 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 { tinymce.each(args, function(value, name) { if (value === "") { delete args[name]; } }); ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); ed.undoManager.add(); } tinyMCEPopup.editor.execCommand('mceRepaint'); tinyMCEPopup.editor.focus(); 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 = typeof(l) === 'function' ? 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, b, bStyle, bColor, v, isIE = tinymce.isIE, 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') { b = img.style.border ? img.style.border.split(' ') : []; bStyle = dom.getStyle(img, 'border-style'); bColor = dom.getStyle(img, 'border-color'); dom.setStyle(img, 'border', ''); v = f.border.value; if (v || v == '0') { if (v == '0') img.style.border = isIE ? '0' : '0 none none'; else { if (b.length == 3 && b[isIE ? 2 : 1]) bStyle = b[isIE ? 2 : 1]; else if (!bStyle || bStyle == 'none') bStyle = 'solid'; if (b.length == 3 && b[isIE ? 0 : 2]) bColor = b[isIE ? 0 : 2]; else if (!bColor || bColor == 'none') bColor = 'black'; img.style.border = v + 'px ' + bStyle + ' ' + bColor; } } } // 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', ''); else tinyMCEPopup.dom.setHTML('prev', ''); } }; ImageDialog.preInit(); tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); advimage/langs/ru_dlg.js000066600000006721150472616010011253 0ustar00tinyMCE.addI18n('ru.advimage_dlg',{ tab_general:"\u041E\u0431\u0449\u0435\u0435", tab_appearance:"\u0412\u0438\u0434", tab_advanced:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E", general:"\u041E\u0431\u0449\u0435\u0435", title:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", preview:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440", constrain_proportions:"\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0438\u0438", langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u044F\u0437\u044B\u043A\u0430", langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430", long_desc:"Long description link", style:"\u0421\u0442\u0438\u043B\u044C", classes:"\u041A\u043B\u0430\u0441\u0441\u044B", ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", id:"Id", map:"Image map", swap_image:"Swap image", alt_image:"\u0410\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", mouseover:"\u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438", mouseout:"\u043F\u0440\u0438 \u043E\u0442\u0432\u043E\u0434\u0435", misc:"\u0414\u0440\u0443\u0433\u043E\u0435", example_img:"\u0412\u0438\u0434 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off", dialog_title:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C / \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", src:"\u0410\u0434\u0440\u0435\u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", alt:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", border:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430", dimensions:"\u0420\u0430\u0437\u043C\u0435\u0440\u044B", vspace:"\u0412\u0435\u0440\u0442. \u043E\u0442\u0441\u0442\u0443\u043F", hspace:"\u0413\u043E\u0440\u0438\u0437. \u043E\u0442\u0441\u0442\u0443\u043F", align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435", align_baseline:"\u041F\u043E \u0431\u0430\u0437\u043E\u0432\u043E\u0439 \u043B\u0438\u043D\u0438\u0438", align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E", align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443", align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E", align_texttop:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430", align_textbottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E \u0442\u0435\u043A\u0441\u0442\u0430", align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", image_list:"\u0421\u043F\u0438\u0441\u043E\u043A \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439" });advimage/langs/en_dlg.js000066600000002366150472616010011230 0ustar00tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"});advimage/editor_plugin_src.js000066600000002476150472616010012411 0ustar00/** * 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() { tinymce.create('tinymce.plugins.AdvancedImagePlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceAdvImage', function() { // Internal image object like a flash placeholder if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1) return; ed.windowManager.open({ file : url + '/image.htm', width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)), height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('image', { title : 'advimage.image_desc', cmd : 'mceAdvImage' }); }, getInfo : function() { return { longname : 'Advanced image', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin); })();advimage/img/sample.gif000066600000003130150472616010011050 0ustar00GIF89a--~~~}}}|||zzzxxxwwxvvvtttrrrpppmmmiiieeebbbYYY!,--%JPJS2GPINC6#>[b[cHU[V]O;"HVLLNQH8#ń00,,8QL88;;GC7ԃYYSS;LPQQa aXhl8TYC~!Doٸ9,A<9(Sx% 5b¸QǐfXb,mXb 'X(Ղ 5 qƣE X]E(3,C49"<.eIێ">n wUI($ܹ=a#I4Ӕ5bM $@0kZK4aÚ 'D~1AA IDɐ@} 5Ք-"d Gn"umaÅ τiG^JZGk'[H#CGȚ2OiFΓ DxjPA` .U-0Ca G=hцmE$AC.x u$}EșkD TIo7(euV` /`bqƓOv!DO(rQB 1pQcdhaQ!vqp *B !leFiDn1,қ]TQ #| a&qahd[ vE8qKn/``o葇hU(3r, nP@w1dGdtawɱVAa8 c7ЀEjX!BA ]LL!e e!-hG@ t O &А%0DLцdyqF#İOȀ@+@f&frjD TW]&f`S[m@lp}YaAg@o.ׁ uvA1mRMuBK=4Qsj>Pቛm@Nxp,<r '̗G@z"H'/PDh\7 ?X<vXa0 n1T8{C&&C6ATA lpCB9xȃddIP gH'`! /Bo02a| f0 HL@a P:d 2".P³2qI;spellchecker/css/content.css000066600000000141150472616010012166 0ustar00.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;} spellchecker/editor_plugin.js000066600000015334150472616010012426 0ustar00(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();spellchecker/editor_plugin_src.js000066600000026522150472616010013276 0ustar00/** * 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 JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; tinymce.create('tinymce.plugins.SpellcheckerPlugin', { getInfo : function() { return { longname : 'Spellchecker', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, init : function(ed, url) { var t = this, cm; t.url = url; t.editor = ed; t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}"); if (t.rpcUrl == '{backend}') { // Sniff if the browser supports native spellchecking (Don't know of a better way) if (tinymce.isIE) return; t.hasSupport = true; // Disable the context menu when spellchecking is active ed.onContextMenu.addToTop(function(ed, e) { if (t.active) return false; }); } // Register commands ed.addCommand('mceSpellCheck', function() { if (t.rpcUrl == '{backend}') { // Enable/disable native spellchecker t.editor.getBody().spellcheck = t.active = !t.active; return; } if (!t.active) { ed.setProgressState(1); t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { if (r.length > 0) { t.active = 1; t._markWords(r); ed.setProgressState(0); ed.nodeChanged(); } else { ed.setProgressState(0); if (ed.getParam('spellchecker_report_no_misspellings', true)) ed.windowManager.alert('spellchecker.no_mpell'); } }); } else t._done(); }); if (ed.settings.content_css !== false) ed.contentCSS.push(url + '/css/content.css'); ed.onClick.add(t._showMenu, t); ed.onContextMenu.add(t._showMenu, t); ed.onBeforeGetContent.add(function() { if (t.active) t._removeWords(); }); ed.onNodeChange.add(function(ed, cm) { cm.setActive('spellchecker', t.active); }); ed.onSetContent.add(function() { t._done(); }); ed.onBeforeGetContent.add(function() { t._done(); }); ed.onBeforeExecCommand.add(function(ed, cmd) { if (cmd == 'mceFullScreen') t._done(); }); // Find selected language t.languages = {}; each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { if (k.indexOf('+') === 0) { k = k.substring(1); t.selectedLang = v; } t.languages[k] = v; }); }, createControl : function(n, cm) { var t = this, c, ed = t.editor; if (n == 'spellchecker') { // Use basic button if we use the native spellchecker if (t.rpcUrl == '{backend}') { // Create simple toggle button if we have native support if (t.hasSupport) c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); return c; } c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); c.onRenderMenu.add(function(c, m) { m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); each(t.languages, function(v, k) { var o = {icon : 1}, mi; o.onclick = function() { if (v == t.selectedLang) { return; } mi.setSelected(1); t.selectedItem.setSelected(0); t.selectedItem = mi; t.selectedLang = v; }; o.title = k; mi = m.add(o); mi.setSelected(v == t.selectedLang); if (v == t.selectedLang) t.selectedItem = mi; }) }); return c; } }, // Internal functions _walk : function(n, f) { var d = this.editor.getDoc(), w; if (d.createTreeWalker) { w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); while ((n = w.nextNode()) != null) f.call(this, n); } else tinymce.walk(n, f, 'childNodes'); }, _getSeparators : function() { var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c'); // Build word separator regexp for (i=0; i elements content is broken after spellchecking. // Bug #1408: Preceding whitespace characters are removed // @TODO: I'm not sure that both are still issues on IE9. if (tinymce.isIE) { // Enclose mispelled words with temporal tag v = v.replace(rx, '$1$2'); // Loop over the content finding mispelled words while ((pos = v.indexOf('')) != -1) { // Add text node for the content before the word txt = v.substring(0, pos); if (txt.length) { node = doc.createTextNode(dom.decode(txt)); elem.appendChild(node); } v = v.substring(pos+10); pos = v.indexOf(''); txt = v.substring(0, pos); v = v.substring(pos+11); // Add span element for the word elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt)); } // Add text node for the rest of the content if (v.length) { node = doc.createTextNode(dom.decode(v)); elem.appendChild(node); } } else { // Other browsers preserve whitespace characters on innerHTML usage elem.innerHTML = v.replace(rx, '$1$2'); } // Finally, replace the node with the container dom.replace(elem, n); } }); se.setRng(r); }, _showMenu : function(ed, e) { var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target; e = 0; // Fixes IE memory leak if (!m) { m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'}); t._menu = m; } if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) { m.removeAll(); m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) { var ignoreRpc; m.removeAll(); if (r.length > 0) { m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); each(r, function(v) { m.add({title : v, onclick : function() { dom.replace(ed.getDoc().createTextNode(v), wordSpan); t._checkDone(); }}); }); m.addSeparator(); } else m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); if (ed.getParam('show_ignore_words', true)) { ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", ''); m.add({ title : 'spellchecker.ignore_word', onclick : function() { var word = wordSpan.innerHTML; dom.remove(wordSpan, 1); t._checkDone(); // tell the server if we need to if (ignoreRpc) { ed.setProgressState(1); t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) { ed.setProgressState(0); }); } } }); m.add({ title : 'spellchecker.ignore_words', onclick : function() { var word = wordSpan.innerHTML; t._removeWords(dom.decode(word)); t._checkDone(); // tell the server if we need to if (ignoreRpc) { ed.setProgressState(1); t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) { ed.setProgressState(0); }); } } }); } if (t.editor.getParam("spellchecker_enable_learn_rpc")) { m.add({ title : 'spellchecker.learn_word', onclick : function() { var word = wordSpan.innerHTML; dom.remove(wordSpan, 1); t._checkDone(); ed.setProgressState(1); t._sendRPC('learnWord', [t.selectedLang, word], function(r) { ed.setProgressState(0); }); } }); } m.update(); }); p1 = DOM.getPos(ed.getContentAreaContainer()); m.settings.offset_x = p1.x; m.settings.offset_y = p1.y; ed.selection.select(wordSpan); p1 = dom.getPos(wordSpan); m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y); return tinymce.dom.Event.cancel(e); } else m.hideMenu(); }, _checkDone : function() { var t = this, ed = t.editor, dom = ed.dom, o; each(dom.select('span'), function(n) { if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { o = true; return false; } }); if (!o) t._done(); }, _done : function() { var t = this, la = t.active; if (t.active) { t.active = 0; t._removeWords(); if (t._menu) t._menu.hideMenu(); if (la) t.editor.nodeChanged(); } }, _sendRPC : function(m, p, cb) { var t = this; JSONRequest.sendRPC({ url : t.rpcUrl, method : m, params : p, success : cb, error : function(e, x) { t.editor.setProgressState(0); t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); } }); } }); // Register plugin tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); })(); spellchecker/img/wline.gif000066600000000056150472616010011600 0ustar00GIF89a**!,Df;lists/editor_plugin.js000066600000033666150472616010011130 0ustar00(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var J="ESCAPE";var z="PARAGRAPH";var N="UNKNOWN";var x=N;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function M(U){if(E(U)){return v}else{if(A(U)&&w()){return N}else{if(A(U)&&F()){return s}else{return N}}}}function D(U,V){if(x==v||x==s||tinymce.isGecko&&x==J){r.cancel(V)}}function C(){var U=y.selection.getRng(true);var V=U.startContainer;if(V.nodeType==3){var W=V.nodeValue;if(tinymce.isIE9&&W.length>1&&W.charCodeAt(W.length-1)==32){return(U.endOffset==W.length-1)}else{return(U.endOffset==W.length)}}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function I(){var W=y.selection.getNode();var V="h1,h2,h3,h4,h5,h6,p,div";var U=y.dom.is(W,V)&&W.parentNode.tagName==="LI"&&W.parentNode.lastChild===W;return y.selection.isCollapsed()&&U&&C()}function K(W,Y){if(A(Y)&&I()){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinymce.isIE6||tinymce.isIE7||tinyMCE.isIE8){W.selection.setCursorLocation(V,1)}else{W.selection.setCursorLocation(V,0)}Y.preventDefault()}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=N;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==J){if(tinymce.isIE6||tinymce.isIE7||tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function L(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){L(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;L(U,W)}}}function Q(V,Z){function W(ad,aa){var ac=[];var ae=new tinymce.dom.TreeWalker(aa,ad);for(var ab=ae.current();ab;ab=ae.next()){if(V.dom.is(ab,"ol,ul,li")){ac.push(ab)}}return ac}if(Z.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Y=V.dom.getParent(U,"ol,ul");if(Y&&Y.firstChild===U){var X=W(Y,U);V.execCommand("Outdent",false,X);V.undoManager.add();return r.cancel(Z)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=M(V)});y.onKeyDown.add(D);y.onKeyDown.add(u);y.onKeyDown.add(K);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='
        '}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks()}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x)}function C(s,t){return t>=0&&s.hasChildNodes()&&t0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed;var t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());lists/editor_plugin_src.js000066600000075223150472616010011772 0ustar00/** * editor_plugin_src.js * * Copyright 2011, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { var each = tinymce.each, Event = tinymce.dom.Event, bookmark; // Skips text nodes that only contain whitespace since they aren't semantically important. function skipWhitespaceNodes(e, next) { while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) { e = next(e); } return e; } function skipWhitespaceNodesBackwards(e) { return skipWhitespaceNodes(e, function(e) { return e.previousSibling; }); } function skipWhitespaceNodesForwards(e) { return skipWhitespaceNodes(e, function(e) { return e.nextSibling; }); } function hasParentInList(ed, e, list) { return ed.dom.getParent(e, function(p) { return tinymce.inArray(list, p) !== -1; }); } function isList(e) { return e && (e.tagName === 'OL' || e.tagName === 'UL'); } function splitNestedLists(element, dom) { var tmp, nested, wrapItem; tmp = skipWhitespaceNodesBackwards(element.lastChild); while (isList(tmp)) { nested = tmp; tmp = skipWhitespaceNodesBackwards(nested.previousSibling); } if (nested) { wrapItem = dom.create('li', { style: 'list-style-type: none;'}); dom.split(element, nested); dom.insertAfter(wrapItem, nested); wrapItem.appendChild(nested); wrapItem.appendChild(nested); element = wrapItem.previousSibling; } return element; } function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) { e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs); return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs); } function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) { var prev = skipWhitespaceNodesBackwards(e.previousSibling); if (prev) { return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs); } else { return e; } } function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) { var next = skipWhitespaceNodesForwards(e.nextSibling); if (next) { return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs); } else { return e; } } function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) { if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) { return merge(e1, e2, differentStylesMasterElement); } else if (e1 && e1.tagName === 'LI' && isList(e2)) { // Fix invalidly nested lists. e1.appendChild(e2); } return e2; } function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) { if (!e1 || !e2) { return false; } else if (e1.tagName === 'LI' && e2.tagName === 'LI') { return e2.style.listStyleType === 'none' || containsOnlyAList(e2); } else if (isList(e1)) { return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2); } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P'; } function isListForIndent(e) { var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild); return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI)); } function containsOnlyAList(e) { var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild); return firstChild && lastChild && firstChild === lastChild && isList(firstChild); } function merge(e1, e2, masterElement) { var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild); if (e1.tagName === 'P') { e1.appendChild(e1.ownerDocument.createElement('br')); } while (e2.firstChild) { e1.appendChild(e2.firstChild); } if (masterElement) { e1.style.listStyleType = masterElement.style.listStyleType; } e2.parentNode.removeChild(e2); attemptMerge(lastOriginal, firstNew, false); return e1; } function findItemToOperateOn(e, dom) { var item; if (!dom.is(e, 'li,ol,ul')) { item = dom.getParent(e, 'li'); if (item) { e = item; } } return e; } tinymce.create('tinymce.plugins.Lists', { init: function(ed) { var LIST_TABBING = 'TABBING'; var LIST_EMPTY_ITEM = 'EMPTY'; var LIST_ESCAPE = 'ESCAPE'; var LIST_PARAGRAPH = 'PARAGRAPH'; var LIST_UNKNOWN = 'UNKNOWN'; var state = LIST_UNKNOWN; function isTabInList(e) { // Don't indent on Ctrl+Tab or Alt+Tab return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) && (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList')); } function isOnLastListItem() { var li = getLi(); var grandParent = li.parentNode.parentNode; var isLastItem = li.parentNode.lastChild === li; return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li); } function isNestedList(grandParent) { if (isList(grandParent)) { return grandParent.parentNode && grandParent.parentNode.tagName === 'LI'; } else { return grandParent.tagName === 'LI'; } } function isInEmptyListItem() { return ed.selection.isCollapsed() && isEmptyListItem(getLi()); } function getLi() { var n = ed.selection.getStart(); // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n; } function isEmptyListItem(li) { var numChildren = li.childNodes.length; if (li.tagName === 'LI') { return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li)); } return false; } function isEmptyIE9Li(li) { // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'}); var isLastLi = li == lis[lis.length - 1]; var child = li.firstChild; return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32)); } function isEnter(e) { return e.keyCode === tinymce.VK.ENTER; } function isEnterWithoutShift(e) { return isEnter(e) && !e.shiftKey; } function getListKeyState(e) { if (isTabInList(e)) { return LIST_TABBING; } else if (isEnterWithoutShift(e) && isOnLastListItem()) { // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now //return LIST_ESCAPE; return LIST_UNKNOWN; } else if (isEnterWithoutShift(e) && isInEmptyListItem()) { return LIST_EMPTY_ITEM; } else { return LIST_UNKNOWN; } } function cancelDefaultEvents(ed, e) { // list escape is done manually using outdent as it does not create paragraphs correctly in td's if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) { Event.cancel(e); } } function isCursorAtEndOfContainer() { var range = ed.selection.getRng(true); var startContainer = range.startContainer; if (startContainer.nodeType == 3) { var value = startContainer.nodeValue; if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) { // IE9 places a space on the end of the text in some cases so ignore last char return (range.endOffset == value.length-1); } else { return (range.endOffset == value.length); } } else if (startContainer.nodeType == 1) { return range.endOffset == startContainer.childNodes.length; } return false; } /* If we are at the end of a list item surrounded with an element, pressing enter should create a new list item instead without splitting the element e.g. don't want to create new P or H1 tag */ function isEndOfListItem() { var node = ed.selection.getNode(); var validElements = 'h1,h2,h3,h4,h5,h6,p,div'; var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node; return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer(); } // Creates a new list item after the current selection's list item parent function createNewLi(ed, e) { if (isEnterWithoutShift(e) && isEndOfListItem()) { var node = ed.selection.getNode(); var li = ed.dom.create("li"); var parentLi = ed.dom.getParent(node, 'li'); ed.dom.insertAfter(li, parentLi); // Move caret to new list element. if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) { // Removed this line since it would create an odd < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic //li.appendChild(ed.dom.create(" ")); // IE needs an element within the bullet point ed.selection.setCursorLocation(li, 1); } else { ed.selection.setCursorLocation(li, 0); } e.preventDefault(); } } function imageJoiningListItem(ed, e) { var prevSibling; if (!tinymce.isGecko) return; var n = ed.selection.getStart(); if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG') return; function lastLI(node) { var child = node.firstChild; var li = null; do { if (!child) break; if (child.tagName === 'LI') li = child; } while (child = child.nextSibling); return li; } function addChildren(parentNode, destination) { while (parentNode.childNodes.length > 0) destination.appendChild(parentNode.childNodes[0]); } // Check if there is a previous sibling prevSibling = n.parentNode.previousSibling; if (!prevSibling) return; var ul; if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL') ul = prevSibling; else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL')) ul = prevSibling.previousSibling; else return; var li = lastLI(ul); // move the caret to the end of the list item var rng = ed.dom.createRng(); rng.setStart(li, 1); rng.setEnd(li, 1); ed.selection.setRng(rng); ed.selection.collapse(true); // save a bookmark at the end of the list item var bookmark = ed.selection.getBookmark(); // copy the image an its text to the list item var clone = n.parentNode.cloneNode(true); if (clone.tagName === 'P' || clone.tagName === 'DIV') addChildren(clone, li); else li.appendChild(clone); // remove the old copy of the image n.parentNode.parentNode.removeChild(n.parentNode); // move the caret where we saved the bookmark ed.selection.moveToBookmark(bookmark); } // fix the cursor position to ensure it is correct in IE function setCursorPositionToOriginalLi(li) { var list = ed.dom.getParent(li, 'ol,ul'); if (list != null) { var lastLi = list.lastChild; // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic //lastLi.appendChild(ed.getDoc().createElement('')); ed.selection.setCursorLocation(lastLi, 0); } } this.ed = ed; ed.addCommand('Indent', this.indent, this); ed.addCommand('Outdent', this.outdent, this); ed.addCommand('InsertUnorderedList', function() { this.applyList('UL', 'OL'); }, this); ed.addCommand('InsertOrderedList', function() { this.applyList('OL', 'UL'); }, this); ed.onInit.add(function() { ed.editorCommands.addCommands({ 'outdent': function() { var sel = ed.selection, dom = ed.dom; function hasStyleIndent(n) { n = dom.getParent(n, dom.isBlock); return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0; } return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList'); } }, 'state'); }); ed.onKeyUp.add(function(ed, e) { if (state == LIST_TABBING) { ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null); state = LIST_UNKNOWN; return Event.cancel(e); } else if (state == LIST_EMPTY_ITEM) { var li = getLi(); var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey; ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null); if (tinymce.isIE) { setCursorPositionToOriginalLi(li); } return Event.cancel(e); } else if (state == LIST_ESCAPE) { if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) { // append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting. // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag. var n = ed.getDoc().createTextNode('\uFEFF'); ed.selection.getNode().appendChild(n); } else if (tinymce.isIE9 || tinymce.isGecko) { // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves ed.execCommand('Outdent'); return Event.cancel(e); } } }); function fixListItem(parent, reference) { // a zero-sized non-breaking space is placed in the empty list item so that the nested list is // displayed on the below line instead of next to it var n = ed.getDoc().createTextNode('\uFEFF'); parent.insertBefore(n, reference); ed.selection.setCursorLocation(n, 0); // repaint to remove rendering artifact. only visible when creating new list ed.execCommand('mceRepaint'); } function fixIndentedListItemForGecko(ed, e) { if (isEnter(e)) { var li = getLi(); if (li) { var parent = li.parentNode; var grandParent = parent && parent.parentNode; if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) { fixListItem(grandParent, parent); } } } } function fixIndentedListItemForIE8(ed, e) { if (isEnter(e)) { var li = getLi(); if (ed.dom.select('ul li', li).length === 1) { var list = li.firstChild; fixListItem(li, list); } } } function fixDeletingFirstCharOfList(ed, e) { function listElements(list, li) { var elements = []; var walker = new tinymce.dom.TreeWalker(li, list); for (var node = walker.current(); node; node = walker.next()) { if (ed.dom.is(node, 'ol,ul,li')) { elements.push(node); } } return elements; } if (e.keyCode == tinymce.VK.BACKSPACE) { var li = getLi(); if (li) { var list = ed.dom.getParent(li, 'ol,ul'); if (list && list.firstChild === li) { var elements = listElements(list, li); ed.execCommand("Outdent", false, elements); ed.undoManager.add(); return Event.cancel(e); } } } } function fixDeletingEmptyLiInWebkit(ed, e) { var li = getLi(); if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) { if (ed.dom.select('ul,ol', li).length === 1) { var prevLi = li.previousSibling; ed.dom.remove(ed.dom.select('br', li)); ed.dom.remove(li, true); var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 }); if (textNodes.length === 1) { var textNode = textNodes[0] ed.selection.setCursorLocation(textNode, textNode.length); } ed.undoManager.add(); return Event.cancel(e); } } } ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); }); ed.onKeyDown.add(cancelDefaultEvents); ed.onKeyDown.add(imageJoiningListItem); ed.onKeyDown.add(createNewLi); if (tinymce.isGecko) { ed.onKeyUp.add(fixIndentedListItemForGecko); } if (tinymce.isIE8) { ed.onKeyUp.add(fixIndentedListItemForIE8); } if (tinymce.isGecko || tinymce.isWebKit) { ed.onKeyDown.add(fixDeletingFirstCharOfList); } if (tinymce.isWebKit) { ed.onKeyDown.add(fixDeletingEmptyLiInWebkit); } }, applyList: function(targetListType, oppositeListType) { var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions, selectedBlocks = ed.selection.getSelectedBlocks(); function cleanupBr(e) { if (e && e.tagName === 'BR') { dom.remove(e); } } function makeList(element) { var list = dom.create(targetListType), li; function adjustIndentForNewList(element) { // If there's a margin-left, outdent one level to account for the extra list margin. if (element.style.marginLeft || element.style.paddingLeft) { t.adjustPaddingFunction(false)(element); } } if (element.tagName === 'LI') { // No change required. } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') { processBrs(element, function(startSection, br) { doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode); li = startSection.parentNode; adjustIndentForNewList(li); cleanupBr(br); }); if (li) { if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) { dom.split(li.parentNode.parentNode, li.parentNode); } attemptMergeWithAdjacent(li.parentNode, true); } return; } else { // Put the list around the element. li = dom.create('li'); dom.insertAfter(li, element); li.appendChild(element); adjustIndentForNewList(element); element = li; } dom.insertAfter(list, element); list.appendChild(element); attemptMergeWithAdjacent(list, true); applied.push(element); } function doWrapList(start, end, template) { var li, n = start, tmp; while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) { start = dom.split(start.parentNode, start.previousSibling); start = start.nextSibling; n = start; } if (template) { li = template.cloneNode(true); start.parentNode.insertBefore(li, start); while (li.firstChild) dom.remove(li.firstChild); li = dom.rename(li, 'li'); } else { li = dom.create('li'); start.parentNode.insertBefore(li, start); } while (n && n != end) { tmp = n.nextSibling; li.appendChild(n); n = tmp; } if (li.childNodes.length === 0) { li.innerHTML = '
        '; } makeList(li); } function processBrs(element, callback) { var startSection, previousBR, END_TO_START = 3, START_TO_END = 1, breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl'; function isAnyPartSelected(start, end) { var r = dom.createRng(), sel; bookmark.keep = true; ed.selection.moveToBookmark(bookmark); bookmark.keep = false; sel = ed.selection.getRng(true); if (!end) { end = start.parentNode.lastChild; } r.setStartBefore(start); r.setEndAfter(end); return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0); } function nextLeaf(br) { if (br.nextSibling) return br.nextSibling; if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot()) return nextLeaf(br.parentNode); } // Split on BRs within the range and process those. startSection = element.firstChild; // First mark the BRs that have any part of the previous section selected. var trailingContentSelected = false; each(dom.select(breakElements, element), function(br) { if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. } if (isAnyPartSelected(startSection, br)) { dom.addClass(br, '_mce_tagged_br'); startSection = nextLeaf(br); } }); trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined)); startSection = element.firstChild; each(dom.select(breakElements, element), function(br) { // Got a section from start to br. var tmp = nextLeaf(br); if (br.hasAttribute && br.hasAttribute('_mce_bogus')) { return true; // Skip the bogus Brs that are put in to appease Firefox and Safari. } if (dom.hasClass(br, '_mce_tagged_br')) { callback(startSection, br, previousBR); previousBR = null; } else { previousBR = br; } startSection = tmp; }); if (trailingContentSelected) { callback(startSection, undefined, previousBR); } } function wrapList(element) { processBrs(element, function(startSection, br, previousBR) { // Need to indent this part doWrapList(startSection, br); cleanupBr(br); cleanupBr(previousBR); }); } function changeList(element) { if (tinymce.inArray(applied, element) !== -1) { return; } if (element.parentNode.tagName === oppositeListType) { dom.split(element.parentNode, element); makeList(element); attemptMergeWithNext(element.parentNode, false); } applied.push(element); } function convertListItemToParagraph(element) { var child, nextChild, mergedElement, splitLast; if (tinymce.inArray(applied, element) !== -1) { return; } element = splitNestedLists(element, dom); while (dom.is(element.parentNode, 'ol,ul,li')) { dom.split(element.parentNode, element); } // Push the original element we have from the selection, not the renamed one. applied.push(element); element = dom.rename(element, 'p'); mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines); if (mergedElement === element) { // Now split out any block elements that can't be contained within a P. // Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each) child = element.firstChild; while (child) { if (dom.isBlock(child)) { child = dom.split(child.parentNode, child); splitLast = true; nextChild = child.nextSibling && child.nextSibling.firstChild; } else { nextChild = child.nextSibling; if (splitLast && child.tagName === 'BR') { dom.remove(child); } splitLast = false; } child = nextChild; } } } each(selectedBlocks, function(e) { e = findItemToOperateOn(e, dom); if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) { hasOppositeType = true; } else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) { hasSameType = true; } else { hasNonList = true; } }); if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) { actions = { 'LI': changeList, 'H1': makeList, 'H2': makeList, 'H3': makeList, 'H4': makeList, 'H5': makeList, 'H6': makeList, 'P': makeList, 'BODY': makeList, 'DIV': selectedBlocks.length > 1 ? makeList : wrapList, defaultAction: wrapList, elements: this.selectedBlocks() }; } else { actions = { defaultAction: convertListItemToParagraph, elements: this.selectedBlocks() }; } this.process(actions); }, indent: function() { var ed = this.ed, dom = ed.dom, indented = []; function createWrapItem(element) { var wrapItem = dom.create('li', { style: 'list-style-type: none;'}); dom.insertAfter(wrapItem, element); return wrapItem; } function createWrapList(element) { var wrapItem = createWrapItem(element), list = dom.getParent(element, 'ol,ul'), listType = list.tagName, listStyle = dom.getStyle(list, 'list-style-type'), attrs = {}, wrapList; if (listStyle !== '') { attrs.style = 'list-style-type: ' + listStyle + ';'; } wrapList = dom.create(listType, attrs); wrapItem.appendChild(wrapList); return wrapList; } function indentLI(element) { if (!hasParentInList(ed, element, indented)) { element = splitNestedLists(element, dom); var wrapList = createWrapList(element); wrapList.appendChild(element); attemptMergeWithAdjacent(wrapList.parentNode, false); attemptMergeWithAdjacent(wrapList, false); indented.push(element); } } this.process({ 'LI': indentLI, defaultAction: this.adjustPaddingFunction(true), elements: this.selectedBlocks() }); }, outdent: function(ui, elements) { var t = this, ed = t.ed, dom = ed.dom, outdented = []; function outdentLI(element) { var listElement, targetParent, align; if (!hasParentInList(ed, element, outdented)) { if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') { return t.adjustPaddingFunction(false)(element); } align = dom.getStyle(element, 'text-align', true); if (align === 'center' || align === 'right') { dom.setStyle(element, 'text-align', 'left'); return; } element = splitNestedLists(element, dom); listElement = element.parentNode; targetParent = element.parentNode.parentNode; if (targetParent.tagName === 'P') { dom.split(targetParent, element.parentNode); } else { dom.split(listElement, element); if (targetParent.tagName === 'LI') { // Nested list, need to split the LI and go back out to the OL/UL element. dom.split(targetParent, element); } else if (!dom.is(targetParent, 'ol,ul')) { dom.rename(element, 'p'); } } outdented.push(element); } } var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks(); this.process({ 'LI': outdentLI, defaultAction: this.adjustPaddingFunction(false), elements: listElements }); each(outdented, attemptMergeWithAdjacent); }, process: function(actions) { var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r; function isEmptyElement(element) { var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) { return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark' || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == '')); }); return excludeBrsAndBookmarks.length === 0; } function processElement(element) { dom.removeClass(element, '_mce_act_on'); if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) { return; } element = findItemToOperateOn(element, dom); var action = actions[element.tagName]; if (!action) { action = actions.defaultAction; } action(element); } function recurse(element) { t.splitSafeEach(element.childNodes, processElement); } function brAtEdgeOfSelection(container, offset) { return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length && container.childNodes[offset].tagName === 'BR'; } function isInTable() { var n = sel.getNode(); var p = dom.getParent(n, 'td'); return p !== null; } selectedBlocks = actions.elements; r = sel.getRng(true); if (!r.collapsed) { if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) { r.setEnd(r.endContainer, r.endOffset - 1); sel.setRng(r); } if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) { r.setStart(r.startContainer, r.startOffset + 1); sel.setRng(r); } } if (tinymce.isIE8) { // append a zero sized nbsp so that caret is restored correctly using bookmark var s = t.ed.selection.getNode(); if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) { var i = t.ed.getDoc().createTextNode('\uFEFF'); s.appendChild(i); } } bookmark = sel.getBookmark(); actions.OL = actions.UL = recurse; t.splitSafeEach(selectedBlocks, processElement); sel.moveToBookmark(bookmark); bookmark = null; // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6 if (!isInTable()) { // Avoids table or image handles being left behind in Firefox. t.ed.execCommand('mceRepaint'); } }, splitSafeEach: function(elements, f) { if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) || /Firefox\/3\.[0-4]/.test(navigator.userAgent))) { this.classBasedEach(elements, f); } else { each(elements, f); } }, classBasedEach: function(elements, f) { var dom = this.ed.dom, nodes, element; // Mark nodes each(elements, function(element) { dom.addClass(element, '_mce_act_on'); }); nodes = dom.select('._mce_act_on'); while (nodes.length > 0) { element = nodes.shift(); dom.removeClass(element, '_mce_act_on'); f(element); nodes = dom.select('._mce_act_on'); } }, adjustPaddingFunction: function(isIndent) { var indentAmount, indentUnits, ed = this.ed; indentAmount = ed.settings.indentation; indentUnits = /[a-z%]+/i.exec(indentAmount); indentAmount = parseInt(indentAmount, 10); return function(element) { var currentIndent, newIndentAmount; currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10); if (isIndent) { newIndentAmount = currentIndent + indentAmount; } else { newIndentAmount = currentIndent - indentAmount; } ed.dom.setStyle(element, 'padding-left', ''); ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : ''); }; }, selectedBlocks: function() { var ed = this.ed var selectedBlocks = ed.selection.getSelectedBlocks(); return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks; }, getInfo: function() { return { longname : 'Lists', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); tinymce.PluginManager.add("lists", tinymce.plugins.Lists); }()); autolink/editor_plugin.js000066600000004422150472616010011604 0ustar00(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})();autolink/editor_plugin_src.js000066600000012116150472616010012452 0ustar00/** * editor_plugin_src.js * * Copyright 2011, Moxiecode Systems AB * Released under LGPL License. * * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ (function() { tinymce.create('tinymce.plugins.AutolinkPlugin', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { var t = this; // Add a key down handler ed.onKeyDown.addToTop(function(ed, e) { if (e.keyCode == 13) return t.handleEnter(ed); }); // Internet Explorer has built-in automatic linking for most cases if (tinyMCE.isIE) return; ed.onKeyPress.add(function(ed, e) { if (e.which == 41) return t.handleEclipse(ed); }); // Add a key up handler ed.onKeyUp.add(function(ed, e) { if (e.keyCode == 32) return t.handleSpacebar(ed); }); }, handleEclipse : function(ed) { this.parseCurrentLine(ed, -1, '(', true); }, handleSpacebar : function(ed) { this.parseCurrentLine(ed, 0, '', true); }, handleEnter : function(ed) { this.parseCurrentLine(ed, -1, '', false); }, parseCurrentLine : function(ed, end_offset, delimiter, goback) { var r, end, start, endContainer, bookmark, text, matches, prev, len; // We need at least five characters to form a URL, // hence, at minimum, five characters from the beginning of the line. r = ed.selection.getRng(true).cloneRange(); if (r.startOffset < 5) { // During testing, the caret is placed inbetween two text nodes. // The previous text node contains the URL. prev = r.endContainer.previousSibling; if (prev == null) { if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null) return; prev = r.endContainer.firstChild.nextSibling; } len = prev.length; r.setStart(prev, len); r.setEnd(prev, len); if (r.endOffset < 5) return; end = r.endOffset; endContainer = prev; } else { endContainer = r.endContainer; // Get a text node if (endContainer.nodeType != 3 && endContainer.firstChild) { while (endContainer.nodeType != 3 && endContainer.firstChild) endContainer = endContainer.firstChild; r.setStart(endContainer, 0); r.setEnd(endContainer, endContainer.nodeValue.length); } if (r.endOffset == 1) end = 2; else end = r.endOffset - 1 - end_offset; } start = end; do { // Move the selection one character backwards. r.setStart(endContainer, end - 2); r.setEnd(endContainer, end - 1); end -= 1; // Loop until one of the following is found: a blank space,  , delimeter, (end-2) >= 0 } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter); if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) { r.setStart(endContainer, end); r.setEnd(endContainer, start); end += 1; } else if (r.startOffset == 0) { r.setStart(endContainer, 0); r.setEnd(endContainer, start); } else { r.setStart(endContainer, end); r.setEnd(endContainer, start); } // Exclude last . from word like "www.site.com." var text = r.toString(); if (text.charAt(text.length - 1) == '.') { r.setEnd(endContainer, start - 1); } text = r.toString(); matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i); if (matches) { if (matches[1] == 'www.') { matches[1] = 'http://www.'; } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) { matches[1] = 'mailto:' + matches[1]; } bookmark = ed.selection.getBookmark(); ed.selection.setRng(r); tinyMCE.execCommand('createlink',false, matches[1] + matches[2]); ed.selection.moveToBookmark(bookmark); ed.nodeChanged(); // TODO: Determine if this is still needed. if (tinyMCE.isWebKit) { // move the caret to its original position ed.selection.collapse(false); var max = Math.min(endContainer.length, start + 1); r.setStart(endContainer, max); r.setEnd(endContainer, max); ed.selection.setRng(r); } } }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Autolink', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin); })(); table/table.htm000066600000021217150472616010007445 0ustar00 {#table_dlg.title}
        {#table_dlg.general_props}
        {#table_dlg.advanced_props}
         
         
         
        table/css/cell.css000066600000000275150472616010010066 0ustar00/* CSS file for cell dialog in the table plugin */ .panel_wrapper div.current { height: 200px; } .advfield { width: 200px; } #action { margin-bottom: 3px; } #class { width: 150px; }table/css/row.css000066600000000431150472616010007750 0ustar00/* CSS file for row dialog in the table plugin */ .panel_wrapper div.current { height: 200px; } .advfield { width: 200px; } #action { margin-bottom: 3px; } #rowtype,#align,#valign,#class,#height { width: 150px; } #height { width: 50px; } .col2 { padding-left: 20px; } table/css/table.css000066600000000235150472616010010232 0ustar00/* CSS file for table dialog in the table plugin */ .panel_wrapper div.current { height: 245px; } .advfield { width: 200px; } #class { width: 150px; } table/editor_plugin.js000066600000042406150472616010011051 0ustar00(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='
        '}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;iN){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}if(!d.isIE){function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){r.dom.add(r.getBody(),"p",null,'
        ')}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&z.childNodes.length==1&&z.firstChild.nodeName=="BR"&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});if(d.isGecko){r.onKeyDown.add(function(z,B){if(B.keyCode===d.VK.ENTER&&B.shiftKey){var A=z.selection.getRng().startContainer;var C=q.getParent(A,"td,th");if(C){var w=z.getDoc().createTextNode("\uFEFF");q.insertAfter(w,A)}}})}s();r.startContent=r.getContent({format:"raw"})}});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);table/js/table.js000066600000034735150472616010007716 0ustar00tinyMCEPopup.requireLangPack(); var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom; function insertTable() { var formObj = document.forms[0]; var inst = tinyMCEPopup.editor, dom = inst.dom; var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules; var html = '', capEl, elm; var cellLimit, rowLimit, colLimit; tinyMCEPopup.restoreSelection(); if (!AutoValidator.validate(formObj)) { tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.'); return false; } elm = dom.getParent(inst.selection.getNode(), 'table'); // Get form data cols = formObj.elements['cols'].value; rows = formObj.elements['rows'].value; border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0; cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : ""; cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : ""; align = getSelectValue(formObj, "align"); frame = getSelectValue(formObj, "tframe"); rules = getSelectValue(formObj, "rules"); width = formObj.elements['width'].value; height = formObj.elements['height'].value; bordercolor = formObj.elements['bordercolor'].value; bgcolor = formObj.elements['bgcolor'].value; className = getSelectValue(formObj, "class"); id = formObj.elements['id'].value; summary = formObj.elements['summary'].value; style = formObj.elements['style'].value; dir = formObj.elements['dir'].value; lang = formObj.elements['lang'].value; background = formObj.elements['backgroundimage'].value; caption = formObj.elements['caption'].checked; cellLimit = tinyMCEPopup.getParam('table_cell_limit', false); rowLimit = tinyMCEPopup.getParam('table_row_limit', false); colLimit = tinyMCEPopup.getParam('table_col_limit', false); // Validate table size if (colLimit && cols > colLimit) { tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit)); return false; } else if (rowLimit && rows > rowLimit) { tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit)); return false; } else if (cellLimit && cols * rows > cellLimit) { tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit)); return false; } // Update table if (action == "update") { dom.setAttrib(elm, 'cellPadding', cellpadding, true); dom.setAttrib(elm, 'cellSpacing', cellspacing, true); if (!isCssSize(border)) { dom.setAttrib(elm, 'border', border); } else { dom.setAttrib(elm, 'border', ''); } if (border == '') { dom.setStyle(elm, 'border-width', ''); dom.setStyle(elm, 'border', ''); dom.setAttrib(elm, 'border', ''); } dom.setAttrib(elm, 'align', align); dom.setAttrib(elm, 'frame', frame); dom.setAttrib(elm, 'rules', rules); dom.setAttrib(elm, 'class', className); dom.setAttrib(elm, 'style', style); dom.setAttrib(elm, 'id', id); dom.setAttrib(elm, 'summary', summary); dom.setAttrib(elm, 'dir', dir); dom.setAttrib(elm, 'lang', lang); capEl = inst.dom.select('caption', elm)[0]; if (capEl && !caption) capEl.parentNode.removeChild(capEl); if (!capEl && caption) { capEl = elm.ownerDocument.createElement('caption'); if (!tinymce.isIE) capEl.innerHTML = '
        '; elm.insertBefore(capEl, elm.firstChild); } if (width && inst.settings.inline_styles) { dom.setStyle(elm, 'width', width); dom.setAttrib(elm, 'width', ''); } else { dom.setAttrib(elm, 'width', width, true); dom.setStyle(elm, 'width', ''); } // Remove these since they are not valid XHTML dom.setAttrib(elm, 'borderColor', ''); dom.setAttrib(elm, 'bgColor', ''); dom.setAttrib(elm, 'background', ''); if (height && inst.settings.inline_styles) { dom.setStyle(elm, 'height', height); dom.setAttrib(elm, 'height', ''); } else { dom.setAttrib(elm, 'height', height, true); dom.setStyle(elm, 'height', ''); } if (background != '') elm.style.backgroundImage = "url('" + background + "')"; else elm.style.backgroundImage = ''; /* if (tinyMCEPopup.getParam("inline_styles")) { if (width != '') elm.style.width = getCSSSize(width); }*/ if (bordercolor != "") { elm.style.borderColor = bordercolor; elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; elm.style.borderWidth = cssSize(border); } else elm.style.borderColor = ''; elm.style.backgroundColor = bgcolor; elm.style.height = getCSSSize(height); inst.addVisual(); // Fix for stange MSIE align bug //elm.outerHTML = elm.outerHTML; inst.nodeChanged(); inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); // Repaint if dimensions changed if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight) inst.execCommand('mceRepaint'); tinyMCEPopup.close(); return true; } // Create new table html += ''); tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) { if (patt) patt += ','; patt += n + ' ._mce_marker'; }); tinymce.each(inst.dom.select(patt), function(n) { inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n); }); dom.setOuterHTML(dom.select('br._mce_marker')[0], html); } else inst.execCommand('mceInsertContent', false, html); tinymce.each(dom.select('table[data-mce-new]'), function(node) { var tdorth = dom.select('td,th', node); // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document if (tinymce.isIE && node.nextSibling == null) { dom.insertAfter(dom.create('p'), node); } try { // IE9 might fail to do this selection inst.selection.setCursorLocation(tdorth[0], 0); } catch (ex) { // Ignore } dom.setAttrib(node, 'data-mce-new', ''); }); inst.addVisual(); inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true}); tinyMCEPopup.close(); } function makeAttrib(attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib]; if (typeof(value) == "undefined" || value == null) { value = ""; if (valueElm) value = valueElm.value; } if (value == "") return ""; // XML encode it value = value.replace(/&/g, '&'); value = value.replace(/\"/g, '"'); value = value.replace(//g, '>'); return ' ' + attrib + '="' + value + '"'; } function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = ""; var inst = tinyMCEPopup.editor, dom = inst.dom; var formObj = document.forms[0]; var elm = dom.getParent(inst.selection.getNode(), "table"); // Hide advanced fields that isn't available in the schema tinymce.each("summary id rules dir style frame".split(" "), function(name) { var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr"); if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) { tr.style.display = 'none'; } }); action = tinyMCEPopup.getWindowArg('action'); if (!action) action = elm ? "update" : "insert"; if (elm && action != "insert") { var rowsAr = elm.rows; var cols = 0; for (var i=0; i cols) cols = rowsAr[i].cells.length; cols = cols; rows = rowsAr.length; st = dom.parseStyle(dom.getAttrib(elm, "style")); border = trimSize(getStyle(elm, 'border', 'borderWidth')); cellpadding = dom.getAttrib(elm, 'cellpadding', ""); cellspacing = dom.getAttrib(elm, 'cellspacing', ""); width = trimSize(getStyle(elm, 'width', 'width')); height = trimSize(getStyle(elm, 'height', 'height')); bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor')); align = dom.getAttrib(elm, 'align', align); frame = dom.getAttrib(elm, 'frame'); rules = dom.getAttrib(elm, 'rules'); className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, '')); id = dom.getAttrib(elm, 'id'); summary = dom.getAttrib(elm, 'summary'); style = dom.serializeStyle(st); dir = dom.getAttrib(elm, 'dir'); lang = dom.getAttrib(elm, 'lang'); background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); formObj.caption.checked = elm.getElementsByTagName('caption').length > 0; orgTableWidth = width; orgTableHeight = height; action = "update"; formObj.insert.value = inst.getLang('update'); } addClassesToList('class', "table_styles"); TinyMCE_EditableSelects.init(); // Update form selectByValue(formObj, 'align', align); selectByValue(formObj, 'tframe', frame); selectByValue(formObj, 'rules', rules); selectByValue(formObj, 'class', className, true, true); formObj.cols.value = cols; formObj.rows.value = rows; formObj.border.value = border; formObj.cellpadding.value = cellpadding; formObj.cellspacing.value = cellspacing; formObj.width.value = width; formObj.height.value = height; formObj.bordercolor.value = bordercolor; formObj.bgcolor.value = bgcolor; formObj.id.value = id; formObj.summary.value = summary; formObj.style.value = style; formObj.dir.value = dir; formObj.lang.value = lang; formObj.backgroundimage.value = background; updateColor('bordercolor_pick', 'bordercolor'); updateColor('bgcolor_pick', 'bgcolor'); // Resize some elements if (isVisible('backgroundimagebrowser')) document.getElementById('backgroundimage').style.width = '180px'; // Disable some fields in update mode if (action == "update") { formObj.cols.disabled = true; formObj.rows.disabled = true; } } function changedSize() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); /* var width = formObj.width.value; if (width != "") st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : ""; else st['width'] = "";*/ var height = formObj.height.value; if (height != "") st['height'] = getCSSSize(height); else st['height'] = ""; formObj.style.value = dom.serializeStyle(st); } function isCssSize(value) { return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value); } function cssSize(value, def) { value = tinymce.trim(value || def); if (!isCssSize(value)) { return parseInt(value, 10) + 'px'; } return value; } function changedBackgroundImage() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); st['background-image'] = "url('" + formObj.backgroundimage.value + "')"; formObj.style.value = dom.serializeStyle(st); } function changedBorder() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); // Update border width if the element has a color if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != "")) st['border-width'] = cssSize(formObj.border.value); else { if (!formObj.border.value) { st['border'] = ''; st['border-width'] = ''; } } formObj.style.value = dom.serializeStyle(st); } function changedColor() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); st['background-color'] = formObj.bgcolor.value; if (formObj.bordercolor.value != "") { st['border-color'] = formObj.bordercolor.value; // Add border-width if it's missing if (!st['border-width']) st['border-width'] = cssSize(formObj.border.value, 1); } formObj.style.value = dom.serializeStyle(st); } function changedStyle() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); if (st['background-image']) formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); else formObj.backgroundimage.value = ''; if (st['width']) formObj.width.value = trimSize(st['width']); if (st['height']) formObj.height.value = trimSize(st['height']); if (st['background-color']) { formObj.bgcolor.value = st['background-color']; updateColor('bgcolor_pick','bgcolor'); } if (st['border-color']) { formObj.bordercolor.value = st['border-color']; updateColor('bordercolor_pick','bordercolor'); } } tinyMCEPopup.onInit.add(init); table/js/row.js000066600000015717150472616010007435 0ustar00tinyMCEPopup.requireLangPack(); function init() { tinyMCEPopup.resizeToInnerSize(); document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table'); document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); var inst = tinyMCEPopup.editor; var dom = inst.dom; var trElm = dom.getParent(inst.selection.getStart(), "tr"); var formObj = document.forms[0]; var st = dom.parseStyle(dom.getAttrib(trElm, "style")); // Get table row data var rowtype = trElm.parentNode.nodeName.toLowerCase(); var align = dom.getAttrib(trElm, 'align'); var valign = dom.getAttrib(trElm, 'valign'); var height = trimSize(getStyle(trElm, 'height', 'height')); var className = dom.getAttrib(trElm, 'class'); var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor')); var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1"); var id = dom.getAttrib(trElm, 'id'); var lang = dom.getAttrib(trElm, 'lang'); var dir = dom.getAttrib(trElm, 'dir'); selectByValue(formObj, 'rowtype', rowtype); // Any cells selected if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) { // Setup form addClassesToList('class', 'table_row_styles'); TinyMCE_EditableSelects.init(); formObj.bgcolor.value = bgcolor; formObj.backgroundimage.value = backgroundimage; formObj.height.value = height; formObj.id.value = id; formObj.lang.value = lang; formObj.style.value = dom.serializeStyle(st); selectByValue(formObj, 'align', align); selectByValue(formObj, 'valign', valign); selectByValue(formObj, 'class', className, true, true); selectByValue(formObj, 'dir', dir); // Resize some elements if (isVisible('backgroundimagebrowser')) document.getElementById('backgroundimage').style.width = '180px'; updateColor('bgcolor_pick', 'bgcolor'); } else tinyMCEPopup.dom.hide('action'); } function updateAction() { var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0]; var action = getSelectValue(formObj, 'action'); if (!AutoValidator.validate(formObj)) { tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.'); return false; } tinyMCEPopup.restoreSelection(); trElm = dom.getParent(inst.selection.getStart(), "tr"); tableElm = dom.getParent(inst.selection.getStart(), "table"); // Update all selected rows if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) { tinymce.each(tableElm.rows, function(tr) { var i; for (i = 0; i < tr.cells.length; i++) { if (dom.hasClass(tr.cells[i], 'mceSelected')) { updateRow(tr, true); return; } } }); inst.addVisual(); inst.nodeChanged(); inst.execCommand('mceEndUndoLevel'); tinyMCEPopup.close(); return; } switch (action) { case "row": updateRow(trElm); break; case "all": var rows = tableElm.getElementsByTagName("tr"); for (var i=0; i {#table_dlg.row_title}
        {#table_dlg.general_props}
        {#table_dlg.advanced_props}
         
         
        table/cell.htm000066600000015710150472616010007276 0ustar00 {#table_dlg.cell_title}
        {#table_dlg.general_props}
        {#table_dlg.advanced_props}
         
         
         
        table/langs/ru_dlg.js000066600000012541150472616010010562 0ustar00tinyMCE.addI18n('ru.table_dlg',{ general_tab:"\u041E\u0431\u0449\u0435\u0435", advanced_tab:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E", general_props:"\u041E\u0431\u0449\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430", advanced_props:"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430", rowtype:"Row in table part", title:"\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 / \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u044B", width:"\u0428\u0438\u0440\u0438\u043D\u0430", height:"\u0412\u044B\u0441\u043E\u0442\u0430", cols:"\u0421\u0442\u043E\u043B\u0431\u0446\u044B", rows:"\u0421\u0440\u043E\u043A\u0438", cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0435\u0436\u0434\u0443 \u044F\u0447\u0435\u0439\u043A\u0430\u043C\u0438", cellpadding:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u0432 \u044F\u0447\u0435\u0439\u043A\u0430\u0445", border:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430", align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435", align_default:"\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", align_left:"\u041F\u043E \u043B\u0435\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", align_right:"\u041F\u043E \u043F\u0440\u0430\u0432\u043E\u043C\u0443 \u043A\u0440\u0430\u044E", align_middle:"\u041F\u043E \u0446\u0435\u043D\u0442\u0440\u0443", row_title:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043E\u043A\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u044B", cell_title:"\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u044F\u0447\u0435\u0439\u043A\u0438 \u0442\u0430\u0431\u043B\u0438\u0446\u044B", cell_type:"\u0422\u0438\u043F \u044F\u0447\u0435\u0439\u043A\u0438", valign:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435", align_top:"\u041F\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E", align_bottom:"\u041F\u043E \u043D\u0438\u0436\u043D\u0435\u043C\u0443 \u043A\u0440\u0430\u044E", bordercolor:"\u0446\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B", bgcolor:"\u0446\u0432\u0435\u0442 \u0444\u043E\u043D\u0430", merge_cells_title:"\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u044F\u0447\u0435\u0439\u043A\u0438", id:"Id", style:"\u0421\u0442\u0438\u043B\u044C", langdir:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u044F\u0437\u044B\u043A\u0430", langcode:"\u041A\u043E\u0434 \u044F\u0437\u044B\u043A\u0430", mime:"Target MIME-\u0442\u0438\u043F", ltr:"\u0421\u043B\u0435\u0432\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043E", rtl:"\u0421\u043F\u0440\u0430\u0432\u0430 \u043D\u0430\u043B\u0435\u0432\u043E", bgimage:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", summary:"\u041E\u0431\u0449\u0435\u0435", td:"\u0414\u0430\u043D\u043D\u044B\u0435", th:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A", cell_cell:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u044F\u0447\u0435\u0439\u043A\u0443", cell_row:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u044F\u0447\u0435\u0439\u043A\u0438 \u0432 \u0441\u0442\u0440\u043E\u043A\u0435", cell_all:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u044F\u0447\u0435\u0439\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435", row_row:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443", row_odd:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u043D\u0435\u0447\u0435\u0442\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435", row_even:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0447\u0435\u0442\u043D\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435", row_all:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0441\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0435", thead:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0442\u0430\u0431\u043B\u0438\u0446\u044B", tbody:"\u0422\u0435\u043B\u043E \u0442\u0430\u0431\u043B\u0438\u0446\u044B", tfoot:"\u041D\u0438\u0436\u043D\u044F\u044F \u0447\u0430\u0441\u0442\u0441\u0438\u043D\u0430", scope:"Scope", rowgroup:"Row Group", colgroup:"Col Group", col_limit:"You've exceeded the maximum number of columns of ($ cols)", row_limit:"You've exceeded the maximum number of rows of ($ rows)", cell_limit:"You've exceeded the maximum number of cells of ($ cells)", missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table", caption:"Table caption", frame:"\u0424\u0440\u0435\u0439\u043C", frame_none:"none", frame_groups:"groups", frame_rows:"rows", frame_cols:"cols", frame_all:"all", rules:"Rules", rules_void:"void", rules_above:"above", rules_below:"below", rules_hsides:"hsides", rules_lhs:"lhs", rules_rhs:"rhs", rules_vsides:"vsides", rules_box:"box", rules_border:"border" });table/langs/en_dlg.js000066600000004054150472616010010536 0ustar00tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"});table/editor_plugin_src.js000066600000114221150472616010011713 0ustar00/** * 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(tinymce) { var each = tinymce.each; // Checks if the selection/caret is at the start of the specified block element function isAtStart(rng, par) { var doc = par.ownerDocument, rng2 = doc.createRange(), elm; rng2.setStartBefore(par); rng2.setEnd(rng.endContainer, rng.endOffset); elm = doc.createElement('body'); elm.appendChild(rng2.cloneContents()); // Check for text characters of other elements that should be treated as content return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0; }; function getSpanVal(td, name) { return parseInt(td.getAttribute(name) || 1); } /** * Table Grid class. */ function TableGrid(table, dom, selection) { var grid, startPos, endPos, selectedCell; buildGrid(); selectedCell = dom.getParent(selection.getStart(), 'th,td'); if (selectedCell) { startPos = getPos(selectedCell); endPos = findEndPos(); selectedCell = getCell(startPos.x, startPos.y); } function cloneNode(node, children) { node = node.cloneNode(children); node.removeAttribute('id'); return node; } function buildGrid() { var startY = 0; grid = []; each(['thead', 'tbody', 'tfoot'], function(part) { var rows = dom.select('> ' + part + ' tr', table); each(rows, function(tr, y) { y += startY; each(dom.select('> td, > th', tr), function(td, x) { var x2, y2, rowspan, colspan; // Skip over existing cells produced by rowspan if (grid[y]) { while (grid[y][x]) x++; } // Get col/rowspan from cell rowspan = getSpanVal(td, 'rowspan'); colspan = getSpanVal(td, 'colspan'); // Fill out rowspan/colspan right and down for (y2 = y; y2 < y + rowspan; y2++) { if (!grid[y2]) grid[y2] = []; for (x2 = x; x2 < x + colspan; x2++) { grid[y2][x2] = { part : part, real : y2 == y && x2 == x, elm : td, rowspan : rowspan, colspan : colspan }; } } }); }); startY += rows.length; }); }; function getCell(x, y) { var row; row = grid[y]; if (row) return row[x]; }; function setSpanVal(td, name, val) { if (td) { val = parseInt(val); if (val === 1) td.removeAttribute(name, 1); else td.setAttribute(name, val, 1); } } function isCellSelected(cell) { return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell); }; function getSelectedRows() { var rows = []; each(table.rows, function(row) { each(row.cells, function(cell) { if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) { rows.push(row); return false; } }); }); return rows; }; function deleteTable() { var rng = dom.createRng(); rng.setStartAfter(table); rng.setEndAfter(table); selection.setRng(rng); dom.remove(table); }; function cloneCell(cell) { var formatNode; // Clone formats tinymce.walk(cell, function(node) { var curNode; if (node.nodeType == 3) { each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { node = cloneNode(node, false); if (!formatNode) formatNode = curNode = node; else if (curNode) curNode.appendChild(node); curNode = node; }); // Add something to the inner node if (curNode) curNode.innerHTML = tinymce.isIE ? ' ' : '
        '; return false; } }, 'childNodes'); cell = cloneNode(cell, false); setSpanVal(cell, 'rowSpan', 1); setSpanVal(cell, 'colSpan', 1); if (formatNode) { cell.appendChild(formatNode); } else { if (!tinymce.isIE) cell.innerHTML = '
        '; } return cell; }; function cleanup() { var rng = dom.createRng(); // Empty rows each(dom.select('tr', table), function(tr) { if (tr.cells.length == 0) dom.remove(tr); }); // Empty table if (dom.select('tr', table).length == 0) { rng.setStartAfter(table); rng.setEndAfter(table); selection.setRng(rng); dom.remove(table); return; } // Empty header/body/footer each(dom.select('thead,tbody,tfoot', table), function(part) { if (part.rows.length == 0) dom.remove(part); }); // Restore selection to start position if it still exists buildGrid(); // Restore the selection to the closest table position row = grid[Math.min(grid.length - 1, startPos.y)]; if (row) { selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); selection.collapse(true); } }; function fillLeftDown(x, y, rows, cols) { var tr, x2, r, c, cell; tr = grid[y][x].elm.parentNode; for (r = 1; r <= rows; r++) { tr = dom.getNext(tr, 'tr'); if (tr) { // Loop left to find real cell for (x2 = x; x2 >= 0; x2--) { cell = grid[y + r][x2].elm; if (cell.parentNode == tr) { // Append clones after for (c = 1; c <= cols; c++) dom.insertAfter(cloneCell(cell), cell); break; } } if (x2 == -1) { // Insert nodes before first cell for (c = 1; c <= cols; c++) tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); } } } }; function split() { each(grid, function(row, y) { each(row, function(cell, x) { var colSpan, rowSpan, newCell, i; if (isCellSelected(cell)) { cell = cell.elm; colSpan = getSpanVal(cell, 'colspan'); rowSpan = getSpanVal(cell, 'rowspan'); if (colSpan > 1 || rowSpan > 1) { setSpanVal(cell, 'rowSpan', 1); setSpanVal(cell, 'colSpan', 1); // Insert cells right for (i = 0; i < colSpan - 1; i++) dom.insertAfter(cloneCell(cell), cell); fillLeftDown(x, y, rowSpan - 1, colSpan); } } }); }); }; function merge(cell, cols, rows) { var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count; // Use specified cell and cols/rows if (cell) { pos = getPos(cell); startX = pos.x; startY = pos.y; endX = startX + (cols - 1); endY = startY + (rows - 1); } else { startPos = endPos = null; // Calculate start/end pos by checking for selected cells in grid works better with context menu each(grid, function(row, y) { each(row, function(cell, x) { if (isCellSelected(cell)) { if (!startPos) { startPos = {x: x, y: y}; } endPos = {x: x, y: y}; } }); }); // Use selection startX = startPos.x; startY = startPos.y; endX = endPos.x; endY = endPos.y; } // Find start/end cells startCell = getCell(startX, startY); endCell = getCell(endX, endY); // Check if the cells exists and if they are of the same part for example tbody = tbody if (startCell && endCell && startCell.part == endCell.part) { // Split and rebuild grid split(); buildGrid(); // Set row/col span to start cell startCell = getCell(startX, startY).elm; setSpanVal(startCell, 'colSpan', (endX - startX) + 1); setSpanVal(startCell, 'rowSpan', (endY - startY) + 1); // Remove other cells and add it's contents to the start cell for (y = startY; y <= endY; y++) { for (x = startX; x <= endX; x++) { if (!grid[y] || !grid[y][x]) continue; cell = grid[y][x].elm; if (cell != startCell) { // Move children to startCell children = tinymce.grep(cell.childNodes); each(children, function(node) { startCell.appendChild(node); }); // Remove bogus nodes if there is children in the target cell if (children.length) { children = tinymce.grep(startCell.childNodes); count = 0; each(children, function(node) { if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) startCell.removeChild(node); }); } // Remove cell dom.remove(cell); } } } // Remove empty rows etc and restore caret location cleanup(); } }; function insertRow(before) { var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; // Find first/last row each(grid, function(row, y) { each(row, function(cell, x) { if (isCellSelected(cell)) { cell = cell.elm; rowElm = cell.parentNode; newRow = cloneNode(rowElm, false); posY = y; if (before) return false; } }); if (before) return !posY; }); for (x = 0; x < grid[0].length; x++) { // Cell not found could be because of an invalid table structure if (!grid[posY][x]) continue; cell = grid[posY][x].elm; if (cell != lastCell) { if (!before) { rowSpan = getSpanVal(cell, 'rowspan'); if (rowSpan > 1) { setSpanVal(cell, 'rowSpan', rowSpan + 1); continue; } } else { // Check if cell above can be expanded if (posY > 0 && grid[posY - 1][x]) { otherCell = grid[posY - 1][x].elm; rowSpan = getSpanVal(otherCell, 'rowSpan'); if (rowSpan > 1) { setSpanVal(otherCell, 'rowSpan', rowSpan + 1); continue; } } } // Insert new cell into new row newCell = cloneCell(cell); setSpanVal(newCell, 'colSpan', cell.colSpan); newRow.appendChild(newCell); lastCell = cell; } } if (newRow.hasChildNodes()) { if (!before) dom.insertAfter(newRow, rowElm); else rowElm.parentNode.insertBefore(newRow, rowElm); } }; function insertCol(before) { var posX, lastCell; // Find first/last column each(grid, function(row, y) { each(row, function(cell, x) { if (isCellSelected(cell)) { posX = x; if (before) return false; } }); if (before) return !posX; }); each(grid, function(row, y) { var cell, rowSpan, colSpan; if (!row[posX]) return; cell = row[posX].elm; if (cell != lastCell) { colSpan = getSpanVal(cell, 'colspan'); rowSpan = getSpanVal(cell, 'rowspan'); if (colSpan == 1) { if (!before) { dom.insertAfter(cloneCell(cell), cell); fillLeftDown(posX, y, rowSpan - 1, colSpan); } else { cell.parentNode.insertBefore(cloneCell(cell), cell); fillLeftDown(posX, y, rowSpan - 1, colSpan); } } else setSpanVal(cell, 'colSpan', cell.colSpan + 1); lastCell = cell; } }); }; function deleteCols() { var cols = []; // Get selected column indexes each(grid, function(row, y) { each(row, function(cell, x) { if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { each(grid, function(row) { var cell = row[x].elm, colSpan; colSpan = getSpanVal(cell, 'colSpan'); if (colSpan > 1) setSpanVal(cell, 'colSpan', colSpan - 1); else dom.remove(cell); }); cols.push(x); } }); }); cleanup(); }; function deleteRows() { var rows; function deleteRow(tr) { var nextTr, pos, lastCell; nextTr = dom.getNext(tr, 'tr'); // Move down row spanned cells each(tr.cells, function(cell) { var rowSpan = getSpanVal(cell, 'rowSpan'); if (rowSpan > 1) { setSpanVal(cell, 'rowSpan', rowSpan - 1); pos = getPos(cell); fillLeftDown(pos.x, pos.y, 1, 1); } }); // Delete cells pos = getPos(tr.cells[0]); each(grid[pos.y], function(cell) { var rowSpan; cell = cell.elm; if (cell != lastCell) { rowSpan = getSpanVal(cell, 'rowSpan'); if (rowSpan <= 1) dom.remove(cell); else setSpanVal(cell, 'rowSpan', rowSpan - 1); lastCell = cell; } }); }; // Get selected rows and move selection out of scope rows = getSelectedRows(); // Delete all selected rows each(rows.reverse(), function(tr) { deleteRow(tr); }); cleanup(); }; function cutRows() { var rows = getSelectedRows(); dom.remove(rows); cleanup(); return rows; }; function copyRows() { var rows = getSelectedRows(); each(rows, function(row, i) { rows[i] = cloneNode(row, true); }); return rows; }; function pasteRows(rows, before) { var selectedRows = getSelectedRows(), targetRow = selectedRows[before ? 0 : selectedRows.length - 1], targetCellCount = targetRow.cells.length; // Calc target cell count each(grid, function(row) { var match; targetCellCount = 0; each(row, function(cell, x) { if (cell.real) targetCellCount += cell.colspan; if (cell.elm.parentNode == targetRow) match = 1; }); if (match) return false; }); if (!before) rows.reverse(); each(rows, function(row) { var cellCount = row.cells.length, cell; // Remove col/rowspans for (i = 0; i < cellCount; i++) { cell = row.cells[i]; setSpanVal(cell, 'colSpan', 1); setSpanVal(cell, 'rowSpan', 1); } // Needs more cells for (i = cellCount; i < targetCellCount; i++) row.appendChild(cloneCell(row.cells[cellCount - 1])); // Needs less cells for (i = targetCellCount; i < cellCount; i++) dom.remove(row.cells[i]); // Add before/after if (before) targetRow.parentNode.insertBefore(row, targetRow); else dom.insertAfter(row, targetRow); }); // Remove current selection dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); }; function getPos(target) { var pos; each(grid, function(row, y) { each(row, function(cell, x) { if (cell.elm == target) { pos = {x : x, y : y}; return false; } }); return !pos; }); return pos; }; function setStartCell(cell) { startPos = getPos(cell); }; function findEndPos() { var pos, maxX, maxY; maxX = maxY = 0; each(grid, function(row, y) { each(row, function(cell, x) { var colSpan, rowSpan; if (isCellSelected(cell)) { cell = grid[y][x]; if (x > maxX) maxX = x; if (y > maxY) maxY = y; if (cell.real) { colSpan = cell.colspan - 1; rowSpan = cell.rowspan - 1; if (colSpan) { if (x + colSpan > maxX) maxX = x + colSpan; } if (rowSpan) { if (y + rowSpan > maxY) maxY = y + rowSpan; } } } }); }); return {x : maxX, y : maxY}; }; function setEndCell(cell) { var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; endPos = getPos(cell); if (startPos && endPos) { // Get start/end positions startX = Math.min(startPos.x, endPos.x); startY = Math.min(startPos.y, endPos.y); endX = Math.max(startPos.x, endPos.x); endY = Math.max(startPos.y, endPos.y); // Expand end positon to include spans maxX = endX; maxY = endY; // Expand startX for (y = startY; y <= maxY; y++) { cell = grid[y][startX]; if (!cell.real) { if (startX - (cell.colspan - 1) < startX) startX -= cell.colspan - 1; } } // Expand startY for (x = startX; x <= maxX; x++) { cell = grid[startY][x]; if (!cell.real) { if (startY - (cell.rowspan - 1) < startY) startY -= cell.rowspan - 1; } } // Find max X, Y for (y = startY; y <= endY; y++) { for (x = startX; x <= endX; x++) { cell = grid[y][x]; if (cell.real) { colSpan = cell.colspan - 1; rowSpan = cell.rowspan - 1; if (colSpan) { if (x + colSpan > maxX) maxX = x + colSpan; } if (rowSpan) { if (y + rowSpan > maxY) maxY = y + rowSpan; } } } } // Remove current selection dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); // Add new selection for (y = startY; y <= maxY; y++) { for (x = startX; x <= maxX; x++) { if (grid[y][x]) dom.addClass(grid[y][x].elm, 'mceSelected'); } } } }; // Expose to public tinymce.extend(this, { deleteTable : deleteTable, split : split, merge : merge, insertRow : insertRow, insertCol : insertCol, deleteCols : deleteCols, deleteRows : deleteRows, cutRows : cutRows, copyRows : copyRows, pasteRows : pasteRows, getPos : getPos, setStartCell : setStartCell, setEndCell : setEndCell }); }; tinymce.create('tinymce.plugins.TablePlugin', { init : function(ed, url) { var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload function createTableGrid(node) { var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); if (tblElm) return new TableGrid(tblElm, ed.dom, selection); }; function cleanup() { // Restore selection possibilities ed.getBody().style.webkitUserSelect = ''; if (hasCellSelection) { ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); hasCellSelection = false; } }; // Register buttons each([ ['table', 'table.desc', 'mceInsertTable', true], ['delete_table', 'table.del', 'mceTableDelete'], ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'], ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'], ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'], ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'], ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'], ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'], ['row_props', 'table.row_desc', 'mceTableRowProps', true], ['cell_props', 'table.cell_desc', 'mceTableCellProps', true], ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true], ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true] ], function(c) { ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]}); }); // Select whole table is a table border is clicked if (!tinymce.isIE) { ed.onClick.add(function(ed, e) { e = e.target; if (e.nodeName === 'TABLE') { ed.selection.select(e); ed.nodeChanged(); } }); } ed.onPreProcess.add(function(ed, args) { var nodes, i, node, dom = ed.dom, value; nodes = dom.select('table', args.node); i = nodes.length; while (i--) { node = nodes[i]; dom.setAttrib(node, 'data-mce-style', ''); if ((value = dom.getAttrib(node, 'width'))) { dom.setStyle(node, 'width', value); dom.setAttrib(node, 'width', ''); } if ((value = dom.getAttrib(node, 'height'))) { dom.setStyle(node, 'height', value); dom.setAttrib(node, 'height', ''); } } }); // Handle node change updates ed.onNodeChange.add(function(ed, cm, n) { var p; n = ed.selection.getStart(); p = ed.dom.getParent(n, 'td,th,caption'); cm.setActive('table', n.nodeName === 'TABLE' || !!p); // Disable table tools if we are in caption if (p && p.nodeName === 'CAPTION') p = 0; cm.setDisabled('delete_table', !p); cm.setDisabled('delete_col', !p); cm.setDisabled('delete_table', !p); cm.setDisabled('delete_row', !p); cm.setDisabled('col_after', !p); cm.setDisabled('col_before', !p); cm.setDisabled('row_after', !p); cm.setDisabled('row_before', !p); cm.setDisabled('row_props', !p); cm.setDisabled('cell_props', !p); cm.setDisabled('split_cells', !p); cm.setDisabled('merge_cells', !p); }); ed.onInit.add(function(ed) { var startTable, startCell, dom = ed.dom, tableGrid; winMan = ed.windowManager; // Add cell selection logic ed.onMouseDown.add(function(ed, e) { if (e.button != 2) { cleanup(); startCell = dom.getParent(e.target, 'td,th'); startTable = dom.getParent(startCell, 'table'); } }); dom.bind(ed.getDoc(), 'mouseover', function(e) { var sel, table, target = e.target; if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) { table = dom.getParent(target, 'table'); if (table == startTable) { if (!tableGrid) { tableGrid = createTableGrid(table); tableGrid.setStartCell(startCell); ed.getBody().style.webkitUserSelect = 'none'; } tableGrid.setEndCell(target); hasCellSelection = true; } // Remove current selection sel = ed.selection.getSel(); try { if (sel.removeAllRanges) sel.removeAllRanges(); else sel.empty(); } catch (ex) { // IE9 might throw errors here } e.preventDefault(); } }); ed.onMouseUp.add(function(ed, e) { var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; // Move selection to startCell if (startCell) { if (tableGrid) ed.getBody().style.webkitUserSelect = ''; function setPoint(node, start) { var walker = new tinymce.dom.TreeWalker(node, node); do { // Text node if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { if (start) rng.setStart(node, 0); else rng.setEnd(node, node.nodeValue.length); return; } // BR element if (node.nodeName == 'BR') { if (start) rng.setStartBefore(node); else rng.setEndBefore(node); return; } } while (node = (start ? walker.next() : walker.prev())); } // Try to expand text selection as much as we can only Gecko supports cell selection selectedCells = dom.select('td.mceSelected,th.mceSelected'); if (selectedCells.length > 0) { rng = dom.createRng(); node = selectedCells[0]; endNode = selectedCells[selectedCells.length - 1]; rng.setStartBefore(node); rng.setEndAfter(node); setPoint(node, 1); walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table')); do { if (node.nodeName == 'TD' || node.nodeName == 'TH') { if (!dom.hasClass(node, 'mceSelected')) break; lastNode = node; } } while (node = walker.next()); setPoint(lastNode); sel.setRng(rng); } ed.nodeChanged(); startCell = tableGrid = startTable = null; } }); ed.onKeyUp.add(function(ed, e) { cleanup(); }); ed.onKeyDown.add(function (ed, e) { fixTableCellSelection(ed); }); ed.onMouseDown.add(function (ed, e) { if (e.button != 2) { fixTableCellSelection(ed); } }); function tableCellSelected(ed, rng, n, currentCell) { // The decision of when a table cell is selected is somewhat involved. The fact that this code is // required is actually a pointer to the root cause of this bug. A cell is selected when the start // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) // or the parent of the table (in the case of the selection containing the last cell of a table). var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), tableParent, allOfCellSelected, tableCellSelection; if (table) tableParent = table.parentNode; allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && rng.startOffset == 0 && rng.endOffset == 0 && currentCell && (n.nodeName=="TR" || n==tableParent); tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell; return allOfCellSelected || tableCellSelection; // return false; } // this nasty hack is here to work around some WebKit selection bugs. function fixTableCellSelection(ed) { if (!tinymce.isWebKit) return; var rng = ed.selection.getRng(); var n = ed.selection.getNode(); var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH'); if (!tableCellSelected(ed, rng, n, currentCell)) return; if (!currentCell) { currentCell=n; } // Get the very last node inside the table cell var end = currentCell.lastChild; while (end.lastChild) end = end.lastChild; // Select the entire table cell. Nothing outside of the table cell should be selected. rng.setEnd(end, end.nodeValue.length); ed.selection.setRng(rng); } ed.plugins.table.fixTableCellSelection=fixTableCellSelection; // Add context menu if (ed && ed.plugins.contextmenu) { ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { var sm, se = ed.selection, el = se.getNode() || ed.getBody(); if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) { m.removeAll(); if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) { m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true}); m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'}); m.addSeparator(); } if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) { m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true}); m.addSeparator(); } m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}}); m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'}); m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'}); m.addSeparator(); // Cell menu sm = m.addMenu({title : 'table.cell'}); sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'}); sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'}); sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'}); // Row menu sm = m.addMenu({title : 'table.row'}); sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'}); sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'}); sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'}); sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'}); sm.addSeparator(); sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'}); sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'}); sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows); sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows); // Column menu sm = m.addMenu({title : 'table.col'}); sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); } else m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); }); } // Fix to allow navigating up and down in a table in WebKit browsers. if (tinymce.isWebKit) { function moveSelection(ed, e) { var VK = tinymce.VK; var key = e.keyCode; function handle(upBool, sourceNode, event) { var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; var currentRow = ed.dom.getParent(sourceNode, 'tr'); var siblingRow = currentRow[siblingDirection]; if (siblingRow) { moveCursorToRow(ed, sourceNode, siblingRow, upBool); tinymce.dom.Event.cancel(event); return true; } else { var tableNode = ed.dom.getParent(currentRow, 'table'); var middleNode = currentRow.parentNode; var parentNodeName = middleNode.nodeName.toLowerCase(); if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); if (targetParent !== null) { return moveToRowInTarget(upBool, targetParent, sourceNode, event); } } return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); } } function getTargetParent(upBool, topNode, secondNode, nodeName) { var tbodies = ed.dom.select('>' + nodeName, topNode); var position = tbodies.indexOf(secondNode); if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { return getFirstHeadOrFoot(upBool, topNode); } else if (position === -1) { var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; return tbodies[topOrBottom]; } else { return tbodies[position + (upBool ? -1 : 1)]; } } function getFirstHeadOrFoot(upBool, parent) { var tagName = upBool ? 'thead' : 'tfoot'; var headOrFoot = ed.dom.select('>' + tagName, parent); return headOrFoot.length !== 0 ? headOrFoot[0] : null; } function moveToRowInTarget(upBool, targetParent, sourceNode, event) { var targetRow = getChildForDirection(targetParent, upBool); targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool); tinymce.dom.Event.cancel(event); return true; } function escapeTable(upBool, currentRow, siblingDirection, table, event) { var tableSibling = table[siblingDirection]; if (tableSibling) { moveCursorToStartOfElement(tableSibling); return true; } else { var parentCell = ed.dom.getParent(table, 'td,th'); if (parentCell) { return handle(upBool, parentCell, event); } else { var backUpSibling = getChildForDirection(currentRow, !upBool); moveCursorToStartOfElement(backUpSibling); return tinymce.dom.Event.cancel(event); } } } function getChildForDirection(parent, up) { var child = parent && parent[up ? 'lastChild' : 'firstChild']; // BR is not a valid table child to return in this case we return the table cell return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; } function moveCursorToStartOfElement(n) { ed.selection.setCursorLocation(n, 0); } function isVerticalMovement() { return key == VK.UP || key == VK.DOWN; } function isInTable(ed) { var node = ed.selection.getNode(); var currentRow = ed.dom.getParent(node, 'tr'); return currentRow !== null; } function columnIndex(column) { var colIndex = 0; var c = column; while (c.previousSibling) { c = c.previousSibling; colIndex = colIndex + getSpanVal(c, "colspan"); } return colIndex; } function findColumn(rowElement, columnIndex) { var c = 0; var r = 0; each(rowElement.children, function(cell, i) { c = c + getSpanVal(cell, "colspan"); r = i; if (c > columnIndex) return false; }); return r; } function moveCursorToRow(ed, node, row, upBool) { var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); var tgtColumnIndex = findColumn(row, srcColumnIndex); var tgtNode = row.childNodes[tgtColumnIndex]; var rowCellTarget = getChildForDirection(tgtNode, upBool); moveCursorToStartOfElement(rowCellTarget || tgtNode); } function shouldFixCaret(preBrowserNode) { var newNode = ed.selection.getNode(); var newParent = ed.dom.getParent(newNode, 'td,th'); var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent) } function checkSameParentTable(nodeOne, NodeTwo) { return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); } if (isVerticalMovement() && isInTable(ed)) { var preBrowserNode = ed.selection.getNode(); setTimeout(function() { if (shouldFixCaret(preBrowserNode)) { handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); } }, 0); } } ed.onKeyDown.add(moveSelection); } // Fixes an issue on Gecko where it's impossible to place the caret behind a table // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled if (!tinymce.isIE) { function fixTableCaretPos() { var last; // Skip empty text nodes form the end for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; if (last && last.nodeName == 'TABLE') ed.dom.add(ed.getBody(), 'p', null, '
        '); }; // Fixes an bug where it's impossible to place the caret before a table in Gecko // this fix solves it by detecting when the caret is at the beginning of such a table // and then manually moves the caret infront of the table if (tinymce.isGecko) { ed.onKeyDown.add(function(ed, e) { var rng, table, dom = ed.dom; // On gecko it's not possible to place the caret before a table if (e.keyCode == 37 || e.keyCode == 38) { rng = ed.selection.getRng(); table = dom.getParent(rng.startContainer, 'table'); if (table && ed.getBody().firstChild == table) { if (isAtStart(rng, table)) { rng = dom.createRng(); rng.setStartBefore(table); rng.setEndBefore(table); ed.selection.setRng(rng); e.preventDefault(); } } } }); } ed.onKeyUp.add(fixTableCaretPos); ed.onSetContent.add(fixTableCaretPos); ed.onVisualAid.add(fixTableCaretPos); ed.onPreProcess.add(function(ed, o) { var last = o.node.lastChild; if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR' && last.previousSibling && last.previousSibling.nodeName == "TABLE") ed.dom.remove(last); }); /** * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line */ if (tinymce.isGecko) { ed.onKeyDown.add(function(ed, e) { if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) { var node = ed.selection.getRng().startContainer; var tableCell = dom.getParent(node, 'td,th'); if (tableCell) { var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF"); dom.insertAfter(zeroSizedNbsp, node); } } }); } fixTableCaretPos(); ed.startContent = ed.getContent({format : 'raw'}); } }); // Register action commands each({ mceTableSplitCells : function(grid) { grid.split(); }, mceTableMergeCells : function(grid) { var rowSpan, colSpan, cell; cell = ed.dom.getParent(ed.selection.getNode(), 'th,td'); if (cell) { rowSpan = cell.rowSpan; colSpan = cell.colSpan; } if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { winMan.open({ url : url + '/merge_cells.htm', width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), inline : 1 }, { rows : rowSpan, cols : colSpan, onaction : function(data) { grid.merge(cell, data.cols, data.rows); }, plugin_url : url }); } else grid.merge(); }, mceTableInsertRowBefore : function(grid) { grid.insertRow(true); }, mceTableInsertRowAfter : function(grid) { grid.insertRow(); }, mceTableInsertColBefore : function(grid) { grid.insertCol(true); }, mceTableInsertColAfter : function(grid) { grid.insertCol(); }, mceTableDeleteCol : function(grid) { grid.deleteCols(); }, mceTableDeleteRow : function(grid) { grid.deleteRows(); }, mceTableCutRow : function(grid) { clipboardRows = grid.cutRows(); }, mceTableCopyRow : function(grid) { clipboardRows = grid.copyRows(); }, mceTablePasteRowBefore : function(grid) { grid.pasteRows(clipboardRows, true); }, mceTablePasteRowAfter : function(grid) { grid.pasteRows(clipboardRows); }, mceTableDelete : function(grid) { grid.deleteTable(); } }, function(func, name) { ed.addCommand(name, function() { var grid = createTableGrid(); if (grid) { func(grid); ed.execCommand('mceRepaint'); cleanup(); } }); }); // Register dialog commands each({ mceInsertTable : function(val) { winMan.open({ url : url + '/table.htm', width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), inline : 1 }, { plugin_url : url, action : val ? val.action : 0 }); }, mceTableRowProps : function() { winMan.open({ url : url + '/row.htm', width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), inline : 1 }, { plugin_url : url }); }, mceTableCellProps : function() { winMan.open({ url : url + '/cell.htm', width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), inline : 1 }, { plugin_url : url }); } }, function(func, name) { ed.addCommand(name, function(ui, val) { func(val); }); }); } }); // Register plugin tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin); })(tinymce); table/merge_cells.htm000066600000002704150472616010010637 0ustar00 {#table_dlg.merge_cells_title}
        {#table_dlg.merge_cells_title}
        :
        :
        template/css/template.css000066600000000374150472616010011506 0ustar00#frmbody { padding: 10px; background-color: #FFF; border: 1px solid #CCC; } .frmRow { margin-bottom: 10px; } #templatesrc { border: none; width: 320px; height: 240px; } .title { padding-bottom: 5px; } .mceActionPanel { padding-top: 5px; } template/editor_plugin.js000066600000006346150472616010011600 0ustar00(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length'); }, init : function() { var ed = tinyMCEPopup.editor, tsrc, sel, x, u; tsrc = ed.getParam("template_templates", false); sel = document.getElementById('tpath'); // Setup external template list if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') { for (x=0, tsrc = []; x'); }); }, selectTemplate : function(u, ti) { var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc; if (!u) return; d.body.innerHTML = this.templateHTML = this.getFileContents(u); for (x=0; x blank_page template/template.htm000066600000002602150472616010010712 0ustar00 {#template_dlg.title}
        {#template_dlg.desc}
        {#template_dlg.preview}
        template/langs/ru_dlg.js000066600000004552150472616010011311 0ustar00tinyMCE.addI18n('ru.template_dlg',{ title:"\u0428\u0430\u0431\u043B\u043E\u043D\u044B", label:"\u0428\u0430\u0431\u043B\u043E\u043D", desc_label:"\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435", desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u043D\u044B\u0439 \u043A\u043E\u043D\u0442\u0435\u043D\u0442", select:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043B\u043E\u043D", preview:"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440", warning:"\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435: \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0448\u0430\u0431\u043B\u043E\u043D\u0430 \u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u0439 \u043C\u043E\u0436\u0435\u0442 \u043F\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043A \u043F\u043E\u0442\u0435\u0440\u044F\u043C \u0434\u0430\u043D\u043D\u044B\u0445", mdate_format:"% Y-% m-% d% H:% M:% S", cdate_format:"% Y-% m-% d% H:% M:% S", months_long:"\u044F\u043D\u0432\u0430\u0440\u044C, \u0444\u0435\u0432\u0440\u0430\u043B\u044C, \u043C\u0430\u0440\u0442, \u0430\u043F\u0440\u0435\u043B\u044C, \u043C\u0430\u0439, \u0438\u044E\u043D\u044C, \u0438\u044E\u043B\u044C, \u0430\u0432\u0433\u0443\u0441\u0442, \u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044C, \u043E\u043A\u0442\u044F\u0431\u0440\u044C, \u043D\u043E\u044F\u0431\u0440\u044C, \u0434\u0435\u043A\u0430\u0431\u0440\u044C", months_short:"\u044F\u043D\u0432\u0430\u0440\u044C, \u0444\u0435\u0432\u0440\u0430\u043B\u044C, \u043C\u0430\u0440\u0442, \u0430\u043F\u0440\u0435\u043B\u044C, \u043C\u0430\u0439, \u0438\u044E\u043D\u044C, \u0438\u044E\u043B\u044C, \u0430\u0432\u0433\u0443\u0441\u0442, \u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C, \u041E\u043A\u0442\u044F\u0431\u0440\u044C, \u041D\u043E\u044F\u0431\u0440\u044C, \u0414\u0435\u043A\u0430\u0431\u0440\u044C", day_long:"\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435, \u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A, \u0432\u0442\u043E\u0440\u043D\u0438\u043A, \u0441\u0440\u0435\u0434\u0430, \u0447\u0435\u0442\u0432\u0435\u0440\u0433, \u043F\u044F\u0442\u043D\u0438\u0446\u0443, \u0441\u0443\u0431\u0431\u043E\u0442\u0443, \u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435", day_short:"\u0412\u0441, \u041F\u043D, \u0412\u0442, \u0421\u0440, \u0427\u0442, \u041F\u0442, \u0421\u0431, \u0412\u0441" });template/langs/en_dlg.js000066600000001163150472616010011260 0ustar00tinyMCE.addI18n('en.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"});template/editor_plugin_src.js000066600000011334150472616010012440 0ustar00/** * 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 each = tinymce.each; tinymce.create('tinymce.plugins.TemplatePlugin', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceTemplate', function(ui) { ed.windowManager.open({ file : url + '/template.htm', width : ed.getParam('template_popup_width', 750), height : ed.getParam('template_popup_height', 600), inline : 1 }, { plugin_url : url }); }); ed.addCommand('mceInsertTemplate', t._insertTemplate, t); // Register buttons ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'}); ed.onPreProcess.add(function(ed, o) { var dom = ed.dom; each(dom.select('div', o.node), function(e) { if (dom.hasClass(e, 'mceTmpl')) { each(dom.select('*', e), function(e) { if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); }); t._replaceVals(e); } }); }); }, getInfo : function() { return { longname : 'Template plugin', author : 'Moxiecode Systems AB', authorurl : 'http://www.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, _insertTemplate : function(ui, v) { var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent(); h = v.content; each(t.editor.getParam('template_replace_values'), function(v, k) { if (typeof(v) != 'function') h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v); }); el = dom.create('div', null, h); // Find template element within div n = dom.select('.mceTmpl', el); if (n && n.length > 0) { el = dom.create('div', null); el.appendChild(n[0].cloneNode(true)); } function hasClass(n, c) { return new RegExp('\\b' + c + '\\b', 'g').test(n.className); }; each(dom.select('*', el), function(n) { // Replace cdate if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|'))) n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format"))); // Replace mdate if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format"))); // Replace selection if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|'))) n.innerHTML = sel; }); t._replaceVals(el); ed.execCommand('mceInsertContent', false, el.innerHTML); ed.addVisual(); }, _replaceVals : function(e) { var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values'); each(dom.select('*', e), function(e) { each(vl, function(v, k) { if (dom.hasClass(e, k)) { if (typeof(vl[k]) == 'function') vl[k](e); } }); }); }, _getDateTime : function(d, fmt) { if (!fmt) return ""; function addZeros(value, len) { var i; value = "" + value; if (value.length < len) { for (i=0; i<(len-value.length); i++) value = "0" + value; } return value; } fmt = fmt.replace("%D", "%m/%d/%y"); fmt = fmt.replace("%r", "%I:%M:%S %p"); fmt = fmt.replace("%Y", "" + d.getFullYear()); fmt = fmt.replace("%y", "" + d.getYear()); fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2)); fmt = fmt.replace("%d", addZeros(d.getDate(), 2)); fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2)); fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2)); fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2)); fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1)); fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM")); fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]); fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]); fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]); fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]); fmt = fmt.replace("%%", "%"); return fmt; } }); // Register plugin tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin); })();paste/editor_plugin.js000066600000032214150472616010011072 0ustar00(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
        ")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

        "+o.encode(r).replace(/\r?\n\r?\n/g,"

        ").replace(/\r?\n/g,"
        ")+"

        "}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
         [\s\r\n]+|
        )*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
         [\s\r\n]+|
        )*/g,"$1"]]);d([[/

        /g,"

        "],[/
        /g," "],[/

        /g,"
        "]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

        ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

        $1

        ")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

        "],[/<\/h[1-6][^>]*>/gi,"

        "]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"
        "]])}else{if(e=="p"){h([[/\n+/g,"

        "],[/^(.*<\/p>)(

        )$/,"

        $1"]])}else{h([[/\n\n/g,"

        "],[/^(.*<\/p>)(

        )$/,"

        $1"],[/\n/g,"
        "]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();paste/js/pasteword.js000066600000003074150472616010010654 0ustar00tinyMCEPopup.requireLangPack(); var PasteWordDialog = { init : function() { var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = ''; // Create iframe el.innerHTML = ''; ifr = document.getElementById('iframe'); doc = ifr.contentWindow.document; // Force absolute CSS urls css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")]; css = css.concat(tinymce.explode(ed.settings.content_css) || []); tinymce.each(css, function(u) { cssHTML += ''; }); // Write content into iframe doc.open(); doc.write('' + cssHTML + ''); doc.close(); doc.designMode = 'on'; this.resize(); window.setTimeout(function() { ifr.contentWindow.focus(); }, 10); }, insert : function() { var h = document.getElementById('iframe').contentWindow.document.body.innerHTML; tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true}); tinyMCEPopup.close(); }, resize : function() { var vp = tinyMCEPopup.dom.getViewPort(window), el; el = document.getElementById('iframe'); if (el) { el.style.width = (vp.w - 20) + 'px'; el.style.height = (vp.h - 90) + 'px'; } } }; tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog); paste/js/pastetext.js000066600000001520150472616010010657 0ustar00tinyMCEPopup.requireLangPack(); var PasteTextDialog = { init : function() { this.resize(); }, insert : function() { var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines; // Convert linebreaks into paragraphs if (document.getElementById('linebreaks').checked) { lines = h.split(/\r?\n/); if (lines.length > 1) { h = ''; tinymce.each(lines, function(row) { h += '

        ' + row + '

        '; }); } } tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h}); tinyMCEPopup.close(); }, resize : function() { var vp = tinyMCEPopup.dom.getViewPort(window), el; el = document.getElementById('content'); el.style.width = (vp.w - 20) + 'px'; el.style.height = (vp.h - 90) + 'px'; } }; tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog); paste/pastetext.htm000066600000002237150472616010010425 0ustar00 {#paste.paste_text_desc}
        {#paste.paste_text_desc}

        {#paste_dlg.text_title}
        paste/pasteword.htm000066600000001372150472616010010413 0ustar00 {#paste.paste_word_desc}
        {#paste.paste_word_desc}
        {#paste_dlg.word_title}
        paste/langs/ru_dlg.js000066600000001167150472616010010611 0ustar00tinyMCE.addI18n('ru.paste_dlg',{ text_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL + V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E", text_linebreaks:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u0441\u0442\u0440\u043E\u043A", word_title:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CTRL + V \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430 \u0432 \u043E\u043A\u043D\u043E" });paste/langs/en_dlg.js000066600000000342150472616010010557 0ustar00tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."});paste/editor_plugin_src.js000066600000072723150472616010011752 0ustar00/** * 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 each = tinymce.each, defs = { paste_auto_cleanup_on_paste : true, paste_enable_default_filters : true, paste_block_drop : false, paste_retain_style_properties : "none", paste_strip_class_attributes : "mso", paste_remove_spans : false, paste_remove_styles : false, paste_remove_styles_if_webkit : true, paste_convert_middot_lists : true, paste_convert_headers_to_strong : false, paste_dialog_width : "450", paste_dialog_height : "400", paste_text_use_dialog : false, paste_text_sticky : false, paste_text_sticky_default : false, paste_text_notifyalways : false, paste_text_linebreaktype : "combined", paste_text_replacements : [ [/\u2026/g, "..."], [/[\x93\x94\u201c\u201d]/g, '"'], [/[\x60\x91\x92\u2018\u2019]/g, "'"] ] }; function getParam(ed, name) { return ed.getParam(name, defs[name]); } tinymce.create('tinymce.plugins.PastePlugin', { init : function(ed, url) { var t = this; t.editor = ed; t.url = url; // Setup plugin events t.onPreProcess = new tinymce.util.Dispatcher(t); t.onPostProcess = new tinymce.util.Dispatcher(t); // Register default handlers t.onPreProcess.add(t._preProcess); t.onPostProcess.add(t._postProcess); // Register optional preprocess handler t.onPreProcess.add(function(pl, o) { ed.execCallback('paste_preprocess', pl, o); }); // Register optional postprocess t.onPostProcess.add(function(pl, o) { ed.execCallback('paste_postprocess', pl, o); }); ed.onKeyDown.addToTop(function(ed, e) { // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) return false; // Stop other listeners }); // Initialize plain text flag ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default'); // This function executes the process handlers and inserts the contents // force_rich overrides plain text mode set by user, important for pasting with execCommand function process(o, force_rich) { var dom = ed.dom, rng; // Execute pre process handlers t.onPreProcess.dispatch(t, o); // Create DOM structure o.node = dom.create('div', 0, o.content); // If pasting inside the same element and the contents is only one block // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element if (tinymce.isGecko) { rng = ed.selection.getRng(true); if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) { // Is only one block node and it doesn't contain word stuff if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1) dom.remove(o.node.firstChild, true); } } // Execute post process handlers t.onPostProcess.dispatch(t, o); // Serialize content o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''}); // Plain text option active? if ((!force_rich) && (ed.pasteAsPlainText)) { t._insertPlainText(o.content); if (!getParam(ed, "paste_text_sticky")) { ed.pasteAsPlainText = false; ed.controlManager.setActive("pastetext", false); } } else { t._insert(o.content); } } // Add command for external usage ed.addCommand('mceInsertClipboardContent', function(u, o) { process(o, true); }); if (!getParam(ed, "paste_text_use_dialog")) { ed.addCommand('mcePasteText', function(u, v) { var cookie = tinymce.util.Cookie; ed.pasteAsPlainText = !ed.pasteAsPlainText; ed.controlManager.setActive('pastetext', ed.pasteAsPlainText); if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) { if (getParam(ed, "paste_text_sticky")) { ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky')); } else { ed.windowManager.alert(ed.translate('paste.plaintext_mode')); } if (!getParam(ed, "paste_text_notifyalways")) { cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31)) } } }); } ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'}); ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'}); // This function grabs the contents from the clipboard by adding a // hidden div and placing the caret inside it and after the browser paste // is done it grabs that contents and processes that function grabContent(e) { var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent; // Check if browser supports direct plaintext access if (e.clipboardData || dom.doc.dataTransfer) { textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text'); if (ed.pasteAsPlainText) { e.preventDefault(); process({content : dom.encode(textContent).replace(/\r?\n/g, '
        ')}); return; } } if (dom.get('_mcePaste')) return; // Create container to paste into n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF'); // If contentEditable mode we need to find out the position of the closest element if (body != ed.getDoc().body) posY = dom.getPos(ed.selection.getStart(), body).y; else posY = body.scrollTop + dom.getViewPort(ed.getWin()).y; // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles // If also needs to be in view on IE or the paste would fail dom.setStyles(n, { position : 'absolute', left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div top : posY - 25, width : 1, height : 1, overflow : 'hidden' }); if (tinymce.isIE) { // Store away the old range oldRng = sel.getRng(); // Select the container rng = dom.doc.body.createTextRange(); rng.moveToElementText(n); rng.execCommand('Paste'); // Remove container dom.remove(n); // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due // to IE security settings so we pass the junk though better than nothing right if (n.innerHTML === '\uFEFF\uFEFF') { ed.execCommand('mcePasteWord'); e.preventDefault(); return; } // Restore the old range and clear the contents before pasting sel.setRng(oldRng); sel.setContent(''); // For some odd reason we need to detach the the mceInsertContent call from the paste event // It's like IE has a reference to the parent element that you paste in and the selection gets messed up // when it tries to restore the selection setTimeout(function() { // Process contents process({content : n.innerHTML}); }, 0); // Block the real paste event return tinymce.dom.Event.cancel(e); } else { function block(e) { e.preventDefault(); }; // Block mousedown and click to prevent selection change dom.bind(ed.getDoc(), 'mousedown', block); dom.bind(ed.getDoc(), 'keydown', block); or = ed.selection.getRng(); // Move select contents inside DIV n = n.firstChild; rng = ed.getDoc().createRange(); rng.setStart(n, 0); rng.setEnd(n, 2); sel.setRng(rng); // Wait a while and grab the pasted contents window.setTimeout(function() { var h = '', nl; // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit if (!dom.select('div.mcePaste > div.mcePaste').length) { nl = dom.select('div.mcePaste'); // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string each(nl, function(n) { var child = n.firstChild; // WebKit inserts a DIV container with lots of odd styles if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) { dom.remove(child, 1); } // Remove apply style spans each(dom.select('span.Apple-style-span', n), function(n) { dom.remove(n, 1); }); // Remove bogus br elements each(dom.select('br[data-mce-bogus]', n), function(n) { dom.remove(n); }); // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV if (n.parentNode.className != 'mcePaste') h += n.innerHTML; }); } else { // Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc // So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same h = '

        ' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '

        ').replace(/\r?\n/g, '
        ') + '

        '; } // Remove the nodes each(dom.select('div.mcePaste'), function(n) { dom.remove(n); }); // Restore the old selection if (or) sel.setRng(or); process({content : h}); // Unblock events ones we got the contents dom.unbind(ed.getDoc(), 'mousedown', block); dom.unbind(ed.getDoc(), 'keydown', block); }, 0); } } // Check if we should use the new auto process method if (getParam(ed, "paste_auto_cleanup_on_paste")) { // Is it's Opera or older FF use key handler if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { ed.onKeyDown.addToTop(function(ed, e) { if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45)) grabContent(e); }); } else { // Grab contents on paste event on Gecko and WebKit ed.onPaste.addToTop(function(ed, e) { return grabContent(e); }); } } ed.onInit.add(function() { ed.controlManager.setActive("pastetext", ed.pasteAsPlainText); // Block all drag/drop events if (getParam(ed, "paste_block_drop")) { ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) { e.preventDefault(); e.stopPropagation(); return false; }); } }); // Add legacy support t._legacySupport(); }, getInfo : function() { return { longname : 'Paste text/word', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, _preProcess : function(pl, o) { var ed = this.editor, h = o.content, grep = tinymce.grep, explode = tinymce.explode, trim = tinymce.trim, len, stripClass; //console.log('Before preprocess:' + o.content); function process(items) { each(items, function(v) { // Remove or replace if (v.constructor == RegExp) h = h.replace(v, ''); else h = h.replace(v[0], v[1]); }); } if (ed.settings.paste_enable_default_filters == false) { return; } // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser if (tinymce.isIE && document.documentMode >= 9 && /<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(o.content)) { // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser process([[/(?:
         [\s\r\n]+|
        )*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
         [\s\r\n]+|
        )*/g, '$1']]); // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break process([ [/

        /g, '

        '], // Replace multiple BR elements with uppercase BR to keep them intact [/
        /g, ' '], // Replace single br elements with space since they are word wrap BR:s [/

        /g, '
        '] // Replace back the double brs but into a single BR ]); } // Detect Word content and process it more aggressive if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) { o.wordContent = true; // Mark the pasted contents as word specific content //console.log('Word contents detected.'); // Process away some basic content process([ /^\s*( )+/gi, //   entities at the start of contents /( |]*>)+\s*$/gi //   entities at the end of contents ]); if (getParam(ed, "paste_convert_headers_to_strong")) { h = h.replace(/

        ]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "

        $1

        "); } if (getParam(ed, "paste_convert_middot_lists")) { process([ [//gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker [/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers [/(]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF) ]); } process([ // Word comments like conditional comments etc //gi, // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi, // Convert into for line-though [/<(\/?)s>/gi, "<$1strike>"], // Replace nsbp entites to char since it's easier to handle [/ /gi, "\u00a0"] ]); // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag. // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. do { len = h.length; h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); } while (len != h.length); // Remove all spans if no styles is to be retained if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) { h = h.replace(/<\/?span[^>]*>/gi, ""); } else { // We're keeping styles, so at least clean them up. // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx process([ // Convert ___ to string of alternating breaking/non-breaking spaces of same length [/([\s\u00a0]*)<\/span>/gi, function(str, spaces) { return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : ""; } ], // Examine all styles: delete junk, transform some, and keep the rest [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi, function(str, tag, style) { var n = [], i = 0, s = explode(trim(style).replace(/"/gi, "'"), ";"); // Examine each style definition within the tag's style attribute each(s, function(v) { var name, value, parts = explode(v, ":"); function ensureUnits(v) { return v + ((v !== "0") && (/\d$/.test(v)))? "px" : ""; } if (parts.length == 2) { name = parts[0].toLowerCase(); value = parts[1].toLowerCase(); // Translate certain MS Office styles into their CSS equivalents switch (name) { case "mso-padding-alt": case "mso-padding-top-alt": case "mso-padding-right-alt": case "mso-padding-bottom-alt": case "mso-padding-left-alt": case "mso-margin-alt": case "mso-margin-top-alt": case "mso-margin-right-alt": case "mso-margin-bottom-alt": case "mso-margin-left-alt": case "mso-table-layout-alt": case "mso-height": case "mso-width": case "mso-vertical-align-alt": n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value); return; case "horiz-align": n[i++] = "text-align:" + value; return; case "vert-align": n[i++] = "vertical-align:" + value; return; case "font-color": case "mso-foreground": n[i++] = "color:" + value; return; case "mso-background": case "mso-highlight": n[i++] = "background:" + value; return; case "mso-default-height": n[i++] = "min-height:" + ensureUnits(value); return; case "mso-default-width": n[i++] = "min-width:" + ensureUnits(value); return; case "mso-padding-between-alt": n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value); return; case "text-line-through": if ((value == "single") || (value == "double")) { n[i++] = "text-decoration:line-through"; } return; case "mso-zero-height": if (value == "yes") { n[i++] = "display:none"; } return; } // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) { return; } // If it reached this point, it must be a valid CSS style n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case } }); // If style attribute contained any valid styles the re-write it; otherwise delete style attribute. if (i > 0) { return tag + ' style="' + n.join(';') + '"'; } else { return tag; } } ] ]); } } // Replace headers with if (getParam(ed, "paste_convert_headers_to_strong")) { process([ [/]*>/gi, "

        "], [/<\/h[1-6][^>]*>/gi, "

        "] ]); } process([ // Copy paste from Java like Open Office will produce this junk on FF [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, ''] ]); // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso"). // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation. stripClass = getParam(ed, "paste_strip_class_attributes"); if (stripClass !== "none") { function removeClasses(match, g1) { if (stripClass === "all") return ''; var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "), function(v) { return (/^(?!mso)/i.test(v)); } ); return cls.length ? ' class="' + cls.join(" ") + '"' : ''; }; h = h.replace(/ class="([^"]+)"/gi, removeClasses); h = h.replace(/ class=([\-\w]+)/gi, removeClasses); } // Remove spans option if (getParam(ed, "paste_remove_spans")) { h = h.replace(/<\/?span[^>]*>/gi, ""); } //console.log('After preprocess:' + h); o.content = h; }, /** * Various post process items. */ _postProcess : function(pl, o) { var t = this, ed = t.editor, dom = ed.dom, styleProps; if (ed.settings.paste_enable_default_filters == false) { return; } if (o.wordContent) { // Remove named anchors or TOC links each(dom.select('a', o.node), function(a) { if (!a.href || a.href.indexOf('#_Toc') != -1) dom.remove(a, 1); }); if (getParam(ed, "paste_convert_middot_lists")) { t._convertLists(pl, o); } // Process styles styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties // Process only if a string was specified and not equal to "all" or "*" if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) { styleProps = tinymce.explode(styleProps.replace(/^none$/i, "")); // Retains some style properties each(dom.select('*', o.node), function(el) { var newStyle = {}, npc = 0, i, sp, sv; // Store a subset of the existing styles if (styleProps) { for (i = 0; i < styleProps.length; i++) { sp = styleProps[i]; sv = dom.getStyle(el, sp); if (sv) { newStyle[sp] = sv; npc++; } } } // Remove all of the existing styles dom.setAttrib(el, 'style', ''); if (styleProps && npc > 0) dom.setStyles(el, newStyle); // Add back the stored subset of styles else // Remove empty span tags that do not have class attributes if (el.nodeName == 'SPAN' && !el.className) dom.remove(el, true); }); } } // Remove all style information or only specifically on WebKit to avoid the style bug on that browser if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) { each(dom.select('*[style]', o.node), function(el) { el.removeAttribute('style'); el.removeAttribute('data-mce-style'); }); } else { if (tinymce.isWebKit) { // We need to compress the styles on WebKit since if you paste it will become // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles each(dom.select('*', o.node), function(el) { el.removeAttribute('data-mce-style'); }); } } }, /** * Converts the most common bullet and number formats in Office into a real semantic UL/LI list. */ _convertLists : function(pl, o) { var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html; // Convert middot lists into real semantic lists each(dom.select('p', o.node), function(p) { var sib, val = '', type, html, idx, parents; // Get text node value at beginning of paragraph for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling) val += sib.nodeValue; val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0'); // Detect unordered lists look for bullets if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val)) type = 'ul'; // Detect ordered lists 1., a. or ixv. if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val)) type = 'ol'; // Check if node value matches the list pattern: o   if (type) { margin = parseFloat(p.style.marginLeft || 0); if (margin > lastMargin) levels.push(margin); if (!listElm || type != lastType) { listElm = dom.create(type); dom.insertAfter(listElm, p); } else { // Nested list element if (margin > lastMargin) { listElm = li.appendChild(dom.create(type)); } else if (margin < lastMargin) { // Find parent level based on margin value idx = tinymce.inArray(levels, margin); parents = dom.getParents(listElm.parentNode, type); listElm = parents[parents.length - 1 - idx] || listElm; } } // Remove middot or number spans if they exists each(dom.select('span', p), function(span) { var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, ''); // Remove span with the middot or the number if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html)) dom.remove(span); else if (/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(html)) dom.remove(span); }); html = p.innerHTML; // Remove middot/list items if (type == 'ul') html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, ''); else html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); // Create li and add paragraph data into the new li li = listElm.appendChild(dom.create('li', 0, html)); dom.remove(p); lastMargin = margin; lastType = type; } else listElm = lastMargin = 0; // End list element }); // Remove any left over makers html = o.node.innerHTML; if (html.indexOf('__MCE_ITEM__') != -1) o.node.innerHTML = html.replace(/__MCE_ITEM__/g, ''); }, /** * Inserts the specified contents at the caret position. */ _insert : function(h, skip_undo) { var ed = this.editor, r = ed.selection.getRng(); // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells. if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer) ed.getDoc().execCommand('Delete', false, null); ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo}); }, /** * Instead of the old plain text method which tried to re-create a paste operation, the * new approach adds a plain text mode toggle switch that changes the behavior of paste. * This function is passed the same input that the regular paste plugin produces. * It performs additional scrubbing and produces (and inserts) the plain text. * This approach leverages all of the great existing functionality in the paste * plugin, and requires minimal changes to add the new functionality. * Speednet - June 2009 */ _insertPlainText : function(content) { var ed = this.editor, linebr = getParam(ed, "paste_text_linebreaktype"), rl = getParam(ed, "paste_text_replacements"), is = tinymce.is; function process(items) { each(items, function(v) { if (v.constructor == RegExp) content = content.replace(v, ""); else content = content.replace(v[0], v[1]); }); }; if ((typeof(content) === "string") && (content.length > 0)) { // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) { process([ /[\n\r]+/g ]); } else { // Otherwise just get rid of carriage returns (only need linefeeds) process([ /\r+/g ]); } process([ [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them [/]*>|<\/tr>/gi, "\n"], // Single linebreak for
        tags and table rows [/<\/t[dh]>\s*]*>/gi, "\t"], // Table cells get tabs betweem them /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags [/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*) [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars. [/\n{3,}/g, "\n\n"] // Max. 2 consecutive linebreaks ]); content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content)); // Perform default or custom replacements if (is(rl, "array")) { process(rl); } else if (is(rl, "string")) { process(new RegExp(rl, "gi")); } // Treat paragraphs as specified in the config if (linebr == "none") { // Convert all line breaks to space process([ [/\n+/g, " "] ]); } else if (linebr == "br") { // Convert all line breaks to
        process([ [/\n/g, "
        "] ]); } else if (linebr == "p") { // Convert all line breaks to

        ...

        process([ [/\n+/g, "

        "], [/^(.*<\/p>)(

        )$/, '

        $1'] ]); } else { // defaults to "combined" // Convert single line breaks to
        and double line breaks to

        ...

        process([ [/\n\n/g, "

        "], [/^(.*<\/p>)(

        )$/, '

        $1'], [/\n/g, "
        "] ]); } ed.execCommand('mceInsertContent', false, content); } }, /** * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine. */ _legacySupport : function() { var t = this, ed = t.editor; // Register command(s) for backwards compatibility ed.addCommand("mcePasteWord", function() { ed.windowManager.open({ file: t.url + "/pasteword.htm", width: parseInt(getParam(ed, "paste_dialog_width")), height: parseInt(getParam(ed, "paste_dialog_height")), inline: 1 }); }); if (getParam(ed, "paste_text_use_dialog")) { ed.addCommand("mcePasteText", function() { ed.windowManager.open({ file : t.url + "/pastetext.htm", width: parseInt(getParam(ed, "paste_dialog_width")), height: parseInt(getParam(ed, "paste_dialog_height")), inline : 1 }); }); } // Register button for backwards compatibility ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"}); } }); // Register plugin tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin); })(); preview/editor_plugin.js000066600000002033150472616010011433 0ustar00(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();preview/preview.html000066600000001145150472616010010603 0ustar00 {#preview.preview_desc} preview/jscripts/embed.js000066600000003511150472616010011506 0ustar00/** * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. */ function writeFlash(p) { writeEmbed( 'D27CDB6E-AE6D-11cf-96B8-444553540000', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', 'application/x-shockwave-flash', p ); } function writeShockWave(p) { writeEmbed( '166B1BCA-3F9C-11CF-8075-444553540000', 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', 'application/x-director', p ); } function writeQuickTime(p) { writeEmbed( '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', 'video/quicktime', p ); } function writeRealMedia(p) { writeEmbed( 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', 'audio/x-pn-realaudio-plugin', p ); } function writeWindowsMedia(p) { p.url = p.src; writeEmbed( '6BF52A52-394A-11D3-B153-00C04F79FAA6', 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', 'application/x-mplayer2', p ); } function writeEmbed(cls, cb, mt, p) { var h = '', n; h += ''; h += ' Example of a custom preview page Editor contents:
        advhr/rule.htm000066600000004474150472616010007350 0ustar00 {#advhr.advhr_desc}
        advhr/css/advhr.css000066600000000353150472616010010265 0ustar00input.radio {border:1px none #000; background:transparent; vertical-align:middle;} .panel_wrapper div.current {height:80px;} #width {width:50px; vertical-align:middle;} #width2 {width:50px; vertical-align:middle;} #size {width:100px;} advhr/editor_plugin.js000066600000001517150472616010011064 0ustar00(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();advhr/js/rule.js000066600000002377150472616010007610 0ustar00var AdvHRDialog = { init : function(ed) { var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w; w = dom.getAttrib(n, 'width'); f.width.value = w ? parseInt(w) : (dom.getStyle('width') || ''); f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || ''; f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width'); selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px'); }, update : function() { var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = ''; h = 'text

        , then only the styles in the block are recognized, not those in the span. When selecting text that includes multiple blocks at the same level (peers), this plug-in accumulates the specified styles in all of the surrounding blocks and populates the dialogue checkboxes accordingly. There is no differentiation between styles set in all the blocks versus styles set in some of the blocks. When the [Update] or [Apply] buttons are pressed, the styles selected in the checkboxes are applied to all blocks that surround the selected text. style/css/props.css000066600000001573150472616010010365 0ustar00#text_font {width:250px;} #text_size {width:70px;} .mceAddSelectValue {background:#DDD;} select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;} #box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;} #positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;} #positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;} .panel_toggle_insert_span {padding-top:10px;} .panel_wrapper div.current {padding-top:10px;height:230px;} .delim {border-left:1px solid gray;} .tdelim {border-bottom:1px solid gray;} #block_display {width:145px;} #list_type {width:115px;} .disabled {background:#EEE;}style/editor_plugin.js000066600000002135150472616010011115 0ustar00(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();style/js/props.js000066600000075636150472616010010050 0ustar00tinyMCEPopup.requireLangPack(); var defaultFonts = "" + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + "Courier New, Courier, mono=Courier New, Courier, mono;" + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%"; var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%"; var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; var defaultTextStyle = "normal;italic;oblique"; var defaultVariant = "normal;small-caps"; var defaultLineHeight = "normal"; var defaultAttachment = "fixed;scroll"; var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; var defaultPosH = "left;center;right"; var defaultPosV = "top;center;bottom"; var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; var defaultBorderWidth = "thin;medium;thick"; var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; function aggregateStyles(allStyles) { var mergedStyles = {}; tinymce.each(allStyles, function(style) { if (style !== '') { var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style); for (var name in parsedStyles) { if (parsedStyles.hasOwnProperty(name)) { if (mergedStyles[name] === undefined) { mergedStyles[name] = parsedStyles[name]; } else if (name === 'text-decoration') { if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) { mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name]; } } } } } }); return mergedStyles; } var applyActionIsInsert; var existingStyles; function init(ed) { var ce = document.getElementById('container'), h; existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles')); ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles); applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false); document.getElementById('toggle_insert_span').checked = applyActionIsInsert; h = getBrowserHTML('background_image_browser','background_image','image','advimage'); document.getElementById("background_image_browser").innerHTML = h; document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); TinyMCE_EditableSelects.init(); setupFormData(); showDisabledControls(); } function setupFormData() { var ce = document.getElementById('container'), f = document.forms[0], s, b, i; // Setup text fields selectByValue(f, 'text_font', ce.style.fontFamily, true, true); selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); selectByValue(f, 'text_style', ce.style.fontStyle, true, true); selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); selectByValue(f, 'text_case', ce.style.textTransform, true, true); selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color); updateColor('text_color_pick', 'text_color'); f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); f.text_none.checked = inStr(ce.style.textDecoration, 'none'); updateTextDecorations(); // Setup background fields f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor); updateColor('background_color_pick', 'background_color'); f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); // Setup block fields selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); f.block_text_indent.value = getNum(ce.style.textIndent); selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); selectByValue(f, 'block_display', ce.style.display, true, true); // Setup box fields f.box_width.value = getNum(ce.style.width); selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); f.box_height.value = getNum(ce.style.height); selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true); selectByValue(f, 'box_clear', ce.style.clear, true, true); setupBox(f, ce, 'box_padding', 'padding', ''); setupBox(f, ce, 'box_margin', 'margin', ''); // Setup border fields setupBox(f, ce, 'border_style', 'border', 'Style'); setupBox(f, ce, 'border_width', 'border', 'Width'); setupBox(f, ce, 'border_color', 'border', 'Color'); updateColor('border_color_top_pick', 'border_color_top'); updateColor('border_color_right_pick', 'border_color_right'); updateColor('border_color_bottom_pick', 'border_color_bottom'); updateColor('border_color_left_pick', 'border_color_left'); f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value); f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value); f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value); f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value); // Setup list fields selectByValue(f, 'list_type', ce.style.listStyleType, true, true); selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); // Setup box fields selectByValue(f, 'positioning_type', ce.style.position, true, true); selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; f.positioning_width.value = getNum(ce.style.width); selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); f.positioning_height.value = getNum(ce.style.height); selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']); s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); s = s.replace(/,/g, ' '); if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) { f.positioning_clip_top.value = getNum(getVal(s, 0)); selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); f.positioning_clip_right.value = getNum(getVal(s, 1)); selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); f.positioning_clip_bottom.value = getNum(getVal(s, 2)); selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); f.positioning_clip_left.value = getNum(getVal(s, 3)); selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); } else { f.positioning_clip_top.value = getNum(getVal(s, 0)); selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; } // setupBox(f, ce, '', 'border', 'Color'); } function getMeasurement(s) { return s.replace(/^([0-9.]+)(.*)$/, "$2"); } function getNum(s) { if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s)) return s.replace(/[^0-9.]/g, ''); return s; } function inStr(s, n) { return new RegExp(n, 'gi').test(s); } function getVal(s, i) { var a = s.split(' '); if (a.length > 1) return a[i]; return ""; } function setValue(f, n, v) { if (f.elements[n].type == "text") f.elements[n].value = v; else selectByValue(f, n, v, true, true); } function setupBox(f, ce, fp, pr, sf, b) { if (typeof(b) == "undefined") b = ['Top', 'Right', 'Bottom', 'Left']; if (isSame(ce, pr, sf, b)) { f.elements[fp + "_same"].checked = true; setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); f.elements[fp + "_top"].disabled = false; f.elements[fp + "_right"].value = ""; f.elements[fp + "_right"].disabled = true; f.elements[fp + "_bottom"].value = ""; f.elements[fp + "_bottom"].disabled = true; f.elements[fp + "_left"].value = ""; f.elements[fp + "_left"].disabled = true; if (f.elements[fp + "_top_measurement"]) { selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); f.elements[fp + "_left_measurement"].disabled = true; f.elements[fp + "_bottom_measurement"].disabled = true; f.elements[fp + "_right_measurement"].disabled = true; } } else { f.elements[fp + "_same"].checked = false; setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); f.elements[fp + "_top"].disabled = false; setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); f.elements[fp + "_right"].disabled = false; setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); f.elements[fp + "_bottom"].disabled = false; setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); f.elements[fp + "_left"].disabled = false; if (f.elements[fp + "_top_measurement"]) { selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); f.elements[fp + "_left_measurement"].disabled = false; f.elements[fp + "_bottom_measurement"].disabled = false; f.elements[fp + "_right_measurement"].disabled = false; } } } function isSame(e, pr, sf, b) { var a = [], i, x; if (typeof(b) == "undefined") b = ['Top', 'Right', 'Bottom', 'Left']; if (typeof(sf) == "undefined" || sf == null) sf = ""; a[0] = e.style[pr + b[0] + sf]; a[1] = e.style[pr + b[1] + sf]; a[2] = e.style[pr + b[2] + sf]; a[3] = e.style[pr + b[3] + sf]; for (i=0; i 0 ? s.substring(1) : s; if (f.text_none.checked) s = "none"; ce.style.textDecoration = s; // Build background styles ce.style.backgroundColor = f.background_color.value; ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; ce.style.backgroundRepeat = f.background_repeat.value; ce.style.backgroundAttachment = f.background_attachment.value; if (f.background_hpos.value != "") { s = ""; s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); ce.style.backgroundPosition = s; } // Build block styles ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); ce.style.verticalAlign = f.block_vertical_alignment.value; ce.style.textAlign = f.block_text_align.value; ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); ce.style.whiteSpace = f.block_whitespace.value; ce.style.display = f.block_display.value; // Build box styles ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); ce.style.styleFloat = f.box_float.value; ce.style.cssFloat = f.box_float.value; ce.style.clear = f.box_clear.value; if (!f.box_padding_same.checked) { ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); } else ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); if (!f.box_margin_same.checked) { ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); } else ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); // Build border styles if (!f.border_style_same.checked) { ce.style.borderTopStyle = f.border_style_top.value; ce.style.borderRightStyle = f.border_style_right.value; ce.style.borderBottomStyle = f.border_style_bottom.value; ce.style.borderLeftStyle = f.border_style_left.value; } else ce.style.borderStyle = f.border_style_top.value; if (!f.border_width_same.checked) { ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); } else ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); if (!f.border_color_same.checked) { ce.style.borderTopColor = f.border_color_top.value; ce.style.borderRightColor = f.border_color_right.value; ce.style.borderBottomColor = f.border_color_bottom.value; ce.style.borderLeftColor = f.border_color_left.value; } else ce.style.borderColor = f.border_color_top.value; // Build list styles ce.style.listStyleType = f.list_type.value; ce.style.listStylePosition = f.list_position.value; ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; // Build positioning styles ce.style.position = f.positioning_type.value; ce.style.visibility = f.positioning_visibility.value; if (ce.style.width == "") ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); if (ce.style.height == "") ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); ce.style.zIndex = f.positioning_zindex.value; ce.style.overflow = f.positioning_overflow.value; if (!f.positioning_placement_same.checked) { ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); } else { s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); ce.style.top = s; ce.style.right = s; ce.style.bottom = s; ce.style.left = s; } if (!f.positioning_clip_same.checked) { s = "rect("; s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); s += ")"; if (s != "rect(auto auto auto auto)") ce.style.clip = s; } else { s = "rect("; t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; s += t + " "; s += t + " "; s += t + " "; s += t + ")"; if (s != "rect(auto auto auto auto)") ce.style.clip = s; } ce.style.cssText = ce.style.cssText; } function isNum(s) { return new RegExp('[0-9]+', 'g').test(s); } function showDisabledControls() { var f = document.forms, i, a; for (i=0; i 1) { addSelectValue(f, s, p[0], p[1]); if (se) selectByValue(f, s, p[1]); } else { addSelectValue(f, s, p[0], p[0]); if (se) selectByValue(f, s, p[0]); } } } function toggleSame(ce, pre) { var el = document.forms[0].elements, i; if (ce.checked) { el[pre + "_top"].disabled = false; el[pre + "_right"].disabled = true; el[pre + "_bottom"].disabled = true; el[pre + "_left"].disabled = true; if (el[pre + "_top_measurement"]) { el[pre + "_top_measurement"].disabled = false; el[pre + "_right_measurement"].disabled = true; el[pre + "_bottom_measurement"].disabled = true; el[pre + "_left_measurement"].disabled = true; } } else { el[pre + "_top"].disabled = false; el[pre + "_right"].disabled = false; el[pre + "_bottom"].disabled = false; el[pre + "_left"].disabled = false; if (el[pre + "_top_measurement"]) { el[pre + "_top_measurement"].disabled = false; el[pre + "_right_measurement"].disabled = false; el[pre + "_bottom_measurement"].disabled = false; el[pre + "_left_measurement"].disabled = false; } } showDisabledControls(); } function synch(fr, to) { var f = document.forms[0]; f.elements[to].value = f.elements[fr].value; if (f.elements[fr + "_measurement"]) selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); } function updateTextDecorations(){ var el = document.forms[0].elements; var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"]; var noneChecked = el["text_none"].checked; tinymce.each(textDecorations, function(id) { el[id].disabled = noneChecked; if (noneChecked) { el[id].checked = false; } }); } tinyMCEPopup.onInit.add(init); style/props.htm000066600000111421150472616010007567 0ustar00 {#style_dlg.title}
        {#style_dlg.text}
         
         
         
        {#style_dlg.text_decoration}
        {#style_dlg.background}
         
         
         
         
        {#style_dlg.block}
         
         
         
        {#style_dlg.box}
         
           
         
           
        {#style_dlg.padding}
         
         
         
         
         
        {#style_dlg.margin}
         
         
         
         
         

        {#style_dlg.border}
            {#style_dlg.style}   {#style_dlg.width}   {#style_dlg.color}
               
        {#style_dlg.top}    
         
         
         
        {#style_dlg.right}    
         
         
         
        {#style_dlg.bottom}    
         
         
         
        {#style_dlg.left}    
         
         
         
        {#style_dlg.list}
        {#style_dlg.position}
           
         
           
         
           
        {#style_dlg.placement}
         
        {#style_dlg.top}
         
        {#style_dlg.right}
         
        {#style_dlg.bottom}
         
        {#style_dlg.left}
         
        {#style_dlg.clip}
         
        {#style_dlg.top}
         
        {#style_dlg.right}
         
        {#style_dlg.bottom}
         
        {#style_dlg.left}
         

        style/langs/ru_dlg.js000066600000007040150472616010010631 0ustar00tinyMCE.addI18n('ru.style_dlg',{ title:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 CSS \u0441\u0442\u0438\u043B\u044F", apply:"\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C", text_tab:"\u0422\u0435\u043A\u0441\u0442", background_tab:"\u0424\u043E\u043D", block_tab:"\u0411\u043B\u043E\u043A", box_tab:"Box", border_tab:"\u0413\u0440\u0430\u043D\u0438\u0446\u0430", list_tab:"\u0421\u043F\u0438\u0441\u043E\u043A", positioning_tab:"\u041F\u043E\u0437\u0438\u0446\u0438\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435", text_props:"\u0422\u0435\u043A\u0441\u0442", text_font:"\u0428\u0440\u0438\u0444\u0442", text_size:"\u0420\u0430\u0437\u043C\u0435\u0440", text_weight:"\u0422\u043E\u043B\u0449\u0438\u043D\u0430", text_style:"\u0421\u0442\u0438\u043B\u044C", text_variant:"Variant", text_lineheight:"\u0412\u044B\u0441\u043E\u0442\u0430 \u0441\u0442\u0440\u043E\u043A\u0438", text_case:"Case", text_color:"\u0426\u0432\u0435\u0442", text_decoration:"\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435", text_overline:"\u0432\u0435\u0440\u0445\u043D\u044F\u044F \u0447\u0435\u0440\u0442\u0430", text_underline:"\u043D\u0438\u0436\u043D\u044F\u044F \u0447\u0435\u0440\u0442\u0430", text_striketrough:"\u0437\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439", text_blink:"\u043C\u0435\u0440\u0446\u0430\u043D\u0438\u044F", text_none:"\u043D\u0438\u0447\u0435\u0433\u043E", background_color:"\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430", background_image:"\u0424\u043E\u043D\u043E\u0432\u043E\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435", background_repeat:"\u041F\u043E\u0432\u0442\u043E\u0440", background_attachment:"Attachment", background_hpos:"\u0413\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u0430\u044F \u043F\u043E\u0437\u0438\u0446\u0438\u044F", background_vpos:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u0430\u044F \u043F\u043E\u0437\u0438\u0446\u0438\u044F", block_wordspacing:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u043C\u0435\u0436\u0434\u0443 \u0441\u043B\u043E\u0432\u0430\u043C\u0438", block_letterspacing:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B \u043C\u0435\u0436\u0434\u0443 \u0431\u0443\u043A\u0432\u0430\u043C\u0438", block_vertical_alignment:"\u0412\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435", block_text_align:"\u0412\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043A\u0441\u0442\u0430", block_text_indent:"Text indent", block_whitespace:"Whitespace", block_display:"Display", box_width:"\u0428\u0438\u0440\u0438\u043D\u0430", box_height:"\u0412\u044B\u0441\u043E\u0442\u0430", box_float:"Float", box_clear:"Clear", padding:"Padding", same:"\u041E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u043E \u0434\u043B\u044F \u0432\u0441\u0435\u0445", top:"\u0412\u0432\u0435\u0440\u0445", right:"\u0421\u043F\u0440\u0430\u0432\u0430", bottom:"\u0421\u043D\u0438\u0437\u0443", left:"\u0421\u043B\u0435\u0432\u0430", margin:"Margin", style:"\u0421\u0442\u0438\u043B\u044C", width:"\u0428\u0438\u0440\u0438\u043D\u0430", height:"\u0412\u044B\u0441\u043E\u0442\u0430", color:"\u0426\u0432\u0435\u0442", list_type:"\u0422\u0438\u043F", bullet_image:"Bullet image", position:"\u041F\u043E\u0437\u0438\u0446\u0438\u044F", positioning_type:"\u0422\u0438\u043F", visibility:"\u0412\u0438\u0434\u0438\u043C\u043E\u0441\u0442\u044C", zindex:"Z-index", overflow:"Overflow", placement:"Placement", clip:"Clip" });style/langs/en_dlg.js000066600000003132150472616010010603 0ustar00tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",toggle_insert_span:"Insert span at selection",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); style/editor_plugin_src.js000066600000003500150472616010011761 0ustar00/** * 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() { tinymce.create('tinymce.plugins.StylePlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceStyleProps', function() { var applyStyleToBlocks = false; var blocks = ed.selection.getSelectedBlocks(); var styles = []; if (blocks.length === 1) { styles.push(ed.selection.getNode().style.cssText); } else { tinymce.each(blocks, function(block) { styles.push(ed.dom.getAttrib(block, 'style')); }); applyStyleToBlocks = true; } ed.windowManager.open({ file : url + '/props.htm', width : 480 + parseInt(ed.getLang('style.delta_width', 0)), height : 340 + parseInt(ed.getLang('style.delta_height', 0)), inline : 1 }, { applyStyleToBlocks : applyStyleToBlocks, plugin_url : url, styles : styles }); }); ed.addCommand('mceSetElementStyle', function(ui, v) { if (e = ed.selection.getNode()) { ed.dom.setAttrib(e, 'style', v); ed.execCommand('mceRepaint'); } }); ed.onNodeChange.add(function(ed, cm, n) { cm.setDisabled('styleprops', n.nodeName === 'BODY'); }); // Register buttons ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'}); }, getInfo : function() { return { longname : 'Style', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin); })(); example_dependency/editor_plugin.js000066600000000643150472616010013610 0ustar00(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})();example_dependency/editor_plugin_src.js000066600000003453150472616010014461 0ustar00/** * 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() { tinymce.create('tinymce.plugins.ExampleDependencyPlugin', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Example Dependency plugin', author : 'Some author', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency', version : "1.0" }; } }); /** * Register the plugin, specifying the list of the plugins that this plugin depends on. They are specified in a list, with the list loaded in order. * plugins in this list will be initialised when this plugin is initialized. (before the init method is called). * plugins in a depends list should typically be specified using the short name). If neccesary this can be done * with an object which has the url to the plugin and the shortname. */ tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']); })(); emotions/editor_plugin.js000066600000001244150472616010011612 0ustar00(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);emotions/js/emotions.js000066600000002065150472616010011221 0ustar00tinyMCEPopup.requireLangPack(); var EmotionsDialog = { addKeyboardNavigation: function(){ var tableElm, cells, settings; cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table"); settings ={ root: "emoticon_table", items: cells }; cells[0].tabindex=0; tinyMCEPopup.dom.addClass(cells[0], "mceFocus"); if (tinymce.isGecko) { cells[0].focus(); } else { setTimeout(function(){ cells[0].focus(); }, 100); } tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom); }, init : function(ed) { tinyMCEPopup.resizeToInnerSize(); this.addKeyboardNavigation(); }, insert : function(file, title) { var ed = tinyMCEPopup.editor, dom = ed.dom; tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', { src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file, alt : ed.getLang(title), title : ed.getLang(title), border : 0 })); tinyMCEPopup.close(); } }; tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog); emotions/emotions.htm000066600000013452150472616010010763 0ustar00 {#emotions_dlg.title}
        {#emotions_dlg.title}:

        {#emotions_dlg.usage}
        emotions/langs/ru_dlg.js000066600000000752150472616010011331 0ustar00tinyMCE.addI18n('ru.emotions_dlg',{ title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0441\u043C\u0430\u0439\u043B", desc:"\u0421\u043C\u0430\u0439\u043B\u0438\u043A\u0438", cool:"Cool", cry:"Cry", embarassed:"Embarassed", foot_in_mouth:"Foot in mouth", frown:"Frown", innocent:"Innocent", kiss:"Kiss", laughing:"Laughing", money_mouth:"Money mouth", sealed:"Sealed", smile:"Smile", surprised:"Surprised", tongue_out:"Tongue out", undecided:"Undecided", wink:"Wink", yell:"Yell" });emotions/langs/en_dlg.js000066600000000644150472616010011305 0ustar00tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"}); emotions/editor_plugin_src.js000066600000002232150472616010012457 0ustar00/** * 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(tinymce) { tinymce.create('tinymce.plugins.EmotionsPlugin', { init : function(ed, url) { // Register commands ed.addCommand('mceEmotion', function() { ed.windowManager.open({ file : url + '/emotions.htm', width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)), height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)), inline : 1 }, { plugin_url : url }); }); // Register buttons ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'}); }, getInfo : function() { return { longname : 'Emotions', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin); })(tinymce);emotions/img/smiley-surprised.gif000066600000000522150472616010013171 0ustar00GIF89aƝ(#ʶjNR; Z&2,kS §غ7o7ļF>"RX( ĸD!,@'Pixh:Ti]^* n9$J3s VMw9ZF>2B噚6Ѿ&ӿrx$~!,'TicJn0Q*I041n~( D>tsh8",n0f!$lw2*ۑW]Hm %x%D%opu% Q Y 4  #B  *N!;emotions/img/smiley-embarassed.gif000066600000000513150472616010013257 0ustar00GIF89a*ļLTԿ( AT«!:l:v[wX87d$|(*=غ$W°bQ!,'RicJj&I*!8ʃtdUn ~$bcA  ǂ@h \T@• L2AN&zxMv  % Cu y %    ] #  J;s B Q *N!;emotions/img/smiley-wink.gif000066600000000536150472616010012126 0ustar00GIF89a)Ɲ 2ʶjNYdzP: , ,u\Gqغļ6־2Y( :!,@'Ri0Z fk 2JXe4JPHRC"8=#0%qtWCI$ho¢P4V  6 :< 1  F)ts#@MB:,    ..+-15961 w*H`@0T!;emotions/img/smiley-frown.gif000066600000000524150472616010012306 0ustar00GIF89aA'Ơ2ʶjNXν"7hT -qZA غGīļ7Z"%x`0!,'QicJJ&!E*Y08ԡAA`& 4!x<đ0"FU$Jc&%`..cރ1w~bp  z r r  x% ] ̘ AKGP)DN5!;emotions/img/smiley-foot-in-mouth.gif000066600000000526150472616010013662 0ustar00GIF89aƖ~ʶj MR: Zѽ1mT +HغoļO'ª60:" 6& 7!,@'Pix6M1C]Xbr xd0B&Ţj21 E"d PwQ=5  9;b   E)sr#? c9,O~ . x. +-58  \ |bT* GB;emotions/img/smiley-innocent.gif000066600000000520150472616010012764 0ustar00GIF89a8*˭q˱ZU쳏 8wi٫T̵ qN*aK z0-VھB2u"!,'RixeHdbK,R=ɣ !Q<6Ph'0*di;pgP:t|NR RUR}   m _Q w     %ΗQS* P 8) vʶjZj!,'XicJR#@a* y!dQ®~0pAƀ<+ fPer>zြXc| % %q  %       \ { A9;=# ݄5N!;emotions/img/smiley-kiss.gif000066600000000522150472616010012122 0ustar00GIF89aR= 44sYʶj 2!N*)"mqغ>9)ښļ9ֽ)Y!,'TicJVsRQ*Y!IrT3!x Cp#ʂ!X׫Q*y$0.9@8nH5q}M a}  { /  H    J % S \  A  HJ P) DN 5!;emotions/img/smiley-cool.gif000066600000000542150472616010012107 0ustar00GIF89a z\V<N:8ѿ#[[WY#!1,//, & ɿbA_z`  !,'UicJRqGBU*ѣiOt`Be]GUZCqn P@~=@pLAx;d@~}{r} hr=       E   %  4  A F M) DK fP(J;emotions/img/smiley-laughing.gif000066600000000527150472616010012754 0ustar00GIF89a¦2,Nr^HYҾëjSļGغq7uZӺ.ʶj2yc1R= Z!,@'SihHT#OI8], q&Ḛ`8A(1. g02NBIp$:{PW 8s    E)sr# 9, {Q .. 8+45   ~bS*  G\ J;filemanager/pages/fm/resources.xml000066600000004057150472616010013267 0ustar00 filemanager/pages/fm/createdir.html000066600000006750150472616010013365 0ustar00 {#createdir.title}

        {#createdir.title}

        {#createdir.description}

        {#createdir.create_in}

        filemanager/pages/fm/upload.html000066600000017017150472616010012705 0ustar00 {#upload.title}

        {#upload.title}

        {#upload.description}


        {#upload.file} {#upload.size} {#upload.status}

        {#upload.add_more}


        filemanager/pages/fm/css/forms.css000066600000001416150472616010013157 0ustar00/* Forms */ /* ########################################################## */ form { margin:0px; padding:0px; } select { font:100% tahoma; } input.file, input.text { font:90% tahoma, arial, sans-serif; } /* Submit buttons */ input.submit, .button { width:94px; height:26px; padding:0 0 2px; border:0; background:url('../img/submit-grey.png') no-repeat; font:normal 100%/100% tahoma, arial, sans-serif; text-align: center; text-decoration: none; } .button.disabled { cursor: text; color: gray; } input.default { background:url('../img/submit-default.png') no-repeat; font-weight:bold; } input.cancel { background:url('../img/submit-grey.png') no-repeat; font-weight:normal; } a.button { padding-top: 6px; text-align: center; text-decoration: none; } filemanager/pages/fm/css/core.css000066600000021216150472616010012761 0ustar00/* Image Manager */ /* core stuff */ /* ########################################################## */ body { background:#fff; color:#000; margin:0 0; padding:0; font:70% arial, helvetica, sans-serif; text-align:center; } body.filelistPage { overflow: hidden; } td { font-size: 11px; } img { behavior:expression(PNG.fix(this)); border:0; } hr { clear:both; border:0; color:#e5e5e5; background-color:#e5e5e5; height:1px; } div { font-size:11px; } /* Lists */ ul { margin:0; padding:0; list-style:none; } ul li { margin:0; padding:0; } /* Layout */ #center { width:auto; max-width:1200px; margin:0 auto; text-align:left; } /* Links */ a { background:transparent; } a:link { color:#000; } a:visited { color:#000; } a:visited:hover { color:#000; } a:hover { color:#000; } a:active { color:#000; } #thearea { position:relative; } #secondarea { position:absolute; left:200px; } /* Page navigation */ /* ########################################################## */ .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0 2px; } /* File Manager */ /* ########################################################## */ .filemanagertop { background:#e8e7e5 url(../img/check_arrow.gif) no-repeat 16px 12px; padding:6px 0px 6px 36px; } .filemanagertop ul, .filemanagertop li { display: inline; } .filemanagertop a, .filemanagertop a:visited, .filemanagertop a:hover { text-decoration:none; color:#3f5f9f; cursor: pointer; } .filemanagertop li.disabled a, .filemanagertop li.disabled a:visited, .filemanagertop li.disabled a:hover { text-decoration:none; color:#999; cursor: text; } .filemanagertop li a:hover { text-decoration:underline; color:#3f5f9f; } .filemanagertop li.hidden { display: none; } .filemanagertop li.end { display: none; } .filelist { font-size:100%; width:100%; } .filelist th { text-align:left; color:#7a92c2; background:#f2f1ee url(../img/filelist-headbg.png) no-repeat right top; padding:8px 8px 6px 8px; } .filelist th.file { background:#fff url(../img/filelist-headbg2.png) no-repeat right top; padding:2px 0px 2px 30px; } .filelist th a, .filelist th a:visited { color:#7a92c2; text-decoration:none; } .filelist th a:hover { color:#3f5f9f; } .filelist td { background:#f2f1ee url(../img/filelist-border.png) repeat-y right top; padding:1px 4px 1px 8px; } .filelist td.file { background-color:#fff; height: 22px; } .filelist td .d { position:relative; } /* hover effect */ .filelist tr.hover td { background-color:#e8e7e5; } /* selected effect */ .filelist tr.selected td { background-color:#ddefff; } /* focused effect */ .filelist tr.focused td { background-color:#ddddff; } /* popup box */ .filelist .edit { position:absolute; left:8px; top:-8px; background:#fff; border:1px solid #959595; padding:2px; text-align:left; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:10; width:12em; } .filelist .edit li a { display:block; padding:1px 4px 1px 20px; text-decoration:none; } .filelist .edit li a:hover { color:#2e4e8c; } .filelist .edit li a.select:hover { background:#e3e0d8; } .filelist .edit li a.download:hover { background:#e3e0d8; } .filelist .edit li a.delete { background:url(../img/im-delete.png) no-repeat; } .filelist .edit li a.delete:hover { background:#e3e0d8 url(../img/im-delete.png) no-repeat; } .filelist .edit li a.preview { background:url(../img/preview.png) no-repeat; } .filelist .edit li a.preview:hover { background:#e3e0d8 url(../img/preview.png) no-repeat; } .filelist .edit li a.info { background:url(../img/im-info.png) no-repeat; } .filelist .edit li a.info:hover { background:#e3e0d8 url(../img/im-info.png) no-repeat; } .filelist tr { height: 22px; } *html .filelist .edit li a { display:inline; width:100%; } .filelist a.checkbox, .filelist .selected a.checkbox { display: block; width: 13px; height: 13px; background: transparent url('../img/checkbox.gif') no-repeat 0 0; margin-left: 4px; overflow: hidden; } /* Rename input */ .filelist input.text { display: block; width: 75%; font-size: 11px; border: 1px solid gray; } .filelist .selected a.checkbox { background: transparent url('../img/checkbox.gif') no-repeat 0 -13px; } .filelist .parent a.checkbox { display: none; } .filelist .checkbox { width: 22px; } #filemanagerlist { overflow: auto; overflow-x: hidden; } /* icons */ .filelist td.file a { padding:2px 0px 2px 22px; text-decoration:none; display: block; background-repeat: no-repeat; behavior:expression(PNG.fix(this)); width: 220px; overflow: hidden; } .filelist a { background-image: url(../img/filetypes/unknown.gif); } /* Display captions */ .icon .caption { display:inline; } .caption-on { font-weight:bold; } .caption-off { color:#666; } /* List container */ #listcontainer { position:relative; } #listing { position: absolute; left: 215px; top: 0px; right: 0; max-width: 980px; padding-right: 20px;} .pagenav { padding:0px 0px 10px 0px; color:#484848; z-index:1; height: 16px; } .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0px 2px; } /* Folder view */ /* ########################################################## */ #folders { margin:-5px 10px 10px 2px; position:absolute; top:0; left:0; width:192px; background:url(../img/folder-middle-bg.png) bottom left; z-index:1; } #folders div.panel {background:url(../img/folder-bottom-bg.png) no-repeat bottom left;} #folders h2 { background:url(../img/folder-top-bg.png) top left; margin:0; padding:20px 10px 10px 10px; font-size:100%; color:#7791c4; } #folders h3 { margin:10px 2px 0px 2px; padding:10px 8px 10px 8px; font-size:100%; color:#7791c4; border-top:1px solid #9ab0d7; } #folders a { text-decoration:none; behavior:expression(PNG.fix(this)); } #folders .categories { margin:0px 6px 0px 10px; } #folders .categories li a { background:url(../img/icons/category-closed.png) no-repeat; padding:2px 2px 0px 24px; display:block; min-height:16px; } #folders .categories li.current a { background:url(../img/icons/category-open.png) no-repeat; font-weight:bold; } #folders .special { margin:5px 6px 0px 10px; } #folders .special li a { padding: 2px 2px 0px 24px; display: block; min-height: 16px; height: 16px; line-height: 16px; } #folders a:hover { color:#2e4e8c; } /* Preview iframe */ #preview { width: 170px; height: 170px; padding: 0px; margin: 0px; background-color: #f2f0ed; visibility: hidden; } #previewwrap { border: 1px solid #9ab0d7; width: 170px; height: 170px; } #previewinfo { overflow: hidden; width: 170px; padding-bottom: 5px;} #filepreview { padding:0px 0px 20px 10px; } #filepreview .actions ul, #filepreview .actions li { display: inline; } #filepreview .actions li.end { display: none; } #filepreview .actions { padding-top: 10px; text-align: center; width: 170px; } #filepreview .actions a { text-decoration:none; color:#3f5f9f; cursor: pointer; } #filepreview .actions a:hover { text-decoration:underline; color:#3f5f9f; } #filepreview .actions .disabled a, #filepreview .actions .disabled a:visited { color:#aaa; text-decoration:none; cursor: text; } #filepreview .actions .disabled a:hover { color: #aaa; text-decoration:none; cursor: text; } #filepreview .actions .hidden { display: none; } /* Sorting */ a.sort { background-image: none; padding: 2px 18px 2px 0px; } a.sortasc { background: url(../img/sortasc.gif) no-repeat top right; padding: 2px 18px 2px 0px; } a.sortdesc { background: url(../img/sortdesc.gif) no-repeat top right; padding: 2px 18px 2px 0px; } /* Edit menu */ /* ########################################################## */ .Menu { position:absolute; left:0; top:0; z-index:10; display:none; background:#eae9e5; border:1px solid #cac6bb; text-align:left; } .Menu li a { display:block; padding:2px 8px; text-decoration:none; } .Menu li a:hover { color:#2e4e8c; } .Menu li.disabled a { color: gray; cursor: text; } .Menu li.disabled a:hover { color: gray; } .Menu li.hidden { display:none; } *html .Menu li a { display:inline; width:auto; } .folder .name, .parent .name { font-weight:bold; } /* Template engine */ /* ########################################################## */ #toolbar.caption span.caption { display: inline; } #tools .hidden { display: none; } #tools li {font-size:11px} /* Validation classes */ label.msg { display:none; } label.invalid { color:#aa0000; display:inline; } input.invalid { background-color:#d63232; } div label.invalid { display:block; } /* Dialog facts */ #facts { height:30px; } /* Progress */ #progress { background: url('../img/loading.gif') no-repeat; padding-left: 20px; } #dirinfo {display:none} filemanager/pages/fm/css/filetypes.css000066600000002243150472616010014034 0ustar00/* File types */ a.folder { background-image: url(../img/folder.png); } a.parent { background-image: url(../img/icons/up.png); } a.jpg, a.gif, a.bmp, a.tif, a.jpeg, a.png { background-image: url(../img/filetypes/image.gif); } a.html, a.htm, a.php, a.asp, a.aspx, a.jsp, a.cfm { background-image: url(../img/filetypes/html.gif); } a.mov, a.avi, a.wmv, a.rm, a.qt, a.mpg, a.mpeg { background-image: url(../img/filetypes/movie.gif); } a.ppt, a.ppm { background-image: url(../img/filetypes/powerpoint.gif); } a.pdf { background-image: url(../img/filetypes/pdf.gif); } a.txt, a.nfo { background-image: url(../img/filetypes/txt.gif); } a.swf, a.flv { background-image: url(../img/filetypes/swf.gif); } a.doc, a.dot, a.docx { background-image: url(../img/filetypes/word.gif); } a.xls { background-image: url(../img/filetypes/excel.gif); } a.zip, a.rar, a.arj, a.tar, a.tgz, a.gz, a.zoo, a.lha, a.lzh { background-image: url(../img/filetypes/archive.gif); } a.xml, a.xsl, a.xsd, a.dtd { background-image: url(../img/filetypes/xml.gif); } a.mp3, a.mp2, a.aif, a.aiff, a.wav { background-image: url(../img/filetypes/sound.gif); } a.exe, a.com { background-image: url(../img/filetypes/exe.gif); } filemanager/pages/fm/css/window_clearlooks2.css000066600000026770150472616010015652 0ustar00/* * * clearlooks2 - Gnome theme * * */ .clearlooks2 { position: absolute; left: 20px; top: 20px; width: 320px; height: 240px; overflow: hidden; color: white; display: none; text-align: left; } .clearlooks2_progress { position: absolute; left: 0; top: 0; width: auto; height: 30px; z-index: 100100; display: none; border: 1px solid gray; background: #FFF url('../img/loading.gif') no-repeat 5px 8px; text-align: left; } .clearlooks2_progress .message { padding-left: 30px; padding-right: 10px; font-family: Arial, Verdana; font-weight: bold; line-height: 30px; } .clearlooks2_event_blocker, .clearlooks2_visible_event_blocker { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 100001; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2_visible_event_blocker { opacity:0.7; -ms-filter:'alpha(opacity=70)'; filter:alpha(opacity=70); background: #FFF; } .clearlooks2_placeholder { position: absolute; left: 0; top: 0; border: 1px dotted black; display: none; z-index: 100002; } /* Alert */ .clearlooks2 .alert { text-align: left; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; font-weight: bold; text-decoration: none; } .clearlooks2 .alert .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .bigicon { display: none; } .clearlooks2 .alert .bigicon, .clearlooks2 .confirm .bigicon, .clearlooks2 .status .bigicon { position: absolute; left: 15px; top: 15px; width: 32px; height: 32px; display: block; } .clearlooks2 .alert .info, .clearlooks2 .status .info { background-image: url('../img/clearlooks2/alert_info.gif'); } .clearlooks2 .alert .warning, .clearlooks2 .status .warning { background-image: url('../img/clearlooks2/alert_warn.gif'); } .clearlooks2 .alert .error, .clearlooks2 .status .error { background-image: url('../img/clearlooks2/alert_error.gif'); } .clearlooks2 .alert .message, .clearlooks2 .confirm .message { position: absolute; left: 55px; top: 15px; width: 325px; height: 40px; overflow: auto; } .clearlooks2 .ok, .clearlooks2 .cancel { position: absolute; left: 160px; top: 65px; width: 80px; height: 30px; background-image: url('../img/clearlooks2/button.gif'); text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 30px; font-weight: bold; text-decoration: none; } /* Confirm dialog */ .clearlooks2 .confirm .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .confirm .ok { left: 110px; } .clearlooks2 .confirm .cancel { left: 210px; } .clearlooks2 .confirm .ask { background-image: url('../img/clearlooks2/alert_info.gif'); } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Status dialog */ .clearlooks2 .status .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .status .ok { top: 178px; } .clearlooks2 .status .statustext { position: absolute; left: 10px; top: 8px; width: 360px; height: 150px; border: 1px solid gray; overflow: auto; padding: 5px; } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Chromeless window */ .clearlooks2 .chromeless .resize, .clearlooks2 .chromeless .action, .clearlooks2 .chromeless .statusbarbottom { display: none; } .clearlooks2 .chromeless .middle .action { display: block; } .clearlooks2 .chromeless .windowtop, .clearlooks2 .chromeless .window { height: 5px; } .clearlooks2 .chromeless .windowtop .left { position: absolute; left: 0; top: 0; width: 5px; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_left.gif') no-repeat; } .clearlooks2 .chromeless .windowtop .middle { position: absolute; right: 5px; width: 100%; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_middle.gif') no-repeat 5px 0; clip: rect(auto auto auto 10px); } .clearlooks2 .chromeless .windowtop .right { position: absolute; right: 0; top: 0; width: 5px; height: 5px; background: transparent url('../img/clearlooks2/top_chromeless_right.gif') no-repeat; } .clearlooks2 .chromeless .windowmiddle { top: 5px; } /* Top section */ .clearlooks2 .windowtop .middle-fg { display: none; } .clearlooks2 .windowtop { position: absolute; width: 100%; height: 23px; overflow: hidden; } .clearlooks2 .windowtop .left { position: absolute; left: 0; top: 0; width: 6px; height: 23px; background: transparent url('../img/clearlooks2/top_left.gif') no-repeat; } .clearlooks2 .windowtop .middle { position: absolute; right: 6px; width: 100%; height: 23px; background: transparent url('../img/clearlooks2/top_middle.gif') no-repeat 12px 0; clip: rect(auto auto auto 12px); /* Safari hack */ } .clearlooks2 .windowtop .right { position: absolute; right: 0; top: 0; width: 6px; height: 23px; background: transparent url('../img/clearlooks2/top_right.gif') no-repeat; } .clearlooks2 .windowtop .title { position: absolute; left: 0; top: 0; width: 100%; height: 19px; text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; font-weight: bold; } /* Top section - Focus */ .clearlooks2 .focustop .left { background: transparent url('../img/clearlooks2/top_left.gif') no-repeat -6px 0; } .clearlooks2 .focustop .middle { background: transparent url('../img/clearlooks2/top_middle.gif') no-repeat 12px -23px; } .clearlooks2 .focustop .right { background: transparent url('../img/clearlooks2/top_right.gif') no-repeat -6px 0; } .clearlooks2 .focus .title { color: #FFF; } /* Middle section */ .clearlooks2 .windowmiddle { position: absolute; top: 23px; width: 100%; z-index: 5; } .clearlooks2 .windowmiddle .left { position: absolute; left: 0; top: 0; width: 4px; height: 100%; background-image: url('../img/clearlooks2/middle_left.gif'); } .clearlooks2 .windowmiddle .middle { position: absolute; left: 4px; top: 0; width: 100%; height: 100%; background-color: #FFF; color: #000; } .clearlooks2 .windowmiddle .right { position: absolute; right: 0; top: 0; width: 4px; height: 100%; background-image: url('../img/clearlooks2/middle_right.gif'); } /* Bottom section */ .clearlooks2 .windowbottom { position: absolute; left: 0; bottom: 0; width: 100%; height: 5px; overflow: hidden; z-index: 5; } .clearlooks2 .windowbottom .left { position: absolute; left: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../img/clearlooks2/bottom_left.gif'); overflow: hidden; } .clearlooks2 .windowbottom .middle { position: absolute; left: 5px; bottom: 0; width: 100%; height: 5px; background: url('../img/clearlooks2/bottom_middle.gif'); overflow: hidden; } .clearlooks2 .windowbottom .right { position: absolute; right: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../img/clearlooks2/bottom_right.gif'); overflow: hidden; } /* Statusbar */ .clearlooks2 .statusbarbottom { height: 24px; overflow: hidden; z-index: 5; } .clearlooks2 .statusbarbottom .left { bottom: 0; width: 5px; height: 23px; background-image: url('../img/clearlooks2/statusbar_left.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .middle { height: 23px; background-image: url('../img/clearlooks2/statusbar_middle.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .right { width: 20px; height: 23px; background-image: url('../img/clearlooks2/statusbar_right.gif'); overflow: hidden; } .clearlooks2 .windowbottom .statustext { display: none; } .clearlooks2 .statusbarbottom div.statustext { display: block; position: absolute; left: 6px; bottom: 0; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; } .clearlooks2 .resizable .statusbarbottom .resize-se { background-image: url('../img/clearlooks2/statusbar_resize.gif'); width: 20px; height: 23px; } /* Actions */ .clearlooks2 .action { position: absolute; cursor: pointer; overflow: hidden; } .clearlooks2 .close, .clearlooks2 .min, .clearlooks2 .med, .clearlooks2 .max { z-index: 3; } .clearlooks2 .resizable .min { right: 68px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 0; background-repeat: no-repeat; } .clearlooks2 .resizable .med { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px 0; background-repeat: no-repeat; } .clearlooks2 .resizable .max { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px 0; background-repeat: no-repeat; } .clearlooks2 .close { right: 6px; top: 3px; width: 29px; height: 16px; background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px 0; } /* Actions - Focus */ .clearlooks2 .focustop .min { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 -16px; } .clearlooks2 .focustop .med { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px -16px; } .clearlooks2 .focustop .max { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px -16px; } .clearlooks2 .focustop .close { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px -16px; } /* Actions - Hover */ .clearlooks2 .focustop .min:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat 0 -32px; } .clearlooks2 .focustop .med:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -29px -32px; } .clearlooks2 .focustop .max:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -58px -32px; } .clearlooks2 .focustop .close:hover { background: transparent url('../img/clearlooks2/buttons.gif') no-repeat -87px -32px; } /* Move and resize handles */ .clearlooks2 .move { top: 0; left: 0; width: 100%; height: 19px; cursor: move; z-index: 1; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resize { display: none; z-index: 4; } .clearlooks2 .resizable .resize { display: block; } .clearlooks2 .resizable .resize-w { top: 0; left: 0; width: 5px; height: 100%; cursor: w-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-e { top: 0; right: 0; width: 5px; height: 100%; cursor: e-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-n { top: 0; left: 0; width: 100%; height: 5px; cursor: n-resize; overflow: hidden; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-nw { top: 0; left: 0; width: 5px; height: 19px; cursor: nw-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-ne { top: 0; right: 0; width: 5px; height: 19px; cursor: ne-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-sw { bottom: 0; left: 0; width: 5px; height: 5px; cursor: sw-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-s { bottom: 0; left: 0; width: 100%; height: 5px; cursor: s-resize; background-image: url('../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-se { bottom: 0; right: 0; width: 5px; height: 5px; cursor: se-resize; background-image: url('../img/clearlooks2/transparent.gif'); } filemanager/pages/fm/css/dialog.css000066600000007160150472616010013272 0ustar00/* dialog popups */ /* ########################################################## */ body { overflow: auto; } .dialog { position:relative; text-align:left; width: 100%; } .dialog .top { padding:10px 12px; background:#f3f2f0 url('../img/dialog-top.png') no-repeat right bottom; behavior:expression(PNG.fix(this)); } .dialog .close { position:absolute; top:4px; right:4px; } .dialog h2 { font:bold 115% tahoma, arial, sans-serif; margin:0px; } .dialog .description { margin:0px; } .dialog .headline { padding:8px 0px 12px 40px; } .dialog .createdir { background: url('../img/dialog-icon-newfolder.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .createdoc { background: url('../img/dialog-icon-newfile.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .edit { background: url('../img/dialog-icon-edit.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .createzip { background: url('../img/dialog-icon-compress.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .facts { background:#f3f2f0; padding:8px 16px 12px 20px; font:90% tahoma, arial, sans-serif; } .dialog .body { padding:8px 16px 12px 20px; } #content { display: none; } /* Upload */ #uploadarea { position: relative; padding: 16px; height: 220px; overflow: hidden; } * html #uploadarea { height: 208px; } #uploadarea .small { margin: 2em 0 -1em; color: #6d88c4; font-size: 0.9em; text-transform: uppercase; } #uploadarea #add.hidden { display: none; } #uploadarea .addbutton, #uploadarea #uploadstart { display: block; width: 182px; height: 26px; margin: 0 0 1em; background: url(../img/submit-greyWide.png) no-repeat; text-align: center; font-size: 1em; font-weight: bold; line-height: 26px; text-decoration: none; } #uploadarea #uploadstart { background: url(../img/submit-wide.png) no-repeat; } #uploadarea #fileblock { position:relative; top:400px; } #uploadarea #filelist { position:relative; max-height: 7em; overflow: auto; margin-bottom: 6px; border: 1px solid #9fadc4; } * html #uploadarea #filelist { height: 7em; } #uploadarea #fileshead { width: 100%; font-weight: bold; background: #eee; border-bottom: 1px solid #fff; } #uploadarea #files { width: 490px; } #uploadarea #status { position: absolute; top: 4px; border: 1px solid #9fadc4; padding: 1px; width: 506px; height: 34px; display: none; } #uploadarea #progressbar { position: relative; width: 100%; height: 34px; background: url(../img/progress.gif); z-index: 10; } #uploadarea .progresstext { position: absolute; top: 0; left: 0; width: 100%; text-align: center; color: #535353; font-weight: bold; line-height: 36px; z-index: 11; } #uploadarea .progresstext a { text-decoration: none; color: #535353; } #files .fname a {display:block; width:295px; overflow:hidden} #files .disabled {text-decoration:none; cursor:default} #files .done {color:gray} #files .failed {color:red} #multiupload_view {display:none} #singleupload_view {display:none} #multiupload_view #selectview {position:relative} #files input.text {width:290px; margin:0; padding:0} /* Createdoc */ a.preview { background: transparent url('../img/preview.gif') no-repeat; width: 16px; height: 16px; display: block; } #createdoc { overflow: hidden; } /* Edit */ #edit form div {margin-bottom: 4px} #edit #textcontent { width: 500px; height: 250px; }filemanager/pages/fm/css/toolbar.css000066600000003303150472616010013470 0ustar00/* Toolbar */ /* ########################################################## */ #topnav { background:url('../img/toolbar.png') no-repeat bottom left; } #topwrap { background:url('../img/toolbar.png') no-repeat bottom right; margin:0px 0px 0px 30px; } #settings { display:none; position:absolute; top:20px; right:-4px; width:14em; line-height:14px; text-align:right; background:#fff; padding:4px; border:1px solid #959595; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:1; } #settings a { display:inline; padding:0px; } /* Inside stuff */ .toolbar { margin:0px; padding:2px 20px 10px 0px; font:90% tahoma, arial, sans-serif; } .toolbar .navigation { margin:0px 2px; padding:0px; float:left; width:170px; padding-bottom:12px; } .navigation .desc { margin:0px 0px 4px 0px; background:url('../img/navdesc_bg.gif') no-repeat right; } .navigation .path { margin-bottom:5px; width:320px; overflow:hidden; } .toolbar .icons { margin:14px 0px 0px 0px; float:right; } .toolbar .icon { margin:0px 2px 0px 1px; padding:0px; float:left; line-height:0px; position:relative; } .toolbar .disabled img { opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30); } .toolbar .disabled a { color: #AAA; } .toolbar .disabled a:hover { background: transparent; cursor: default; } /* Icons */ .icon a { text-decoration:none; padding:2px; display:block; outline:0; } .icon a:hover { background:#d3d0ce; } .icon .caption { position:relative; top:-4px; display:none; padding:0px 4px 0px 4px; } .toolbar .separator { margin:0px 4px; float:left; } .icon span.caption { display: inline; } #tools { display:none; } filemanager/pages/fm/css/filemanager.css000066600000000210150472616010014272 0ustar00@import url("core.css"); @import url("toolbar.css"); @import url("dialog.css"); @import url("forms.css"); @import url("filetypes.css"); filemanager/pages/fm/css/dropmenu.css000066600000002121150472616010013654 0ustar00/* Menu */ .menu { margin: 0; padding: 0; position: absolute; border: 1px solid #d4d0c8; background: #EAE9E5; z-index: 1000; width: 100px; } .menu a { display: block; color: #000; text-decoration: none; padding: 3px; text-align: left; overflow:auto; /* FF */ } .menu a:hover { background-color: #dbecf3 } .menu .submenu { background: url(../img/menu_arrow.gif) no-repeat center right } .menu .active { background: #dbecf3 url(../img/menu_arrow.gif) no-repeat center right } .menu .active a:hover { background-color: transparent } .menu .separator { border-top: 1px solid gray; height: 1px; overflow: hidden } .menu .separator a { display: none } .menu .disabled a { cursor: default; color: #aaa } /* Menu icons */ .menu a { } .menu .add a { background-position: 0 -60px } .menu .delete a { background-position: 0 -80px } .menu .copy a { background-position: 0 0 } .menu .cut a { background-position: 0 -20px } .menu .paste a { background-position: 0 -40px } .menu .moveup a { background-position: 0 -100px } .menu .movedown a { background-position: 0 -120px }filemanager/pages/fm/js/upload.js000066600000023520150472616010012765 0ustar00(function($){ window.UploadDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; t.args = args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); t.fileListTpl = $.templateFromScript('#filelist_item_template'); $('.uploadtype').html($.translate('{#upload.basic_upload}', 0, {a : '', '/a' : ''})); $('#createin').html(args.visual_path); $('form input[name=path]').val(args.path); $('form input[name=file0]').change(function(e) { $('form input[name=name0]').val(t.cleanName(/([^\/\\]+)$/.exec(e.target.value)[0].replace(/\.[^\.]+$/, ''))); }); $('form').submit(function() { $.WindowManager.showProgress({message : $.translate('{#upload.progress}')}); }); if (document.location.hostname != document.domain) $('form input[name=domain]').val(document.domain); t.path = args.path; $('#singleupload').click(function(e) { $('#multiupload_view').hide(); $('#singleupload_view').show(); }); RPC.exec('fm.getConfig', {path : args.path}, function(data) { var config = data.result, maxSize, upExt, fsExt, outExt = [], i, x, found; maxSize = config['upload.maxsize']; fsExt = config['filesystem.extensions'].split(','); upExt = config['upload.extensions'].split(','); t.debug = config['general.debug'] == "true"; t.shouldCleanNames = config['filesystem.clean_names'] == "true"; t.chunkSize = config['upload.chunk_size'] || '1mb'; $('#content').show(); if ($.multiUpload.initialized) $('#multiupload_view').show(); else $('#singleupload_view').show(); // Disabled upload if (config['upload.multiple_upload'] != "true") { $('#multiupload_view').hide(); $('#singleupload_view').show(); } maxSize = maxSize.replace(/\s+/, ''); maxSize = maxSize.replace(/([0-9]+)/g, '$1 '); if (upExt[0] == '*') upExt = fsExt; if (fsExt[0] == '*') fsExt = upExt; for (i = 0; i < upExt.length; i++) { upExt[i] = $.trim(upExt[i].toLowerCase()); found = false; for (x = 0; x < fsExt.length; x++) { fsExt[x] = $.trim(fsExt[x]).toLowerCase(); if (upExt[i] == fsExt[x]) { found = true; break; } } if (found) outExt.push(upExt[i]); } t.validExtensions = outExt; t.maxSize = maxSize; $('#facts').html($.templateFromScript('#facts_template'), {extensions : outExt.join(', '), maxsize : maxSize, path : args.visual_path}); if (config['upload.multiple_upload'] == "true") t.initMultiUpload(); }); $('#cancel').click(function() {t.currentWin.close();}); }, cleanName : function(s) { if (this.shouldCleanNames) s = $.cleanName(s); return s; }, handleSingleUploadResponse : function(data) { var t = this, args = t.currentWin.getArgs(); $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.upload_failed}', visual_path : t.args.visual_path, response : data})) { var res = RPC.toArray(data.result); $.WindowManager.info($.translate('{#message.upload_ok}')); $('#file0, #name0').val(''); t.insertFiles([res[0].file]); } }, initMultiUpload : function() { var t = this, up, args = t.currentWin.getArgs(), initial = 1, startTime; up = $.multiUpload.create({ silverlight_xap_url : '../../stream/index.php?theme=fm&package=static_files&file=multiupload_xap', upload_url : '../../stream/index.php?cmd=fm.upload', path : t.path, filter : t.validExtensions, chunk_size : t.chunkSize, max_size : t.maxSize, flash_browse_button : '#add', oninit : function() { $('#add').removeClass('hidden'); } }); if (t.debug) alert('Runtime used: ' + $.multiUpload.runtime); function calc(up) { var size = 0, uploaded = 0, loaded = 0, unloaded = 0, bps = 0, finished = true, fl = []; if (!up.files.length) { $('#selectview').css('top', 0); $('#selectview').show(); $('#fileblock').css({position : 'relative', top : 400}); initial = 1; return; } $(up.files).each(function(i, f) { size += f.size; loaded += f.loaded; if (f.status == 'completed') uploaded++; if (!f.status) finished = false; }); bps = Math.ceil(loaded / ((new Date().getTime() - startTime || 1) / 1000.0)); if (finished) { $('#abortupload').hide(); $(up.files).each(function(i, f) { if (f.status == 'completed') fl.push(t.path + '/' + f.name); }); $('#progressbar').css('width', '100%'); t.insertFiles(fl, function() { // All files uploaded 100% ok if (up.files.length == uploaded) t.currentWin.close(); }); return; } $('#progressinfo').html($.translate('{#upload.progressinfo}', 1, {loaded : up.formatSize(loaded), total : up.formatSize(size), speed : up.formatSize(bps)})); $('#progressbar').css('width', Math.round(loaded / size * 100.0) + '%'); $('#stats').html($.translate('{#upload.statusrow}', 1, {files : up.files.length, size : up.formatSize(size)})); }; // Register event listeners $(up).bind('multiUpload:filesSelected', function(e, fs) { var up = this, totalSize = 0; if (!fs.files.length) { $.WindowManager.info($.translate('{#upload.no_valid_files}')); return; } if (initial) { $('#selectview').animate({ top: '-150px' }, 1000); $('#fileblock').animate({ top:'-60px' }, 1000, 'linear', function() { $('#fileblock').css('position', 'static'); $('#selectview').hide(); up.repaint(); }); initial = 0; } $(fs.files).each(function(i, fo) { fo.name = t.cleanName(fo.name); $('#files').show(); $('#files tbody').append(t.fileListTpl, {id : fo.id, name : fo.name, size : fo.size}); $('#' + fo.id + ' a.remove').click(function(e) { $('#' + fo.id).remove(); $.multiUpload.get(up.id).removeFile(fo.id); e.preventDefault(); return false; }); $('#' + fo.id + ' a.rename').click(function(e) { var a = $(e.target), inp, parts; if (!a.hasClass('disabled')) { parts = /^(.+)(\.[^\.]+)$/.exec(fo.name); a.hide(); $(e.target).parent().append(''); inp = $('#rename').val(parts[1]); t.renameEnabled = 1; inp.focus().blur(function() { t.endRename(); }).keydown(function(e) { var c = e.keyCode; if (c == 13 || c == 27) { if (c == 13) { fo.name = t.cleanName(inp.val()) + parts[2]; a.html(fo.name); } t.endRename(); } }); } e.preventDefault(); return false; }); }); up.settings.flash_browse_button = '#addmore'; up.repaint(); $('#filelist')[0].scrollTop = 0; }); $(up).bind('multiUpload:fileUploaded', function(e, o) { $('#' + o.file.id).removeClass('failed').addClass('done'); }); $(up).bind('multiUpload:filesChanged', function() { calc(up); up.repaint(); t.endRename(); }); $(up).bind('multiUpload:fileUploadProgress', function(e, pr) { if (up.status) { if (!pr.file.scroll) { $('#filelist').scrollTo($('#' + pr.file.id), 50); pr.file.scroll = 1; } $('#' + pr.file.id + ' td.status').html(Math.round(pr.loaded / pr.total * 100.0) + '%'); calc(up); } }); $(up).bind('multiUpload:chunkUploaded', function(e, o) { var res = $.parseJSON(o.response), data = RPC.toArray(res.result); if (data[0]["status"] != 'OK') { o.file.loaded = o.file.size; calc(up); $('#' + o.file.id).addClass('failed'); $('#' + o.file.id + ' td.status').html($.translate(data[0]["message"])); o.cancel = 1; } }); $(up).bind('multiUpload:uploadChunkError', function(e, o) { $('#' + o.file.id).addClass('failed'); $('#' + o.file.id + ' td.status').html('Failed').attr('title', o.error); //top.console.log(o.file, o.chunk, o.chunks, o.error); }); // Add UI events $('#add, #addmore').click(function(e) { up.selectFiles(); e.preventDefault(); return false; }); $('#abortupload').click(function(e) { up.stopUpload(); $.WindowManager.info($.translate('{#upload.cancelled}'), function() { t.currentWin.close(); }); }); $('#uploadstart').click(function(e) { $('#uploadstart').parent().hide(); $('#status').show(); $('#statsrow').hide(); $('#files .status').html('-'); $('#files .fname a').addClass('disabled'); startTime = new Date().getTime(); up.startUpload(); e.preventDefault(); return false; }); $('#uploadstop').click(function(e) { up.stopUpload(); e.preventDefault(); return false; }); $('#clear').click(function(e) { up.clearFiles(); $('#files').hide(); $('#files tbody').html(''); e.preventDefault(); return false; }); }, insertFiles : function(pa, cb) { var s = this.currentWin.getArgs(); // Insert file if (s.onupload) { RPC.insertFiles({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, paths : pa, insert_filter : s.insert_filter, oninsert : function(o) { s.onupload(o); if (cb) cb(); } }); } }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } }, endRename : function() { if (this.renameEnabled) { $('#files input').remove(); $('#files a').show(); this.renameEnabled = 0; } } }; // JSON handler window.handleJSON = function(data) { window.focus(); UploadDialog.handleSingleUploadResponse(data); }; $(function(e) { UploadDialog.init(); }); })(jQuery); filemanager/pages/fm/js/filemanager.js000066600000111572150472616010013760 0ustar00(function($){ window.FileManager = $.extend(BaseManager, { focusedIndex : -1, clipboard : null, access : '', tools : [ 'createdir', 'edit', 'createdoc', 'refresh', 'zip', 'upload', 'rename', 'cut', 'copy', 'paste', 'delete', 'view', 'download', 'insert', 'imagemanager', 'help' ], init : function() { var t = this, args = t.currentWin.getArgs(), uri, chunks; $('#selectall,#unselectall').removeClass('disabled'); t.path = args.path || '{default}'; t.rootPath = args.rootpath; t.extensions = args.extensions; t.include_file_pattern = args.include_file_pattern; t.exclude_file_pattern = args.exclude_file_pattern; t.include_directory_pattern = args.include_directory_pattern; t.exclude_directory_pattern = args.exclude_directory_pattern; t.remember_last_path = args.remember_last_path; t.urlSuffix = ''; if (document.domain != document.location.hostname) t.urlSuffix = '?domain=' + document.domain; if (args.url) { uri = $.parseURI(args.url, {base_url : args.document_base_url || args.default_base_url}); if (uri) t.inputURL = uri.path.replace(/\/[^\/]+$/, ''); } if (t.rootPath) { chunks = t.rootPath.split(/=/); t.rootPathName = chunks.length > 1 ? chunks[0] : /[^\/]+$/.exec(t.rootPath); t.rootPath = chunks[1] || t.rootPath; } // Compile templates t.fileListTpl = $.templateFromScript('#filelist_item_template'); t.dirInfoTpl = $.templateFromScript('#dirinfo_template'); t.caregoryListTpl = $.templateFromScript('#folders_template'); t.previewFileTpl = $.templateFromScript('#preview_file_template'); t.pathTpl = $.templateFromScript('#path_template'); t.customDirsTpl = $.templateFromScript('#custom_dir_template'); $('#filemanagerlist').css('height', $.winHeight() - 140); $(window).bind('resize', function() { $('#filemanagerlist').css('height', $.winHeight() - 140); }); // Register default actions $().bind('action:selectall', function() {t.setFileSelection(0, t.files.length, true);}); $().bind('action:unselectall', function() {t.focusFile(0);}); $().bind('action:cut', function() {t.setClipBoard({files : t.selectedFiles, action : 'cut'});}); $().bind('action:copy', function() {t.setClipBoard({files : t.selectedFiles, action : 'copy'});}); $().bind('action:paste', function() {t.pasteFiles();}); $().bind('action:rename', function() {t.renameFile(t.focusedFile);}); $().bind('action:delete', function() {t.deleteFiles(t.selectedFiles);}); $().bind('action:zip', function() {t.zipFiles();}); // Register sort actions $().bind('action:sortbyname', function(e) {t.updateFileList('name', $(e.target).hasClass('sortasc'));}); $().bind('action:sortbysize', function(e) {t.updateFileList('size', $(e.target).hasClass('sortasc'));}); $().bind('action:sortbytype', function(e) {t.updateFileList('type', $(e.target).hasClass('sortasc'));}); $().bind('action:sortbymodified', function(e) {t.updateFileList('modified', $(e.target).hasClass('sortasc'));}); // Register view actions $().bind('action:insert', function() {t.insertFiles();}); $().bind('action:download', function() {t.downloadFile(t.focusedFile);}); $().bind('action:view', function() {t.viewFile(t.focusedFile);}); // Register toolbar actions $().bind('action:createdir', function() {t.createDir();}); $().bind('action:edit', function() {t.editFile(t.focusedFile);}); $().bind('action:upload', function() {t.uploadFiles();}); $().bind('action:createdoc', function() {t.createDoc();}); $().bind('action:refresh', function() {t.listFiles();}); $().bind('action:help', function() {}); $().bind('action:imagemanager', function() {t.imageManager();}); $().bind('filemanager:clipboardchanged', function() { if (t.clipboard && !$('#paste').hasClass('deactivated')) $('#paste').removeClass('disabled'); else $('#paste').addClass('disabled'); }); $().bind('selection:changed', function() { $(['cut', 'copy', 'delete', 'zip']).each(function(i, v) { if (t.selectedFiles.length > 0 && !$('#' + v).hasClass('deactivated')) $('#' + v).removeClass('disabled'); else $('#' + v).addClass('disabled'); }); }); $().bind('filelist:changed', function() { if (t.clipboard && !$('#paste').hasClass('deactivated')) $('#paste').removeClass('disabled'); else $('#paste').addClass('disabled'); }); $().bind('selection:changed', function() { if (t.focusedFile) $('#previewinfo').html(t.previewFileTpl, t.focusedFile); else $('#previewinfo').html(' '); $(['rename', 'insert', 'download', 'view', 'edit']).each(function(i, v) { if (!t.focusedFile) { $('#' + v).addClass('disabled'); t.showPreview(0); } else if (!$('#' + v).hasClass('deactivated')) $('#' + v).removeClass('disabled'); }); if (t.focusedFile && (!t.focusedFile.custom || !t.focusedFile.custom.editable)) $('#edit').addClass('disabled'); }); $('#selection_actions li, #view_actions li, #tools li, #filemanagerlist a').each(function(i, v) { $(v).click(function(e) { if (!$(v).hasClass('disabled')) $().trigger('action:' + v.id, e); e.preventDefault(); return false; }); }); $('#filemanagerlist').mousedown(function(e) { if (e.shiftKey) e.preventDefault(); }); $('#filemanagerlist').bind('selectstart', function(e) { e.preventDefault(); }); $('#category_list').click(function(e) { var el = e.target; if (el.title) t.listFiles(el.title); e.preventDefault(); return false; }); $('#special_list').click(function(e) { var el = e.target; if (el.title) t.listFiles(el.title); e.preventDefault(); return false; }); $('#filemanagerlist').click(t.handleSelection); $('#filemanagerlist').dblclick(t.handleSelection); $('#filemanagerlist').bind('contextmenu', t.handleSelection); $('#filemanagerlist').mcContextMenu({ constrain : 1, setup : function(m) { $(m).bind('DropMenu:beforeshow', function(e, m) { // Build new menu m.clear(); m.add({title : $.translate('{#actions.cut}'), disabled : t.isDisabled('cut') || !t.selectedFiles.length, onclick : function() {t.setClipBoard({files : t.selectedFiles, action : 'cut'});}}); m.add({title : $.translate('{#actions.copy}'), disabled : t.isDisabled('copy') || !t.selectedFiles.length, onclick : function() {t.setClipBoard({files : t.selectedFiles, action : 'copy'});}}); m.add({title : $.translate('{#actions.paste}'), disabled : t.isDisabled('paste') || !t.clipboard, onclick : function() {t.pasteFiles();}}); m.addSeparator(); m.add({title : $.translate('{#actions.edit}'), disabled : !t.focusedFile || (!t.focusedFile.custom || !t.focusedFile.custom.editable) || t.isDisabled('edit') || !t.selectedFiles.length, onclick : function() {t.editFile(t.focusedFile);}}); m.add({title : $.translate('{#actions.rename}'), disabled : t.isDisabled('rename') || !t.selectedFiles.length, onclick : function() {t.renameFile(t.focusedFile);}}); m.add({title : $.translate('{#actions.deleteit}'), disabled : t.isDisabled('delete') || !t.selectedFiles.length, onclick : function() {t.deleteFiles(t.selectedFiles);}}); m.add({title : $.translate('{#actions.zip}'), disabled : t.isDisabled('zip') || !t.selectedFiles.length, onclick : function() {t.zipFiles();}}); }); } }); $().bind('DropMenu:show', function(e, m) { $('#' + m.id).css('opacity', 0).animate({ opacity: 0.9 }, 100); }); if (t.specialFolders.length) { $(t.specialFolders).each(function(i, v) { v.title = $.translate(v.title); $('#special_list').append(t.customDirsTpl, v); }); $('#special_list').show(); } setInterval(function() { RPC.exec('fm.keepAlive', {}); }, 60 * 1000 * 5); // 5 min }, handleSelection : function(e) { var t = FileManager, el = e.target, tr = $(el).parents('tr.listrow')[0], idx, type; if (tr && el.nodeName != 'INPUT') { idx = parseInt(tr.id.replace(/[^0-9]+/g, '')); t.focusedFile = t.files[idx]; type = t.focusedFile.type; $('#file_' + t.focusedIndex).removeClass('focused'); if (e.shiftKey) t.setFileSelection(t.focusedIndex, idx, true, 1); if ($(el).hasClass('checkbox')) { if ($(tr).hasClass('selected')) { $(tr).removeClass('focused'); idx = -1; t.focusedFile = null; } else $(tr).addClass('focused'); $(tr).toggleClass('selected'); t.showPreview(0); } else { if (!e.shiftKey && (type == 'folder' || type == 'parent' || type == 'zip') && e.type == 'click') { if (type == 'zip') t.listFiles('zip://' + t.focusedFile.path); else t.listFiles(t.focusedFile.path); t.showPreview(0); e.preventDefault(); return false; } else if (e.type != 'dblclick') t.showPreview(t.focusedFile); if (!e.shiftKey && (e.type != 'contextmenu' || !$(tr).hasClass('selected'))) { $('#filemanagerlist tbody tr').removeClass('selected'); $('#file_' + t.focusedIndex).removeClass('selected'); } $(tr).addClass('focused').addClass('selected'); } // Build list of selected files t.selectedFiles = []; $('#filemanagerlist tbody tr.selected').each(function(i, tr) { t.selectedFiles.push(t.files[parseInt(tr.id.replace(/[^0-9]+/g, ''))]); }); t.focusedIndex = idx; $().trigger('selection:changed'); if (e.type == 'dblclick') t.insertFiles(t.selectedFiles); e.preventDefault(); return false; } }, createDir : function() { $.WindowManager.open({ url : 'createdir.html' + this.urlSuffix, width : 520, height : 320 }, { is_demo : this.demoMode, path : this.path, visual_path : this.visualPath, oncreate : function() { FileManager.listFiles(); } }); }, createDoc : function() { $.WindowManager.open({ url : 'createdoc.html' + this.urlSuffix, width : 520, height : 320 }, { is_demo : this.demoMode, path : this.path, visual_path : this.visualPath, oncreate : function() { FileManager.listFiles(); } }); }, uploadFiles : function() { $.WindowManager.open({ url : 'upload.html' + this.urlSuffix, width : 550, height : 360, scrolling : 'no' }, { is_demo : this.demoMode, path : this.path, visual_path : this.visualPath, onupload : function() { FileManager.listFiles(); } }); }, zipFiles : function() { var files = []; $(this.selectedFiles).each(function(i, f) { files.push(f.path); }); $.WindowManager.open({ url : 'createzip.html' + this.urlSuffix, width : 490, height : 280 }, { is_demo : this.demoMode, files : files, path : this.path, visual_path : this.visualPath, oncreate : function() { FileManager.listFiles(); } }); }, editFile : function(fi) { $.WindowManager.open({ url : 'edit.html' + this.urlSuffix, width : 750, height : 450 }, { is_demo : this.demoMode, path : fi.path, visual_path : (this.visualPath + '/' + /[^\/]+$/.exec(fi.path)).replace(/^\/\//, '/'), onsave : function() { FileManager.listFiles(); } }); }, showPreview : function(fi) { if (fi && (!fi.custom || fi.custom.previewable) && fi.type != 'zip') $('#preview').attr('src', '../../stream/index.php?cmd=fm.streamFile&path=' + encodeURIComponent(fi.path)).css('visibility', 'visible'); else $('#preview').attr('src', "javascript:''").css('visibility', 'hidden'); }, deleteFiles : function(fl) { var t = this, args = {}; if (fl) { $(fl).each(function(i, v) { args['path' + i] = v.path; }); $.WindowManager.confirm($.translate('{#message.confirm_delete}'), function(s) { if (s) { if (!t.isDemo()) { RPC.exec('fm.deleteFiles', args, function (data) { if (!RPC.handleError({message : '{#error.delete_failed}', visual_path : t.visualPath, response : data})) t.listFiles(); }); } } }); } }, pasteFiles : function() { var t = this, args = {}; if (t.clipboard && !t.isDemo()) { args.topath = t.path; $(t.clipboard.files).each(function(i, v) { args['frompath' + i] = v.path; }); $.WindowManager.showProgress({message : $.translate("{#message.paste_in_progress}")}); if (t.clipboard.action == 'cut') { RPC.exec('fm.moveFiles', args, function(data) { $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.move_failed}', visual_path : t.visualPath, response : data})) t.listFiles(); }); } else { RPC.exec('fm.copyFiles', args, function(data) { $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.copy_failed}', visual_path : t.visualPath, response : data})) t.listFiles(); }); } t.clipboard = null; $().trigger('filemanager:clipboardchanged'); } }, setClipBoard : function(clip) { this.clipboard = clip; $().trigger('filemanager:clipboardchanged', clip); }, insertFiles : function() { var t = this, s = t.currentWin.getArgs(), selectedPaths = []; $(t.selectedFiles).each(function(i, v) { selectedPaths.push(v.path); }); RPC.insertFiles({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, paths : selectedPaths, insert_filter : s.insert_filter, progress_message : $.translate("{#message.insert}"), oninsert : function(o) { if (s.oninsert) { $(o.files).each(function(i, v) { if (v.path == t.focusedFile.path) o.focusedFile = v; }); s.oninsert(o); } t.currentWin.close(); } }); }, renameFile : function(f) { var t = this, inp, ext = '', ma; t.curRenameFile = f; inp = $.createElm('input', {id : f.id + '_rename', type : "text", "class" : "text", "value" : f.name.replace(/\.[^\.]+$/, '')}); $('#' + f.id + ' td.file').append(inp).find('a').hide(); if (ma = /\.[^\.]+$/.exec(f.name)) ext = ma[0]; inp.focus().blur(function() { t.endRename(); }).keyup(function(e) { var c = e.keyCode, na; if (c == 13 || c == 27) { if (c == 13) { if (!t.isDemo()) { na = inp.val(); if (t.shouldCleanNames) na = $.cleanName(na); RPC.exec('fm.moveFiles', { frompath0 : f.path, toname0 : na + ext }, function (data) { if (!RPC.handleError({message : '{#error.rename_failed}', visual_path : t.visualPath, response : data})) t.listFiles(); }); } } t.endRename(); } }) }, endRename : function() { var td; if (this.curRenameFile) { td = $('#' + this.curRenameFile.id + ' td.file'); td.find('input').remove(); td.find('a').show(); } }, listFiles : function(p, col, des) { var t = this, args = t.currentWin.getArgs(); t.path = p || t.path; $('#dirinfo').hide(); $('#progress').show(); $('#filelist').html(''); t.showPreview(0); RPC.exec('fm.listFiles', { path : t.path, root_path : t.rootPath, url : t.inputURL, extensions : t.extensions, include_file_pattern : t.include_file_pattern, exclude_file_pattern : t.exclude_file_pattern, include_directory_pattern : t.include_directory_pattern, exclude_directory_pattern : t.exclude_directory_pattern, config : 'general,filesystem,imagemanager', remember_last_path : t.remember_last_path }, function(data) { var header, cfg, disabled, visible, argTools, argDisabledTools; if (!RPC.handleError({message : 'List files error', visual_path : t.visualPath, response : data})) { header = data.result.header; cfg = data.result.config; t.access = header.attribs; t.visualPath = header.visual_path; t.imageManagerURL = cfg['imagemanager.urlprefix']; t.demoMode = cfg['general.demo'] == "true"; t.path = header.path; function explode(s) { return s ? s.replace(/\s+/g, '').split(',') : s; }; // Enable/disable tools t.shouldCleanNames = cfg['filesystem.clean_names'] == "true"; disabled = explode(cfg['general.disabled_tools']); visible = explode(cfg['general.tools']); if (argDisabledTools = explode(args.disabled_tools)) disabled = jQuery.merge(argDisabledTools, disabled); if (argTools = explode(args.tools)) { $(argTools).each(function(i, v) { if (!$.inArray(v, visible)) visible.push(v); }); visible = $.grep(visible, function(v) { return $.inArray(v, argTools); }); } $(t.tools).each(function(i, v) { var li = $('#' + v); t.setDisabled(v, $.inArray(v, disabled) != -1); if ($.inArray(v, visible) != -1) li.show(); else li.hide(); }); $('#tools').show(); $('#progress').hide(); $('#curpath').html(t.pathTpl, header).attr("title", t.visualPath); // Convert result table into object list t.files = RPC.toArray(data.result); // Update file list t.updateFileList(col, des); $().trigger('filelist:changed'); } }); }, updateFileList : function(col, des) { var t = this, info = {dirs : 0, files : 0, filesize : 0, access : t.access}, co = 0, fileLst; col = col || 'name'; $('thead a.sortdesc').removeClass('sortdesc'); $('thead a.sortasc').removeClass('sortasc'); $('#sortby' + col).removeClass('sort' + (des ? 'asc' : 'desc')); $('#sortby' + col).addClass('sort' + (des ? 'desc' : 'asc')); t.endRename(); t.focusedIndex = -1; t.focusedFile = null; t.selectedFiles = []; $().trigger('selection:changed'); // Sort the files this.files = $(this.files).sortArray(col, des); // Make sure directories are before files this.files = $.grep(this.files, function(v) { return v.type == 'folder' || v.type == 'parent'; }).concat($.grep(this.files, function(v) { return v.type != 'folder' && v.type != 'parent'; })); $('#filelist').html(''); // Collect directory info $(this.files).each(function(i, f) { if (f.type != 'parent') { if (f.type == 'folder') info.dirs++; else info.files++; if (f.size != -1) info.filesize += f.size; } f.id = 'file_' + i; }); $('#dirinfo').html(t.dirInfoTpl, info); $('#dirinfo').show(); fileLst = $('#filelist'); $(this.files).each(function() { fileLst.append(t.fileListTpl, this); }); }, downloadFile : function(f) { if (f.type != 'folder' && f.type != 'parent') $('#preview').attr('src', '../../stream/index.php?cmd=fm.download&path=' + encodeURIComponent(f.path)); }, viewFile : function(f) { if (f.type != 'folder' && f.type != 'parent' && f.type != 'zip') window.open('../../stream/index.php?cmd=fm.streamFile&path=' + encodeURIComponent(f.path), 'View'); }, imageManager : function() { var suf; if (this.imageManagerURL.indexOf('?') != -1) suf = this.urlSuffix.replace(/\?/, '&'); document.location = this.imageManagerURL + suf; }, focusFile : function(f) { var t = this; if (f && f.type == 'parent') return; $('#filemanagerlist tbody tr').removeClass('selected').removeClass('focused'); if (!f) { t.selectedFiles = []; t.focusedFile = null; t.focusedIndex = -1; $().trigger('selection:changed'); t.showPreview(0); return; } t.focusedIndex = f.index; t.focusedFile = f; t.selectedFiles = [f]; $().trigger('selection:changed'); $('#' + f.id).addClass('selected focused'); t.showPreview(f); }, setFileSelection : function(st, en, ck, nup) { var t = this, i; function sel(v, i) { if (v && v.type != 'parent') { v = $('#file_' + i); if (ck) v.addClass('selected'); else if (!v.hasClass('focused')) v.removeClass('selected'); } }; for (i = st; i < en; i++) sel(t.files[i], i); for (i = en; i < st; i++) sel(t.files[i], i); if (!nup) { // Build list of selected files t.selectedFiles = []; $('#filemanagerlist tbody tr.selected').each(function(i, tr) { t.selectedFiles.push(t.files[parseInt(tr.id.replace(/[^0-9]+/g, ''))]); }); } $().trigger('selection:changed'); }, listRoots : function() { var t = this; if (t.rootPathName) { $('#category_list').html(t.caregoryListTpl, {name : t.rootPathName, path : t.rootPath}); return; } $('#progress').show(); RPC.exec('fm.listFiles', { "path" : "root:///" }, function(data) { if (!RPC.handleError({message : 'List files error', visual_path : t.visualPath, response : data})) { $(RPC.toArray(data.result)).each(function() { $('#category_list').append(t.caregoryListTpl, this); }); } }); } }); $(function() { FileManager.init(); FileManager.listFiles(); FileManager.listRoots(); }); })(jQuery); filemanager/pages/fm/js/createzip.js000066600000002762150472616010013474 0ustar00(function($){ window.CreateZipDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); $('#content').show(); $('#createin').html(args.visual_path); RPC.exec('fm.getConfig', {path : args.path}, function(data) { var config = data.result, templates = [], tpl, cleanNames; if (!RPC.handleError({message : 'Get config error', visual_path : t.visualPath, response : data})) { cleanNames = config['filesystem.clean_names'] == "true"; $('form').submit(function() { var rpcArgs = {}; $(args.files).each(function(i, f) { rpcArgs['frompath' + i] = f; }); rpcArgs.topath = args.path; rpcArgs.toname = cleanNames ? $.cleanName($('#zipname').val()) : $('#zipname').val(); if (!t.isDemo()) { RPC.exec('fm.createZip', rpcArgs, function (data) { if (!RPC.handleError({message : '{#error.createzip_failed}', visual_path : args.visual_path, response : data})) { if (args.oncreate) args.oncreate(); t.currentWin.close(); } }); } return false; }); $('#cancel').click(function() {t.currentWin.close();}); } }); }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function() { CreateZipDialog.init(); }); })(jQuery); filemanager/pages/fm/js/jquery/jquery.multiupload.js000066600000007317150472616010016703 0ustar00/** * $Id: jquery.multiupload.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { var id = 0; $.multiUpload = function(s) { var up = this, mul; up.id = up.generateID(); // Default settings up.settings = { }; up.settings = s = $.extend(up.settings, s); // Parse max size if (s.max_size) s.max_size = up.parseSize(s.max_size); // Parse chunk size if (s.chunk_size) s.chunk_size = up.parseSize(s.chunk_size); if (s.oninit) { $(up).bind('multiUpload:init', function() { s.oninit.call(up, up); }); } up.init(); $(['setup', 'filesSelected', 'fileProgress', 'filesProgress', 'filesUploaded', 'fileUploaded', 'fileUploadProgress']).each(function() { if (s[(this)]) $(up).bind('multiUpload:' + this, s[(this)]); }); $(up).trigger('multiUpload:setup'); $(up).bind('multiUpload:selectFiles', function() {this.cache = {};}); $(up).bind('multiUpload:filesSelected', function(e, fs) { var mx = up.settings.max_size; function filter(f) { var m = /\.([^.]+)$/.exec(f.name.toLowerCase()), ext = m ? m[1] : null; return ext && $.inArray(ext, s.filter) != -1 && (!mx || f.size < mx); }; // Remove non valid files if (s.filter[0] != '*') { this.files = $.grep(this.files, filter); fs.files = $.grep(fs.files, filter); } this.cache = {}; }); }; // Add public methods $.extend($.multiUpload.prototype, { files : [], cache : {}, listeners : {}, status : 0, init : function() { }, repaint : function() { }, selectFiles : function() { $(this).trigger('multiUpload:selectFiles'); }, startUpload : function() { this.status = 1; $(this).trigger('multiUpload:startUpload'); this.uploadNext(); }, stopUpload : function() { this.status = 0; $(this).trigger('multiUpload:stopUpload'); }, uploadNext : function() { var i, fl = this.files; if (!this.status) return; for (i = 0; i < fl.length; i++) { if (!fl[i].status) { $(this).trigger('multiUpload:uploadFile', [fl[i]]); return; } } this.stopUpload(); }, getFile : function(id) { var t = this, f, i, fl = t.files; if (f = t.cache[id]) return f; for (i = 0; i < fl.length; i++) { if (fl[i].id == id) return t.cache[id] = fl[i]; } }, removeFile : function(id) { var up = this, f; up.files = $.grep(up.files, function(v) { if (v.id == id) f = v; return v.id != id; }); $(this).trigger('multiUpload:removeFile', f); $(this).trigger('multiUpload:filesChanged'); }, clearFiles : function() { this.stopUpload(); this.files = []; this.cache = {}; $(this).trigger('multiUpload:clearFiles'); $(this).trigger('multiUpload:filesChanged'); }, formatSize : function(v) { // MB if (v > 1048576) return Math.round(v / 1048576, 1) + " MB"; // KB if (v > 1024) return Math.round(v / 1024, 1) + " KB"; return v + " b"; }, generateID : function() { return 'u' + (id++); }, parseSize : function(sz) { var mul; if (typeof(sz) == 'string') { sz = /^([0-9]+)([mk]+)$/.exec(sz.toLowerCase().replace(/[^0-9mk]/g, '')); mul = sz[2]; sz = parseInt(sz[1]); if (mul == 'm') sz *= 1048576; if (mul == 'k') sz *= 1024; } return sz; } }); // Static methods $.extend($.multiUpload, { instances : {}, create : function(s) { return this.add(new $.multiUpload(s)); }, remove : function(id) { if (this.get(id)) delete this.instances[id]; }, add : function(up) { return this.instances[up.id] = up; }, get : function(id) { return this.instances[id]; } }); })(jQuery); filemanager/pages/fm/js/jquery/jquery.multiupload.silverlight.js000066600000012647150472616010021240 0ustar00/** * $Id: jquery.multiupload.silverlight.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ function onSilverlightError(sender, args) { alert("onSilverlightError: " + args.errormessage); }; (function($) { function isInstalled(version) { var isVersionSupported = false; var container = null; try { var control = null; try { control = new ActiveXObject('AgControl.AgControl'); if (version == null) isVersionSupported = true; else if (control.IsVersionSupported(version)) isVersionSupported = true; control = null; } catch (e) { var plugin = navigator.plugins["Silverlight Plug-In"]; if (plugin) { if (version === null) { isVersionSupported = true; } else { var actualVer = plugin.description; if (actualVer === "1.0.30226.2") actualVer = "2.0.30226.2"; var actualVerArray = actualVer.split("."); while (actualVerArray.length > 3) actualVerArray.pop(); while ( actualVerArray.length < 4) actualVerArray.push(0); var reqVerArray = version.split("."); while (reqVerArray.length > 4) reqVerArray.pop(); var requiredVersionPart, actualVersionPart, index = 0; do { requiredVersionPart = parseInt(reqVerArray[index]); actualVersionPart = parseInt(actualVerArray[index]); index++; } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) isVersionSupported = true; } } } } catch (e) { isVersionSupported = false; } return isVersionSupported; }; if (!$.multiUpload.initialized && isInstalled('2.0.31005.0')) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'silverlight'; // Register global Silverlight instance $.multiUpload.setup = function(se) { $.multiUpload.plugin = $('#multiuploader')[0].content.Upload; $.multiUpload._fireEvent('init'); }; $.multiUpload.instances = []; $.multiUpload._fireEvent = function(na, p1, p2, p3, p4) { // Detach event from flash window.setTimeout(function() { $($.multiUpload.instances).each(function(i, v) { $(v).trigger('multiUpload:' + na, [p1, p2, p3, p4]); }); }, 0); }; // Override init function $.extend($.multiUpload.prototype, { init : function() { var up = this, sel = []; $.multiUpload.instances.push(up); // Add silverlight runtime if (!$('#multiuploader')[0]) { $("body").append( '' + '' + '' ); } // Register silverlight specific event handlers $(up).bind('multiUpload:slSelectFile', function(e, id, na, sz) { var fo = {id : id, name : na, size : sz, loaded : 0}; sel.push(fo); up.files.push(fo); }); $(up).bind('multiUpload:slSelectSuccessful', function() { $(up).trigger('multiUpload:filesSelected', [{files : sel}]); $(up).trigger('multiUpload:filesChanged'); sel = []; }); $(up).bind('multiUpload:slSelectCancelled', function() { $(up).trigger('multiUpload:filesSelectionCancelled', [sel]); sel = []; }); $(up).bind('multiUpload:slUploadFileProgress', function(e, id, lod, tot) { var file = up.getFile(id); file.loaded = lod; $(up).trigger('multiUpload:fileUploadProgress', [{file : file, loaded : lod, total : tot}]); }); $(up).bind('multiUpload:slUploadSuccessful', function(e, id, resp) { var fo; if (fo = up.getFile(id)) { if (!fo.status) { fo.status = "completed"; $(up).trigger('multiUpload:fileUploaded', [{file : fo, response : resp}]); } } $(up).trigger('multiUpload:filesChanged'); up.uploadNext(); }); $(up).bind('multiUpload:stopUpload', function(e) { $.multiUpload.plugin.CancelUpload(); }); $(up).bind('multiUpload:slUploadChunkSuccessful', function(e, id, chunk, chunks, resp) { var fo = up.getFile(id), ar = {file : fo, chunk : chunk, chunks : chunks, response : resp}; $(up).trigger('multiUpload:chunkUploaded', [ar]); if (ar.cancel) { fo.status = "failed"; $.multiUpload.plugin.CancelUpload(); } }); $(up).bind('multiUpload:slUploadChunkError', function(e, id, chunk, chunks, err) { $(up).trigger('multiUpload:uploadChunkError', [{file : up.getFile(id), chunk : chunk, chunks : chunks, error : err}]); }); // Register event handlers $(up).bind('multiUpload:selectFiles', function(e) { $.multiUpload.plugin.SelectFiles( 'Files |' + $.map(up.settings.filter, function(v) { return '*.' + v }).join(';') ); }); $(up).bind('multiUpload:removeFile', function(e, fo) { $.multiUpload.plugin.RemoveFile(fo.id); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { $.multiUpload.plugin.UploadFile( fo.id, up.settings.upload_url + '&name=' + escape(fo.name) + "&path=" + escape(up.settings.path), parseInt(up.settings.chunk_size) ); }); $(up).bind('multiUpload:clearFiles', function(e) { $.multiUpload.plugin.ClearFiles(); }); } }); } })(jQuery);filemanager/pages/fm/js/jquery/jquery.uri.js000066600000013712150472616010015137 0ustar00/** * $Id: jquery.uri.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function URI(u, s) { var t = this, o, a, b; // Default settings s = t.settings = s || {}; // Strange app protocol or local anchor if (/^(mailto|news|javascript|about):/i.test(u) || /^\s*#/.test(u)) { t.source = u; return; } // Absolute path with no host, fake host and protocol if (u.indexOf('/') === 0 && u.indexOf('//') !== 0) u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u; // Relative path if (u.indexOf(':/') === -1 && u.indexOf('//') !== 0) u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u); // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u); $(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]).each(function(i, v) { var s = u[i]; // Zope 3 workaround, they use @@something if (s) s = s.replace(/\(mce_at\)/g, '@@'); t[v] = s; }); if (b = s.base_uri) { if (!t.protocol) t.protocol = b.protocol; if (!t.userInfo) t.userInfo = b.userInfo; if (!t.port && t.host == 'mce_host') t.port = b.port; if (!t.host || t.host == 'mce_host') t.host = b.host; t.source = ''; } }; $.extend(URI.prototype, { /** * Sets the internal path part of the URI. * * @param {string} p Path string to set. */ setPath : function(p) { var t = this; p = /^(.*?)\/?(\w+)?$/.exec(p); // Update path parts t.path = p[0]; t.directory = p[1]; t.file = p[2]; // Rebuild source t.source = ''; t.getURI(); }, /** * Converts the specified URI into a relative URI based on the current URI instance location. * * @param {String} u URI to convert into a relative path/URI. * @return {String} Relative URI from the point specified in the current URI instance. */ toRelative : function(u) { var t = this, o; if (u === "./") return u; u = new URI(u, {base_uri : t}); // Not on same domain/port or protocol if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol) return u.getURI(); o = t.toRelPath(t.path, u.path); // Add query if (u.query) o += '?' + u.query; // Add anchor if (u.anchor) o += '#' + u.anchor; return o; }, /** * Converts the specified URI into a absolute URI based on the current URI instance location. * * @param {String} u URI to convert into a relative path/URI. * @param {bool} nh No host and protocol prefix. * @return {String} Absolute URI from the point specified in the current URI instance. */ toAbsolute : function(u, nh) { var u = new URI(u, {base_uri : this}); return u.getURI(this.host == u.host ? nh : 0); }, /** * Converts a absolute path into a relative path. * * @param {String} base Base point to convert the path from. * @param {String} path Absolute path to convert into a relative path. */ toRelPath : function(base, path) { var items, bp = 0, out = '', i, l; // Split the paths base = base.substring(0, base.lastIndexOf('/')); base = base.split('/'); items = path.split('/'); if (base.length >= items.length) { for (i = 0, l = base.length; i < l; i++) { if (i >= items.length || base[i] != items[i]) { bp = i + 1; break; } } } if (base.length < items.length) { for (i = 0, l = items.length; i < l; i++) { if (i >= base.length || base[i] != items[i]) { bp = i + 1; break; } } } if (bp == 1) return path; for (i = 0, l = base.length - (bp - 1); i < l; i++) out += "../"; for (i = bp - 1, l = items.length; i < l; i++) { if (i != bp - 1) out += "/" + items[i]; else out += items[i]; } return out; }, /** * Converts a relative path into a absolute path. * * @param {String} base Base point to convert the path from. * @param {String} path Relative path to convert into an absolute path. */ toAbsPath : function(base, path) { var i, nb = 0, o = []; // Split paths base = base.split('/'); path = path.split('/'); // Remove empty chunks $(base).each(function(i, k) { if (k) o.push(k); }); base = o; // Merge relURLParts chunks for (i = path.length - 1, o = []; i >= 0; i--) { // Ignore empty or . if (path[i].length == 0 || path[i] == ".") continue; // Is parent if (path[i] == '..') { nb++; continue; } // Move up if (nb > 0) { nb--; continue; } o.push(path[i]); } i = base.length - nb; // If /a/b/c or / if (i <= 0) return '/' + o.reverse().join('/'); return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/'); }, /** * Returns the full URI of the internal structure. * * @param {bool} nh Optional no host and protocol part. Defaults to false. */ getURI : function(nh) { var s, t = this; // Rebuild source if (!t.source || nh) { s = ''; if (!nh) { if (t.protocol) s += t.protocol + '://'; if (t.userInfo) s += t.userInfo + '@'; if (t.host) s += t.host; if (t.port) s += ':' + t.port; } if (t.path) s += t.path; if (t.query) s += '?' + t.query; if (t.anchor) s += '#' + t.anchor; t.source = s; } return t.source; } }); $.parseURI = function(u, s) { s = s || {}; return new URI(u, $.extend({base_uri : new URI(s.base_url || document.location.href)}, s)); }; })(jQuery);filemanager/pages/fm/js/jquery/jquery.cleanname.js000066600000001426150472616010016262 0ustar00/** * $Id: jquery.replacediacritics.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ $.cleanName = function(s) { var i, lo; // Replace diacritics lo = [ /[\300-\306]/g, 'A', /[\340-\346]/g, 'a', /\307/g, 'C', /\347/g, 'c', /[\310-\313]/g, 'E', /[\350-\353]/g, 'e', /[\314-\317]/g, 'I', /[\354-\357]/g, 'i', /\321/g, 'N', /\361/g, 'n', /[\322-\330]/g, 'O', /[\362-\370]/g, 'o', /[\331-\334]/g, 'U', /[\371-\374]/g, 'u' ]; for (i = 0; i < lo.length; i += 2) s = s.replace(lo[i], lo[i + 1]); // Replace whitespace s = s.replace(/\s+/g, '_'); // Remove anything else s = s.replace(/[^a-z0-9_\-\.]+/gi, ''); return s; }; })(jQuery);filemanager/pages/fm/js/jquery/jquery.dropmenu.js000066600000011733150472616010016172 0ustar00/** * $Id: jquery.dropmenu.js 466 2008-10-15 14:54:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { var idCount = 0; function DropMenu(s) { var t = this, k; t.items = []; t.settings = s = $.extend({ menu_class : 'menu', menu_item_class : 'menuitem', item_class : 'item', separator_class : 'separator', submenu_item_class : 'submenu', active_class : 'active' }, s); t.id = s.id; if (s.setup) s.setup.call(t, t); // Private methods function hideHandler(e) { if (e.target.nodeName !== 'A' || !$(e.target).parents('div.' + s.menu_class).length) t.hide(); }; function clickHandler(e) { var m; if (e.target.nodeName === 'A') { m = t.find(e.target.rel); if (!m.show && !m.disabled) { if (m.onclick) m.onclick.call(m.scope || this, e, m); if (s.onClick) s.onClick(e, m); m = t; do { m.hide(); } while (m = m.parentMenu); } e.preventDefault(); return false; } }; function mouseOverHandler(e) { var x, y, o, m, el; if (e.target.nodeName === 'A') { if (t.lastMenu) t.lastMenu.hide(); if (m = t.find(e.target.rel)) { if (m.show) { el = $(e.target.parentNode); o = el.offset(); x = o.left + el.width(); y = o.top; el.addClass(m.settings.active_class); t.lastMenu = m; m.show(x, y); } } } }; function createElm(n, a, h) { n = document.createElement(n); if (a) $(n).attr(a); if (h) $(n).html(h); return n; }; function uniqueId() { return 'jquery_mc_' + idCount++; }; // Public methods $.extend(this, { createMenu : function(s) { return new DropMenu(s); }, find : function(n) { var i; for (i = 0; i < t.items.length; i++) { if (t.items[i].id === n) return t.items[i]; } return null; }, clear : function() { t.hide(); t.items = []; $('#' + t.id).remove(); t.rendered = 0; }, render : function(n) { if (!n.id) n.id = t.id = uniqueId(); else t.id = 'jquery_mc_' + n.id; if (s.onInit) s.onInit(t); }, show : function(x, y) { var pe, it, m, s = t.settings; if (t.visible) t.hide(); $(t).trigger('DropMenu:beforeshow', [t]); $().trigger('DropMenu:beforeshow', [t]); if (!t.rendered) { pe = createElm('div', {id : t.id, 'class' : s.menu_class}); $.each(t.items, function(i, v) { var ti, id, cl = '', an; if (v.constructor == DropMenu) { ti = v.settings.title; cl = ' ' + s.submenu_item_class; if (v.settings['class']) cl += ' ' + v.settings['class']; } else { ti = v.title; if (this['class']) cl = ' ' + v['class']; } if (v.disabled || v.settings && v.settings.disabled) cl += ' disabled'; // Add menu item it = createElm('div', {id : t.id + '_' + v.id, 'class' : s.menu_item_class + cl}); an = createElm('a', {rel : v.id, href : '#'}, ti); //$(an).append(createElm('span', null, ti)); $(it).append(an); $(pe).append(it); }); $(document.body).append(pe); t.rendered = 1; } $().mouseup(hideHandler); m = $('#' + t.id); m.mouseover(mouseOverHandler).show().css({left : -5000, top : -5000}); // Measure and align if (s.halign == 'right') x -= m.width(); if (s.valign == 'bottom') y -= m.height(); // Constrain if (s.constrain) { x = x < 0 ? 0 : x; y = y < 0 ? 0 : y; x = x + m.width() > $.winWidth() ? $.winWidth() - m.width() : x; y = y + m.height() > $.winHeight() ? $.winHeight() - m.height() : y; } m.css({left : x, top : y}).click(clickHandler); t.visible = 1; $(t).trigger('DropMenu:show'); $().trigger('DropMenu:show', [t]); return false; }, hide : function() { if (!t.visible) return false; $('a[@rel=' + t.id + ']').parent().removeClass('active'); $().unbind('mouseup', hideHandler); $('#' + t.id).unbind('mouseover', mouseOverHandler).hide(); $('#' + t.id).unbind('click', clickHandler); t.visible = 0; $.each(t.items, function() { if (this.hide) this.hide(); }); $(t).trigger('DropMenu:hide'); $().trigger('DropMenu:hide', [t]); return false; }, add : function(o) { o.id = o.id || uniqueId(); t.items.push(o); return o; }, addSeparator : function() { return t.add({'class' : s.separator_class, title : 'separator'}); }, addMenu : function(o) { if (!o.onClick) o.onClick = s.onClick; o = new DropMenu(o); o.parentMenu = t; return t.add(o); } }); }; jQuery.mcDropMenu = DropMenu; jQuery.fn.mcContextMenu = function(s) { this.each(function() { var m = new $.mcDropMenu(s); m.render(this); $(this).bind('contextmenu', function(e) { return m.show(e.clientX, e.clientY); }); }); }; })(jQuery); filemanager/pages/fm/js/jquery/jquery.json.js000066600000005755150472616010015321 0ustar00(function ($) { var m = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }, s = { 'array': function (x) { var a = ['['], b, f, i, l = x.length, v; for (i = 0; i < l; i += 1) { v = x[i]; f = s[typeof v]; if (f) { v = f(v); if (typeof v == 'string') { if (b) { a[a.length] = ','; } a[a.length] = v; b = true; } } } a[a.length] = ']'; return a.join(''); }, 'boolean': function (x) { return String(x); }, 'null': function (x) { return "null"; }, 'number': function (x) { return isFinite(x) ? String(x) : 'null'; }, 'object': function (x) { if (x) { if (x instanceof Array) { return s.array(x); } var a = ['{'], b, f, i, v; for (i in x) { v = x[i]; f = s[typeof v]; if (f) { v = f(v); if (typeof v == 'string') { if (b) { a[a.length] = ','; } a.push(s.string(i), ':', v); b = true; } } } a[a.length] = '}'; return a.join(''); } return 'null'; }, 'string': function (x) { if (/["\\\x00-\x1f]/.test(x)) { x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) { var c = m[b]; if (c) { return c; } c = b.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16); }); } return '"' + x + '"'; } }; $.toJSON = function(v) { var f = isNaN(v) ? s[typeof v] : s['number']; if (f) return f(v); }; $.parseJSON = function(v, safe) { if (safe === undefined) safe = $.parseJSON.safe; if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v)) return undefined; return eval('('+v+')'); }; $.parseJSON.safe = false; })(jQuery); filemanager/pages/fm/js/jquery/jquery.template.js000066600000016004150472616010016150 0ustar00/** * jQuery Templates * * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * * Written by: Stan Lemon * * Based off of the Ext.Template library, available at: * http://www.extjs.com * * This library provides basic templating functionality, allowing for macro-based * templates within jQuery. * * Basic Usage: * * var t = $.template('
        Hello ${name}, how are you ${question}? I am ${me:substr(0,10)}
        '); * * $(selector).append( t , { * name: 'Stan', * question: 'feeling', * me: 'doing quite well myself, thank you very much!' * }); * * Requires: jQuery 1.2+ * * * @todo Add callbacks to the DOM manipulation methods, so that events can be bound * to template nodes after creation. */ (function($){ /** * Create a New Template */ $.template = function(html, options) { return new $.template.instance(html, options); }; /** * Template constructor - Creates a new template instance. * * @param html The string of HTML to be used for the template. * @param options An object of configurable options. Currently * you can toggle compile as a boolean value and set a custom * template regular expression on the property regx by * specifying the key of the regx to use from the regx object. */ $.template.instance = function(html, options) { // If a custom regular expression has been set, grab it from the regx object if ( options && options['regx'] ) options.regx = this.regx[ options.regx ]; this.options = $.extend({ compile: false, regx: this.regx.standard }, options || {}); this.html = html; if (this.options.compile) { this.compile(); } this.isTemplate = true; }; /** * Regular Expression for Finding Variables * * The default pattern looks for variables in JSP style, the form of: ${variable} * There are also regular expressions available for ext-style variables and * jTemplate style variables. * * You can add your own regular expressions for variable ussage by doing. * $.extend({ $.template.re , { * myvartype: /...../g * } * * Then when creating a template do: * var t = $.template("
        ...
        ", { regx: 'myvartype' }); */ $.template.regx = $.template.instance.prototype.regx = { jsp: /\$\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, ext: /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g, jtemplates: /\{\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}\}/g }; /** * Set the standard regular expression to be used. */ $.template.regx.standard = $.template.regx.jsp; /** * Variable Helper Methods * * This is a collection of methods which can be used within the variable syntax, ie: * ${variable:substr(0,30)} Which would only print a substring, 30 characters in length * begining at the first character for the variable named "variable". * * A basic substring helper is provided as an example of how you can define helpers. * To add more helpers simply do: * $.extend( $.template.helpers , { * sampleHelper: function() { ... } * }); */ $.template.helpers = $.template.instance.prototype.helpers = { substr : function(value, start, length){ return String(value).substr(start, length); } }; /** * Template Instance Methods */ $.extend( $.template.instance.prototype, { /** * Apply Values to a Template * * This is the macro-work horse of the library, it receives an object * and the properties of that objects are assigned to the template, where * the variables in the template represent keys within the object itself. * * @param values An object of properties mapped to template variables */ apply: function(values) { if (this.options.compile) { return this.compiled(values); } else { var tpl = this; var fm = this.helpers; var fn = function(m, name, format, args) { if (format) { if (format.substr(0, 5) == "this."){ return tpl.call(format.substr(5), values[name], values); } else { if (args) { // quoted values are required for strings in compiled templates, // but for non compiled we need to strip them // quoted reversed for jsmin var re = /^\s*['"](.*)["']\s*$/; args = args.split(','); for(var i = 0, len = args.length; i < len; i++) { args[i] = args[i].replace(re, "$1"); } args = [values[name]].concat(args); } else { args = [values[name]]; } return fm[format].apply(fm, args); } } else { return values[name] !== undefined ? values[name] : ""; } }; return this.html.replace(this.options.regx, fn); } }, /** * Compile a template for speedier usage */ compile: function() { var sep = $.browser.mozilla ? "+" : ","; var fm = this.helpers; var fn = function(m, name, format, args){ if (format) { args = args ? ',' + args : ""; if (format.substr(0, 5) != "this.") { format = "fm." + format + '('; } else { format = 'this.call("'+ format.substr(5) + '", '; args = ", values"; } } else { args= ''; format = "(values['" + name + "'] == undefined ? '' : "; } return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'"; }; var body; if ($.browser.mozilla) { body = "this.compiled = function(values){ return '" + this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.options.regx, fn) + "';};"; } else { body = ["this.compiled = function(values){ return ['"]; body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.options.regx, fn)); body.push("'].join('');};"); body = body.join(''); } eval(body); return this; } }); /** * Save a reference in this local scope to the original methods which we're * going to overload. **/ var $_old = { domManip: $.fn.domManip, text: $.fn.text, html: $.fn.html }; /** * Overwrite the domManip method so that we can use things like append() by passing a * template object and macro parameters. */ $.fn.domManip = function( args, table, reverse, callback ) { if (args[0].isTemplate) { // Apply the template and it's arguments... args[0] = args[0].apply( args[1] ); // Get rid of the arguements, we don't want to pass them on delete args[1]; } // Call the original method var r = $_old.domManip.apply(this, arguments); return r; }; /** * Overwrite the html() method */ $.fn.html = function( value , o ) { if (value && value.isTemplate) var value = value.apply( o ); var r = $_old.html.apply(this, [value]); return r; }; /** * Overwrite the text() method */ $.fn.text = function( value , o ) { if (value && value.isTemplate) var value = value.apply( o ); var r = $_old.text.apply(this, [value]); return r; }; })(jQuery); filemanager/pages/fm/js/jquery/jquery.dialog.js000066600000034716150472616010015606 0ustar00/** * $Id: jquery.dialog.js 637 2009-01-12 12:59:14Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.Window = function(f, a) { var t = this; t.features = f; t.args = a; t.isIE6 = /MSIE [56]/.test(navigator.userAgent); // Register actions t.clickActions = { min : t.minimize, max : t.maximize, med : t.medimize, close : t.close }; t.mouseDownActions = { move : t.startDrag, 'resize-n' : t.startDrag, 'resize-nw' : t.startDrag, 'resize-w' : t.startDrag, 'resize-e' : t.startDrag, 'resize-s' : t.startDrag, 'resize-sw' : t.startDrag, 'resize-se' : t.startDrag }; }; $.extend($.Window.prototype, { getArgs : function() { return this.args; }, focus : function() { var t = this, id = t.id; if (!t.focused) { if (t.shim) t.shim.css('z-index', $.WindowManager.zIndex); $('#' + id).css('z-index', t.zIndex = $.WindowManager.zIndex++); $('#' + id + '_container').addClass('focus'); $('#' + id + '_top').addClass('focustop'); $('#' + id + '_middle').addClass('focusmiddle'); $('#' + id + '_bottom').addClass('focusbottom'); $($.WindowManager.windows).each(function() { if (this != t) this.blur(); }); t.focused = 1; } return this; }, blur : function() { var t = this, id = t.id; if (t.focused) { $('#' + id + '_container').removeClass('focus'); $('#' + id + '_top').removeClass('focustop'); $('#' + id + '_middle').removeClass('focusmiddle'); $('#' + id + '_bottom').removeClass('focusbottom'); t.focused = 0; } return t; }, setTitle : function(ti) { this.features.title = ti; $('#' + this.id + '_title').html(ti); return this; }, setStatus : function(st) { $('#' + this.id + '_statustext').html(st); return this; }, minimize : function() { return this; }, medimize : function() { var t = this, sp = $.scrollPos(), r; if (r = t.lastRect) { $('#' + t.id + '_max').removeClass('med').addClass('max'); t.moveTo(r.x, r.y); t.resizeTo(r.w, r.h); t.lastRect = 0; } return t; }, maximize : function() { var t = this, sp = $.scrollPos(); if (!t.lastRect) { t.lastRect = {x : t.x, y : t.y, w : t.width, h : t.height}; $('#' + t.id + '_max').removeClass('max').addClass('med'); t.moveTo(sp.x, sp.y); t.resizeTo($.winWidth(), $.winHeight(), 1); } return t; }, close : function(ac) { var t = this, f; if (ac && (f = t.features.onbeforeclose)) { if (f.call(t) === false) return; } $('#' + t.id).remove(); if ($.WindowManager.windows.length == 1) $('#windowManEventBlocker').remove(); $.WindowManager.remove(t); if (t.shim) { t.shim.remove(); t.shim = 0; } if (t.features.onclose) t.features.onclose(t); }, moveTo : function(x, y) { var t = this, el = $('#' + t.id); if (t.x != x) { el.css({left : x}); t.x = x; } if (t.y != y) { el.css({top : y}); t.y = y; } if (t.shim) t.shim.css({left : x, top : y}); return t; }, moveBy : function(dx, dy) { return this.moveTo(this.x + parseInt(dx), this.y + parseInt(dy)); }, resizeTo : function(w, h, nr) { var t = this, b = t.borders, el = $('#' + t.id), ifr = $('#' + t.id + '_content, #' + t.id + '_ifr'); w = parseInt(w); h = parseInt(h); if (!nr && t.lastRect) { $('#' + t.id + '_max').removeClass('med').addClass('max'); t.lastRect = 0; } if (t.width != w) { ifr.css({width : w - b.w}); el.css({width : w}); t.width = w; } if (t.height != h) { ifr.css({height : h - b.h}); el.css({height : h}); $('#' + t.id + '_middle').css('height', h - b.h); t.height = h; } if (t.shim) t.shim.css({width : w, height : h}); return t; }, resizeBy : function(dw, dh) { return this.resizeTo(this.width + parseInt(dw), this.height + parseInt(dh)); }, show : function() { var t = this, id = t.id, bw, bh; $('#' + id).show(); // Calculate borders bw = $('#' + id + '_middle div.left')[0].clientWidth; bw += $('#' + id + '_middle div.right')[0].clientWidth; bh = $('#' + id + '_top')[0].clientHeight; bh += $('#' + id + '_bottom')[0].clientHeight; t.borders = {w : bw, h : bh - 1}; if (t.shim) t.shim.show(); return t; }, hide : function() { var t = this; $('#' + t.id).hide(); if (t.shim) t.shim.hide(); return t; }, setContent : function(h) { $('#' + this.id + '_content').html(h); return this; }, setURL : function(u) { var t = this, id = t.id, ifr = $('#' + id + '_ifr'), b = t.borders; if (!ifr[0]) $('#' + id + '_content').html('').append($.createElm('iframe', {id : id + '_ifr', src : u, frameBorder : '0', scrolling : t.features.scrolling}).css({width : t.width - b.w, height : t.height - b.h})); else ifr.attr('src', u); return t; }, startMove : function(a, e) { var t = this, bid = t.features.theme + '_move', mb, sx = e.screenX, sy = e.screenY, dx, dy, wx, wy; $(document.body).append($.createElm('div', {id : bid, 'class' : t.features.theme + '_event_blocker'}).css('z-index', $.WindowManager.zIndex)); mb = $('#' + bid).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); wx = t.x; wy = t.y; mb.mousemove(function(e) { dx = e.screenX - sx; dy = e.screenY - sy; t.moveTo(wx + dx, wy + dy); }); mb.mouseup(function(e) { mb.remove(); }); }, startDrag : function(a, e) { var t = this, bid = t.features.theme + '_move', mb, sx = e.screenX, sy = e.screenY, dx, dy, wx, wy, w, h; $(document.body).append($.createElm('div', {id : bid, 'class' : t.features.theme + '_event_blocker'}).css('z-index', $.WindowManager.zIndex)); mb = $('#' + bid).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); wx = t.x; wy = t.y; w = t.width; h = t.height; mb.mousemove(function(e) { dx = e.screenX - sx; dy = e.screenY - sy; var x = wx + dx, y = wy + dy; switch (a) { case 'resize-n': t.moveTo(wx, y); t.resizeTo(w, h - dy); break; case 'resize-nw': t.moveTo(x, y); t.resizeTo(w - dx, h - dy); break; case 'resize-ne': t.moveTo(wx, y); t.resizeTo(w + dx, h - dy); break; case 'resize-w': t.moveTo(x, wy); t.resizeTo(w - dx, h); break; case 'resize-e': t.resizeTo(w + dx, h); break; case 'resize-s': t.resizeTo(w, h + dy); break; case 'resize-sw': t.moveTo(wx + dx, wy); t.resizeTo(w - dx, h + dy); break; case 'resize-se': t.resizeTo(w + dx, h + dy); break; case 'move': t.moveTo(wx + dx, wy + dy); break; } e.preventDefault(); return false; }); mb.mouseup(function(e) { mb.remove(); }); e.preventDefault(); return false; }, render : function() { var t = this, id = 'win_' + $.WindowManager.count++, f = t.features, mc = '', bl, v; t.features = f = $.extend({ theme : 'clearlooks2', modal : 1, type : 'window', x : -1, y : -1, width : 320, height : 240, title : ' ' }, f); // Center window if (f.x == -1) f.x = Math.round(($.winWidth() / 2) - (f.width / 2)); if (f.y == -1) f.y = Math.round(($.winHeight() / 2) - (f.height / 2)); t.id = id; if (f.modal) { bl = $('#windowManEventBlocker'); if (!bl[0]) { $(document.body).append($.createElm('div', {id : 'windowManEventBlocker', 'class' : f.theme + '_event_blocker'}).addClass(f.theme + '_visible_event_blocker')); bl = $('#windowManEventBlocker'); } bl.show().css('z-index', $.WindowManager.zIndex++).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); } if (t.isIE6 && !t.shim) { $(document.body).append(''); t.shim = $('#' + id + '_shim'); } $(document.body).appendAll( ['div', {id : id, 'class' : f.theme + ' window'}, ['div', {id : id + '_container', 'class' : 'statusbar ' + f.type}, ['div', {id : id + '_top', 'class' : 'windowtop'}, ['div', {'class' : 'left'}], ['div', {'class' : 'middle'}], ['div', {'class' : 'right'}], ['div', {id : id + '_title', 'class' : 'title'}, f.title], ['a', {id : id + '_min', href : '', 'class' : 'action min'}], ['a', {id : id + '_max', href : '', 'class' : 'action max'}], ['a', {id : id + '_close', href : '', 'class' : 'action close'}], ['a', {id : id + '_move', 'class' : 'action move', tabindex : '-1'}], ['a', {id : id + '_resize_n', 'class' : 'action resize resize-n', tabindex : '-1'}], ['a', {id : id + '_resize_nw', 'class' : 'action resize resize-nw', tabindex : '-1'}], ['a', {id : id + '_resize_ne', 'class' : 'action resize resize-ne', tabindex : '-1'}] ], ['div', {id : id + '_middle', 'class' : 'windowmiddle'}, ['div', {'class' : 'left'}], ['div', {id : id + '_content', 'class' : 'middle'}, ' '], ['div', {'class' : 'right'}], ['div', {id : id + '_bigicon', 'class' : 'bigicon'}], ['a', {id : id + '_resize_w', 'class' : 'action resize resize-w', tabindex : '-1'}], ['a', {id : id + '_resize_e', 'class' : 'action resize resize-e', tabindex : '-1'}] ], ['div', {id : id + '_bottom', 'class' : 'windowbottom' + (f.statusbar ? ' statusbarbottom' : '')}, ['div', {'class' : 'left'}], ['div', {'class' : 'middle'}], ['div', {'class' : 'right'}], ['div', {id : id + '_statustext', 'class' : 'statustext'}, ' '], ['a', {id : id + '_resize_s', 'class' : 'action resize resize-s', tabindex : '-1'}], ['a', {id : id + '_resize_sw', 'class' : 'action resize resize-sw', tabindex : '-1'}], ['a', {id : id + '_resize_se', 'class' : 'action resize resize-se', tabindex : '-1'}] ] ] ] ); if (f.bigicon) $('#' + id + '_bigicon').addClass(f.bigicon); if (f.chromeless) $('#' + id + '_container').addClass('chromeless'); if (f.resizable) $('#' + id + '_container').addClass('resizable'); if (f.statusbar) { $('#' + id + '_container').addClass('statusbar'); $('#' + id + '_bottom').addClass('statusbarbottom'); } t.show().hide().resizeTo(f.width, f.height).moveTo(f.x, f.y).show(); if (v = f.title) t.setTitle(v); if (v = f.content) t.setContent(v); if (v = f.url) t.setURL(v); function handleAction(e) { var el = $(e.target), action, f; t.focus(); if (el[0].nodeName == 'A' && el.hasClass('action')) { action = $.grep(el[0].className.split(/\s+/), function(v) {return !/^action|resize$/.test(v);}).join(' '); if (e.type == 'mousedown') f = t.mouseDownActions[action]; else { if (t.features.onaction) { t.features.onaction.call(t, action); return false; } f = t.clickActions[action]; } if (f) { f.call(t, action, e); return false; } } }; $('#' + id).click(handleAction).mousedown(handleAction); $($.WindowManager).trigger('WindowManager:open', [t]); return t; } }); $.WindowManager = { zIndex : 100010, count : 0, windows : [], i18n : { yes : 'Yes', no : 'No', ok : 'Ok' }, setup : function() { var w = window, lw, nwm, op, b; // Find root window manager while ((w = w.parent || w.opener) && w != lw) { if (w.$ && w.$.WindowManager) nwm = w.$.WindowManager; lw = w; } // Found parent window manager use that one and set the title for the dialog if (nwm && nwm != this) { $.CurrentWindowManager = $.WindowManager; b = document.location.pathname.replace(/[^\/]+$/, ''); op = nwm.open; $.WindowManager = $.extend({}, nwm, { open : function(f, a) { // Is relative URL force it absolute if (!/^https?\:|\//.test(f.url)) f.url = b + f.url; return op.call(nwm, f, a); } }); nwm.find(window).setTitle(document.title); } else { $(window).bind('resize', function() { $($.WindowManager.windows).each(function(i, w) { if (w.lastRect) w.resizeTo($.winWidth(), $.winHeight(), 1); }); }); } // Find current window $.WindowManager.currentWindow = $.WindowManager.find(window); }, find : function(tw) { var i, ifr, w; for (i = 0; i < this.windows.length; i++) { w = this.windows[i]; ifr = $('#' + w.id + '_ifr')[0]; if (ifr && ifr.contentWindow == tw) return w; } return this.defaultWin; }, open : function(f, a) { var w = new $.Window(f, a).render(); this.windows.push(w); return w.focus(); }, warn : function(msg, cb) { return this.modalBox(msg, { bigicon : 'warning' }, cb); }, error : function(msg, cb) { return this.modalBox(msg, { bigicon : 'error' }, cb); }, info : function(msg, cb) { return this.modalBox(msg, { bigicon : 'info' }, cb); }, confirm : function(msg, cb) { return this.modalBox(msg, { type : 'confirm', bigicon : 'ask', onaction : function(a) { var t = this; if (a == 'ok') { t.close(); if (cb) cb.call(t, 1); } else if (a == 'cancel' || a == 'close') { t.close(); if (cb) cb.call(t, 0); } } }, cb).setContent( '
        ' + msg +'
        ' + '' + this.i18n.yes + '' + '' + this.i18n.no + '' ); }, modalBox : function(msg, f, cb) { f = $.extend({ type : 'alert', bigicon : 'error', width : 400, height : 130, onaction : function(a) { if (a == 'ok') { this.close(); if (cb) cb.call(this, 1); } else if (a == 'close') this.close(); } }, f); return this.open(f).setContent( '
        ' + (msg || '') +'
        ' + '' + this.i18n.ok + '' ); }, remove : function(w) { var t = this, fr, z = 0, nl = []; // Find front most window $(t.windows).each(function(i, cw) { if (w == cw) return; if (cw.zIndex > z) { z = cw.zIndex; fr = cw; } nl.push(cw); }); t.windows = nl; if (fr) fr.focus(); } }; $.WindowManager.setup(); })(jQuery);filemanager/pages/fm/js/jquery/jquery.multiupload.flash.js000066600000010645150472616010017775 0ustar00/** * $Id: jquery.multiupload.gears.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function getFlashVersion() { var v; try { v = navigator.plugins['Shockwave Flash']; v = v.description; } catch (ex) { try { v = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); } catch (ex) { v = '0.0'; } } v = v.match(/\d+/g); return parseFloat(v[0] + '.' + v[1]); }; if (!$.multiUpload.initialized && getFlashVersion() >= 10) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'flash'; $.multiUpload.instances = []; $.multiUpload._fireEvent = function(na, p1, p2, p3, p4) { // Detach event from flash window.setTimeout(function() { $($.multiUpload.instances).each(function(i, v) { $(v).trigger('multiUpload:' + na, [p1, p2, p3, p4]); v.repaint(); }); }, 0); }; // Override init function $.extend($.multiUpload.prototype, { getFlash : function() { return $('#flashuploader')[0]; }, repaint : function() { var up = this, fb = $(up.settings.flash_browse_button), off = fb.offset(); up.flashContainer.css({position : 'absolute', top : off.top, left : off.left, width : fb.width(), height : fb.height(), backgr2ound : 'red'}); }, init : function() { var up = this, s = up.settings, so, fb; $.multiUpload.instances.push(up); $(up).bind('multiUpload:flashInit', function(e) { $(up).trigger('multiUpload:init'); }); $(document.body).append('
        '); so = new SWFObject("js/jquery/jquery.multiupload.flash.swf", "flashuploader", "100%", "100%", "10.0"); so.addVariable("file_filter", $.map(up.settings.filter, function(v) { return '*.' + v }).join(';')); so.addParam("wmode", "transparent"); so.write("flashUploaderContainer"); up.flashContainer = $('#flashUploaderContainer'); // Reposition flash $(function(e) { up.repaint(); }); up.repaint(); // Register event handlers $(up).bind('multiUpload:flashSelectFiles', function(e, sel) { // Add selected files to file queue $(sel).each(function(i, fo) { up.files.push(fo); }); // Trigger events $(up).trigger('multiUpload:filesSelected', [{files : sel}]); $(up).trigger('multiUpload:filesChanged'); }); $(up).bind('multiUpload:flashUploadComplete', function(e, o) { var fo; if (fo = up.getFile(o.id)) { if (!fo.status) { fo.status = 'completed'; $(up).trigger('multiUpload:fileUploaded', [{file : fo, response : o.text}]); } } $(up).trigger('multiUpload:filesChanged'); up.uploadNext(); }); $(up).bind('multiUpload:flashUploadProcess', function(e, pr) { var fo = up.getFile(pr.id); if (!fo.status) { fo.loaded = pr.loaded; $(up).trigger('multiUpload:fileUploadProgress', [{file : fo, loaded : fo.loaded, total : fo.size}]); } }); $(up).bind('multiUpload:flashIOError', function(e, o) { var fo; if (fo = up.getFile(o.id)) { if (!fo.status) { fo.status = 'failed'; $(up).trigger('multiUpload:uploadChunkError', [{file : fo, error : o.message}]); } } }); $(up).bind('multiUpload:stopUpload', function(e) { up.getFlash().cancelUpload(); }); $(up).bind('multiUpload:removeFile', function(e, fo) { up.getFlash().removeFile(fo.id); }); $(up).bind('multiUpload:clearFiles', function(e) { up.getFlash().clearFiles(); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { var pageURL = document.location.href.replace(/\/[^\/]+$/g, '/'); up.getFlash().uploadFile(fo.id, { upload_url : pageURL + up.settings.upload_url + '&path=' + escape(up.settings.path) + '&name=' + escape(fo.name), chunk_size : up.settings.chunk_size, file_field : 'file0', post_args : { name0 : fo.name } }); }); $(up).bind('multiUpload:flashUploadChunkComplete', function(e, o) { var fo = up.getFile(o.id), arg; arg = { file : fo, chunk : o.chunk, chunks : o.chunks, response : o.text }; if (!fo.status) $(up).trigger('multiUpload:chunkUploaded', [arg]); if (arg.cancel) { fo.status = 'failed'; up.getFlash().cancelUpload(); } }); } }); } })(jQuery);filemanager/pages/fm/js/jquery/jquery.multiupload.gears.js000066600000007076150472616010020005 0ustar00/** * $Id: jquery.multiupload.gears.js 616 2008-11-27 15:43:52Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { if (!$.multiUpload.initialized && window.google && google.gears) { $.multiUpload.initialized = 1; $.multiUpload.runtime = 'gears'; // Override init function $.extend($.multiUpload.prototype, { init : function() { var up = this; $(up).trigger('multiUpload:init'); $(up).bind('multiUpload:selectFiles', function(e) { var up = this, desk = google.gears.factory.create('beta.desktop'), s = {}; if (up.settings.filter[0] != '*') s.filter = $.map(up.settings.filter, function(v) {return '.' + v}); desk.openFiles(function(f) { var sf = []; if (f.length) { up._fireEvent('multiUpload:beforeFilesSelected'); $(f).each(function() { var fo = { id : up.generateID(), name : this.name, blob : this.blob, size : this.blob.length, loaded : 0 }; up.files.push(fo); sf.push(fo); }); up._fireEvent('multiUpload:filesSelected', [{files : sf}]); up._fireEvent('multiUpload:filesChanged'); } else up._fireEvent('multiUpload:filesSelectionCancelled'); }, s); }); $(up).bind('multiUpload:uploadFile', function(e, fo) { var req, up = this, chunkSize, chunk = 0, chunks, i, start, loaded = 0, curChunkSize; chunkSize = up.settings.chunk_size || 1024 * 1024; chunks = Math.ceil(fo.blob.length / chunkSize); uploadNextChunk(); function uploadNextChunk() { var url = up.settings.upload_url; if (fo.status) return; curChunkSize = Math.min(chunkSize, fo.blob.length - (chunk * chunkSize)); req = google.gears.factory.create('beta.httprequest'); req.open('POST', url + (url.indexOf('?') == -1 ? '?' : '&') + 'name=' + escape(fo.name) + '&chunk=' + chunk + '&chunks=' + chunks + '&path=' + escape(up.settings.path)); req.setRequestHeader('Content-Disposition', 'attachment; filename="' + fo.name + '"'); req.setRequestHeader('Content-Type', 'application/octet-stream'); req.setRequestHeader('Content-Range', 'bytes ' + chunk * chunkSize); req.upload.onprogress = function(pr) { fo.loaded = loaded + pr.loaded; up._fireEvent('multiUpload:fileUploadProgress', [{file : fo, loaded : fo.loaded, total : fo.size}]); }; req.onreadystatechange = function() { var ar; if (req.readyState == 4) { if (req.status == 200) { ar = {file : fo, chunk : chunk, chunks : chunks, response : req.responseText}; up._fireEvent('multiUpload:chunkUploaded', [ar]); if (ar.cancel) { fo.status = 'failed'; up._fireEvent('multiUpload:filesChanged'); up.uploadNext(); return; } loaded += curChunkSize; if (++chunk >= chunks) { fo.status = 'completed'; up._fireEvent('multiUpload:fileUploaded', [{file : fo, response : req.responseText}]); up._fireEvent('multiUpload:filesChanged'); up.uploadNext(); } else uploadNextChunk(); } else up._fireEvent('multiUpload:uploadChunkError', [{file : fo, chunk : chunk, chunks : chunks, error : 'Status: ' + req.status}]); } }; if (chunk < chunks) req.send(fo.blob.slice(chunk * chunkSize, curChunkSize)); }; }); }, _fireEvent : function(ev, ar) { $(this).trigger(ev, ar); } }); } })(jQuery);filemanager/pages/fm/js/jquery/jquery.template.ext.js000066600000001443150472616010016750 0ustar00/** * $Id: jquery.template.ext.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ $.template.regx.standard = $.template.regx.ext; $.templateFromScript = function(el, opts) { return $.template($.trim($.translate($(el).html().replace(/()/gi, ''))), opts); }; // Add template helpers $.extend($.template.helpers, { sizefix : function(v) { v = parseInt(v); if (isNaN(v) || v == -1) return ''; // MB if (v > 1048576) return Math.round(v / 1048576, 1) + " MB"; // KB if (v > 1024) return Math.round(v / 1024, 1) + " KB"; return v + " b"; }, encodeURIComponent : function(v) { return encodeURIComponent(v); } }); })(jQuery);filemanager/pages/fm/js/jquery/jquery.multiupload.flash.swf000066600000007214150472616010020156 0ustar00CWS x}8Y[וvURKbPe I h"Npwuw]Rjg1IرEYdgd2=}y+Ќ曗yw͹q==݂ܳ-B=B 9 $Ny_˥5m|y +Y- onnmJ#/^>{v%y̗Os1.E.C 7R{5>PZ263g*ʤǬB)gFi,g 黛Ɔ9h9F9{y ڮcOf )34[\a™'v b& U͇0JʱY4^6#PLdni};F~bS ws \5g#xy]`I,_e?~.bWGdcOSk&r-L2f"Wq\Rt F&1UiBn Vș#$H?6 vFYvKv~=2dnHSl],Kf̱L|T*8Ҹl+%~Bbkp-:leAߨhExꎙvEMvv%2Kf>mkcCe3vrM1{{ء5i:v&Z]] OLcݝ(k ی:vQKfa2 tp64ZWbdmWD֠.cJl\[_qm4-i>nS`ݿה.7"q>KƜ>|q&MYtZY)">( 13LT`$MU|yJZ-9jzz`n<'Ąxdo9c*sX"zcuD4>872MLZp]5۷0Jyi3,,#m֤ 2ݐSXܷ҆A#G(yT7M+&?=٩fi&o(3? ržaSO%=OcWTӏ=-/h`m`pOdR ѩ9eyjn*/3L:z^]/&榦Wdu>41*:97H%e-eyLEG͔%4`[޴3FY^Ϻ̳wTu yR6oLR*J*(>_@_KDԒC+rtn&>_]ZP}puQ.+~Ŝ|H~\1+߽f8ukSqҺ6rYXԶk8j9BI.ftHe+:Zmi,ddlT]\__Z^Vg≩RTtuifm/å$1bU3fUuVleKZMg=wLr>}9e.J2vXv \/_ZPvٲ^-%th`(qмkgj.L5i{6mGѦ@cn-WO4͛n+Ju%sd=|H֧փ+t;XֈEDZh+W*um2i=I29 Ŏ;:;2KuzDס QH (T*hTPKz A*6PJ[)=Bi).J)=J1JCTL!Bag>J_pB/__/Q2 Q &im4nP0K% sx TIT~«@(F!A!I`RN!Kp] r \ ޠU ;xp|7p4M\Z-xq6*}@{}#qǏY(~Oq QG8hC\Q_#q# ڸ]'@?ų_3+[w`&bQ  [$IaeK UU=`O2t@M_??"Wbmz0 @j i"@ZԷC AH'"AXw9$@g^g{N<-F9CHYG}u:.ś* V .Yu{J%;l9\ ۳]+*ěY0g|]+/DҳB3B_8$(X+OWw ]U5Y7x[ELt$vsqr9Rɉ_j:oz[ߥG)*>T,ъv GJJle'}D P΄֥ VF g!|ΧN!x,ޯp&'2e9-Ǐ;;IHE:LR#btXtV SHCMGck}ٲp.NkIӯ1]+c!BJ_hس6"JQqk,#ď#Yj׵{'vA ~"A57^FlI/bIDۑ":MOEԌm[Q/ GUd"k 2QV:xv/x{Qo,oAQssüWX:%$M+jz|Xa8ٌxɯz֨H~>8Y}=R=WeL#5o&y" FD[@ѻNO@(Bg=mh'z_[0.T{ɑd߬쨟Oַ!J򎔖P %qt54M))jxh//5b_5ʊ 3mf"v<݀w.#dAQ]`2Gh`!q|? 0Y9T J,GzꟄ݃Gp>rrijr9kƏAvR0'GU/p_vUO8X?Ga3>cX¿,~!-W\-Q?}L2tO1py /> F8ԌOϠZ=+y'P(>X] _^BISyQ^Ģ9#+S}FRrRqct)?秈C$)xPQh}=TC: ]qfilemanager/pages/fm/js/jquery/jquery.scrollto.js000066600000016007150472616010016201 0ustar00/** * jQuery.ScrollTo * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 9/11/2008 * * @projectDescription Easy element scrolling using jQuery. * http://flesler.blogspot.com/2007/10/jqueryscrollto.html * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows. * * @author Ariel Flesler * @version 1.4 * * @id jQuery.scrollTo * @id jQuery.fn.scrollTo * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. * The different options for target are: * - A number position (will be applied to all axes). * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes * - A jQuery/DOM element ( logically, child of the element to scroll ) * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead. * @param {Object,Function} settings Optional set of settings or the onAfter callback. * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. * @option {Number} duration The OVERALL length of the animation. * @option {String} easing The easing method for the animation. * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. * @option {Function} onAfter Function to be called after the scrolling ends. * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. * @return {jQuery} Returns the same jQuery object, for chaining. * * @desc Scroll to a fixed position * @example $('div').scrollTo( 340 ); * * @desc Scroll relatively to the actual position * @example $('div').scrollTo( '+=340px', { axis:'y' } ); * * @dec Scroll using a selector (relative to the scrolled element) * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); * * @ Scroll to a DOM element (same for jQuery object) * @example var second_child = document.getElementById('container').firstChild.nextSibling; * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ * alert('scrolled!!'); * }}); * * @desc Scroll on both axes, to different values * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); */ ;(function( $ ){ var $scrollTo = $.scrollTo = function( target, duration, settings ){ $(window).scrollTo( target, duration, settings ); }; $scrollTo.defaults = { axis:'y', duration:1 }; // Returns the element that needs to be animated to scroll the window. // Kept for backwards compatibility (specially for localScroll & serialScroll) $scrollTo.window = function( scope ){ return $(window).scrollable(); }; // Hack, hack, hack... stay away! // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) $.fn.scrollable = function(){ return this.map(function(){ // Just store it, we might need it var win = this.parentWindow || this.defaultView, // If it's a document, get its iframe or the window if it's THE document elem = this.nodeName == '#document' ? win.frameElement || win : this, // Get the corresponding document doc = elem.contentDocument || (elem.contentWindow || elem).document, isWin = elem.setInterval; return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body : isWin ? doc.documentElement : this; }); }; $.fn.scrollTo = function( target, duration, settings ){ if( typeof duration == 'object' ){ settings = duration; duration = 0; } if( typeof settings == 'function' ) settings = { onAfter:settings }; settings = $.extend( {}, $scrollTo.defaults, settings ); // Speed is still recognized for backwards compatibility duration = duration || settings.speed || settings.duration; // Make sure the settings are given right settings.queue = settings.queue && settings.axis.length > 1; if( settings.queue ) // Let's keep the overall duration duration /= 2; settings.offset = both( settings.offset ); settings.over = both( settings.over ); return this.scrollable().each(function(){ var elem = this, $elem = $(elem), targ = target, toff, attr = {}, win = $elem.is('html,body'); switch( typeof targ ){ // A number will pass the regex case 'number': case 'string': if( /^([+-]=)?\d+(px)?$/.test(targ) ){ targ = both( targ ); // We are done break; } // Relative selector, no break! targ = $(targ,this); case 'object': // DOMElement / jQuery if( targ.is || targ.style ) // Get the real position of the target toff = (targ = $(targ)).offset(); } $.each( settings.axis.split(''), function( i, axis ){ var Pos = axis == 'x' ? 'Left' : 'Top', pos = Pos.toLowerCase(), key = 'scroll' + Pos, old = elem[key], Dim = axis == 'x' ? 'Width' : 'Height', dim = Dim.toLowerCase(); if( toff ){// jQuery / DOMElement attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); // If it's a dom element, reduce the margin if( settings.margin ){ attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; } attr[key] += settings.offset[pos] || 0; if( settings.over[pos] ) // Scroll to a fraction of its width/height attr[key] += targ[dim]() * settings.over[pos]; }else attr[key] = targ[pos]; // Number or 'number' if( /^\d+$/.test(attr[key]) ) // Check the limits attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) ); // Queueing axes if( !i && settings.queue ){ // Don't waste time animating, if there's no need. if( old != attr[key] ) // Intermediate animation animate( settings.onAfterFirst ); // Don't animate this axis again in the next iteration. delete attr[key]; } }); animate( settings.onAfter ); function animate( callback ){ $elem.animate( attr, duration, settings.easing, callback && function(){ callback.call(this, target, settings); }); }; function max( Dim ){ var attr ='scroll'+Dim, doc = elem.ownerDocument; return win ? Math.max( doc.documentElement[attr], doc.body[attr] ) : elem[attr]; }; }).end(); }; function both( val ){ return typeof val == 'object' ? val : { top:val, left:val }; }; })( jQuery );filemanager/pages/fm/js/jquery/jquery.multiupload.silverlight.xap000066600000024612150472616010021407 0ustar00PKQ961*MAppManifest.xaml`I%&/m{JJt`$ؐ@iG#)*eVe]f@흼{{;N'?\fdlJɞ!?~|?"ǿ|4_"_El>h޶Gw6yȚUSi;- jzwogݙ}#yѻ޾*wet/b7Mן}AfwoW||Z}Z/bd^7E죽GGq޸/mSw^d uYI(xw#PKyU9g]~'p Upload.dll`I%&/m{JJt`$ؐ@iG#)*eVe]f@흼{{;N'?\fdlJɞ!?~|?"?_ukׯ!?7=7]~]_?M:[ltz闯E5ǿon k<5  g刺3kE9_=]6?~kƟkoD?zI_7 o{]K?#icͼ0zk(ny=:/kAvOO~GϏ=?z~Gϗ_uէƯ_5{Ư?~_Hدz֯kzoAn G5EkzkZNG o/E~ǝ_ſ[}۫_mߞu߁~V#SS;ߙI~קߐ~Z4&[ >V^gҿV?~]@535u)wk'hFxZ:k&k|Z/V߮cկ_Ͷ~7o Z:kmBͯWoUBk5ӏ_k!;֯A#Fc16 %fɯ} ~_E77`_XFok%-jkwNdm~ꎇoV{K~ש~OoTGh7o1ܻ=?Ap}p: pztڃ'}ieJLCV[o[zo6kzm5_?+ol/{?3_C'yRCv~$~7mof7qnݧ6~CFolf$~__7g~7u_K_o%_zo/G_zo'_o/O__~ oVmo _ ֿA) oVB߀<@ϩϭ_ת_1}ׂX~Z>_?IB>c$q_נא'uvPfb?{~_B\zί[>I&o%֧<[񛿑Q}xPtuL_+IG'ݮV=:zrkZ7[ZZ{_<7~=|_<7~}|_<[7~|[_<S~Ϙ_*z/1 Ўv_|  ^5KaxjЬ 7`b~C7Ə_k+{['5*~oO_ǯK~}g:msC2նnoI݁7~B>tm_ϡŨ_kt'2:ޯ:/]~?Q~.ċ/D'-oH`_y%՞~ȷ15>)-(3ׯCF7vc0_Luv_Zu~1_%rѯI?xց &KK}_נkF v>e&e:~W#~7qws }Tṿ{~ǝ_'-^{!b=_뗠kWc֎? x~~_㏧Y5aX~ f ?1-qoZ $~^翐z?fo{g#0_7L>(~_P'cɯ۠G{7-g_0o///I11ۯz ^5V:_ׯ~R/7 Υ_~_7~$xC@M X~~{ч^U_П7O(~~/&ׯ*y&&?IK߂%y߅෥Z_Ka_ aiߎ~^{Bscȁ%>P_{(19/UX)'7x]Od_>2ߨ!N~ ~ z_뗠%M›ʯa4毱kc0?-u+3 waܾsNmT!}kwD:ƟLsNC0|rkk ߈^)7я"X! d~J?g5> _EZA~5Voch7߮C׫~_mS@(ssHQt(%)d~Frȯ'`kp4cf___?x77HDZ7 h:?K@~~'>װQ ׯ2|Un1qϯ>n߆6o+vaWx@?]s1O~{w;C~ۛmb(?_n|1~7պUz.iUdd^7EloFɺlu2_uVҗIYLM6_~6y ?{w^"7[0 SWZ?Yk~ůQŊ5r#jEe- 7N~ݢ\6}4oգw<_dxQL목Zܽ*|z](ɗ-xNʬZU6j>N۩(iY4kvki_e̫u9K'y:ϋ%5u>NC߿kjZuUz/>tyq1o?h`#ѯw]\<؃#7~_k#ۺX^4hKG,W?#G?)}Rn?Xow؏;k5~qTn}$7I?p_15^kߙ7F?_ɯ7ѿޯ/o~ӿɯolI535+nF ~ #:1K~ ÷?c/O~6/|g:6H7m~=75%ZѿH-_h7A }Fbd~M7yi>_)c~_~-z[sk}Oп_@P~k17_ ௿_75&!|8Fw!k|_KKw5~7_S5ם_+>5~o5' ~-P~Z?I53C_k;xw3ҿ鯽__~_毱Oz}_0z?֯k+?kwW#㟴pxזo_?;5!S7"5kZ_9]wRKZ'轻?$ǯW_넲ԏ_}cWk}$ӿVok/&M~C# f*M~?w75$}c4_%K'O\gp)gok׮[돢~_W_}M[},kl_Ro_?607/~?ӿ{oӿ_~~_",rT~ߍ~ 诗oO_w_=uNklO?_ouE5~u ] /`|zOO {~`?A0/y~{Yޑ޿k{ Z_{=!/޽owD&=F _O5_:ޯ<(o~كկy޿{=u$f=oNw~?_22SÿCx?&~FO aw?'wOyׯq\5Dҿ ZS.=_k?߿?3~]_l?5΃scou_'RL޿7+?aޥƯk.?7?ֿ_k˅m5o'^ _kLL~k*ckBد_75?5w7xkد|ko_o;ѿ?AD/ _ίys_s;ůG~Ko=o'?kΟkVDό~?k/hLjc?o_sk|z>>ݯ[/_s_5__I^FkUɔߞqMX'?#23֝_?H_ 0_kߒ?_7S-_/ã_1_oZůK>#Fԯ~777~_~-~77/_7N ~m~㿆ߖ|oZcZMwg ZMdFwx_35_ע_㷢?kƯ__Ϡ?5AnJk"G#Ɵkg:/ѯҿu~݄&/] T~-ף~~>g7 ףO~{"'|~7#@BlsDZAEoJ Uk<9~Ssk&x~Ϳ~~u_iאѯ ?M~g췍C{E uhסQ::4__F:4_-%/ٺ̏~ M[נdk k<+JJSf9/wE>fuQ^攇Xˏj*6vym>o_uU?^cKJהO}ɼYu` &kjYR0+j_Orie~zO۪5^YݮW/W9lvn{kPω8[mrгZ7f'UYR3<_u15AV_{9fk4I5뚦gA/i]ZELgE~9x}ɗū|Q]Ig48ɈJ4/~ 2[ƚ. ưٗg(~f^Sbr:e&-&: }l~-F~&SƉ&ӿF6jU/EMF{6cfh٘_ eyA˗˳//4|Aƿ1K[B_ΛҔy8rMҧ qmNQ~ښ –dΖ5}I~Q,L B8~A1g'IVmVr77K@2VP iWY-_EӒjߎ:>n);Y}I6[zEx_3C Ȱh.~ˬ\տFBU"W3bYM-KMo]yMM_:zʖX'a<_~yKxfl3>#뼾,-'|]u-tLKi],C#" Hͭ2Ȃhį2{ǿ5nIQGr  `l+ʨokX[˾P%zeh$3Z,q3dkP_ ܦoi@kD%BUO.JvCX#~Q=PyAF̛=3H|b0qs5NE^ ")%gUC .kcM~L|'{O)G5ryqO/Wo?ІDX@џdr!MáƟ[ RaxL _C~1mV,Z@p&`[}m?k|y/2$' N:#s1>OYoD0^|8! ւ ە)Z/[$R`~G W?5V9kRWR| 6L_ˊmۇmho>^y>kfoWթR_ck߯dA% 7GW d_>5[\7_!E7"ƵN xGXF3@ PxHYv߽XQTʡe@]mF7$+~h [a̋qm)l}%>oL_lQկqE(~V#? kܿKME-fɔ~['c*,RaC-_cMF{~ߟVO_N)c ݆ZNhk~N?{Z9ƝngLMenqAko֯ǻNxv;vx%_d×o gt{I=i} ]Xb靖)*0 KZ<`*_R@|XhQ+˻ཚ:w3^<ݯk}o?}_} ~௼_K_w-~{;ZޯzoZoZokzockֿk&ɯŝ_M7_/7 ~-~jMk̿.uo[oo;o)2z%5~߀-wG&n;voq~'dK?ٲBHZ:ȶ_ kz_PEѴ@/'S7_> :Z>Ak?/}~MD4ίk_wMh>- 7- w-5Zo;N@7_okw__'ί2/*j$k)8~_wu߀~ ?Z҈o{Rb?~!J-RO7s5㯟o[{HoZDC ~_4k.;NTD,$.gZIJTV&-lX#u5Ylg;Ư;Ưpl~k6߭[65odI/O5^~O?ӿ?~y_%_c%׾]'UMﻘ.%|O_M=} Wd~PO?f_/h{k'yӲ9'߿~ kɯAkI\Ϸkfާߟ=5^ogEg;/cVa[$Y^gd3[oی=T~?_@Zq1 ȇY^5! ,ccoakPư [V'X$@~MmPƔ>5?3IMyl`'k`N⦅do;7g}VFo:l}cXD|\ %V5"_MGPߓRڿy#;L'g읷gTϏkMGϏ=?z~GCͯQj/?z~GϏ=?z~GϏ PKQ961*MAppManifest.xamlPKyU9g]~'p XUpload.dllPKv(filemanager/pages/fm/js/jquery/jquery.i18n.js000066600000002445150472616010015120 0ustar00/** * $Id: jquery.i18n.js 481 2008-10-20 15:40:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { function xmlEncode(s) { return s ? ('' + s).replace(new RegExp('[<>&"\']', 'g'), function (c, b) { switch (c) { case '&': return '&'; case '"': return '"'; case '\'': return '''; // ' is not working in MSIE case '<': return '<'; case '>': return '>'; } return c; }) : s; }; $.translate = function(s, e, va) { return s.replace(/\{#([^\}]+)\}/g, function(a, b) { var pa = b.split(/\./); if (MCManagerI18n[pa[0]]) a = MCManagerI18n[pa[0]][pa[1]]; a = a ? a : '{#' + b + '}'; if (va) { a = a.replace(/\{([^\}]+)\}/g, function(a, b) { return va[b] || a; }); } return e ? xmlEncode(a) : a; }); }; $.translateElement = function(e) { e = e || document.body; e.innerHTML = $.translate(e.innerHTML.replace(/=({#[a-z0-9_]+})/gi, '="$1"'), 1); }; document.title = $.translate(document.title.replace(/^(http|https):\/\/[a-z0-9._\-\s]+-/gi, '')); $('body > *').each(function(i, v) { if (!/(SCRIPT|BR|HR|INPUT|META|IMG|LINK|PARAM|IFRAME)/.test(v.nodeName)) $.translateElement(v); }); })(jQuery);filemanager/pages/fm/js/jquery/jquery.domutils.js000066600000002060150472616010016172 0ustar00/** * $Id: jquery.domutils.js 460 2008-10-14 16:06:43Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.extend({ createElm : function(n, a, h) { n = $(document.createElement(n)); n.attr(a).html(h); return n; }, appendElements : function(te, ne) { var i, n; if (typeof(ne) == 'string') te.appendChild(document.createTextNode(ne)); else if (ne.length) { te = te.appendChild($.createElm(ne[0], ne[1])[0]); for (i=2; i b : a < b) return -1; } catch (ex) { // Ignore } return 1; }; if (data.length) data = data.sort(typeof(data[0][by]) == 'number' ? numSort : strSort); return data; }; })(jQuery);filemanager/pages/fm/js/jquery/jquery.js000066600000154736150472616010014355 0ustar00/* * jQuery 1.2.6 - New Wave Javascript * * Copyright (c) 2008 John Resig (jquery.com) * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ * $Rev: 5685 $ */ (function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
        "]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
        ","
        "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
        ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();filemanager/pages/fm/js/jquery/jquery.dialog.status.js000066600000006157150472616010017126 0ustar00/** * $Id: jquery.dialog.status.js 552 2008-11-03 12:32:05Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { $.StatusWindow = function(f, a) { var t = this; t.isIE6 = /MSIE [56]/.test(navigator.userAgent); f = $.extend({ type : 'status', width : 400, height : 240, onaction : function(a) { if (a == 'ok') t.close(); } }, f); $.Window.call(t, f, a); }; $.extend($.StatusWindow.prototype, $.Window.prototype, { setContent : function(co) { var v, k, h = ''; if (typeof(co) != 'string') { // Build string $(co).each(function(i, v) { h += '
        ' + '
        ' + v.title + '
        ' + '
        ' + v.content + '
        ' + '
        '; }); } $('#' + this.id + '_statuscont').html(h || co); return this; }, render : function() { var t = this, f, v; $.Window.prototype.render.call(t); $.Window.prototype.setContent.call(t, '
        ' + '' + $.WindowManager.i18n.ok + '' ); f = t.features; if (v = f.content) t.setContent(v); return t; } }); if (!$.CurrentWindowManager) { $.extend($.WindowManager, { status : function(f, cb) { var t = this, w; f = $.extend({ onaction : function(a) { if (a == 'ok') { w.close(); if (cb) cb.call(t, 1); } else if (a == 'close') w.close(); } }, f); w = new $.StatusWindow(f).render(); t.windows.push(w); return w.focus(); }, showProgress : function(f) { var t = this, bl, id = 'progressWindow'; t.hideProgress(); t.progress = 1; f = $.extend({ theme : 'clearlooks2', x : -1, y : -1 }, f); bl = $('#windowManProgressEventBlocker'); if (!bl[0]) { $(document.body).append($.createElm('div', {id : 'windowManProgressEventBlocker', 'class' : f.theme + '_event_blocker'}).addClass(f.theme + '_visible_event_blocker')); bl = $('#windowManProgressEventBlocker'); } bl.show().css('z-index', t.zIndex++).css({width : $.winWidth(), height : $.winHeight(), position : t.isIE6 ? 'absolute' : 'fixed'}); $(document.body).appendAll( ['div', {id : id, 'class' : f.theme + '_progress'}, ['div', {id : id + '_msg', 'class' : 'message'}] ] ); $('#' + id + '_msg').html(f.message); $('#' + id).css({left : -1000, top : -1000}).show(); // Center window if (f.x == -1) f.x = Math.round(($.winWidth() / 2) - ($('#' + id).width() / 2)); if (f.y == -1) f.y = Math.round(($.winHeight() / 2) - ($('#' + id).height() / 2)); $('#' + id).css({left : f.x, top : f.y}); $(t).bind('WindowManager:open', function() {t.hideProgress();}); }, hideProgress : function() { var t = this; if (t.progress) { $('#progressWindow').remove(); $('#windowManProgressEventBlocker').hide(); $(t).unbind('WindowManager:open', t.hideProgress); t.progress = 0; } } }); } })(jQuery);filemanager/pages/fm/js/jquery/jquery.multiupload.flash.expressinstall.swf000066600000001405150472616010023231 0ustar00CWSAxTO@uw-ע!1J 5 Y@l;@6ܳr⸉!F7vqB(3)Ka0.1`ziE9&/ h 1ms-1K;yeJ& J x7BP>h-3ˡG=1''7 {aI߱YO]uJsGюB'IE"x].楰:1Tq*;hR'-+HЪ ʚ\E&W%pRNi 24l79IW|6'm&j}qb3VZMQzvڂ̯$бmK"{>*<filemanager/pages/fm/js/createdir.js000066600000005075150472616010013450 0ustar00(function($){ window.CreateDirDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args, cleanNames; args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); // Add templates RPC.exec('fm.getConfig', {path : args.path}, function(data) { var config = data.result, templates = [], tpl; if (!RPC.handleError({message : 'Get config error', visual_path : t.visualPath, response : data})) { cleanNames = config['filesystem.clean_names'] == "true"; $(config['filesystem.directory_templates'].split(/,/)).each(function(i, v) { if (v) { v = $.trim(v).split('='); templates.push({name : /([^\/]+)$/.exec(v[0])[0], value : v[1] || v[0]}); } }); if (config['filesystem.force_directory_template'] == "true") { $('#template').html(''); if (templates.length == 1) $('#templaterow').hide(); } if (templates.length == 0) $('#templaterow').hide(); tpl = $.templateFromScript('#template_template'); $(templates).each(function(i, v) { $('#template').append(tpl, v); }); $('#content').show(); $('#createin').html(args.visual_path); $('form').submit(function() { var tpl = $('#template').val(), name = $('#dirname').val(); if (cleanNames) name = $.cleanName(name); if (!t.isDemo()) { RPC.exec('fm.createDirs', {path : args.path, name0 : name, template0 : tpl}, function(data) { var res = RPC.toArray(data.result), s = t.currentWin.getArgs(); if (!RPC.handleError({message : '{#error.createdir_failed}', visual_path : args.visual_path, response : data})) { // Insert file if (s.oncreate) { RPC.insertFile({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, path : res[0].file, progress_message : $.translate("{#message.insert}"), insert_filter : s.insert_filter, oninsert : function(o) { s.oncreate(o); t.currentWin.close(); } }); } } }); } return false; }); $('#cancel').click(function() {t.currentWin.close();}); } }); }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function() { CreateDirDialog.init(); }); })(jQuery); filemanager/pages/fm/js/utils/swfobject.js000066600000015340150472616010014630 0ustar00/** * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ * * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * */ if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;filemanager/pages/fm/js/utils/basemanager.js000066600000002060150472616010015102 0ustar00/** * $Id: basemanager.js 453 2008-10-14 12:24:41Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($) { window.BaseManager = { currentWin : $.WindowManager.find(window), path : '{default}', visualPath : '', files : [], selectedFiles : [], focusedFile : null, demoMode : false, disabled : {}, specialFolders : [], getFile : function(id) { var o; $(this.files).each(function() { if (this.id == id) o = this; }); return o; }, setDisabled : function(v, st) { this.disabled[v] = st; if (st) $('#' + v).addClass('disabled').addClass('deactivated'); else $('#' + v).removeClass('disabled').removeClass('deactivated'); }, isDisabled : function(v) { return this.disabled[v] ? this.disabled[v] : 0; }, addSpecialFolder : function(o) { this.specialFolders.push(o); }, isDemo : function() { if (this.demoMode) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; })(jQuery); filemanager/pages/fm/js/utils/fixpng.js000066600000002403150472616010014131 0ustar00var PNG = { isOldIE : navigator.userAgent.indexOf('MSIE 5') > 0 || navigator.userAgent.indexOf('MSIE 6') > 0, transparentImg : 'img/transparent.gif', transparentBGImg : '../img/transparent.gif', fix : function(e) { var rs, cs, b, o; // Remove behavior to prevent memory leaks e.runtimeStyle.behavior = "none"; // Check browser version if (!this.isOldIE) return; // Use old PNG src if (e.png_src) e.src = e.png_src; // Is PNG image if (e.src && e.src.toLowerCase().indexOf('.png') > 0) { e.png_src = e.src; e.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + e.src + "', sizingMethod='scale')"; e.src = this.transparentImg; } cs = e.currentStyle; b = cs.backgroundImage; // Has PNG background if (b && b.toLowerCase().indexOf('png') > 0) { rs = e.runtimeStyle; b = b.replace(/url\(\"([^"]+)\"\)/g, "$1"); o = rs["background-position"]; if (!cs.hasLayout) rs.display = 'inline-block'; rs.backgroundImage = 'url(\'' + this.transparentBGImg + '\')'; rs.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + b + "', sizingMethod='crop')"; rs["background-position"] = o; } // Remove referenced to prevent memory leaks rs = cs = b = o = e = null; } }; filemanager/pages/fm/js/utils/domain.js000066600000000727150472616010014114 0ustar00/** * $Id: domain.js 505 2008-10-23 12:34:12Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function(){ try { var li = document.location.search.replace(/\?/, '').split('&'), query = {}, i; for (i = 0; i < li.length; i++) { it = li[i].split('='); query[unescape(it[0])] = unescape(it[1]); } if (query.domain) document.domain = query.domain; } catch (ex) { // Ignore } })(); filemanager/pages/fm/js/utils/tinymce.js000066600000002033150472616010014305 0ustar00/** * $Id: tinymce.js 643 2009-01-21 13:03:53Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ var w, ed, wm, args = {}; window.focus(); // try { w = opener || parent; // Check mcFileManager if (w.mcFileManager) args = w.mcFileManager.windowArgs; // Check TinyMCE if (w.tinyMCE && (ed = w.tinyMCE.activeEditor)) { if (ed && (wm = ed.windowManager)) { if (!args && wm.params) args = wm.params; if (wm.setTitle) wm.setTitle(window, document.title); } } /* } catch (ex) { }*/ if (!$.CurrentWindowManager) { // Add default window and add some methods to it $.WindowManager.defaultWin = { getArgs : function() { return args; }, close : function() { // Restore selection but only when the window is opened in an iframe if (ed && wm.bookmark && top != window) ed.selection.moveToBookmark(wm.bookmark); if (wm) wm.close(window); else window.close(); } }; } })(jQuery); filemanager/pages/fm/js/utils/rpc.js000066600000007235150472616010013432 0ustar00/** * $Id: rpc.js 649 2009-01-21 14:56:49Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function($){ window.RPC = { pageBaseURL : document.location.href.replace(/[^\/]+$/, ''), init : function() { $().ajaxError(function(e, req, se) { if (req.status) $.WindowManager.status({title : "The server response wasn't JSON format", content : req.responseText}); }); }, toArray : function(res) { var fl = []; if (res && res.data && res.columns) { $(res.data).each(function(i) { var o = {index : i}; $(this).each(function(i, v) { o[res.columns[i]] = v; }); fl.push(o); }); } return fl; }, exec : function(m, ar, cb) { // Make RPC call $.post(RPC.pageBaseURL + '../../rpc/index.php', { json_data : $.toJSON({ "method" : m, "params" :[ar], "id" : "c0" }) }, cb, "json" ); }, handleError : function(args) { var t = this, errors, res = args.response.result, err = args.response.error; if (err) { if (err.level == 'AUTH') { if (res.login_url.indexOf('return_url') != -1) document.location = res.login_url; else if (res.login_url.indexOf('://') == -1) document.location = "../../" + res.login_url + "?return_url=" + escape(document.location); else document.location = res.login_url + "?return_url=" + escape(document.location); return true; } $.WindowManager.info($.translate(err.errstr)); return true; } else { errors = []; $(this.toArray(res)).each(function(i, r) { var root; if (r.status && r.status.toLowerCase() != 'ok') { root = args.visual_path || '/'; root = root.replace(/^\/([^\/]+)\/.*$/, '$1'); if (r.fromfile != undefined) { r.fromfile = r.fromfile.replace(/\{[0-9]+\}/, root); r.tofile = r.tofile.replace(/\{[0-9]+\}/, root); errors.push({title : r.fromfile + " -> " + r.tofile, content : $.translate(r.message)}); } if (r.file != undefined) { r.file = r.file.replace(/\{[0-9]+\}/, root); r.file = r.file.replace(/\/+/, '/'); errors.push({title : r.file, content : $.translate(r.message)}); } } }); if (errors.length) { $.WindowManager.status({title : $.translate(args.message), content : errors}); return true; } } }, insertFiles : function(s) { var t = this, args = {}; $(s.paths).each(function(i, v) { args['path' + i] = v; }); if (s.progress_message) $.WindowManager.showProgress({message : s.progress_message}); RPC.exec('fm.insertFiles', args, function (data) { var o = {files : []}; $.WindowManager.hideProgress(); $(RPC.toArray(data.result)).each(function(i, v) { var u = v.url; if (s.relative_urls) u = $.parseURI(s.document_base_url || s.default_base_url).toRelative(u); else if (s.document_base_url || s.no_host) u = $.parseURI(s.document_base_url).toAbsolute($.parseURI(u).getURI(1), s.no_host); v = { name : v.name, path : v.path, url : u, size : v.size, type : v.type, created : v.created, modified : v.modified, attribs : v.attribs, custom : $.extend({}, v.custom) }; o.files.push(v); }); if (s.oninsert) { if (s.insert_filter) { $(o.files).each(function(i, f) { s.insert_filter(f); }); } s.oninsert(o); } }); }, insertFile : function(s) { var ins = s.oninsert; s.paths = [s.path]; s.oninsert = function(o) { o.file = o.files[0]; ins.call(this, o); }; this.insertFiles(s); } }; RPC.init(); })(jQuery); filemanager/pages/fm/js/utils/gears_init.js000066600000006452150472616010014772 0ustar00// Copyright 2007, Google Inc. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Sets up google.gears.*, which is *the only* supported way to access Gears. // // Circumvent this file at your own risk! // // In the future, Gears may automatically define google.gears.* without this // file. Gears may use these objects to transparently fix bugs and compatibility // issues. Applications that use the code below will continue to work seamlessly // when that happens. (function() { // We are already defined. Hooray! if (window.google && google.gears) { return; } var factory = null; // Firefox if (typeof GearsFactory != 'undefined') { factory = new GearsFactory(); } else { // IE try { factory = new ActiveXObject('Gears.Factory'); // privateSetGlobalObject is only required and supported on WinCE. if (factory.getBuildInfo().indexOf('ie_mobile') != -1) { factory.privateSetGlobalObject(this); } } catch (e) { // Safari if ((typeof navigator.mimeTypes != 'undefined') && navigator.mimeTypes["application/x-googlegears"]) { factory = document.createElement("object"); factory.style.display = "none"; factory.width = 0; factory.height = 0; factory.type = "application/x-googlegears"; document.documentElement.appendChild(factory); } } } // *Do not* define any objects if Gears is not installed. This mimics the // behavior of Gears defining the objects in the future. if (!factory) { return; } // Now set up the objects, being careful not to overwrite anything. // // Note: In Internet Explorer for Windows Mobile, you can't add properties to // the window object. However, global objects are automatically added as // properties of the window object in all browsers. if (!window.google) { google = {}; } if (!google.gears) { google.gears = {factory: factory}; } })(); filemanager/pages/fm/js/createdoc.js000066600000006074150472616010013437 0ustar00(function($){ window.CreateDocDialog = { currentWin : $.WindowManager.find(window), fields : [], init : function() { var t = this, args, cleanNames; args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); $('#content').show(); $('#createin').html(args.visual_path); RPC.exec('fm.getConfig', {path : args.path}, function(data) { var config = data.result, templates = [], tpl; cleanNames = config['filesystem.clean_names'] == "true"; $(config['filesystem.file_templates'].split(/[,;]/)).each(function(i, v) { v = $.trim(v).split('='); templates.push({name : /([^\/]+)$/.exec(v[0])[0], value : v[1] || v[0]}); }); $(config['createdoc.fields'].split(/[,;]/)).each(function(i, v) { v = $.trim(v).split('='); t.fields.push({title : /([^\/]+)$/.exec(v[0])[0], name : v[1] || v[0]}); }); tpl = $.templateFromScript('#template_template'); $(templates).each(function(i, v) { $('#template').append(tpl, v); }); tpl = $.templateFromScript('#field_template'); $(t.fields).each(function(i, v) { $('#docnamerow').after(tpl, v); }); cleanNames = config['filesystem.clean_names'] == "true"; $('form').submit(function() { var rpcArgs; rpcArgs = { frompath0 : $('#template').val(), topath0 : args.path, toname0 : cleanNames ? $.cleanName($('#docname').val()) : $('#docname').val() }; rpcArgs.fields = {}; $(t.fields).each(function(i, v) { rpcArgs.fields[v.name] = $('#' + v.name).val(); }); if (!t.isDemo()) { RPC.exec('fm.createDocs', rpcArgs, function(data) { var res = RPC.toArray(data.result), s = t.currentWin.getArgs(); if (!RPC.handleError({message : '{#error.createdoc_failed}', visual_path : args.visual_path, response : data})) { // Insert file if (s.oncreate) { RPC.insertFile({ relative_urls : s.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : s.remove_script_host || s.no_host, path : res[0].tofile, progress_message : $.translate("{#message.insert}"), insert_filter : s.insert_filter, oninsert : function(o) { s.oncreate(o); t.currentWin.close(); } }); } } }); } return false; }); $('#showpreview').click(function() { if ($('#template').val()) { $.WindowManager.open({ url : '../../stream/index.php?cmd=fm.streamFile&path=' + escape($('#template').val()), width : 750, height : 450, title : $.translate('{#createdoc.preview_title}', 1, {file : /([^\/]+)$/.exec($('#template').val())[0]}) }).maximize(); } }); $('#cancel').click(function() {t.currentWin.close();}); }); }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function() { CreateDocDialog.init(); }); })(jQuery); filemanager/pages/fm/js/edit.js000066600000004151150472616010012425 0ustar00(function($){ window.EditDialog = { currentWin : $.WindowManager.find(window), init : function() { var t = this, args; args = $.extend({ path : '{default}', visual_path : '/' }, t.currentWin.getArgs()); $('#filepath').html($.translate('{#edit.file_path}') + " " + args.visual_path); $.WindowManager.showProgress({message : $.translate("{#edit.loading_wait}")}); RPC.exec('fm.loadContent', {path : args.path}, function(data) { $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.loadcontent_failed}', visual_path : args.visual_path, response : data})) $('#textcontent').val(data.result.content); }); $('form').submit(function() { if (!t.isDemo()) { $.WindowManager.showProgress({message : $.translate("{#edit.saving_wait}")}); RPC.exec('fm.saveContent', {path : args.path, content : $('#textcontent').val()}, function(data) { $.WindowManager.hideProgress(); if (!RPC.handleError({message : '{#error.savecontent_failed}', visual_path : args.visual_path, response : data})) { // Insert file if (args.onsave) { RPC.insertFile({ relative_urls : args.relative_urls, document_base_url : s.document_base_url, default_base_url : s.default_base_url, no_host : args.remove_script_host || args.no_host, path : args.path, progress_message : $.translate("{#message.insert}"), insert_filter : args.insert_filter, oninsert : function(o) { args.onsave(o); t.currentWin.close(); } }); } } }); } return false; }); $('#cancel').click(function() {t.currentWin.close();}); t.resizeView(); $(window).bind('resize', function(e) { t.resizeView(); }); }, resizeView : function() { $('#textcontent').css({'width' : $.winWidth() - 50, 'height' : $.winHeight() - 150}); }, isDemo : function() { if (this.currentWin.getArgs().is_demo) { $.WindowManager.info($.translate('{#error.demo}')); return true; } } }; $(function(e) { EditDialog.init(); }); })(jQuery); filemanager/pages/fm/createzip.html000066600000004527150472616010013411 0ustar00 {#createzip.title}

        {#createzip.title}

        {#createzip.description}

        {#createzip.path}

        filemanager/pages/fm/index.html000066600000023011150472616010012517 0ustar00 {#common.title}




        filemanager/pages/fm/edit.html000066600000002504150472616010012341 0ustar00 {#edit.title}

        {#edit.title}

        {#edit.description}

        filemanager/pages/fm/img/preview.gif000066600000000422150472616010013447 0ustar00GIF89aB2"^2=ݕ=b҂nJmBr6McقښJvZbhoZZRzB2owgO2!,#}h9MR̩3[7 ϔ ( ؘ< HbCT& 0v: V@88D )z<  _l- %lz " >>3*l!;filemanager/pages/fm/img/submit-delete.png000066600000004204150472616010014552 0ustar00PNG  IHDR^y|CgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxY͎53UVQ"%E9\sC @H % 8<ܹ 7)JlLWU=;:w].W}Uk!jVU4s]NNNɓ=|GGGgΜ9|qCx2HpfR DgϞ-q+Wlmm(m}/gY *9]5ҏ6>&u/:z;kcy<qι_|/(5` T ESˊr[hv`rJo|ɧ;5QG-RZ֭kG[@Ί3䫈NPZjjPBʭl4K0y`g,SUHvKna*C KKor?OOCDA\Zy  BxƈEUBT2"Iz@\K/{/Bjs`k.G.{)]1fHz벵2.hAOܑAڮZ50nSh}W*ĉUZWx?3ûjZmu'[0#?cdsnu Fr$'(ŵ.#D1Nr9%<*X^'꒑rк3^:-ksl؛䄸(@$}Fh#hcOY۹ʋ=wuq75g0HHԕ* Y-Ii.i]RV`RY`z6EU {B%:d4ZdqE"/Fa;a*q \mS,ߡe MsE7ܹ\*q##C^e.G`[B 9dr mί#`@@,q@+ vD,!^Lhm5SƂU<֘W^LsʓtڰM3`A4  Y'l =q\U>OK;dn?y1MP0S4.ӪA[}vLa@=2;g//H\y'@XVy9(p8:u@PHC" =LX$,'gLd&s\=#a-euspuIѯ("HrX0S30IKIږ0gN]}:TuV-_Oo:0wZHZ4grɋ^Ϻ8`ZVqy-ʕMmFq<'N9n#ESLUq ĥNwH5k2|GAwQ6@dlLqdˠ[lƩ"!ρK㤞}<6)i,,N`M (T*t!S"j~t6f4Ndx;wwnAs4kמ?i_~%J9?zŋ޽|/_*[ze +ؾ4zVL#A'De1ug6IENDB`filemanager/pages/fm/img/folder.png000066600000001340150472616010013260 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<rIDATxT=oA߽;' A !D(@P?CZjA!IA D%ľ/{wyw<̮Z} C0{IQsbi 6V>O{*>nz@1M,PuΜ*%[;@q!y A+wDwpm3(Eݟ_]9 ( LHzCvM\fn\ų/ɪMezũU%S: P[;$YF%:NW%6jG cW}cZQ@O26^Zw @}hƏ l @ ?׀+UYK)An| X7hA60i TGElx3:%0}&iˆ{*A#7T8?#+Q\vF%&cbx &&.c 1?q\E[~q"}ϫⳟr.vӠh DxFnpF+o|g{_NecP,:3rK o׫߽<[\kzı"B 2ݶ؁+:lynY<삣}s&; +҃IyI*19yx@FrjEG̅}Ifz|~T7),+=G6=HnÂ4Rsp;h#<\*Iq[E1ao;n<]dSAfì sL'lʹkIMc_C81!Bb,F?-x׎x4qӌ}T2(@ IQAd%Ga)aS`Rp臜B3 be9'f<F,) $jK]kEH3ggA}ȿoLj4c)pP 0u9ۀL<|8.'#m& ֵ/:p}7[5׊0 kf\˹}- CH-"kqp'[zpsH~;v ߠQƄEp:+(-נ'~ ޤ:yMfx}D%e^ I1!/:)&P!1}RD.З:jbC)©'Fbx)*jqY5#OKьOH&i Aɀ4( F9%>r+Bc"BUO&"aZ~WQPdEEZ,k [zT9.) )t#D!R`ť,W>QXj\PU@F}ej`Ǫ VE8(iXQ.qoRXPe Z]ro˹TZ Xlk-BYoe\{ o,^+)%-*:S)FWktڒ\)ڣ/3UfZ^nZW[1JN///oulAjl$ѯmQ .%F]/#ZiA) {;n 6W$ՖTBoyssHheL0jZ%ծw%նi3Beǎ6إ';IENDB`filemanager/pages/fm/img/insertfile.gif000066600000000652150472616010014137 0ustar00GIF89ad766 >> E: D9+ d I*\;filemanager/pages/fm/img/sortdesc.gif000066600000000260150472616010013614 0ustar00GIF89a{{{|||!,-`&dihlFQL2&R "LtJ5;filemanager/pages/fm/img/x.gif000066600000000061150472616010012234 0ustar00GIF89a!,T;filemanager/pages/fm/img/im-topleft.gif000066600000001013150472616010014043 0ustar00GIF89a!,adhC0D 2rHx8;<;Es49*RSf]&efm{uu=W~}X\^bfjnrvz´ƹǻɽ˿ Hp(S8!8 ғ"@1LcCAF9dEQfTKF Yj)˃6avN}RhQ#&EZRiS'FRjU+fڒ+M]q5زcD۵o:hݥw杺j߭,0]vU1_~!,×g^qC;filemanager/pages/fm/img/folder-middle-bg.png000066600000000360150472616010015103 0ustar00PNG  IHDRR5+}gAMA7tEXtSoftwareAdobe ImageReadyqe<PLTE&߭aIDATx 0c`I][OZjVZ<IENDB`filemanager/pages/fm/img/clearlooks2/button.gif000066600000000430150472616010015520 0ustar00GIF89aPccc!,PPC8;dihjLm,tJxpHDH1ɜ-P@ZجvvoްxL΂贚z^6|>~vz"w7ħ/! ;filemanager/pages/fm/img/clearlooks2/alert_info.gif000066600000001623150472616010016334 0ustar00GIF89a *T xg(Z[3ʜ[ūu=ѻnKc+؈,Meх+9CRڃL5\D~zȼ3~ %zn)E"<jT,-E΂-wIܕ@T8»aʡ_Ȯ}I:TµІ2aû{_}a݊#?׳^]ݏ1ƘPőU{79P|y7!,  Q Q _J]#i#]J_Kai~aK #LG# HY̯H œɽOO V ?S SRi~8 * mAm R85|,eп$Fhp #A}?` b=Pis$ `AQmph):ANQ͈T@ P-NU>E2`^ X5rgowxd> WqC:(SMu"C@k,U&aIB8]1!xh $q$mZ\e8>aGXXKT$AO>DŽew#X@F ys=@…&Ƃܽr É}Wx-P\"FčI;filemanager/pages/fm/img/clearlooks2/statusbar_right.gif000066600000000166150472616010017420 0ustar00GIF89a=:8ȿ!,;8"I} ͻHzY*ںL1-' Ia`l:tJ&;filemanager/pages/fm/img/clearlooks2/bottom_middle.gif000066600000000371150472616010017033 0ustar00GIF89aù=:8,Ҕڋ޼H扦ʶ L ĢL*̦ JԪjܮ N '(8HXhx)9IYiy *:JZjz 0K[k{ ,N^n~^;filemanager/pages/fm/img/clearlooks2/top_right.gif000066600000001161150472616010016206 0ustar00GIF89a $%'%+Ҽкβǭ·̴ɳۂu}~DZƴɳ鳧>;7 !F, ΀EF%E#$$#DF0C 22&E"==1E ..'EAA(99<>::=> 77B>--*669"9  ! CFsBjA R>P I*AAsr^@ `O> ;filemanager/pages/fm/img/clearlooks2/bottom_right.gif000066600000000105150472616010016705 0ustar00GIF89aù=:8!, 8*Î9 ;filemanager/pages/fm/img/clearlooks2/top_middle.gif000066600000007242150472616010016335 0ustar00GIF89a.$%'êu}~鳧!(,.pH,Ȥrl:ШtJZجvzxL.zn|N~& H*\ȰÇ#JHŃ2jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳ@ JѣH*]ʴӧPJJQ Xjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(%Thfv ($h(,0(4h8<@)DiH&L6PF)$TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐¤Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6~ Vkfv+k覫+k,l' 7G,Wlgw ,$l(|,0,4l8<@-DmH'L7PG-TWmXg\w`-dmX{lp-tmx|߀.n'7G.Wngw砇.褗nꬷ.n/o'7G/Wogw/o= 觯/o HL:'H Z̠7z GH V(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` HhL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz ('ɁRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:vy @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNW*@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫZ׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKMv pKMr:ЍtKZͮvz xKMz|K]~LN;'L [ΰ7{ GL(NW0gL ȱw@L"HN&;PL*[Xβ.{`L2hN6pL:9xγ>πMBЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMR#ָεw^MbNf;ЎMj[ζn{MrNvMη~NO;'N[ϸ7{ GN(OW0Gn8Ϲw@ЇNHOҗ;PԧN[XϺַ{`NhOp @xϻOO;񐏼'O[ϼ7{GOқOWֻfOϽwOO;ЏO[Ͼ{OOOϿ8Xx ؀8Xx؁ "8$X&x(*,؂. 284X6x8:<؃>@B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈8Xx؉8Xx؊8Xx؋8XxȘʸ،8Xxؘڸ؍ȍ0Xx蘎긎؎8Xx؏9Yy ِ9Yyّ "9$Y&y(*,ْ.0294Y6y85<ٓ>@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖnpr9tYvyx|ٗ~9Yy٘9Yyٙ9Yyٚ9Yy9ٛ9Yyșʹٜ9Yyؙڹٝ9Yy虞깞ٞ9Yyٟ:Zz ڠʠ 0Zzڡ ":$Z&z(*,ڢ.02:4Z6z8:<ڣ>@B:DZFzHJLڤN@ R:TZVzXZ\ڥ^`b:dZfzhjlڦnpr:tZvzxz|ڧ~:ZzڨA;filemanager/pages/fm/img/clearlooks2/statusbar_resize.gif000066600000000220150472616010017573 0ustar00GIF89a=:8ȿ!,Uh"I} Z ɅmB(xnGER-)LSEy_+$c"z^|;filemanager/pages/fm/img/clearlooks2/alert_warn.gif000066600000001462150472616010016351 0ustar00GIF89a wvnn \\ܣ<<66CCJJ888CCdd--QQ33yyWWiivvkj<<llbb$$uuEE׎ڴMLpp++$$eeKKRRÌͳ==AAdd::))::JJjjWWPP((;;ħɣп%%%ƪ00ccIIϺ̱֘~ȟ^]עUU,,ڌssyy||٭QPNNđƘBB__??mm 㺺߀bb!, o2u20v7$r1U{))F1+55=;p!}%Y!8d>x`~~ M\j_}]hE(M2x&sBW( '~7 ?Wf.cKRs&(#>88܅Dpj"@: )Fn$ 0&saxS-*B"-Ȅ }l9hǬ[8q ! 0HhACzfCˀ.a˻xtfbŃ|򗶱 xXB B(CӨH倠6v A;!,rMܰ !üЛPf@(ν@h $ӧg@;filemanager/pages/fm/img/clearlooks2/top_middle_fg.gif000066600000000070150472616010017001 0ustar00GIF89a!,ڋ;filemanager/pages/fm/img/clearlooks2/statusbar_middle.gif000066600000000166150472616010017541 0ustar00GIF89a-=:8ȿ!,-;80I8k`(dihlp,tmx|G(Ȥr 8ШtJ&;filemanager/pages/fm/img/clearlooks2/transparent.gif000066600000000070150472616010016546 0ustar00GIF89a!,ڋ;filemanager/pages/fm/img/clearlooks2/top_chromeless_right.gif000066600000000105150472616010020427 0ustar00GIF89aù=:8!, HC# ( ;filemanager/pages/fm/img/clearlooks2/top_left.gif000066600000001164150472616010016026 0ustar00GIF89a $%'%+EKQҼкβǭ·̴ɳۂu}~DZƴɳ鳧>;7 !G, рGFFF&F$%%G$ED1F'33F#F2>>F F(//)BB?=::?>;; ?C88 ?+..?:77SѢ`  6(#@.dEDhب md@25RK'U f8iH'<@h@;filemanager/pages/fm/img/clearlooks2/top_chromeless_middle.gif000066600000000371150472616010020555 0ustar00GIF89aù=:8,Ҍڋ޼H扦ʶ L gL*̦ JԪjܮ N ('@Xhx)9IYiy *:JZjz +;K[k{ ,N^n~~X;filemanager/pages/fm/img/clearlooks2/middle_left.gif000066600000000073150472616010016460 0ustar00GIF89a!, T똌ڇ ;filemanager/pages/fm/img/clearlooks2/buttons.gif000066600000002253150472616010015710 0ustar00GIF89at0n{Q[c787k|`r~WdpZiu^n|\kyy{x!,t0Fdi&l;nr-bA|c#B,< Ak6LTL9:z:9D;{>9u|ͻ߿u}Ả?5سk^}{ޱw߾u?~˟?*&{P5 6蠃 >@ '>HaJ] Thpb*B/17X\60DbHNUF7ALdP"YeS2 ې[F))iPyfd)fn&`&w U|矀g~G(,ꨟP 餔Vj^馒f駔z *Q)`ꩨ*R 묧J[+XfkU T*`&.6 JK-k\n+W޺njعƞXnټλY^oڿ Zy\[fE-'1ʕMpƲ'2v!{{%ww) (s|57\ l2+ b!^hv F@$T#;5,v>v5xyƪLMep')q7)fy ~>*yz(/y 0~>j(Jz{+Ȯ>k뮿 {F{l/{j;filemanager/pages/fm/img/clearlooks2/top_chromeless_left.gif000066600000000105150472616010020244 0ustar00GIF89a=:8!, H1NAH( ;filemanager/pages/fm/img/clearlooks2/bottom_left.gif000066600000000105150472616010016522 0ustar00GIF89a=:8!, H!,A ;filemanager/pages/fm/img/clearlooks2/statusbar_left.gif000066600000000105150472616010017226 0ustar00GIF89a=:8!,y{3Ree;filemanager/pages/fm/img/clearlooks2/alert_error.gif000066600000001662150472616010016535 0ustar00GIF89a SSEEGG9/.* ʌ21 K; RR SFHHII~z85–97zuoeTS IIFFoltl@0gfGGvrLLXWGG,,!D5rnNMTSYWkf!!21EE3'GGCCONII32ѹ^\WVLLPPEDdc!GGEE үԈURQP_WA@%%YW_]ZW|u~xYWI7M;mjLAcasm?>NM"!c^ONKK!, E e@>=>@e ELwTRN''NRTeL1SmHmS- 1D3r-6b6)r3E mO 3H,,{AZ+r&kr+K2X"'0#t#x)"Dȏ7p…6%nJQF(H`P uHf4Bʛ*$82H3Jѡ%d"H=JaԃMT(PM" N|"e)ld (xR0큦^B @p$+^̷q*n,E$75<<|@ n !( C4p9ٛHi# MTTu,۰O,3`?,Ĉ/ڈKYdaAW"Ҵ/,qTm9aد E%{J3Nc Q JPo 7pDca, c]6SkB+/;,F- ܘKo8dw܁ |Qh,Ymx%~]?nXyOGrR {>vD&|x3-?GN,`3R^`D'U+\&=#3 G|C_8\H8 *\Y-( b g6){ECRv biڦ HLւÈJ u3!p?=zl3.lbS$CJ '6fF;9 |`5Ah[<"{.ppFQelt&r8-sD"8<2AEZP?fWt"g4Ћ݊f8Q80FĠKhL&V.;m43;iل9x%H? G+^ /P.Aap^р{ L,2 >S`hf00GiJs+@%/dS/Ȩpt(:SJ]8VRt\p&Aog%Ps%1AP}[B?Ȁ(! ˨F'@m9CHhN@OnPSHE4(8C62L! Yb@ͫF:Tͱ87Q[E8p0@AMCP#,a `Vg?,*3H@J[iP L#` / M.7Q@ޠ;*pt#m e]B'\ O8Ԑ6 d|OV>-PWhD`ՠr܉^t xwoyх@VmnMF-!R?T1ZꁳGJyaW kBv 9b,_<R2aL\086Ĕ:@ ?Q)Ly$W2e+l+l! 1K ߴu}y@fRn;Q0  uV 1O`DXEL,A hE{c ȶ^^y 4/)4`H_;z2 H$W0;RHo+.D0+԰G(> /$|sL PM%`zN __>+t! ea΂ AD:OBqWpzy L@>9 %RsU$ b~ #ĔPcAX UӶ<[m|##A/z=@ zsgǛR U}- %! Eo|,0l'b7yЗIG>7jY`-y z_Wd~cqG<RcwEuwwHP:?aIYg Ql[0WVcL3jc61 (n@PO8zAdQ9kN>γsYZdts5 t8`}@[1uD8> PFfM8Xz++[X#HI`g/Nwϓo?wldps ed}p {#ASh;p0Vf>'Vg=H Do^ЂG0x[p x ?X m$`6hw-@XN b/v,Hr:ygp>=HP{U@YsЂm8`r]P  k^l@psq&;4Hf(9>`y8?`Yf/y08"H T{_wwbSŇ Q^n vIvxP& Wk9M8Q@`ruhpٌVfo6)04p>o{K4hueP[|^}pdjyȜMc`P@`bw ։9pk>Pi@f\UoSwhoo ] 0 hh%FW 44M0@BOgf/gI qJ0OyXr+@! CUp4@E@pZG7jO@TePЧ&| EG -NMxw0hX@:((T g+V!9ƦVnO{{QlL^ PQFl} :"z2g:21JY#1Z#YXcJ)Ќ5`jj+?@dgE@džJuxP Yd[~ Z)C #z j%c캢88SL0L Y 0 /ylʬ#*P k)MIJk8!+X g^fC0m:s WFExJdP hV0 ?A[yЊ  0 0 P 'AZ)p59uf 0MS p 0ko U}P ೊ0|JPװ .CGpj{fz˪%KmsF sW ʐt0l|H:,KM ںkz `n#PڌЋjʹELFYjݐK :p klt@ ޓ};Z09ۄ`J7,/s߹p \:fZOkP_X FTPP Y˦tp t0<[j3>QK#70J?p h%'[zڲQ0){0h2f|kP Πx` \@ǹH4)9 [ȏA׸   'jPZ0e8Y0HLYj@ [l` ` /| ZRbq˸|,.h2!0L̼F[ی!%%+$c)@CEP88=@){Z= lx 0 0 PxT.%`M-`9PܩsJk:p˪b y@&ۀD0 [w Un l \  pu\% `G,O:9 N?<+Jxk-4@јk] Ib`_D۫]Z  ط `|؇b1(+ ȕْhRP$ڌ|F2]pv@LY;=iIv *j` P \͠0؉m%;M+㡴<w@ Ga`YK:D6 OtN*wIPvY K i\@ +.~%NJ! d ї 5=8tS{ bЦ2N=D k pSϠ f\nP> @ ̠; @ R\""/jdgy)@)pqⓔYg*cb@0 1Z Zhp̠İ 0鳬 6%'_aLw$(pʵM;rzSDf0N0NY`X3EY@ %>e$G^TI(!Zf!9$W0& (s P F@Zp\@ p?H3>$׎(8!A": ~ .,ϪH8P:@C`Im=ޠ8P 0/eP`Xt 1 0̰X8x,J8mfpg@`'MۛF ]P͠ ? + ` K!/!$Y *]@Hho/ %+/;`kK Wbne = i4`b„+V p!ebaC I[6چ8D`ҥK9%L3 NOA%ZIweSQNUWYkRa, 2@`CF zV"D^4X"E !QL81dȑ{|(sNp(IAz, ( \8.I k:*Fv4I$åuF_HJj+.E rs^'_v[(D`JdB[,`a3lUƅoI/cB6 bFktn * M&@Ȅa*E|F0ZXLQ}ûek' đNƏhvfY-h3+YnƴFRWX8ly#sQ_\;LIENDB`filemanager/pages/fm/img/filelist-border.png000066600000000205150472616010015072 0ustar00PNG  IHDRfEegAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbz`۱UqIENDB`filemanager/pages/fm/img/dialog-top.png000066600000026122150472616010014051 0ustar00PNG  IHDRHOytEXtSoftwareAdobe ImageReadyqe<+IDATxY#D#&sT0 0<~=S@x_ppk[U2s!i.6#MݬUeJdT(kǟs6g?szY>}egϕW-9,}^9LsO+_;v>g'c %?Y \ڇ9ۘw;9/a_nL;^Z>?sdڸ٤.a }/n ½h͘o4_S~!Ǭen0?1)lvfzV؉"׮͟36V09ߏMȅER:m e^\tts,3'vEs2?r!خZe+zr}K 7<"wˋxce6a|,9A6G;;c\1[s{~0990;qsiڎnX㾌A8vWwo0Mnw~j(c HOceXC飱c4r=W>5}AϜd`P\& eh{zl2:yjh?͊,lĉ*a'o!:U$ל\ma"s]KKLl])eduA6tXMf.a0~a ssa9_|nlnAe_.ϋ ]XSDb)/ySc/ ^RU,2"ΌUn sF1H0?y-x16i ?=ܽg.XW>hK7U0x9&ސo,8'~#3Ԣ>W#Y 2 cS=k&M朏1]پfpJD%}A+Hn;9'./2yr^ջ(,p9^! "yS۩=Je|NA!} bxf߮ K1s"O $S;F} {d/DSډ Tom+BJ).1a#2x %D񧄄y="my31 $~yyEO 9e ,aˉ9]$,K70?!xqNu,L۩^,~)`4!;~_oA8&/ AHUp b1Tĩq/Xp{/>h&$LR.Js %&cfBª>:+&R1a-e9~_p=_'W?($aJq.f5󵁴'f̥4g[4M{K,Իfmٰi;DW<ł <\/2 `^JI H5>wNj fcN!,\1-3c;r|)fyX̽x2j?͂x`"by ,x4gA.O-3*!p $\#@|Py1"5 1폢X-9두_R҅x`}>3D,b`+qN.@4CF'B8y1.B6.*ltl(Ķβ7bBZg*2cjNT},ap>053!Z|h3#_O:"T$U\|f֤Vz; }fZbiF3zpB`3 d[L ӱ 6c+8zj{A638k&i|`Q8`ft֪>a@C(XK ݼυ`S/1qB='<*̕liwQpİO3M?/p.hIB>y_?+SiyĹ=z]@XR2NX74ybᦱƫ hGC~j`*Ec%ܢS0~.V% \ĐC億b֎S')MAI{hHjL&,,`GbBa Aׁy%DOwBobFZ{! f]Iٽ..\EX&0A Ke w_V6ֹ%N49fmCǾ&@+αi ?("0#:F*p3u"(I0{1P OLAMpP5P)P!!tB uLH0LwfG^CVLp}E`\2  F^Fdg!rQQCK Mj-*!DG8yި^T8 V^<D$JH8Rܞ/Up1ݪ, y@@p, 3}`)&AaF8(\ e4GGw+rG З[JO94yS2bCNkJ(l^v._ Ga4,}Wy) r\D0w>,kƶ}oϋ1}lF >YTh7ڨζ5g>\$3 lu8˵ &{`:5*fX€`n孳7}p.jٮGv5Uw!+)Nr"L(jCz(s)5S1 :Z/4!Ǎ^hP 5Ӛk!8ed ff|N`BY3(edxָ~G?y<`(Muϧ_l2m>(Į7Zi9 ӓm!soI:Be֡UR29}R-xFiǻ%'tnKyFBWJvAָ#uo'U`b`r"z(d9!T9A(DN4ժQIlǍYpiu AhkK!.a r'+U|is潋 `-_kZV<㲨`N8dClj~& EY٢oxK a<,>P䀰e%>s%@@p^`2"P0}mX׉8͇}BRub,N[(d%d/,c*CDuR];23HOL%r9E@kՅsp,L-5Ì%ig 3a]\>1*%{[S1L=穵O6"Xv3GmB(Y⣐2f5AATc{6ۚ\Zc\KYT |m0TFHO}`9ZZ+3PfA5IrS "5c[#ޕ̭5pMZs95 dtUbp u@V]OUeQAH#}^|d_ﻮo$(훪(+cm9Q$[u)C\ EXfw!=Sj]k8i8PCK"Vu+ˢBʅN002,X=o$S|m\ZG^=yPU-6}gx[3 UYq葯AV0vh՛tâ@to-Sd U`D9 Oik+.tQ{N=i8٬seRaY_x)H!KYSmۺ ʘV5m߶}Q֪/Jnɤxo]Ⱦ隮m&qmD]յ(brVkj8nvMg^3(zϏ~idK]R 3Sˋmt}wZ Ā^uCommӜ>#8ҽ$B\l5| yC=COk*\gBA#3-ͰtIFP@צC (.4Dڿ|k^P 5X+&ŘPR!mwm!%)'Vǩݪ ͓ \EY]*[c2*RD۾vwص,%!G+,)qHA^\^u]K c@&K\d&``S5YT['ؘN<TՁ#LqIp"I ,b WmXXڙ5ĥlMumKY'f?ۋ i<~ZtOӭmo'hi,n6I|f< Z(ֲ'Ԡe}y|%b!YMF)OH }m{ֹ6U)7myh,>As+Oe:ꖣ&b| R6 4΀1u=Z>chߓA+,M]Rm3ՙs5 Г{[3v*c&&Plի Z,^KԃAl!Wǜ0ݮ8Nؖf[8zt}6.z&9#{:LDO 3% ZBzX`x~ {kx>?>77HH eJV|Ñ\o6JB{ngVRJy{BRă26CIvO?SөEIk)XTRIIʸ(gn-deH,apX7b0Gg^E+}<6<=7WW׵tS,T <'8gs|0Ƈ Ij0t8^0ʪx}}y*mnoRDE!=bs(妮p%Vh/dwppPkB"(KI+]Rb̂ k6J_DYԞL ۭ`zpΑ'$;%Aeo~u{}sY]0NDpqly9;%m^xlW f$v(wREphFL8κWSIhE̙}껻kU]Wׯ6EYCKRĵ zɁ= ej*}tJ 7czrE nE910lbFnd8J:z&) qJF;LJoWWW5'+xx,Ne$r>ݏtfb9DXHɥxqօõ1dSi܃:xxotWd \?혊c_JߨYaVgNEHP*һ$) ^@4.x })QN)(`ۋ˲,+yxw8mڶusC*hK{sL qp>+Kɥˁ(<0v"/Lڐ0@es1-Wxn{~^xfCI7&c;'`h >aӷj(g"X.b)'kZ5, 7!SP%++%# UwjHD Ra]̀'H,mqiuwwVS}N:utrb"}J&:#<؉m]Ck ho?>@ϻ}{~r15V)Me",{u"z*IP k bX@:KH\ ^c aIY$ 7iͼ{lU%wwn9áQ~j7J^ YȼTy% 4> u T 7ۋmq{{E)&6I^\Vb3w߫f?f=b hGRH3dc0r^e fݽۿy։s@ԝ;~v_͛moRtc'`bP0J .3K}Vي=?w9{zsq(e9pQ1@ccf> ) fLw ؼ椲AXD$N)8b2|Hk嬵;wN2|Hĉ>GSwN>/O/>`L19!m9ۘw;9/a_~:MK`V77%=EAH^oVnp|+{|(;O?w>>(g^Sт*]YBD:=`v|җ\oEM9jVр1Ayȼ@ k;utкdf5VZ*]߅quR=31p&%հuЪj am]?VExo}ݶM}j \v|(۲:{>߂ʴePQg1w}EmC6qu>Ey0-;Fuд^d,͵zD.z GS]vlIbˏS)X1%IDZ6P~1K,S?JmH~];>KUc_Q۔DŽS[pWMmtuP}ʋ~g:Ρy$17T'Sct,eQc_6_qG?عo}ʪ Fށ/A~acsڅ Y->WGUy3M2TMYsso{t] FH_kalkjq|]z*pEػw]v|گaZޢUJg[[{w{>Rwܾm {w]psAc? h۶a`o=FJٳB |P`Cÿ>Ѽon~6LZA B@C*ޕCv}-ěۖnm}PqR*V sbw%2,),&y;vC>zcSxrCssSv.}0vo*~XRkõ>u37BovO?57իW NC}tW_޼}^,t\L@}5-uxuۯ.p^n^(`_܍L^]v8o;z4醹>֠ZZ!}(W 8!cO4z(xv 6 7q~wz{n\ U m~p`u- )~Zru%Ceoj4AfC!|s}omQvKiS/Nvb N^Us'r\A?" uM6*?ft_A͡/SdxO,,(jfPfy2E,NۢS[݅1& ^Q\/\ EdB;Tn~pX#Rx]V k/+Ap}ǙS躣';|>62 JWXOa8Ʊ> ~$*ɝjO-f1: xʉ9?zyDҡ?t ?ÿ9{~099yp 8w1=76v/ʩMErU'@[xØ6a{fuo]kүolU%`Z|uR_#P_:} `ǛSXc&ΙÛ® ?uR ;D^#bh5E˭`ՑGp/YzchkgAcWsCDi`W۲n.z3a,hWY۷Jwٛ7[quY0lëZ;mjq{+).P!%pDN;q&3;JmT/"X<:Rj6 n.߿{o}_f٬J7{VUk/E(K1^nX}on ?qNt1Z '(ض?rz1 m޾ywW=ᛋs.//oQtq @4mI y-gwao~_)onk PI==?狤xn"7xN[gL{$}J3c# h iH1Kuo$sg>-'vvQ9I"wlPEȕ^3s'L׿0um˗)i2CupQHјOCΛń@'D(Hq 3Aa8&3+\ QB)f`x-\=<<_zSvn;nɖmm+7MCb_cp`WcIENDB`filemanager/pages/fm/img/folder-top-bg.png000066600000001243150472616010014450 0ustar00PNG  IHDR,GgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEWIDATxWr@ _We )"yYKƖ2U gD13D<$8 $ P`@ ;-bB΀W=ovźOXEbEZf8MWf}xt:(x/ 5v}i6P7{fwՖ]@ض $@0`aP[ 1<@azhq@r) 1<7 mj{^ߍ*?Gz4W3IENDB`filemanager/pages/fm/img/navdesc_bg.gif000066600000001113150472616010014057 0ustar00GIF89au苢䠲{ȫɓϯٝ灛䰾ـ悛ݩۜҟӤzǧ֥}Ȕ接΅艡̪풧ϖ쐦~ȺܡԳڢߗфʶ醞ˇ~Ꮵι卤Φؙ֬Ҿߘ술̴㮽雮Ҽݱ!u,u S9CfR-5lG^ (2WTq. >= #:i`A"o7]%FYghB8j\N6es&J[_Q)nLt pc@'0b1,MK&B5O@a4JPHxK^;filemanager/pages/fm/img/submit-wide.png000066600000006024150472616010014242 0ustar00PNG  IHDR.tEXtSoftwareAdobe ImageReadyqe< IDATx\͎άˠ/`7}g>_0Wˇ}@\l9XpFdFVOU73h&ʟ/#QcjZtce]AݭG~tT>}Zig|+5陓'OFe0UUyJX3gvڒKi^4=(ˋ/(<_|QΝ 4Ds\8ܽK{-){/=4_*RyHr}>Y֝˿i]cWr} rrt6Ҽ Be}[|OUGX_i# I&J-[Lg0}WZ3xXiӋ^+m"eA2U 4c\+1N0YA|m'p  R6xQ t-^~ j "J͜ld#MI،3 4XiƦu]d~jàpR[i?~,uC?j;mPGR7*4Wz԰lYS_kIPi:ct4C0d+ -<[zV+y7-||8'O,Ԙ7U=id]*|R< %XxdY.=O{A9;z#Z["E@s#]a|`@c3(n:E똷U`~s%ƭcy\۷{jA9ri=oiev/ȡ뀧"K4SA/_izk]<Ni7TDirE^j!|P\5Pcߢ 8ܭ0YQëJPM%>LU  6ʈ#3Z@&9 QW:K@PȖTP^~uѤJ!+B_ RF{++{Ԫu(J\g׭ް~c=uՏGaZzxTeGu1>uGY2Ԧu}7CyX0;rcsN8Ik> ZԀ kl:ֽi?ܻ׸x*-Ui lCYФJd5`%Vl>-ҡ^)N.|ÊV甆~æh]fLc[wY¦vH0M#@_1 */| -uEꮦr21-5Ru57pKLva"(l8L rɔĘk_H8we։:y7/itcV`.8AhoPK"0QPsNc'"Jb⛄RLo5jk쟴$GPοILT\1 M[`9 {%Pc,ɌƷ8Іkܦ*ŸL7.8>JM;~76oI\ˮCPtˊz~R,M8Xn:9H?)HAIENDB`filemanager/pages/fm/img/im-edit.png000066600000001200150472616010013330 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڤMhAߙL]DA C.JAPPhOKzЋųDQhÃZRl n-CtgƙmJ)cgwٙ["@?A00Y). h\GhAc  P.ʣ2țR>:#/I1w~Έ<]x ᵧ ۗN G%"R 'C >7Oҡ#\AW(K{y qgf0ꋛX]0*f˻?%RCAB@7zwXY%~tqq+p6608zQU#SYb\>7%D|xO3,/E  1r|4MX驥5[cqVeuR Fmhx!$e߫VNd2 9Ӿͻ&nk Rd2l6jPJJU>?}&@@IENDB`filemanager/pages/fm/img/dialog-icon-newfile.png000066600000002565150472616010015633 0ustar00PNG  IHDR((mtEXtSoftwareAdobe ImageReadyqe<IDATxX[hU涗lvsF6Zo!-4bQ}m@EYQE#r!*eiRW\6Mv73t=f7s3{?g([1:Aao5q#-MP',qx"C"5ܸoGP%٪ؽЋmuO>ujL>}az":2lj9=^<_uZ'jEP'' ¡P(P\\j$| w]45۞F<]/G񚖣V5 ͐7NKhooG$Y Q\p4#DZ=X1UOgz=~ 9Mq𹯏.* uԯB<b}^!4kMBeX҈7\6l<7SY#j@TGHFH XotV P<=mK1Ơ(sI A:]8~ s7Qܲ 3SS QBL3 0sxBJ$#kdRRRン`INΆqahfn*Mnh$`r %"ī=G3`2N_W{Qȱf bƥF9\C{< Q SPaL̔#*z#!΢On-"dˈ`/g yz3V3f $2O%$]S oS+ĥYpwO7J~ߜjqdc@]aZqze]j!TVe$އyM`cc#$I UP u5￙61N{ʑA Dr(eoweD~Ϛ>QUkt[qzڋ"_ 1䴪TAz-v8!H+)iBϵeGFF:.1o!nhhpEtfzF Ag:fRH"*f՚MlgEiW䥲u2ح F^ ;!qJI脲!f moAm?T?~_Z]sK~f1CnYfy JT;bGf*71y%6UˣT;[/O J%"XH-, en醢n洇e!6djKj$W4’YRUNJqRiKP:oQVpsPԐ*--*=[/sZ@ƳIENDB`filemanager/pages/fm/img/submit-cancel.png000066600000011246150472616010014541 0ustar00PNG  IHDR^y|C pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-gAMA|Q cHRMz%u0`:o_FIDATxY͊/2{ABH c#v16fl|e_g?{4ؾ> 6x@ v@{FOTWUCVeeu׌vi2####21F3k6HR~\AUucizuAwI]׻ܹsGUrJ)jه$|WWWo޼ifwÇWU91JϿX.m˯O}-"z՘^Ar @ ibi8)B@q}?D( C $ً؛] :"現1ƶmA過b=&ƝCI{~o - P$IENjrX!G;eI.p:P' $xɯqs1s,M.jf%j 8=i%Yڅxo_%ɱr 5'ߜLB7ĹL⯟JUQ-Ƥz| |_,(CD5B/o̒ޖMԆMތVbTc df6'{HO]QsP ۺ_&ԗOJ%h˕%Gޤ㖁eƧ34rVA@YLc{u:gXC[(r.M(l6[4Rh4d`L3TC¢$4$ 9{7`%EЫwc&ISȔd)-d қ޽{;3=1Q]>@Hq4i͘2> Ob1v$iVι2F8xYOaԹT/3IA{}/-eQЄP$:i)&dLTG bu]ׯ4mBi9},Y$}2}V6?+t"zbHIXm}f^է(3 'pW#8ڵMu9jn!`{ #&[h31 ;Dږc7(؇"3s>[닻7 dh.iEl2BX|BְTruu]ŁΛ&n,Nۦ1^^^ IZ"1`PP *Us.;΢Prc̢H(̞MŢ0 (8dྜYwyjvٴm\_^E$ rvxC8̼il)]ѡ2~\s r!_"XUX$T>m @Du<[J`%j>ɺ.jwKj;~۷'''"Bx%1_|ݻ?~YR߿Ϙ%[ݻ>jŜtO~2H7`\Ǔ IENDB`filemanager/pages/fm/img/im-botleft.gif000066600000001477150472616010014043 0ustar00GIF89aP߹񔔔!,P@Fx(PrYXxL.贊-kH% R1<+G{and{#gtxbo}wl{gE[z_}yprDʼnͯ\^ҮFڻ"~qs]¯"sHe}}d0x/5lBB\xk;d;f$ >N Js^̖^LpNzbH JBJ| 4J&O&B݊WX٢iͭ4%Z+jι.\rz n!þL0be&2&U5+E-ʛXE"g sgvY;m`+,;/J@LWYom&v=G5o]쵧Yq źo;4Rzb 27yw_ҼvqkǴ|捆\`jU}` \51YNh~x\1Xa Zu!^x_d676c @Dn#EBDTie RRY dI@;filemanager/pages/fm/img/im-delete.png000066600000001266150472616010013661 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<HIDATxڤSMKQ=of&51Qhզ.4 ůFE7.t҅AZ-nEM-J(M~sfh]. <޼s޹8h$4Yi9c_>_YHZ +8gZ+Rw8Ar渮 Ҩ7G_]qOOGlXۻ| q}K &=8:2>O&'y XJPIX =<:< z #9)nUL5bz"v3@32*s(J|rk+$dU0ק77;%M/mN'drRY(9:Ҥs`)J̕NOH軖UX,蝟O4$|J"Q=$a}(dcv :Z4(`@`utTwMMdABjkO-`dcl ;;dK SJRO@7pnm ww&"$e/\EatFoz挽ͮ{==O[Zz&nck9 0IENDB`filemanager/pages/fm/img/dialog-icon-compress.png000066600000005633150472616010016034 0ustar00PNG  IHDR((mtEXtSoftwareAdobe ImageReadyqe< =IDATxڤXgl3޳aQꂂ`.!ZDˏEh% 6@"F]" @"D3K 739;}6&;2fn9+Y%ܗi򆖄o߾@`aV(HD8׹t]wǣ ~Y 3crAUrMy#K17 [*'NO 5J9R>J|"ňJtGii:lm۶Q]owtRvmn"n֭~8q"bG j[yJG݀i.\X]tY|rѿISY\\\t4A3A:DD6萵W@1.VYpEffjڵkA2WKtZ. NڞjI,-in :'}DI|2%|> (CFikJBR{}ؖ$?w|x?a1m4qMrd%}Aǚ{1VJ̊E:N7䦚7|C {bbʕy&MZ-iً+J#Dj8EeZu -=T`~~~%Kl͕!vܭ[7C/R\a P& +wRrw࢖JPeX;{l!1V_~]@w21 ?` B"ġPP4 ,aע<O8u EM9$ͻ}1ٳ7nHjb"ZP2w]f\~O&/sC;?rm&$3g͚%:v(22cǎN'OǂTPEy}SPu`(#]%(mefD.}ذaǏ?1PŐvf[{%l0,RSS%&A2YYY'BPyb)yAʔtE3 4zg>Pɍkޯٯ_?1zh".^xn \B.ޔIKI H$ۤEN cqT}AJneGf^٧O'NPrpZ4H*$C U%!$l,`$RZE$[`H5cNJA%DOHc <19%%4@2ۛȘdtך¦2ݻ'wKF7^xڕ,ҋUdZ)==Ԏ(2),) idKJrClܸ_v튐Ν:Zx5{*HO"Dζ9& & y8h;iR7;_D"QaرڼÛ0'YDNٳ|d9al۷Xdg!$%$O9JҮ1 [g:)=WJJhǏ`Y@4 ӕ$ L *Ѵ3;/u$p:%WVV-[E:|:]r~AOmh2sIa?/" 0L(DqNU@mmmW>|)S0r4oKE$-ZG`'bfߪ];aoet$MP*C#&G01QHSuj߸g,[lj:"ȓ 8 di: @>=(ln"Ν;WMu[vSwHîpyҖhP BQ0{=6dee^8Ç 7MTe. vIæ^ftEJ.Ԙ~~4m{4|K5jTnaaaע D_̓PRR"=z$mǏ_\~}'/^4n۶m5OUdRQUUm&U $ΔKݻ7 kȑ#!z圆؃m5 5:d9{P[Ӹ "z("˄Gx(˱aZ 6=*iWS2T rR ^DӲc.ni|r$18C(?^\QH)Xp&hr2 }P7T1:s)Bf}njUg{QK^Zpȝ(+gfImn/4OԹ oՊ~ @@A{բA&+%,K͡އ~,@;6sPn$JT_#M1' , Ve^\qYVٖb$Ptlw%_ (] EH?аKr /@J;t-JP'AP1耴ed29, FB\]],ˡXA4W8ym Rss߃<2nP:'ݝHo/ah5QHMMtvf5uoc#3 dv69 i5rxh>ӧ1g<m)8 "C*a*[f5imc|Kb̩ /.UEC`b ,bӥ`X/ʊmZ bzhȌ_# x{:>}~i ߷{z@>:ykty"ZS;9caIHJ5gA.~̘A_{8[:iEk @OEd$vXH_.֩76aI1!8P0/ T E 3S5/=]kO@=๙c~۲[A<ޡl_P729s0P﨟4"&4YT: E0(zz/@H3(jɷ̪m,  phf*N dծA kJ:i7xM9j]H\_k/vf ?IENDB`filemanager/pages/fm/img/submit-default.png000066600000000000150472616010014722 0ustar00filemanager/pages/fm/img/progress.gif000066600000000545150472616010013640 0ustar00GIF89a"a~ed{wuԁlqԂyrntox|iҀbfcshm}jӁvzgk!,"p@r١8t Xvxx\z͈|n~x  !! A;filemanager/pages/fm/img/google_gears_logo.gif000066600000003451150472616010015450 0ustar00GIF89a**zWTE9N@@ݛ{?qMJƩKG;HCTLm)꺝<>4e_â7~*#i]ZM~OKt(H3.3ֱ<۔}s0(.&e*%iګJAj:5K>\PE9@5Յ6-tjbVB6~񜕥l\*k{*س<죖sb*¾{rXJ>r& Ү;3*RGtr׉L@a^qlzt8/sn5,A71){f$ڵ=Ȧ8H;ynܸAKfU1I<5ܶ>v.(D:~b_J=إ8.PB3m`\RE;1,M@M?L?M?L@QDUHK=UGXKL?WJL@J=VIpe߹><2L?J>x0|93G@ua 1}SOu3-m`4{h*،{Y^XlfeZ5PG]Wx(!C8LH>b[vPL=5ODُK>NCRIwFnkHVû¼Ǽɿlf4-_#˨9Ϭ:\~{!,** HIuÇQĈ'ċ%`F :LE/Ph X%ָl鐁BxBCCqE}ŀm@<T\Q`رD#|!%D $0 &|0LI#TB8S$8Y퐎 $\ uH#lQ" ` De`e#B#E\\s H!| @MaB8#@xQd"I$|P1gp2(2R d 4bI"> P-=w?kw~=4~tX)pWq~SP4 A$idE‹:$/>3܁ <3Y%2BIS@,e Z/lOYw1col4(^ʏ2d|#ecz3@LloLn1s؇} '-i20+9.UH͠O0JAccMYH kkk6+<#TCUtvXۉX3J`0̲M0x١uڟ `\J!Ot6xe': 3\ލjF=qPGnh$]CPE1I0t:E6.|/o<ϥ`8jRS&!RŸ>1UmXl^`ņL8])sUW5ߓH VG@G~a5ij^+W>rj44mIҥեp~_.X8>HO9֗_|ͷ޼yɓ߼yӟf677eqk׮<?WVVnݺ;{!Çoyy`xȅ򼵵p…ׯoEq=M766^Z>}իW}obׯ%''# \Μ9#*wVxB/{F΀ݼ+߲sIENDB`filemanager/pages/fm/img/submit-greyWide.png000066600000005332150472616010015072 0ustar00PNG  IHDR.gAMA7tEXtSoftwareAdobe ImageReadyqe< lIDATx\ݮ=?Ů \ RD=Vϳ}. d"/  D]jW۞hhZnWWJnݦvվ[cnmA}/>?NܹsJk7?Oο?%sNz(/_6 yu%رhzq+WTYxG{>{LUU.^iy,޶Eߜ_n_Ld?egJ^'~ٙ9Ll6UuVm*fo}ɕBIӉZjUhӬW 'ן z,3m_$x:!1޴}b?sJy~-6ݧאT~|KUBxSc_ 6SѸ[{uݾmƳ?l[mk1<͘}h໶1&MfMuG=aݹNf>]tu"|܅y<K:^=yyxn" faX11nG0PhR4Ca]@پ`@5qbseY :~CD沟g1ޫW|~S.dX<Qݝ!AU0fސi683 lh ih0JIG  hZϞeMw¾*鋻gXw2$8Cl5qߴY}8 Y&ȶKwQ6{O4ˉ5jOƞ tMYm}*쫬01P]%fNVaLczveN._r泹P)Z':8R̭2Eq.nfZ-^?f`4&$&b+bS_8<ޛ9.αRKv(])uK;z3wN^k9U@h K:2_tI9W 9QkBf"Cذawl')@HbjRYIRG gYXv2ौZeiΊ-qdIw=88偸}2T`3C!S׫޸Ϭ!;9rlx`'- MiMSAG+[t[;>, Ay՘qf9QūȘY/2i:L3R}.&B(I"hThLԴg2hCWdׯ5i.Nl *zxZLOA'!; ?xNؗ})$ógէ?U:5(E3M|h+,8s̱/u˾GauXE_U/>WOfVݸqC2-gԇ .ׯ꣫~)+W^ .ݻr%uދ򹏡߼wܡ>۷ooxI{VJ|޽{T֭[./5'ż|?~5?sz}"Z*2CWivr=T*?Kz~HIRLݔVW*w;4UBɡBJd(n=NM}ס.QЧ{hKC fcëzu.}_Y+^S?[ `X˵G|>Zz==/;/͕Am3B1:C{pTb=u*X'wD\La~>R=H,_C"bAWO\ 9`iL/ u6wy. zPQsKhOYyeǪhS%]`c< 't}jH@UUx#FY"腱|Kw],ҵN]싪b}~h=G>`P.2;c^mE-GmA(g:3b5/qsf(A7V E/9_j/ ;1WKbV/- :`B :&tL :&tL>: :.Aͱ :&tLPsL1`BDŽ 5DŽ :&tL:&tL1`BL1`BDŽ 0`BDŽ :&t :&tLL|H_a0:cBgA r^tѶ0|<&tV(9ͼn 1i<,#7ݺ:cB_aEn:0VQtYȜV z̵w胎|ڙh'.ڵѓnR z^'7k;Ps}НwݥmkjAEGFUX5qqqaKwsXtDࢪ缨*qy(;='(ȢGxyO:PU¦ߪh5gWUцsvZUwzhEGF}4lx%9b׈ȔF;N;BK2EGF }P4džWto"ߑ^uXNy1"2)?iZ83kaAo)'􁁁rHX`"3*رcXK׉f 荛NIG_yYKC<(,ꏅ.gP?.i!]6Q=s]ťQ\XCUhSUݠN&=oQx?AOIXumu ǰkQweo$.<Jy47t9<ރ)#k +(ty}"di~#Ybc SY̙=t]satgu~,'b}x#Qd^JSJϳS%=_7SVq`|*z쯡~Aq#Gbҿ}e )9?Yb?20T7|:AgEVC d_Q:;dUA}SJƴ9NJw3.l]nO ԢzU젯%>)).k?5!<߭X;J#*ӣ\-J~9K|y،·2$OA*~Ukn@wYCtbee8uyԟ3S E,C e1(ڪ߅|/@L8.kŊ, n'q2bRTfV 9'pf ߠTb< + dѵ}±:GAU^ɢ8^y& 9³׿ zz*rڧG i6<"KY>5T*.8vG v[Ŝ CvPlϻNj)g{/@.}\xySiaY3d#@ !G@m;{o~\KyN)'i#߼y$43+;`QtA Șˆ{( C`GS7z& z9]5:7'bZV|bhúvWvvu: {l}C _8bb~[gNxϜnOvwBZOҐv[ʡaMj|V5>䴤Y-S-+lx6[: sQs>a!lH!9Ν;ޝ@׵ ivn񫆆Qi 4]i,v}iii>NF=,g?qrCPa9CAn 1; WXVųʆ֜dʟ/5^v=`ezC;Eл[YsN-7gwTiKS]]m[78;Cyӽm55O[,+̬ބ0uIIu*{}/sK Mujm>EUݶXRΏOc9)Q^s|-?-'Žn no7LinO9;0tw7zu>kA7>B^pUdp@*7mp3^nawn/WԈ›;i\emO֘꫑)ҝt/ FcfDߑT?o^en|-Sϲ\6YdM55iSMuwnR(/ʑ[/ww;}h2KMsn[j7l6/h<2,MMm-1gag9h0Xلl:ivr2{xX+a7bed4r$e04?N]lzRX驼MMM8p73)k dyaa!;PI&],ܻW$U7}Y 4K\=IVQf.G缯a1Me1OKZ32RSһ3nׂoRt~?[~$/W[$(T{; Qt1+V݂:}uvW.[Mc;O:_x>yݛMDͯ#99}̧ ]bH.m׊u>q<2boD=4R{(E;V$27ۻxΖ\.Z-;;;bLjڵݰoש֑lӊ z.jO|u+젠!phI۲7>־ukR_](nd:"vHe=뫳ޝ;Y=OZ.鋍=2Sς.ۯ}[ӓ,RϲbjjE߰ߡ٬[{nQfQ ^<|"^漹YݷItߡ_m'Qi2g-a@mIMbѽۗ3P;,2Ɂ+uՌG!#͗><ԞuO.} h@ o`9dO6wvl,37n77}wd~&yw zY9{owSӺeU3.|9+[+:[u%7ٛΩ'OkGUQ- Waq~ Df7~,(w1[(OZ/7<ozn8x%#Z} z|-4?$ zvnQ9k@, }間,{$oْt'V+!q4ܒ\68oϼBLƺF67wЀ{w2/螚z}M wyG>DzlYk.~z ,WW+ZʼneBQз<,~ZX`=7$# zvϾuڢ{Ftv}С|m=8zvcVH M"Sw}If3GlOt eGH.<5 AIx"bD6zⴉn<33ExЏrN~S/ŊjM~d޻w+Gl u@/+}!.T􊊮_Gu4/ʞË4#: zjZ)x󜫯h)pQne\6^1_"smb/});4ޚ{Ř8ʳ(t׹Ws)Zoos&_Ȥ#mTD~G.>7iIn˙?͝wYrG/).))..//./?Kن崍(JR^o6U"]1rb~rqbE9= =Fxryς݄o)_ɔBlcO^bH)\G(/w}>+%CJ?|R 鱻U{U|3-._B?|%2%'%򹕔g%?~%2W?SsekԒZ[Oל>3{ųkgiܴ3fӧ[[~xVWΚӦAM6iӿ543Y3ܹs\B&Esb5> ".O<?cYn *{wif/9siXo:j sJk [pR0a!PɉYPy#w_LNkkfHS?ݕPy(T /AJ%zC?F~ 5%+ "^2lx|. \BUZA@M߃Ѝ- MJa<(8j,j1`֨#}٭oR&798Y@ e JD6R6RXs&J%M)-#'E&C%p f* 5nP.DΟJ9|Z/ wag0$]|$ */N3KXHlH@7Q/4<Ԕt⋮XrsPBBLِpv ˲Z@ȅTNf#Y]%Tמ܄S6 K@7KҴl̽q/ʥHTɨus l;`hKYC4IENDB`filemanager/pages/fm/img/alert-small.png000066600000001156150472616010014227 0ustar00PNG  IHDR;mGgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬKQǿ/ٸ&$%UV9y ⹧zS7ыzՋ(AA h 5 Ƭ!יPKZ}3yy )%uxZdVĦrYVR)zq2Y}‚<><2[N&q gf$-ٞ!l^/J,r<;kŲDpd(77V*ȯ=g66 :=kke0u0b#h:e؅NqcAtcePj8 -\“`Dx=m`( X2TB4EjTPUIPM! k5t .-Ӡ?szS_ա`/7HRɖa) >NgJW|d Q4 K!8Ë}5@o/;K >֐KI8A#R6 EA>nlsrw+IENDB`filemanager/pages/fm/img/separator.png000066600000000244150472616010014007 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<6IDATxL öouZ%$# DU>񦌛G(3< M+IENDB`filemanager/pages/fm/img/filelist-headbg2.png000066600000000545150472616010015120 0ustar00PNG  IHDR +={agAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx 0DѬC !_@Mz0|'b6-Rθ`\ 'B,X1,0 @>,X/X @`, L`, X @` @`, X @` @`,X @`q0|-ZIENDB`filemanager/pages/fm/img/loading.gif000066600000004623150472616010013412 0ustar00GIF89a˷q;疲/fž@ާ֓Z^ԋЂ߫Jd҇۞ڜoxЀݤ-z! NETSCAPE2.0! ,0:@0! Da  " PXp@ɒ"40!B@p< Ⴥ((0! $>H@KJPBÒ <(Pa  4P X@a +`A$<awC΁K` wl q#X-f84! , @*$P*80P РA<D "@P ABH8@74 -* H @ %$|F q (`„ 80R|`CX0`k*`$P 6!3Ol0RŁRDA/Tr@! ,h \@@x8`<\9D , Ppb>H pР@QHB CS 6hȀx&LDlj'XbÆHAׁ~5Aj c P(Ⴥ̠C! ,`(P0 * V#H(6h0Ts `n80 .,\/ @_ ! , *0a > @~ϞNh1(`NlOq}xUc{[|gHlہl6tzDF:,//qDDwՔٸBS$@6?~ |>pP#ff&LIJ,aH`T#+@]y>=\E3pJ} wwA3FdxR^+@r$PvѻB PE[ߢMG-HIa( H,M"RȜ$@0~}\q}^ U#❳#-G! 2(UUi\3 1Z^W PVY Q;8`f n%C7n;_tOyy#u?w 8ns9oeĶ G3ȠDIENDB`filemanager/pages/fm/img/im-topright.gif000066600000004275150472616010014243 0ustar00GIF89a!,`#dihlp,tmx$B,Ȥrl:ШtJZجvF+ȃ zn|N> { ɥ΅ыԖxna½*lO>Zl&P,,ȱc(qb.Ae౥˗@ #'Qϟ@ȜI͛8+3ӧ>- (Jbk WRREduIZqʶb(klֺܐc*k &}+^0UC2|˘4ɔ1!Lt͜{hӰ3f&j­_ޭxvꢐ |eX7{};~7^ȣUmß[ν/u?ϮzA ?>uϿe}I_|\E`B'Wp fQw@ j(<&!V8x߉I"4*5Hz星/3hd+7֦{Dx6iR$X0┗Y䖪u9`f*.*i晕)_Rݐ9y% 'gg2)hR~hAfwZxep)si~JӒgJ*Ih 렲jNʫHkPD>KľIIJm{~Kn>C{Z ɸʩoc]\":.,+bR< c5=ܱYlTs#㗲Pr/!UG|2];sØF<#=1Ѯt>*]MSSݣՄݴ֫|u?Y]cGS4u:k͢sCݫ_7\׽݃Xx Lj㏋HP^cvyߠ*z:˦>~{\{b;> ?|8|2+<;={=ݙ=}=:>z>ȵ>>G;?%y?ݸ?A X,!(L 0Ȯ\A|i Q a qސ9C!2"mV!.;p#NS-n-]8/fMQd@59KdBE6-dD9?VcF9vmcH83t'bJ+t/}bL8S$֔7bNyS?aPY8TGaR9T 6O`T8UVW`VUu~__X7V|g_ZV쵕zo}^\7uxw]^wuv}]`U7t\b+56q\d6YUVne[fͶYuVkZh6ZVhYjmZVe%Yl=6[Vb]Xn 6_Wp5u\Vrg5Y Vtu5\UWV]UvINuS߭Tx)5FQ-Tz ^>wOS|45WMS~ô,KR4#HQ{5FfQW4UXDP3uA6P 4?'Ob3u5n2l9Yvg)V3,A{Іf˗D{enl:GKzNt/ihҜO>MP%δOݒTqլ= Xodz@;filemanager/pages/fm/img/icons/crop.gif000066600000001053150472616010014045 0ustar00GIF89a!! &&%..---,DC@vur21/?><]\ZXWUjigtsq975"! JHF'&%][Y,+*vutihghgf-,,vuuyyyxxxwwwsssrrrpppnnnmmmeee[[[ZZZUUURRRMMMEEE>>>777333...&&&$$$  !C,C  # $ ,''%443--?"7C-A@(BƂ)!5CЍ ..*щ&۸+2;6߅179<>==8ꍂ0/CtH_ ;filemanager/pages/fm/img/icons/resize.gif000066600000000200150472616010014374 0ustar00GIF89a!,EHЁIc!@U lCYFy+i[^Ę3[uϡ0Ɉ4GQt̑iNA$WyG;filemanager/pages/fm/img/icons/save.gif000066600000001172150472616010014042 0ustar00GIF89a-9IڀYcmTi|Xm!6HOduZp}访0B.CS3IZI`r>O\~kx/FVğ1@_y-<(5,:&&%tfvh͆zяѐӑ~tguhȊzzznnn!Y,׀Y45"?9:9;<>==6=78 #I@B IIJEYACGGƒKNNǽFDFڱ$ 'ѯLGI/J `Ck*(q"ex0I EaEDd 8|h 'Opc PR,W\0X3d<##*];filemanager/pages/fm/img/icons/category-open.png000066600000001227150472616010015700 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<)IDATxt;oA̮_~4tDAB $4O WEH,l+;3u؊}WWsG;s.#"=b t `F(ʑ13lN(2qG7|z/u|b Cfa8ADv ںŻ?@W9`YJ'Y@(pa}]v1 x@߾iMH/112r/ \pYP괯`u X+DԂca;sQ#1\WU?ʼn*Daw8nW==BWCZ JgI(}جDrNl+# ܨfjtCj\t{t -(ezhFW)F40-q3mjONVrj_v#& 5J/54kFl؛ɴX8֖qjN~\{kyǕTbY_g&<na;8nbgD_76c̎rIENDB`filemanager/pages/fm/img/icons/category-closed.png000066600000001113150472616010016202 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڜOAe`$C@&]ziS%PDR`g}{raюnܞPJwrbց=xw@*@`Tkņ'o;0ٜ5?4@}4}WE1v0fs뵏$Nm<&i@+2B\kRE$ tlW1b-b 0Bn w*Ɠ$aV\d/9M7(G76KlZ,AɅ)܉LԮZ'>2Jt> jMl $ (ڈIN/^} YHߏ $0=Yd@s0Ἣℇ(]X] ݨ ( (D]XB *$MkNfs'č+{=#1Ql=K5-krI!h_~.LN84T!Mjt⚅DK%/ \abx ^ͫ F^?tHKû{J^1MdEe3WbU12/{ű$_.ÞNtlSmk*lB&xK{߸ U&#0H' 3C;@tA߮^F]&V4t88B&h+#׃30A"+ps3#8])HLo|&][_Něm_))0OÙ%P(Hb+ҝ3M']4W;ɬt3P 2@e@!)oϙ3k۰4n?38$錧 }WZ@z4I"Z$EjXz,'?Bmn*B-r,S]mvi4UKB<|"ҸY;xCW$5AVLPy\`eY"R lHdj!P`VRϧAdJ0 &!&@<wC|=&5 olp@PkJTGB?xj|65d]E&TInmԣ\.a)Cnxhz9k+!(eg"e IںEA*p'V5~C׀{v tiUm.PI%5 Ex(]:;"_jf&BYR?0c>eqD%2tdba9ҟ9_b0e Zlվ3LLO1y8cUc'O\2?~4g IE6IYje,rpŶRIP!tlho1{ ` QF1 污3,.G+L hCEr"OS ;*< ܮXC}M)_"Ahf(\[Xhl roXm2cco;z-VқD][eW`$b:L'Ia~$SJ1 ;Dc0qj"ovv HuOco!?>j~g]MIENDB`filemanager/pages/fm/img/icons/toggle_selection.gif000066600000000150150472616010016425 0ustar00GIF89a!,9 ZŴU^X>#=o)M7k8!h&Ì E;filemanager/pages/fm/img/icons/newfolder.png000066600000001641150472616010015111 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<3IDATx\oE?;{m؁$c ;X dQDTi# ((! BJ-H8DGwp{3=iVo3ߙcC7oTڝbbOtd\!݊ 3*W$q뵎ve[+uvw6r9<͟"\bo*Y0{1?2bmCc[}J)pw?m>V&o|>/w׵m5$FE eL`be٫LQz θJ678'L!Ƴt-4FPeYG$w^lסZq_DU,` 4#괈St9t& !lSј^Xy8O̱-Fth& +05g"kOh2ʘ49$٢v{f>Lyvێ9a_&56SG:Ij>G9rer?zř5sfjra_)] QFu1Q2}7g qРn,.R8s?\. @RRhC O54X\9w98OJe S8,A2@V (BwX,43rP`<"J0n zxF;Ճ  ^\)0營Q•'n I; SbRfFa0QV)mN.mKR(haA/y!#}oc~!$%# D#X\`O&C=xA9B6׎;T@4' 7 R1"KFu]eW=c{t&PUA*/yc>zΛyB$k{;&Ϝ (Dꤟ+me&f^??nW `9YoIENDB`filemanager/pages/fm/img/icons/up.png000066600000001213150472616010013543 0ustar00PNG  IHDR"LgAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxbf\u]e@`ayY@11c1D@]d}bPӗ/%.x!@=X ٟm /)/!O  Qi`r.30N W|0  @JF6J ~d-~!՚AKY%hYGfk 'H10yx ?7P/7101<{2@RC`L^@rQ:f & ko;3F&ny](Ḯ+>@H) HaU']AF$|n.R@bKG]| w  ,L րT=OĚ (A;0?ßP&/8m߿?]ǂ#%.z<7 C_|3e\%+-< ALAAJ .}OOkH("x[;)=~IENDB`filemanager/pages/fm/img/icons/reload.png000066600000001556150472616010014377 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATx|IhALChD0xHЃ(/~=igd(/Ӳ6BNwn7?~NUGU\ǖ&KgBdt?H8$*m߽hhZܒNly??KXC IENDB`filemanager/pages/fm/img/icons/revert.gif000066600000001230150472616010014406 0ustar00GIF89a-9IYcmTY^gmsTi|Xm!6HOduZpWhvfnu0BI`r>O\kx$Wbj1@"-(5,:l~k| &&%0,WO.vk?ZR0KD(庄vEOtD\W̷mɴk]IB'րx'#"]S2A*%# f٪5޴FvR\@dkkє } p ף(zzzvvvssspppnnnfffcccbbbaaa!t,tW2XE7k]\][)30AIHJned_ 16AA=9qYZ 45?g[t@PSVMA<`/SNUL=hܔCQmOTl'GKR  "*d` 1a!Bĉƌ#lpFÇ cK%X`!/ IcA0 4hԼY3B(u",]ID@;filemanager/pages/fm/img/icons/help.png000066600000001456150472616010014060 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxtS]Ha~͙:ׅadRB 5]HÐ"4ꢺd7Y$)edhjvfNF̿۾y |B|>/_}eYrsvaQ A9Ï;-= RRn͖@Q-q8RQ_]3>^|3-L8PvЁʊ<ί"FƦQR1}+3a/99PM%!VdE{7FVe㜛\+͚Ydy\pHL/ZF0hh4*|i"F,EUykE'o?["2۞5)@.+ SN5rmJ®71\NkbF94B.)oG@jF%dLtxUJf0hFu̩U0zyċ5'{P) Y4?[[j5v%eӹ=rq~r~l`Į*\!NLWʧtGV(/峬],˦=Ǝn*^ V2\9[-?ٵLo($G4q7eeK88H *ϟrFZKDDJg~mi;vh}2m}i w0v r3[ϳ,ʏDeճOT7&{e>vμ{LyT~@?oWv\}rKK- ,U+?d}՟?;V>m}>^Q[>Ժne|5,GCERVF+%qW+bʭVB[Һn2+c4UWTk=<xvEl([bQz$Q {VWf.^?FaPvòee22Ȉ 0(g3=l7k2% {Yjw^<7?Mmk^H\}`FhEc/{uHN!m,>흯f*KK;7ӄ^ZDS)OQXg̱oO $*%G~ EPtlKjb875x<fښ=[ OCVSkk!V^mZ19e:³KPshPd?=QMTba{Lw8E͵ C*x@S=%3;˳?!dͯ澞R?܂c6?%r);\jlm2@ U+|;_8Y|y]Z.oCE4쟠?ʚc\8!*yXdS*C*WU׍@7\@|J(n}@q1ue<Gv ^K9/?G_]_?LBO; YWXuD%Z#]POx3xrwa7 xfAIz3\;i;)Z<F4RTyŅw 36;[sd }aT߯}}W߼_'z#exOC-^QY9GL~K5[OX+h?笍7r}"-"oҥgE9:.|^G|5ߙ-#/m g̛R%7puj^zJ7,*ȗDI͗x3fh#@^ۆ3ׯg*ȟ$g7&0|$HA48Zt&] @ }'xZ DxY48 $@BGN-4v8 $PB@f"x-*0P#0xߎ#cL1A$8ny ,iZFUZ)A Ex Mn#%YHf)gKe@ɧlAq ƗRHVR PJ'R(m:J.'Yq螞6*Q޺Ʀhk?(~, @Z -QB K*2y.l+ڋЭ)@~p@hro /,*Agj,gZ8}l|2>@3~lBDkLb (?ۯDKI/iCtPA\r vQo0u5!qE4]tabm6h N>`xkR 5pvߐ 8;~ |CyH9ځ;filemanager/pages/fm/img/folder-bg.gif000066600000021673150472616010013642 0ustar00GIF89aѹ浵ޛȡ񱱱ؿ얖䑑ޭ׎輼Z!,{H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\1O`ܹ@~'Qr&ڳǏK @Y%?~ hդ6y3r*%>$\)׻t<^Q@%SSQ2IfO@Cv+O"@`JC ZVYͺװc˞M۸s.녨Gx+_μW1hG~pËгH\bߦU(}~0Ͽ(h&CyP 0hfǀ(2A"h((e!*(4Ȁ*e@0@vC}:H&Y`@RdJF)<4Y*Sf<Xn)т&EbBl.ÙEt ȃ6hY{naCP)<|I< (9䢐j f*i>G>SO;$ 5#ꪊ9ꫴ묵ᭈk *.)k6;F VJmnm~KlJnnj oKoi.o 0\gωpl.0 p;_gqR~ "d&r?r.q M4ĸ=&J_t ROrVu'o͵^rbLv3jsn w?MIMzwݷz~t#n3hC^bS\cVs>P޴J~D>8^2,㞲&> ߱# 3C?S߯br_ܲ_ uۚ _ح@lVe*"X7RX 2A,Y;0p&$aBs-U B 0W7dW /CZ];]5Dy1E2Z4@\API$%jɢT{(D)uj B0"hT5nIi\ Qɦ`Aq $Mj6&{3) B isj*#MN**C'BЬ:$+ CQ6t+jDJ+)Rv^X$a-{ƂѲb,1kF΢Qj,EF‘rD-MkGѵzd-aGݠl[Gdp)9\Kdr9\O6etI9]SVUevY]Wvߕexi9^[ezy^_f|9_cUf~_gf9`kf`o6g9asVVgٹawvg9b{'gb6m!e|H84Vhゾ#1CY&Br|c%w1#VWh3dCyC_P1H䒖]1fyonj!f ysyN=:h^i[z.:iwV:{fj駎:>kZ꩞:ꫫ::ۺ޺k;ޫ\qM6a}Wi#ڂ6ce3;6,/;̆[l?{ʮ{.m7{_moo[;76 ϖV85es>x>YE9pU.\ƅ9re\39tu.]S:v]sE:x.^:z^:|._;~Ů_E;.`;`3;.aS<asF</bƓ&<%bʳ.EE'KAdG97=U/f֓}ffF>Og#ㄆg\>/hC>oicZ6?iS?ݯiZpƿjÚ&F~f怸 'ƀfƦ恾ƁF&fȦʆz!g}G%ƂFf׆覃悛Dd䦄ƃƄ&fFƅ& G''熡džG'q1fLJg'懷'Lj)+-'/G1g357lj9;='?GAgCEGNJIKM'OGQgSUWNjY[]'_Gagcegnjikm'oGqgsuwǍy{}'Ggǎ王'GgǏ''G珱g͇GǐG'Ǒ'gG㇒ǒۧ'GgǓG'hgǔˇ(hH  H (h#Ȗ!)(%h'H5+ȗ-h%1ȕ97h=;OȘ?A&KhMUQșS[W(YaH]_hgceȚiHkHG(ț蛑(HhȜ蜡(Hhȝ蝱(HhȞ(HhɈ˨ȟ(HhوۨȠ(Hh鈡먡ȡ(HhȢW)9.7ڐ0~ţ5GIhHH15K;*= ?ڤuHw>cRb(R`d !IR@Qjc,skG0tJj@592puڧ~:w #rxZIqdpjڦqtjQڕ9 DG@@@ 2GP@zG Zʪ GQeZzڇiZ*Qaj j@I0Zz*Ⱥ(uڮ Q ^ʪ DJHJ*J:Jz亰 K@GڧzZ* ˩@Eг>ºw.ZjjP ?KBe@TD"K*ғ s1n[IpMJTI gS7:l4 p%;Ep+?C0EhC\[ljd /ΨszKX;˺\;Cƌ8|6 y+/!)ڻȪR {O'"‚l`_@ʫ|j<|zZ` &ĺ˾,?̅]\<]K  q<̳X\Č@0 d0cpLKHOpvQZ۬?<Ɯʪ(<=1Pz)k˳.ƫ(EL}+D@:E` `*jQp+fL_E @MIIikdPSD k  " B؂=؄]؆}؈؈=،  = @Mhڃ0ڃ70 mff-ص0SںM-llz6܅=^Pەmls0ف}۠-ڤmڃݶۺ-TP0x0xP ܡM #]~]ކ݁^߂ऍ7=NT`s 0ڡ>(<؆ؑݖ]ߵ l>sfXZS0TPh lۼ7\-߅OrAPv~xz|~~ێ A MA g ~ `~.ڞ ߞ90؎>Ns@Nڭu>٧ښ.> ,h~õ`^@:صBn>=^d`Ǯn d۟hPEPN=`&> |^ ~~ 0Z~y^ . PAP _-E`Ezn2?4_68:3gaB/VLL٨Nepx0\XZ\H7OY`d/SpVN޳sp/4vxz|~ t=C `}Kv^d]/ ]{oMPjN OC@J_lP Fpro)v>x?` t ` ^C I m]\OP^Vo]PLY  ; b>![Yiծe֬GqE|鉘0}nx!1d EPLqӸMeکcV]Zg#0f#!Nd|zQ֭^ t[~R\ۇ/!+fgDH%I m$Gl!&m7>,sё.80'Ȗkkp@ 4@N:Ӣ3ΈȒ+‹$8!Fb2, N&12к.^jL% xB+( /N0EZB6- (rJ*J,21ĈC (%+ GĢ~BKLf t '=@8$*4C.$`0(TA?~PBSPCuTRK5TTCJҨOF XP r"B^?" 0!`T]9C hB#j"RJ5Xr  XPmP%ErM=~_x` 6`)cᅭe΁ ÃXCŒc5(h'f%R^IP2) IG^ xc7V+Bdx#)@B BRM2H:Yd"iF1lL y MASrLGxȀhqZ~xM1X5'1Ȍ @Xc ; (SG9 H(<LgZӛt=iPZة:B `rH㠾8ӸHX9 A#Q)J1 2;Еir#`H:A&w͍ zrxp1:Z}*VHֹHĀi`V|IBeǁ|%KH0EPE(W[#'9ǡS|@C^{Eo=0wu=l `ә8+pxć׊#` #:яjp#HmKu{zh;W+|}+|MbyvsZ#V"dda 9-a 08!  Root Entry0256_36957e1a789b1cf4*256_64c62767e0ef5477*   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ ӕSJFIFC  !"$"$C^" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?>=]ƹBW I,IKgXFwJO x\nՍ|LDži5}O.pi o5_#o`&\h !.=gZz%&QE!aDOZsIC&v eM_.?n-BY]5˿d*#ւ\Ĺ~6W+Vfv>oCNz`P#d:go,uQR{c($]ћ^i iS*u jk BWYbX.%I#6;#:r /,OưXoޅF>3ֽb(TTL??Qa>(Kg7Ȥyzm?&/FK p3'_^X`c^<EL??Q`D,? u)E :&(aQ"1U5ίN Nq;נ?ʯȸgP?b&(aQ">?.?YVb|XX>ƑgE{+<ȣɇyG|,<~$KuF;M|ڏOkQZGm6emkm5۸UCdG8 Ҽȫlqm# I5/PNG  IHDR.sRGBgAMA a xIDATx^\]o\Emϗ$vx ! y&B5Yc]$ (6bc;eo}gƎk]͝UN9\&:[t9;fx,K 9t.~6Nǝe6>;fx1,0 XW|FSנp]\tV5$:͎M`Xf]0F^e:~vpƲ'}4OJHH4cr(IZy (4z:'GlW׿FCݷb Cwo$}Yms᭷'{!0n( .6{6H8 ~>P:'a2Xk/9Z ١{u#_P//*>ޠ n}};S#'ȩ3 N]RW+fT#.^d j\~[ :G0C 2DՆQ8R&EL|6Q> ~o9glN`hHj &4higl*OeBN}?,6\F8M:E/5fo4=*$  ~'dGK q znU8E6 kmOܜE͂]'R WCkgg:kh=زc"zI_dw>8"@p kE,Nr*˥ރr "=6mµͺӻĻ;0N\@)q=RrBR6ȓH&F%qLSlG Z6END+ ٽO{CM1bF?։x{olWƏiHT'40 .ǀ' Њ~'Բq(/_O_a! P+tEtdt>F6Y?ehD7ъuŢS'i!Q{rEpے\v z{n MX Z;,{+0ڊ29,H{=H- h}kHM,Vp= g9Q`'"_~[[]sW^Y.5}MrhTPիJ5Ngi6/ O9URiSk_ʧtvaG-p40=|(ec+Y|"4/x!YiP׷݉wCꮈ &~!hb$ 4f/muJ2@8vE]9)\Hjn~=U<Dž;9_h腉(ޣ!8HJ޶TJU `i|*۞dB7F.fL"ivFjTlq hVpYjrrǁ6+r: I0b08#0Oё.+ч(>D|"~''vjD7DjJ|<1ܤ_c&qjغG> l ɢ |P0| li[:j96|<2//+֫[u2+W=XG39GT"DZH?X)rt('gG6vF̣vXED>^WW/e=ŽVeYP(b=Elٟqzur#l11ʻ,"-{c͍gccuf,&Q]| 2] l<8Zlrlu.?>Y\uIzc-AчȂx@A%u>&pm ƃ ]P==u[/ËM|\[ݮCOQ\S' Hk՗!ҺKP,L+JQY)]|MmzAaٺh/;filemanager/pages/fm/img/filetypes/word.gif000066600000000214150472616010014744 0ustar00GIF89a"!,QXJܮ@+%@ ;WV5P@yBgG 0 mxxS%Y0Y\ͮjAtZQ ;filemanager/pages/fm/img/filetypes/xml.gif000066600000000244150472616010014574 0ustar00GIF89a!,@QIesv[g$Y 9mt!r0(:0/r<2>wZ[UUGkDtCYTUᢷ޳|[(D^ֺ'giFwHP1ش`bVJ%?cp)z4Uswnq2"Һs!, @.\p@#zѲ`aCWTE &C\h' c/]0 'L$Q/KfV"A(QH'%$s uC IfMhsh8q ȝ+g6m ١Ca /QF BUHC8|?ˎ]&9B$!0b hP -\ f"pȓ 8,pП;filemanager/pages/fm/img/filetypes/exe.gif000066600000000163150472616010014555 0ustar00GIF89a"!,8X0 `mHr ϴ8p۰#H`l:";filemanager/pages/fm/img/filetypes/movie.gif000066600000000432150472616010015112 0ustar00GIF89aN%^agu&zׂ,uǤe"@eu_mmm!,'dIF~pDpGlx A7PD+C@DX X%{ZAX8 N<N@ù\ ux 6lu  " O  * ~yy5!;filemanager/pages/fm/img/filetypes/document.gif000066600000000162150472616010015611 0ustar00GIF89a"!,7H*0J'vVtXbCKk€2Z'ār졞PW;filemanager/pages/fm/img/filetypes/up_folder.gif000066600000000174150472616010015755 0ustar00GIF89a!,@AX5EA<`(3 ពNnM`%+>tHd@3iz lmK;filemanager/pages/fm/img/filetypes/archive.gif000066600000000254150472616010015416 0ustar00GIF89a3! ,f̙̆YPI[:R0A0l Y& Ea @lx A @0_RHtRKJ&b|pNw~o;filemanager/pages/fm/img/filetypes/excel.gif000066600000000213150472616010015070 0ustar00GIF89a"!,PXJܮ@+%BY`Y"(F ]J u˥64ϸ*Q9db[]i^';filemanager/pages/fm/img/filetypes/pdf.gif000066600000000176150472616010014551 0ustar00GIF89a!,@CAN*AŸU@S)5d԰=JKM(>L VcOӴL:JR> ;filemanager/pages/fm/img/filetypes/trash.gif000066600000000200150472616010015105 0ustar00GIF89a!,EX^H$dD.Cp 0|E3mݲ ,,#9lչ |c,G`@Up;filemanager/pages/fm/img/filetypes/swf.gif000066600000000365150472616010014577 0ustar00GIF89accΜcΜRR1Μ!,r $(PlR>*QOt?Ax`/'<B@X2[ tU@p0T_1h(oh7" z:"mxh2" *yW"--|.%2!;filemanager/pages/fm/img/filetypes/sound.gif000066600000000145150472616010015124 0ustar00GIF89a!,6\c)3=oh=rgDZZQƏbt)oCO]:yƳ hhGҩ>5ch6M{jN3QGY~Xr%=+=v;_  H1=/zyv[a(F=`j;) cg2 Z' .RO2O @\J|O%&AVnk&. .}2YŴ]z Sky,W55ψ1ug5\eE3 gPlgT Ѻ\ji@ FbV`X :H/w):PG-DSV{x ׌`mmjv5B'#=6W#=Q\F&? xreOauS]-JVGf<̩^n_e{.7F b="C1ϻnU5}luzLr̶kaئ+Q=Qw_h iaG-\sgVBAl G"k>Y* `繟 ߱v3) \=F\,A9qJg|{q!=Nun{>}14ziZBp?\5^Z%Oad_$yljz#Q\i5⺅ekHs$1 B-0e2EҡmWU{ S R<T* !m0X UK}g!VM@w!8͉Z%P+nl螱ZUͶq=TuN@U. mD"up3>TSS3{3Bf4Iv2h]ns_CCU<C(.ٯ+^F-?_sʼ*HdNripjp>ImC$hCfp9CXt1j1Ot#0%H| \E6c#MyϜ|LκNj_:Y#<"8 A*şόZmBs@̱Hj(dϜn4X!K3 Դ^~h}ӸHdWtE?+cNG"s29$s>#˙C~m "h!yƥ< H#L>z#f_ Ԟd2jnzpr3m}81?I1L[)0%|U(:@P e:Cd֥gyE4  ΌNWW/Jض|}QSلt*P%5&?q %7o\l9y25E<6ujfFi@Af[O64iTu 1luLeg#N9Ŀ,fL&wyHYCnV״ڰe0kSDqaJk/` cV,u1+K?(w|k,"-ݝVl$=ijǨ7 oʒ={6jJY|8Z7 A1D ̥_tXy,?7" %mBhiK@0B lnN'lg*GFߟtT^WD4x5Alh /rLJ& 1?ᮨ|]ŋ[[[U`rW##ԋ{ SrZ܁]opW$. QN[Wajq2ַ༥e2EzOOgsYٛ{6x9?PKvq>p'{8D7"+VzBfYa_n.lV֝pp?mDF(GJ {,R}CBܧ8+}إeca%WP19B= pRBA~vgP_,6n{8 R8YK0Y fy < +ڋc@`Y kVݗ6`_k*4AU_H 6Á @OScC^??Ky]ƏH>sikBʡ a`0rop@ W /9BC XP{}r(kY'cC{,/Q@DX{]}m0"*)1ypoStnZصdg͒) iy7* &IaKFMG;;PR]p /("?Rx-8ooR ARe'-BR0{0PZ8# gk /n< $BAa0B G~<2d39RUCY,<f.EnqD"hѢp͢0%Z[GZl^VC-,Xufsʷa#fW}e!@Wy1`_Pʿk5|W3l~EG.XK-g;Eק؍޾0`bIs4،k3mzG=5F,%Ūa<Ic `c}$qO6{HV@9A VD=vvuuݾBpޞyGc%P6M?z/ 1?-iJֈQ:n% Tw\`te]5xwpX4+pgW3Ifስdko\jw*nfF̵2;IDa}2mFpnwJU3m;ٹrʵ?nU: ^Ou^LWCOn\^z ZV3纻+%1>\ۖl\5qݷ_WOw'NxIFG?o6?[=OږhsX5a6>_g-\k &a:kY Lf.Ԧ'%|s'܏׼u/f&NlKƏJע.uM7͕t-.*mMԥ\B}Y L1=3_u7\zᒭfN3Zt3F0} 5og}n=?դ;8yACiܰqĚ<;; KADR.azzZ917_ݭ{J-iugmrPiFb\ _ JE1EHBH kwvf8Pcٙ={\{;Wp~*.#4fe^mD5fu*Ĩ%o $AĽTShV7?a{ps2L(-0)4PK GC {#createdoc.title}

        {#createdoc.title}

        {#createdoc.description}

        {#createdoc.path}

        filemanager/readme.txt000066600000000543150472616010011024 0ustar00You can find the documentation with installation instuctions here: ImageManager documentation: http://wiki.moxiecode.com/index.php/MCImageManager:Index FileManager documentation: http://wiki.moxiecode.com/index.php/MCFileManager:Index If you still have problems installing it use the forums at http://tinymce.moxiecode.com/punbb/index.php for support. filemanager/css/_cache/fm_index_css.gz000066600000000710150472616010014017 0ustar00Sn0=׀/-m"QN98~C1"G$v{IFn$ Nq7pړWM9ׯ Ր!_,:uZj69-]}V;<_g!Su.}4hn. b 熴R焠ZȺ xe5o]E ߱NXꆊ:WE[ J?Z},>. Gz+x4@x(??oA96V F/x=^p +=&}cUjaScZl̤aAn[T+7\b6v;ԤWJJ[6A / nU5 f}c֐{&filemanager/css/_cache/fm_core_css.css000066600000072161150472616010014021 0ustar00/* Image Manager */ /* core stuff */ /* ########################################################## */ body { background:#fff; color:#000; margin:0 0; padding:0; font:70% arial, helvetica, sans-serif; text-align:center; } body.filelistPage { overflow: hidden; } td { font-size: 11px; } img { behavior:expression(PNG.fix(this)); border:0; } hr { clear:both; border:0; color:#e5e5e5; background-color:#e5e5e5; height:1px; } div { font-size:11px; } /* Lists */ ul { margin:0; padding:0; list-style:none; } ul li { margin:0; padding:0; } /* Layout */ #center { width:auto; max-width:1200px; margin:0 auto; text-align:left; } /* Links */ a { background:transparent; } a:link { color:#000; } a:visited { color:#000; } a:visited:hover { color:#000; } a:hover { color:#000; } a:active { color:#000; } #thearea { position:relative; } #secondarea { position:absolute; left:200px; } /* Page navigation */ /* ########################################################## */ .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0 2px; } /* File Manager */ /* ########################################################## */ .filemanagertop { background:#e8e7e5 url(../pages/fm/css/../img/check_arrow.gif) no-repeat 16px 12px; padding:6px 0px 6px 36px; } .filemanagertop ul, .filemanagertop li { display: inline; } .filemanagertop a, .filemanagertop a:visited, .filemanagertop a:hover { text-decoration:none; color:#3f5f9f; cursor: pointer; } .filemanagertop li.disabled a, .filemanagertop li.disabled a:visited, .filemanagertop li.disabled a:hover { text-decoration:none; color:#999; cursor: text; } .filemanagertop li a:hover { text-decoration:underline; color:#3f5f9f; } .filemanagertop li.hidden { display: none; } .filemanagertop li.end { display: none; } .filelist { font-size:100%; width:100%; } .filelist th { text-align:left; color:#7a92c2; background:#f2f1ee url(../pages/fm/css/../img/filelist-headbg.png) no-repeat right top; padding:8px 8px 6px 8px; } .filelist th.file { background:#fff url(../pages/fm/css/../img/filelist-headbg2.png) no-repeat right top; padding:2px 0px 2px 30px; } .filelist th a, .filelist th a:visited { color:#7a92c2; text-decoration:none; } .filelist th a:hover { color:#3f5f9f; } .filelist td { background:#f2f1ee url(../pages/fm/css/../img/filelist-border.png) repeat-y right top; padding:1px 4px 1px 8px; } .filelist td.file { background-color:#fff; height: 22px; } .filelist td .d { position:relative; } /* hover effect */ .filelist tr.hover td { background-color:#e8e7e5; } /* selected effect */ .filelist tr.selected td { background-color:#ddefff; } /* focused effect */ .filelist tr.focused td { background-color:#ddddff; } /* popup box */ .filelist .edit { position:absolute; left:8px; top:-8px; background:#fff; border:1px solid #959595; padding:2px; text-align:left; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:10; width:12em; } .filelist .edit li a { display:block; padding:1px 4px 1px 20px; text-decoration:none; } .filelist .edit li a:hover { color:#2e4e8c; } .filelist .edit li a.select:hover { background:#e3e0d8; } .filelist .edit li a.download:hover { background:#e3e0d8; } .filelist .edit li a.delete { background:url(../pages/fm/css/../img/im-delete.png) no-repeat; } .filelist .edit li a.delete:hover { background:#e3e0d8 url(../pages/fm/css/../img/im-delete.png) no-repeat; } .filelist .edit li a.preview { background:url(../pages/fm/css/../img/preview.png) no-repeat; } .filelist .edit li a.preview:hover { background:#e3e0d8 url(../pages/fm/css/../img/preview.png) no-repeat; } .filelist .edit li a.info { background:url(../pages/fm/css/../img/im-info.png) no-repeat; } .filelist .edit li a.info:hover { background:#e3e0d8 url(../pages/fm/css/../img/im-info.png) no-repeat; } .filelist tr { height: 22px; } *html .filelist .edit li a { display:inline; width:100%; } .filelist a.checkbox, .filelist .selected a.checkbox { display: block; width: 13px; height: 13px; background: transparent url('../pages/fm/css/../img/checkbox.gif') no-repeat 0 0; margin-left: 4px; overflow: hidden; } /* Rename input */ .filelist input.text { display: block; width: 75%; font-size: 11px; border: 1px solid gray; } .filelist .selected a.checkbox { background: transparent url('../pages/fm/css/../img/checkbox.gif') no-repeat 0 -13px; } .filelist .parent a.checkbox { display: none; } .filelist .checkbox { width: 22px; } #filemanagerlist { overflow: auto; overflow-x: hidden; } /* icons */ .filelist td.file a { padding:2px 0px 2px 22px; text-decoration:none; display: block; background-repeat: no-repeat; behavior:expression(PNG.fix(this)); width: 220px; overflow: hidden; } .filelist a { background-image: url(../pages/fm/css/../img/filetypes/unknown.gif); } /* Display captions */ .icon .caption { display:inline; } .caption-on { font-weight:bold; } .caption-off { color:#666; } /* List container */ #listcontainer { position:relative; } #listing { position: absolute; left: 215px; top: 0px; right: 0; max-width: 980px; padding-right: 20px;} .pagenav { padding:0px 0px 10px 0px; color:#484848; z-index:1; height: 16px; } .pagenav a, .pagenav a:visited { font-weight:bold; color:#484848; text-decoration:none; } .pagenav a:hover { color:#2e4e8c; } .pagenav select { margin:0px 2px; } /* Folder view */ /* ########################################################## */ #folders { margin:-5px 10px 10px 2px; position:absolute; top:0; left:0; width:192px; background:url(../pages/fm/css/../img/folder-middle-bg.png) bottom left; z-index:1; } #folders div.panel {background:url(../pages/fm/css/../img/folder-bottom-bg.png) no-repeat bottom left;} #folders h2 { background:url(../pages/fm/css/../img/folder-top-bg.png) top left; margin:0; padding:20px 10px 10px 10px; font-size:100%; color:#7791c4; } #folders h3 { margin:10px 2px 0px 2px; padding:10px 8px 10px 8px; font-size:100%; color:#7791c4; border-top:1px solid #9ab0d7; } #folders a { text-decoration:none; behavior:expression(PNG.fix(this)); } #folders .categories { margin:0px 6px 0px 10px; } #folders .categories li a { background:url(../pages/fm/css/../img/icons/category-closed.png) no-repeat; padding:2px 2px 0px 24px; display:block; min-height:16px; } #folders .categories li.current a { background:url(../pages/fm/css/../img/icons/category-open.png) no-repeat; font-weight:bold; } #folders .special { margin:5px 6px 0px 10px; } #folders .special li a { padding: 2px 2px 0px 24px; display: block; min-height: 16px; height: 16px; line-height: 16px; } #folders a:hover { color:#2e4e8c; } /* Preview iframe */ #preview { width: 170px; height: 170px; padding: 0px; margin: 0px; background-color: #f2f0ed; visibility: hidden; } #previewwrap { border: 1px solid #9ab0d7; width: 170px; height: 170px; } #previewinfo { overflow: hidden; width: 170px; padding-bottom: 5px;} #filepreview { padding:0px 0px 20px 10px; } #filepreview .actions ul, #filepreview .actions li { display: inline; } #filepreview .actions li.end { display: none; } #filepreview .actions { padding-top: 10px; text-align: center; width: 170px; } #filepreview .actions a { text-decoration:none; color:#3f5f9f; cursor: pointer; } #filepreview .actions a:hover { text-decoration:underline; color:#3f5f9f; } #filepreview .actions .disabled a, #filepreview .actions .disabled a:visited { color:#aaa; text-decoration:none; cursor: text; } #filepreview .actions .disabled a:hover { color: #aaa; text-decoration:none; cursor: text; } #filepreview .actions .hidden { display: none; } /* Sorting */ a.sort { background-image: none; padding: 2px 18px 2px 0px; } a.sortasc { background: url(../pages/fm/css/../img/sortasc.gif) no-repeat top right; padding: 2px 18px 2px 0px; } a.sortdesc { background: url(../pages/fm/css/../img/sortdesc.gif) no-repeat top right; padding: 2px 18px 2px 0px; } /* Edit menu */ /* ########################################################## */ .Menu { position:absolute; left:0; top:0; z-index:10; display:none; background:#eae9e5; border:1px solid #cac6bb; text-align:left; } .Menu li a { display:block; padding:2px 8px; text-decoration:none; } .Menu li a:hover { color:#2e4e8c; } .Menu li.disabled a { color: gray; cursor: text; } .Menu li.disabled a:hover { color: gray; } .Menu li.hidden { display:none; } *html .Menu li a { display:inline; width:auto; } .folder .name, .parent .name { font-weight:bold; } /* Template engine */ /* ########################################################## */ #toolbar.caption span.caption { display: inline; } #tools .hidden { display: none; } #tools li {font-size:11px} /* Validation classes */ label.msg { display:none; } label.invalid { color:#aa0000; display:inline; } input.invalid { background-color:#d63232; } div label.invalid { display:block; } /* Dialog facts */ #facts { height:30px; } /* Progress */ #progress { background: url('../pages/fm/css/../img/loading.gif') no-repeat; padding-left: 20px; } #dirinfo {display:none} /* Toolbar */ /* ########################################################## */ #topnav { background:url('../pages/fm/css/../img/toolbar.png') no-repeat bottom left; } #topwrap { background:url('../pages/fm/css/../img/toolbar.png') no-repeat bottom right; margin:0px 0px 0px 30px; } #settings { display:none; position:absolute; top:20px; right:-4px; width:14em; line-height:14px; text-align:right; background:#fff; padding:4px; border:1px solid #959595; opacity:0.9; -ms-filter:'alpha(opacity=90)'; filter:alpha(opacity=90); z-index:1; } #settings a { display:inline; padding:0px; } /* Inside stuff */ .toolbar { margin:0px; padding:2px 20px 10px 0px; font:90% tahoma, arial, sans-serif; } .toolbar .navigation { margin:0px 2px; padding:0px; float:left; width:170px; padding-bottom:12px; } .navigation .desc { margin:0px 0px 4px 0px; background:url('../pages/fm/css/../img/navdesc_bg.gif') no-repeat right; } .navigation .path { margin-bottom:5px; width:320px; overflow:hidden; } .toolbar .icons { margin:14px 0px 0px 0px; float:right; } .toolbar .icon { margin:0px 2px 0px 1px; padding:0px; float:left; line-height:0px; position:relative; } .toolbar .disabled img { opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30); } .toolbar .disabled a { color: #AAA; } .toolbar .disabled a:hover { background: transparent; cursor: default; } /* Icons */ .icon a { text-decoration:none; padding:2px; display:block; outline:0; } .icon a:hover { background:#d3d0ce; } .icon .caption { position:relative; top:-4px; display:none; padding:0px 4px 0px 4px; } .toolbar .separator { margin:0px 4px; float:left; } .icon span.caption { display: inline; } #tools { display:none; } /* dialog popups */ /* ########################################################## */ body { overflow: auto; } .dialog { position:relative; text-align:left; width: 100%; } .dialog .top { padding:10px 12px; background:#f3f2f0 url('../pages/fm/css/../img/dialog-top.png') no-repeat right bottom; behavior:expression(PNG.fix(this)); } .dialog .close { position:absolute; top:4px; right:4px; } .dialog h2 { font:bold 115% tahoma, arial, sans-serif; margin:0px; } .dialog .description { margin:0px; } .dialog .headline { padding:8px 0px 12px 40px; } .dialog .createdir { background: url('../pages/fm/css/../img/dialog-icon-newfolder.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../pages/fm/css/../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .createdoc { background: url('../pages/fm/css/../img/dialog-icon-newfile.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .edit { background: url('../pages/fm/css/../img/dialog-icon-edit.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .upload { background: url('../pages/fm/css/../img/dialog-icon-upload.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .createzip { background: url('../pages/fm/css/../img/dialog-icon-compress.png') no-repeat left; behavior:expression(PNG.fix(this)); } .dialog .facts { background:#f3f2f0; padding:8px 16px 12px 20px; font:90% tahoma, arial, sans-serif; } .dialog .body { padding:8px 16px 12px 20px; } #content { display: none; } /* Upload */ #uploadarea { position: relative; padding: 16px; height: 220px; overflow: hidden; } * html #uploadarea { height: 208px; } #uploadarea .small { margin: 2em 0 -1em; color: #6d88c4; font-size: 0.9em; text-transform: uppercase; } #uploadarea #add.hidden { display: none; } #uploadarea .addbutton, #uploadarea #uploadstart { display: block; width: 182px; height: 26px; margin: 0 0 1em; background: url(../pages/fm/css/../img/submit-greyWide.png) no-repeat; text-align: center; font-size: 1em; font-weight: bold; line-height: 26px; text-decoration: none; } #uploadarea #uploadstart { background: url(../pages/fm/css/../img/submit-wide.png) no-repeat; } #uploadarea #fileblock { position:relative; top:400px; } #uploadarea #filelist { position:relative; max-height: 7em; overflow: auto; margin-bottom: 6px; border: 1px solid #9fadc4; } * html #uploadarea #filelist { height: 7em; } #uploadarea #fileshead { width: 100%; font-weight: bold; background: #eee; border-bottom: 1px solid #fff; } #uploadarea #files { width: 490px; } #uploadarea #status { position: absolute; top: 4px; border: 1px solid #9fadc4; padding: 1px; width: 506px; height: 34px; display: none; } #uploadarea #progressbar { position: relative; width: 100%; height: 34px; background: url(../pages/fm/css/../img/progress.gif); z-index: 10; } #uploadarea .progresstext { position: absolute; top: 0; left: 0; width: 100%; text-align: center; color: #535353; font-weight: bold; line-height: 36px; z-index: 11; } #uploadarea .progresstext a { text-decoration: none; color: #535353; } #files .fname a {display:block; width:295px; overflow:hidden} #files .disabled {text-decoration:none; cursor:default} #files .done {color:gray} #files .failed {color:red} #multiupload_view {display:none} #singleupload_view {display:none} #multiupload_view #selectview {position:relative} #files input.text {width:290px; margin:0; padding:0} /* Createdoc */ a.preview { background: transparent url('../pages/fm/css/../img/preview.gif') no-repeat; width: 16px; height: 16px; display: block; } #createdoc { overflow: hidden; } /* Edit */ #edit form div {margin-bottom: 4px} #edit #textcontent { width: 500px; height: 250px; } /* Forms */ /* ########################################################## */ form { margin:0px; padding:0px; } select { font:100% tahoma; } input.file, input.text { font:90% tahoma, arial, sans-serif; } /* Submit buttons */ input.submit, .button { width:94px; height:26px; padding:0 0 2px; border:0; background:url('../pages/fm/css/../img/submit-grey.png') no-repeat; font:normal 100%/100% tahoma, arial, sans-serif; text-align: center; text-decoration: none; } .button.disabled { cursor: text; color: gray; } input.default { background:url('../pages/fm/css/../img/submit-default.png') no-repeat; font-weight:bold; } input.cancel { background:url('../pages/fm/css/../img/submit-grey.png') no-repeat; font-weight:normal; } a.button { padding-top: 6px; text-align: center; text-decoration: none; } /* File types */ a.folder { background-image: url(../pages/fm/css/../img/folder.png); } a.parent { background-image: url(../pages/fm/css/../img/icons/up.png); } a.jpg, a.gif, a.bmp, a.tif, a.jpeg, a.png { background-image: url(../pages/fm/css/../img/filetypes/image.gif); } a.html, a.htm, a.php, a.asp, a.aspx, a.jsp, a.cfm { background-image: url(../pages/fm/css/../img/filetypes/html.gif); } a.mov, a.avi, a.wmv, a.rm, a.qt, a.mpg, a.mpeg { background-image: url(../pages/fm/css/../img/filetypes/movie.gif); } a.ppt, a.ppm { background-image: url(../pages/fm/css/../img/filetypes/powerpoint.gif); } a.pdf { background-image: url(../pages/fm/css/../img/filetypes/pdf.gif); } a.txt, a.nfo { background-image: url(../pages/fm/css/../img/filetypes/txt.gif); } a.swf, a.flv { background-image: url(../pages/fm/css/../img/filetypes/swf.gif); } a.doc, a.dot, a.docx { background-image: url(../pages/fm/css/../img/filetypes/word.gif); } a.xls { background-image: url(../pages/fm/css/../img/filetypes/excel.gif); } a.zip, a.rar, a.arj, a.tar, a.tgz, a.gz, a.zoo, a.lha, a.lzh { background-image: url(../pages/fm/css/../img/filetypes/archive.gif); } a.xml, a.xsl, a.xsd, a.dtd { background-image: url(../pages/fm/css/../img/filetypes/xml.gif); } a.mp3, a.mp2, a.aif, a.aiff, a.wav { background-image: url(../pages/fm/css/../img/filetypes/sound.gif); } a.exe, a.com { background-image: url(../pages/fm/css/../img/filetypes/exe.gif); } /* * * clearlooks2 - Gnome theme * * */ .clearlooks2 { position: absolute; left: 20px; top: 20px; width: 320px; height: 240px; overflow: hidden; color: white; display: none; text-align: left; } .clearlooks2_progress { position: absolute; left: 0; top: 0; width: auto; height: 30px; z-index: 100100; display: none; border: 1px solid gray; background: #FFF url('../pages/fm/css/../img/loading.gif') no-repeat 5px 8px; text-align: left; } .clearlooks2_progress .message { padding-left: 30px; padding-right: 10px; font-family: Arial, Verdana; font-weight: bold; line-height: 30px; } .clearlooks2_event_blocker, .clearlooks2_visible_event_blocker { position: absolute; left: 0; top: 0; width: 100%; height: 100%; z-index: 100001; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2_visible_event_blocker { opacity:0.7; -ms-filter:'alpha(opacity=70)'; filter:alpha(opacity=70); background: #FFF; } .clearlooks2_placeholder { position: absolute; left: 0; top: 0; border: 1px dotted black; display: none; z-index: 100002; } /* Alert */ .clearlooks2 .alert { text-align: left; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; font-weight: bold; text-decoration: none; } .clearlooks2 .alert .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .bigicon { display: none; } .clearlooks2 .alert .bigicon, .clearlooks2 .confirm .bigicon, .clearlooks2 .status .bigicon { position: absolute; left: 15px; top: 15px; width: 32px; height: 32px; display: block; } .clearlooks2 .alert .info, .clearlooks2 .status .info { background-image: url('../pages/fm/css/../img/clearlooks2/alert_info.gif'); } .clearlooks2 .alert .warning, .clearlooks2 .status .warning { background-image: url('../pages/fm/css/../img/clearlooks2/alert_warn.gif'); } .clearlooks2 .alert .error, .clearlooks2 .status .error { background-image: url('../pages/fm/css/../img/clearlooks2/alert_error.gif'); } .clearlooks2 .alert .message, .clearlooks2 .confirm .message { position: absolute; left: 55px; top: 15px; width: 325px; height: 40px; overflow: auto; } .clearlooks2 .ok, .clearlooks2 .cancel { position: absolute; left: 160px; top: 65px; width: 80px; height: 30px; background-image: url('../pages/fm/css/../img/clearlooks2/button.gif'); text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 30px; font-weight: bold; text-decoration: none; } /* Confirm dialog */ .clearlooks2 .confirm .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .confirm .ok { left: 110px; } .clearlooks2 .confirm .cancel { left: 210px; } .clearlooks2 .confirm .ask { background-image: url('../pages/fm/css/../img/clearlooks2/alert_info.gif'); } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Status dialog */ .clearlooks2 .status .windowmiddle .middle { background-color: #d6d7d5; } .clearlooks2 .status .ok { top: 178px; } .clearlooks2 .status .statustext { position: absolute; left: 10px; top: 8px; width: 360px; height: 150px; border: 1px solid gray; overflow: auto; padding: 5px; } /* Custom stuff */ .statusrow { background: #f9f9f9; border: 1px solid #f3f3f3; padding: 3px; margin-bottom: 3px; } .statuscol1 { font-weight: bold; overflow: hidden; } .statuscol2 { } /* Chromeless window */ .clearlooks2 .chromeless .resize, .clearlooks2 .chromeless .action, .clearlooks2 .chromeless .statusbarbottom { display: none; } .clearlooks2 .chromeless .middle .action { display: block; } .clearlooks2 .chromeless .windowtop, .clearlooks2 .chromeless .window { height: 5px; } .clearlooks2 .chromeless .windowtop .left { position: absolute; left: 0; top: 0; width: 5px; height: 5px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_chromeless_left.gif') no-repeat; } .clearlooks2 .chromeless .windowtop .middle { position: absolute; right: 5px; width: 100%; height: 5px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_chromeless_middle.gif') no-repeat 5px 0; clip: rect(auto auto auto 10px); } .clearlooks2 .chromeless .windowtop .right { position: absolute; right: 0; top: 0; width: 5px; height: 5px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_chromeless_right.gif') no-repeat; } .clearlooks2 .chromeless .windowmiddle { top: 5px; } /* Top section */ .clearlooks2 .windowtop .middle-fg { display: none; } .clearlooks2 .windowtop { position: absolute; width: 100%; height: 23px; overflow: hidden; } .clearlooks2 .windowtop .left { position: absolute; left: 0; top: 0; width: 6px; height: 23px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_left.gif') no-repeat; } .clearlooks2 .windowtop .middle { position: absolute; right: 6px; width: 100%; height: 23px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_middle.gif') no-repeat 12px 0; clip: rect(auto auto auto 12px); /* Safari hack */ } .clearlooks2 .windowtop .right { position: absolute; right: 0; top: 0; width: 6px; height: 23px; background: transparent url('../pages/fm/css/../img/clearlooks2/top_right.gif') no-repeat; } .clearlooks2 .windowtop .title { position: absolute; left: 0; top: 0; width: 100%; height: 19px; text-align: center; vertical-align: middle; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; font-weight: bold; } /* Top section - Focus */ .clearlooks2 .focustop .left { background: transparent url('../pages/fm/css/../img/clearlooks2/top_left.gif') no-repeat -6px 0; } .clearlooks2 .focustop .middle { background: transparent url('../pages/fm/css/../img/clearlooks2/top_middle.gif') no-repeat 12px -23px; } .clearlooks2 .focustop .right { background: transparent url('../pages/fm/css/../img/clearlooks2/top_right.gif') no-repeat -6px 0; } .clearlooks2 .focus .title { color: #FFF; } /* Middle section */ .clearlooks2 .windowmiddle { position: absolute; top: 23px; width: 100%; z-index: 5; } .clearlooks2 .windowmiddle .left { position: absolute; left: 0; top: 0; width: 4px; height: 100%; background-image: url('../pages/fm/css/../img/clearlooks2/middle_left.gif'); } .clearlooks2 .windowmiddle .middle { position: absolute; left: 4px; top: 0; width: 100%; height: 100%; background-color: #FFF; color: #000; } .clearlooks2 .windowmiddle .right { position: absolute; right: 0; top: 0; width: 4px; height: 100%; background-image: url('../pages/fm/css/../img/clearlooks2/middle_right.gif'); } /* Bottom section */ .clearlooks2 .windowbottom { position: absolute; left: 0; bottom: 0; width: 100%; height: 5px; overflow: hidden; z-index: 5; } .clearlooks2 .windowbottom .left { position: absolute; left: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../pages/fm/css/../img/clearlooks2/bottom_left.gif'); overflow: hidden; } .clearlooks2 .windowbottom .middle { position: absolute; left: 5px; bottom: 0; width: 100%; height: 5px; background: url('../pages/fm/css/../img/clearlooks2/bottom_middle.gif'); overflow: hidden; } .clearlooks2 .windowbottom .right { position: absolute; right: 0; bottom: 0; width: 5px; height: 5px; background-image: url('../pages/fm/css/../img/clearlooks2/bottom_right.gif'); overflow: hidden; } /* Statusbar */ .clearlooks2 .statusbarbottom { height: 24px; overflow: hidden; z-index: 5; } .clearlooks2 .statusbarbottom .left { bottom: 0; width: 5px; height: 23px; background-image: url('../pages/fm/css/../img/clearlooks2/statusbar_left.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .middle { height: 23px; background-image: url('../pages/fm/css/../img/clearlooks2/statusbar_middle.gif'); overflow: hidden; } .clearlooks2 .statusbarbottom .right { width: 20px; height: 23px; background-image: url('../pages/fm/css/../img/clearlooks2/statusbar_right.gif'); overflow: hidden; } .clearlooks2 .windowbottom .statustext { display: none; } .clearlooks2 .statusbarbottom div.statustext { display: block; position: absolute; left: 6px; bottom: 0; font-family: Arial, Verdana; font-size: 11px; color: #000; line-height: 23px; } .clearlooks2 .resizable .statusbarbottom .resize-se { background-image: url('../pages/fm/css/../img/clearlooks2/statusbar_resize.gif'); width: 20px; height: 23px; } /* Actions */ .clearlooks2 .action { position: absolute; cursor: pointer; overflow: hidden; } .clearlooks2 .close, .clearlooks2 .min, .clearlooks2 .med, .clearlooks2 .max { z-index: 3; } .clearlooks2 .resizable .min { right: 68px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat 0 0; background-repeat: no-repeat; } .clearlooks2 .resizable .med { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -29px 0; background-repeat: no-repeat; } .clearlooks2 .resizable .max { right: 37px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -58px 0; background-repeat: no-repeat; } .clearlooks2 .close { right: 6px; top: 3px; width: 29px; height: 16px; background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -87px 0; } /* Actions - Focus */ .clearlooks2 .focustop .min { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat 0 -16px; } .clearlooks2 .focustop .med { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -29px -16px; } .clearlooks2 .focustop .max { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -58px -16px; } .clearlooks2 .focustop .close { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -87px -16px; } /* Actions - Hover */ .clearlooks2 .focustop .min:hover { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat 0 -32px; } .clearlooks2 .focustop .med:hover { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -29px -32px; } .clearlooks2 .focustop .max:hover { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -58px -32px; } .clearlooks2 .focustop .close:hover { background: transparent url('../pages/fm/css/../img/clearlooks2/buttons.gif') no-repeat -87px -32px; } /* Move and resize handles */ .clearlooks2 .move { top: 0; left: 0; width: 100%; height: 19px; cursor: move; z-index: 1; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resize { display: none; z-index: 4; } .clearlooks2 .resizable .resize { display: block; } .clearlooks2 .resizable .resize-w { top: 0; left: 0; width: 5px; height: 100%; cursor: w-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-e { top: 0; right: 0; width: 5px; height: 100%; cursor: e-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-n { top: 0; left: 0; width: 100%; height: 5px; cursor: n-resize; overflow: hidden; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-nw { top: 0; left: 0; width: 5px; height: 19px; cursor: nw-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-ne { top: 0; right: 0; width: 5px; height: 19px; cursor: ne-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-sw { bottom: 0; left: 0; width: 5px; height: 5px; cursor: sw-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-s { bottom: 0; left: 0; width: 100%; height: 5px; cursor: s-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } .clearlooks2 .resizable .resize-se { bottom: 0; right: 0; width: 5px; height: 5px; cursor: se-resize; background-image: url('../pages/fm/css/../img/clearlooks2/transparent.gif'); } #folders .special li a.history { background: url(../plugins/History/css/../img/clock.png) no-repeat; } #folders .special li a.favorites { background: url(../plugins/Favorites/css/../img/favorites.png) no-repeat; } filemanager/css/_cache/fm_index_css.css000066600000002162150472616010014172 0ustar00/* Menu */ .menu { margin: 0; padding: 0; position: absolute; border: 1px solid #d4d0c8; background: #EAE9E5; z-index: 1000; width: 100px; } .menu a { display: block; color: #000; text-decoration: none; padding: 3px; text-align: left; overflow:auto; /* FF */ } .menu a:hover { background-color: #dbecf3 } .menu .submenu { background: url(../pages/fm/css/../img/menu_arrow.gif) no-repeat center right } .menu .active { background: #dbecf3 url(../pages/fm/css/../img/menu_arrow.gif) no-repeat center right } .menu .active a:hover { background-color: transparent } .menu .separator { border-top: 1px solid gray; height: 1px; overflow: hidden } .menu .separator a { display: none } .menu .disabled a { cursor: default; color: #aaa } /* Menu icons */ .menu a { } .menu .add a { background-position: 0 -60px } .menu .delete a { background-position: 0 -80px } .menu .copy a { background-position: 0 0 } .menu .cut a { background-position: 0 -20px } .menu .paste a { background-position: 0 -40px } .menu .moveup a { background-position: 0 -100px } .menu .movedown a { background-position: 0 -120px } filemanager/css/_cache/fm_core_css.gz000066600000012673150472616010013653 0ustar00=ێJr3_рpcPhFĻ hMɐH=wIQхUu"}~}+чۻ(Kzu=t{Mh9xE 4/#W7;\nl#Qd%Y|ALpmID$QʫHt\Md-Cդ\~q4꿲OD$H#]bؼ*Fh2)p%mn` dJ29%$~?ZoZeDJF8-0%\zh{,&yk[l(y VR]mاl e<9%,LӤk s3tHz:gL Cj)kMӏodO]RxW-^t0QFJjk-Ծwa<ǥQ&4)#˒̀ō*YUkB9<ͨm0|*)ϒ1 QЮ׼uF+svE@$ౚ{2QIIXV%gj _3hhو#}:1*xwVN}]%/,xQ{%)8 #_YJISY#H%v⚋S,];'{uᾬwT V4S*:]0.weDbnzQyn2aJL5VmJ /-G`eqBX֛qmL].#sssCaNt?`0(>T(-TߕkӞ[r̭aM\l&Jҽg^qJ jK@{XjEcX@{Bs+"qLݵv|r9WȉT {|j]Ԁp a9\ ,4"/ 8c%o#ضATTK>^1yIF{Yzj[x^0z;oWy$ꉗpZl,VH\k]Zo^Bݑdk,\&9yUhs3di/ځJt! \T>SlW\bXiLrp;"T&;_S>`vԌRdquCtï(9w@eOQK0]1EB}me +pRc v|l&sq f*}g_H-&4Q~ ! 9%q)NƲgd+I@ |q7F1O\>;d!N[,N{9IbXdZmnsȤ j:GRYM,|CZD^֡7Oy?fu*oy*NvtMG*yq)SGT \}1KbEP` w*41l[bA(garA$揄L_N'6(6= ?$GqaLhiqoPLg%/1}oXG[>WbUjjL͒63Q" $Q<.1Y)ԉ jjTLӷx4~ו E*Dv-{FeP4blڪ@t†wϿL>Où*=QҟYݧE792v[T߲*۱z`N̰TA5;/ыo ~lبxM q-}s'RjbXje[Ʈ- Z)w kTm5 O5l&}⤴gaF99q.H)נH~ڧn2w0ѧO:ȢoD(>Um9[;hN|_3vNCK oc}j<~coҦx#U|u^4E5S-Ug&x65W_m0N6[ձ+,x1|#/0M2Cp,Wo펼ՠvVH(u&'LcQ鄘 d*Dh2ykװ`~Lt c}DLknLΥb.ޗz%A9Q8Sa/#/T\ ^J}-Zw5IRr-zhBRk]_HbS;@u=Dބ\leۧjiΐ\vPVŽEYnQo.VV"=ۆCW"(Q@w44|@PchWS$0v85Q@v5@v+Xk)k#WʆWpwuȅ?Z}#v:lFGLE݆`bat\t1Sv&GEؠnT=F#bN=1顙ow,JAfl6Vm!֭nflB,l^Cly٪ ES~Xٱ\A.Y9+Qq2˻`[Sxqwn*G  ņ*Xm+[ͿQX@0V51 PW0]!2'𔰷@sbG}9R%1W[(^"?ZZLQ Ql@#U"a@?qt9D ÀHwp_NI6|),r^--q VĿ՛o`j[trpnid.رo0=RGۖ)7Vɽ}~ 9p52Ҽ. i?g9-aNZ!]q{EFDUlMGU]e mdֶ@ =_ɟrj$ubʟ?{u@AÖ>ѿqv>7LtЋ.I>pe$< u OSb9_p[<5GEg4[4wF^fRcߙc#44!d+<4՗n*!sM}uh@RRmW1Kso᳧Фg~K0n=EўA@ט8=Ԑ- 19@xeg9<2ɷ2(=pM+b}3fд(=3%=CO U-?eg$c˜զ%^qb ;I n +J;r,m'hԹ 3 j<+8v:yW =Q0i~ "꧃tx$2HggIggv;VbK2T`,e|dzYRg}*z7!MOZչLQVZg߀ECh<89@Ůd뀠YR.lkPbz.A˫ ƆhM&sP=y0 _Nv63HfElx;xp\*/34ʆU=Y!bp46LmOB}exX`IeqS-k6lYZn3TəaC2iaDog_{_"M$+2M;MүUM0GPNLj9M >b $Tij>Sg1 )qyn C;šL譻d׎e5 [@ckw唕Lrd ̠!T[U) O$;;C-gVfjGrLR?Ss]8s[y}j_LIҠ 6{ttI/|nM2IՏfݧ!t?Dqtfilemanager/css/index.php000066600000003443150472616010011440 0ustar00dispatchEvent("onPreInit", array($type)); $mcConfig = $man->getConfig(); $compressor = new Moxiecode_CSSCompressor(array( 'expires_offset' => 3600 * 24 * 10, 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => false, 'charset' => 'UTF-8', 'name' => $theme . "_" . $package, 'convert_urls' => true )); $resources = new Moxiecode_ClientResources(); // Load theme resources $resources->load('../pages/' . $theme . '/resources.xml'); // Load plugin resources $plugins = explode(',', $mcConfig["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); $files = $resources->getFiles($package); if ($resources->isDebugEnabled() || checkBool($mcConfig["general.debug"])) { header('Content-type: text/css'); $pagePath = dirname($_SERVER['SCRIPT_NAME']); echo "/* Debug enabled, css files will be loaded without compression */\n"; foreach ($files as $file) echo '@import url("' . $pagePath . '/' . $file->getPath() . '");' . "\n"; } else { foreach ($files as $file) $compressor->addFile($file->getPath(), $file->isRemoveWhiteSpaceEnabled()); $compressor->compress($package); } ?>filemanager/editor_plugin.js000066600000033373150472616010012237 0ustar00/** * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $ * * @author Moxiecode * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. */ // updated by ctepeo // me@ctepeo.net // replace path function str_replace(haystack, needle, replacement) { var temp = haystack.split(needle); return temp.join(replacement); } (function() { window.mcFileManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'file' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; i{$name}'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinymce.DOM.encode(v); } } )); } } }, v)); }); }, getInfo : function() { return mcFileManagerPlugin.getInfo(); }, createControl: function(n, cm) { var t = this, c, ed = t.editor, v; switch (n) { case 'insertfile': v = ed.getParam('filemanager_insert_template'); if (v instanceof Array) { c = cm.createMenuButton('insertfile', { title : 'Загрузка и добавление файлов', image : t.url + '/pages/fm/img/insertfile.gif', icons : false }); c.onRenderMenu.add(function(c, m) { tinymce.each(v, function(v) { m.add({title : v.title, onclick : function() { ed.execCommand('mceInsertFile', false, v); }}); }); }); } else { c = cm.createButton('insertfile', { title : 'Загрузка и добавление файлов', image : t.url + '/pages/fm/img/insertfile.gif', onclick : function() { ed.execCommand('mceInsertFile', false, {template : v}); } }); } return c; } return null; } }); tinymce.PluginManager.add('filemanager', tinymce.plugins.FileManagerPlugin); tinymce.ScriptLoader.load((tinymce.PluginManager.urls['filemanager'] || tinymce.baseURL + '/plugins/filemanager') + '/language/index.php?type=fm&format=tinymce_3_x&group=tinymce&prefix=filemanager_'); } // Setup TinyMCE 2.x plugin if (window.TinyMCE_Engine) { var TinyMCE_FileManagerPlugin = { setup : function() { var b = (window.realTinyMCE || tinyMCE).baseURL; mcFileManager.baseURL = b + '/plugins/filemanager/js'; document.write(''); }, initInstance : function(ed) { ed.settings.file_browser_callback = 'mcFileManager.filebrowserCallBack'; mcFileManager.settings.handle = tinyMCE.getParam('filemanager_handle', mcFileManager.settings.handle); }, getControlHTML : function(cn) { switch (cn) { case "insertfile": return tinyMCE.getButtonHTML(cn, 'Загрузка и добавление файлов', '{$pluginurl}/pages/fm/img/insertfile.gif', 'mceInsertFile', false); } return ""; }, getInfo : function() { return mcFileManagerPlugin.getInfo(); }, execCommand : function(id, el, cmd, ui, v) { var ed = tinyMCE.getInstanceById(id); alert(cmd); if (cmd == 'mceInsertFile') { mcFileManager.browse(tinyMCE.extend({ path : tinyMCE.getParam("filemanager_path"), rootpath : tinyMCE.getParam("filemanager_rootpath"), remember_last_path : tinyMCE.getParam("filemanager_remember_last_path"), custom_data : tinyMCE.getParam("filemanager_custom_data"), insert_filter : tinyMCE.getParam("filemanager_insert_filter"), oninsert : function(o) { var u, nl, i; if (!ed.selection.isCollapsed()) { ed.execCommand("createlink", false, "javascript:mce_temp_url();"); nl = tinyMCE.selectElements(ed.getBody(), 'A', function(n) { return tinyMCE.getAttrib(n, 'href') == "javascript:mce_temp_url();"; }); for (i = 0; i < nl.length; i++) { u = mcFileManagerPlugin.convertURL(o.focusedFile.url); nl[i].href = u; nl[i].setAttribute('mce_href', u); } } else { ed.execCommand('mceInsertContent', false, mcFileManagerPlugin.replace( tinyMCE.getParam('filemanager_insert_template', '{$name}'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinyMCE.xmlEncode(v); } } )); } } }, v)); return true; } return false; } }; TinyMCE_FileManagerPlugin.setup(); tinyMCE.addPlugin('filemanager', TinyMCE_FileManagerPlugin); } })(); filemanager/plugins/_Template/Template.php000066600000016102150472616010014703 0ustar00getConfig(); // Override option $config['somegroup.someoption'] = true; return true; } /** * Gets called before a file action occurs for example before a rename or copy. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param BaseFile $file1 File object 1 for example from in a copy operation. * @param BaseFile $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeFileAction(&$man, $action, $file1, $file2) { return true; } /** * Gets called after a file action was perforem for example after a rename or copy. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param int $action File action constant for example DELETE_ACTION. * @param BaseFile $file1 File object 1 for example from in a copy operation. * @param BaseFile $file2 File object 2 for example to in a copy operation. Might be null in for example a delete. * @return bool true/false if the execution of the event chain should continue. */ function onFileAction(&$man, $action, $file1, $file2) { return true; } /** * Gets called before a RPC command is handled. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeRPC(&$man, $cmd, $input) { return null; } /** * Gets executed when a RPC command is to be executed. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { return null; } /** * Gets called before data is streamed to client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeStream(&$man, $cmd, $input) { return true; } /** * Gets called when data is streamed to client. This method should setup * HTTP headers, content type etc and simply send out the binary data to the client and the return false * ones that is done. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onStream(&$man, $cmd, $input) { return true; } /** * Gets called after data was streamed to client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Stream command that is to was performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onAfterStream(&$man, $cmd, $input) { return true; } /** * Gets called before data is streamed/uploaded from client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onBeforeUpload(&$man, $cmd, $input) { return true; } /** * Gets called when data is streamed/uploaded from client. This method should take care of * any uploaded files and move them to the correct location. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return object Result object data or null if the event wasn't handled. */ function onUpload(&$man, $cmd, $input) { return null; } /** * Gets called before data is streamed/uploaded from client. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param string $cmd Upload command that is to was performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onAfterUpload(&$man, $cmd, $input) { return true; } /** * Gets called when custom data is to be added for a file custom data can for example be * plugin specific name value items that should get added into a file listning. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param BaseFile $file File reference to add custom info/data to. * @param string $type Where is the info needed for example list or info. * @param Array $custom Name/Value array to add custom items to. * @return bool true/false if the execution of the event chain should continue. */ function onCustomInfo(&$man, &$file, $type, &$custom) { return true; } /** * Gets called when the user selects a file and inserts it into TinyMCE or a form or similar. * * @param ManagerEngine $man ManagerEngine reference that the plugin is assigned to. * @param BaseFile $file Implementation of the BaseFile class that was inserted/returned to external system. * @return bool true/false if the execution of the event chain should continue. */ function onInsertFile(&$man, &$file) { return true; } } // Add plugin to ManagerEngine $man->registerPlugin("template", new Moxiecode_TemplatePlugin()); ?>filemanager/plugins/Favorites/resources.xml000066600000000417150472616010015205 0ustar00 filemanager/plugins/Favorites/css/favorites.css000066600000000126150472616010015752 0ustar00#folders .special li a.favorites { background: url(../img/favorites.png) no-repeat; } filemanager/plugins/Favorites/js/favorites.js000066600000003115150472616010015423 0ustar00(function($){ var man = window.FileManager || window.ImageManager, type = window.FileManager ? 'fm' : 'im'; man.addSpecialFolder({title : '{#favorites.special_folder_title}', path : 'favorite:///', type : 'favorites'}); // Add menu items to context menu $().bind('DropMenu:beforeshow', function(e, m) { if (man.path.indexOf('://') == -1) { m.addSeparator(); m.add({title : $.translate('{#favorites.addfavorites}'), disabled : man.isDisabled('addfavorites') || !man.selectedFiles.length, onclick : addFavorites}); } if (man.path.indexOf('favorite://') != -1) { m.addSeparator(); m.add({title : $.translate('{#favorites.removefavorites}'), disabled : man.isDisabled('removefavorites') || !man.selectedFiles.length, onclick : removeFavorites}); } }); $().bind('filelist:changed', function() { if (man.path.indexOf('favorite://') != -1) { $(man.tools).each(function(i, v) { man.setDisabled(v, 1); }); } }); function addFavorites() { var args = {}; $(man.selectedFiles).each(function(i, f) { args['path' + i] = f.path; }); RPC.exec(type + '.addFavorites', args, function(data) { RPC.handleError({message : '{#error.addfavorites_failed}', visual_path : args.visual_path, response : data}); }); }; function removeFavorites() { var args = {}; $(man.selectedFiles).each(function(i, f) { args['path' + i] = f.path; }); RPC.exec(type + '.removeFavorites', args, function(data) { if (!RPC.handleError({message : '{#error.removefavorites_failed}', visual_path : args.visual_path, response : data})) man.listFiles(); }); }; })(jQuery); filemanager/plugins/Favorites/Favorites.php000066600000014455150472616010015133 0ustar00registerFileSystem('favorite', 'FavoriteFile'); return true; } function onRPC(&$man, $cmd, $input) { if ($cmd == "addFavorites") return $this->_addFavorites($man, $input); if ($cmd == "removeFavorites") return $this->_removeFavorites($man, $input); return null; } function _removeFavorites(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input['path' . $i]); $i++) { $status = $this->removeFavorite($man, $input["path". $i]); if ($status) $result->add("OK", $man->encryptPath($input["path". $i]), "Path was removed."); else $result->add("FAILED", $man->encryptPath($input["path". $i]), "Path was not removed."); } return $result->toArray(); } function _addFavorites(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input['path' . $i]); $i++) { $status = $this->addFavorite($man, $input["path". $i]); if ($status) $result->add("OK", $man->encryptPath($input["path". $i]), "Path was added."); else $result->add("FAILED", $man->encryptPath($input["path". $i]), "Path was not added."); } return $result->toArray(); } function addFavorite(&$man, $path) { $config = $man->getConfig(); $maxfavorites = isset($config["favorites.max"]) ? $config["favorites.max"] : $this->_maxfavorites; $type = $man->getType(); $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); if (count($patharray) > 0) { for($i=0;$i $maxfavorites) array_pop($patharray); } else $patharray[] = $path; $cookievalue = implode(",", $patharray); $this->setCookieData($type, $cookievalue); return true; } function getCookieData($type) { if ($this->_cookieData) return $this->_cookieData; if (isset($_COOKIE["MCManagerFavoriteCookie_". $type])) return $_COOKIE["MCManagerFavoriteCookie_". $type]; else return ""; } function setCookieData($type, $val) { $this->_cookieData = $val; setcookie("MCManagerFavoriteCookie_". $type, $val, time()+(3600*24*30)); // 30 days } function clearFavorites(&$man) { setcookie ("MCManagerFavoriteCookie_". $man->getType(), "", time() - 3600); // 1 hour ago return true; } function removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$isetCookieData($type, $cookievalue); return true; } } class FavoriteFile extends Moxiecode_BaseFileImpl { function FavoriteFile(&$manager, $absolute_path, $child_name = "", $type = MC_IS_FILE) { $absolute_path = str_replace('favorite://', '', $absolute_path); Moxiecode_BaseFileImpl::Moxiecode_BaseFileImpl($manager, $absolute_path, $child_name, $type); } function canRead() { return true; } function canWrite() { return false; } function exists() { return true; } function isDirectory() { return true; } function isFile() { return false; } function getParent() { return null; } function getParentFile() { return null; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new DummyFileFilter()); return $files; } /** * Returns an array of MCE_File instances based on the specified filter instance. * * @param MCE_FileFilter &$filter MCE_FileFilter instance to filter files by. * @return Array array of MCE_File instances based on the specified filter instance. */ function listFilesFiltered(&$filter) { $files = array(); $man = $this->_manager; $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); if (IndexOf($cookievalue, ",") != -1) $patharray = split(",", $cookievalue); else if ($cookievalue != "") $patharray[] = $cookievalue; foreach ($patharray as $path) { if (!$man->verifyPath($path)) continue; $file = $man->getFile($path); if (!$file->exists()) { $this->_removeFavorite($man, $path); continue; } if ($man->verifyFile($file) < 0) continue; if ($filter->accept($file) == BASIC_FILEFILTER_ACCEPTED) $files[] = $file; } return $files; } function _getCookieData($type) { if (isset($_COOKIE["MCManagerFavoriteCookie_". $type])) return $_COOKIE["MCManagerFavoriteCookie_". $type]; else return ""; } function _removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$i_setCookieData($type, $cookievalue); return true; } function _setCookieData($type, $val) { setcookie("MCManagerFavoriteCookie_". $type, $val, time() + (3600 * 24 * 30)); // 30 days } } // Add plugin to MCManager $man->registerPlugin("favorites", new Moxiecode_FavoritesPlugin()); ?>filemanager/plugins/Favorites/img/favorites.png000066600000001077150472616010015740 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڤkQwhfBV[m*P\I1J7] "[?K|i1ږILj2$ۊHRj8}BJnu#_3uw#sKܷaʏ'}>D(pw=zZCT%Lu[x6uB#TGB)Ag*09 W3pyAl%hI],gD M'?Ыz`{Iӧ`pY-E*?X\kP)L_PzpQ$ JCf9[UKt];ໃ|(oXR:o5վ[:$ĔoZ>-suy+,T(~1xmg)[lCLGg=ZȻM1MKX ^.PگtNDb:v?.kbvi7!nSȢ6ubIENDB`filemanager/plugins/Trash/css/trash.css000066600000000115150472616010014206 0ustar00#folders .special li a.trash { background:url(../img/trash.png) no-repeat; } filemanager/plugins/Trash/img/trash_empty.png000066600000001217150472616010015410 0ustar00PNG  IHDRabKGDC pHYs B(xtIME*/3?IDAT8˥Ka?25E\3Эb")v/ ݪݲC CaD$ 2p-1e}y:[aK0;_3@ngU96tIvth}|bLxhÏXY㸸u,fzK}7GAHfDEDQ!\Y*:af厉=ծSV3Xhm1Zc!I :6c aГnoYߘW,%skYXfkv^S,ec#EK}zN~E[-_#p܈L!8|( il PN@-$I2W45@`!½?נrk((\w"4oj(`Z51%ϏuXC"f/@Z~{Fd1Blf=im;kD"h- Nc`% ٥ qIzdv IENDB`filemanager/plugins/Trash/img/trash.png000066600000001422150472616010014170 0ustar00PNG  IHDRabKGDNPMzQN pHYs B(xtIME*SIDAT8˕Mh\e޹301&%L'4B]%[WRIPPpcͦ!] .. *AHARh$qb# :NzsgtcOA gwއzّ9Nq7iX971{n.?x-tFsӣa&lYjꙻ6Oҍ!jܿ@)~tM7~R{/Nu6~ZKA築BR7nNX5X`? [7GG<+Ah G1FVUrx@<Պ>{nѫV@dE_#IENDB`filemanager/plugins/History/resources.xml000066600000000411150472616010014676 0ustar00 filemanager/plugins/History/History.php000066600000010740150472616010014322 0ustar00registerFileSystem('history', 'Moxiecode_HistoryFile'); return true; } function onInsertFile(&$man, $file) { $path = $file->getAbsolutePath(); $type = $man->getType(); $maxhistory = isset($config["history.max"]) ? $config["history.max"] : $this->_maxhistory; $cookievalue = $this->getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); if (count($patharray) > 0) { for($i=0;$i $maxhistory) array_pop($patharray); } else $patharray[] = $path; $cookievalue = implode(",", $patharray); $this->setCookieData($type, $cookievalue); return true; } function getCookieData($type) { if (isset($_COOKIE["MCManagerHistoryCookie_". $type])) return $_COOKIE["MCManagerHistoryCookie_". $type]; else return ""; } function setCookieData($type, $val) { setcookie("MCManagerHistoryCookie_". $type, $val, time()+(3600*24*30)); // 30 days } function onClearHistory(&$man) { setcookie ("MCManagerHistoryCookie_". $man->getType(), "", time() - 3600); // 1 hour ago return true; } } class Moxiecode_HistoryFile extends Moxiecode_BaseFileImpl { function Moxiecode_HistoryFile(&$manager, $absolute_path, $child_name = "", $type = MC_IS_FILE) { $absolute_path = str_replace('favorite://', '', $absolute_path); Moxiecode_BaseFileImpl::Moxiecode_BaseFileImpl($manager, $absolute_path, $child_name, $type); } function canRead() { return true; } function canWrite() { return false; } function exists() { return true; } function isDirectory() { return true; } function isFile() { return false; } function getParent() { return null; } function getParentFile() { return null; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Returns an array of MCE_File instances based on the specified filter instance. * * @param MCE_FileFilter &$filter MCE_FileFilter instance to filter files by. * @return Array array of MCE_File instances based on the specified filter instance. */ function listFilesFiltered(&$filter) { $files = array(); $man = $this->_manager; $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); if (IndexOf($cookievalue, ",") != -1) $patharray = split(",", $cookievalue); else if ($cookievalue != "") $patharray[] = $cookievalue; foreach ($patharray as $path) { if (!$man->verifyPath($path)) continue; $file = $man->getFile($path); if (!$file->exists()) { $this->_removeFavorite($man, $path); continue; } if ($man->verifyFile($file) < 0) continue; if ($filter->accept($file) == BASIC_FILEFILTER_ACCEPTED) $files[] = $file; } return $files; } function _getCookieData($type) { if (isset($_COOKIE["MCManagerHistoryCookie_". $type])) return $_COOKIE["MCManagerHistoryCookie_". $type]; else return ""; } function _removeFavorite(&$man, $path=array()) { $type = $man->getType(); $cookievalue = $this->_getCookieData($type); $patharray = array(); $patharray = split(",", $cookievalue); $break = false; if (count($patharray) > 0) { for($i=0;$i_setCookieData($type, $cookievalue); return true; } function _setCookieData($type, $val) { setcookie("MCManagerHistoryCookie_". $type, $val, time()+(3600*24*30)); // 30 days } } // Add plugin to MCManager $man->registerPlugin("history", new Moxiecode_HistoryPlugin()); ?>filemanager/plugins/History/css/history.css000066600000000120150472616010015142 0ustar00#folders .special li a.history { background: url(../img/clock.png) no-repeat; } filemanager/plugins/History/js/history.js000066600000000706150472616010014624 0ustar00(function($){ var man = window.FileManager || window.ImageManager; man.addSpecialFolder({title : '{#history.special_folder_title}', path : 'history:///', type : 'history'}); $().bind('filelist:changed', function() { if (man.path.indexOf('history://') != -1) { $(man.tools).each(function(i, v) { man.setDisabled(v, 1); }); $(['insert', 'download', 'view']).each(function(i, v) { man.setDisabled(v, 0); }); } }); })(jQuery); filemanager/plugins/History/img/clock.png000066600000001562150472616010014527 0ustar00PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8]kHSq}}( EAAЇnAXVdYդtvl6׌t7 M}پ 7EF܏&MszJf-KS0\u I!}ًf>Ʌ]zd&."^õJ,.4 2I3(PdEى zG˅מ=M'QH;ePQxt5/ހG0/ vT\}`gDhc8 /jRTp ex+JP/)T;ƥ0o8ާx^+e/<6iFہ ~G [app@NyY&^tRE]"taC T%}N+BŨyY&^xrk᪾6W݇$+Ϊ U0L`#ZyÙZ} $man, "basepath" => $basepath, "json" => $json, "input" => $input, "cmd" => $cmd, "cwd" => getcwd(), "MCErrorHandler" => $MCErrorHandler ); // Bootstap drupal @session_destroy(); chdir($basepath . "../../../../../../../../"); require_once("includes/bootstrap.inc"); require_once("includes/common.inc"); // Setup session level drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); $isDrupalAuth = false; if (!isset($_SESSION['mc_drupal_auth']) || !$_SESSION['mc_drupal_auth']) { // Not cached in session check agains API drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); $isDrupalAuth = user_access('access tinymce'); $_SESSION['mc_drupal_auth'] = $isDrupalAuth; } else $isDrupalAuth = $_SESSION['mc_drupal_auth']; // Restore everything chdir($access_check['cwd']); $MCErrorHandler = $access_check['MCErrorHandler']; $man = $access_check['manager']; $json = $access_check['json']; $cmd = $access_check['cmd']; $input = $access_check['input']; $basepath = $access_check['basepath']; /** * This class is a Drupal CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class Moxiecode_DrupalAuthenticator extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Main constructor. */ function Moxiecode_DrupalAuthenticator() { } function onAuthenticate(&$man) { global $isDrupalAuth; global $user; $config =& $man->getConfig(); // If authenticated then if ($isDrupalAuth && isset($user)) { foreach ($config as $key => $value) { if (is_string($value)) { $value = str_replace('${user}', $user->uid, $value); $config[$key] = $value; } } // Get rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); // Create rootpath if (!file_exists($rootPath)) mkdir($rootPath); } return $isDrupalAuth; } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("DrupalAuthenticator", new Moxiecode_DrupalAuthenticator()); ?>filemanager/plugins/CustomInfoExample/CustomInfoExample.php000066600000004240150472616010020222 0ustar00getName()); // Will be used as title/alt in TinyMCE link/image dialogs $input['description'] = $file->getName() . " (" . $this->_getSizeStr($file->getLength()) . ")"; break; // When the file is displayed in a more info dialog case "info": //$input['mycustomfield'] = strtoupper($file->getName()); break; // When the file is listed case "list": //$input['mycustomfield'] = strtoupper($file->getName()); break; } // Chain to next return true; } /** * Returns a filesize as a nice truncated string like "10.3 MB". * * @param int $size File size to convert. * @return String Nice truncated string of the file size. */ function _getSizeStr($size) { // MB if ($size > 1048576) return round($size / 1048576, 1) . "MB"; // KB if ($size > 1024) return round($size / 1024, 1) . "KB"; return trim($size) . "b"; } } // Add plugin to MCManager $man->registerPlugin("custominfoexample", new Moxiecode_CustomInfoExample()); ?>filemanager/plugins/PHPNukeAuthenticator/PHPNukeAuthenticator.php000066600000001525150472616010021233 0ustar00registerPlugin("PHPNukeAuthenticator", new Moxiecode_PHPNukeAuthenticator()); ?>filemanager/plugins/MamboAuthenticator/MamboAuthenticatorImpl.php000066600000003464150472616010021423 0ustar00initSession(); $mamboUser =& $mainframe->getUser(); chdir("mambots/editors/mosce/jscripts/tiny_mce/plugins/imagemanager/"); /** * This class is a Mambo CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class MamboAuthenticatorImpl extends BaseAuthenticator { /**#@+ * @access public */ var $_config; /** * Main constructor. */ function MamboAuthenticatorImpl() { } /** * Initializes the authenicator. * * @param Array $config Name/Value collection of config items. */ function init(&$config) { $this->_config =& $config; } /** * Returns a array with group names that the user is bound to. * * @return Array with group names that the user is bound to. */ function getGroups() { return ""; } /** * Returns true/false if the user is logged in or not. * * @return bool true/false if the user is logged in or not. */ function isLoggedin() { global $mamboUser; return preg_match($this->_config['authenticator.joomla.valid_users'], $mamboUser->username); } /**#@-*/ } ?>filemanager/plugins/JoomlaAuthenticator/JoomlaAuthenticator.php000066600000004403150472616010021147 0ustar00initSession(); $mamboUser = $mainframe->getUser(); // Try that if ($mamboUser->id == 0) { session_name(md5($mosConfig_live_site)); session_start(); $mamboUser = new mosUser($database); $mamboUser->id = intval(mosGetParam($_SESSION, 'session_user_id', '')); $mamboUser->username = strval(mosGetParam($_SESSION, 'session_username', '')); $mamboUser->usertype = strval(mosGetParam($_SESSION, 'session_usertype', '')); } chdir($mcOldCWD); /** * This class is a Drupal CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class Moxiecode_JoomlaAuthenticator extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Main constructor. */ function Moxiecode_JoomlaAuthenticator() { } function onAuthenticate(&$man) { global $mamboUser; $config =& $man->getConfig(); // Not logged in if ($mamboUser->id == 0) return false; // Replace ${user} in all config values foreach ($config as $key => $value) { // Skip replaceing {$user} in true/false stuff if ($value === true || $value === false) continue; $value = str_replace('${user}', $mamboUser->username, $value); $config[$key] = $value; } // Try create rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); $rootPathItems = explode(';', $rootPath); $rootPathItems = explode('=', $rootPathItems[0]); if (count($rootPathItems) > 1) $rootPath = $rootPathItems[1]; else $rootPath = $rootPathItems[0]; if (!file_exists($rootPath)) @mkdir($rootPath); // Is one of the valid user names return preg_match($config['JoomlaAuthenticator.valid_users'], $mamboUser->username); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("JoomlaAuthenticator", new Moxiecode_JoomlaAuthenticator()); ?>filemanager/plugins/JoomlaAuthenticator/JoomlaAuthenticator_1_5_8.php000066600000004747150472616010022055 0ustar00 $value) { if ($key != 'GLOBALS') Moxiecode_FixGlobals::$_globals[$key] = $value; } } function restore() { foreach (Moxiecode_FixGlobals::$_globals as $key => $value) $GLOBALS[$key] = $value; } } Moxiecode_FixGlobals::store(); // Include Joomla bootstrap logic @session_destroy(); define('mcOldCWD', getcwd()); chdir($basepath . "../../../../../../../../administrator"); define('_JEXEC', 1); define('JPATH_BASE', getcwd()); define('DS', DIRECTORY_SEPARATOR); require_once(JPATH_BASE .DS.'includes'.DS.'defines.php'); require_once(JPATH_BASE .DS.'includes'.DS.'framework.php'); $mainframe =& JFactory::getApplication('administrator'); $mainframe->initialise(array( 'language' => $mainframe->getUserState( "application.lang", 'lang' ) )); $mamboUser = $mainframe->getUser(); chdir(mcOldCWD); Moxiecode_FixGlobals::restore(); /** * This class is a Drupal CMS authenticator implementation. * * @package MCImageManager.Authenticators */ class Moxiecode_JoomlaAuthenticator extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Main constructor. */ function Moxiecode_JoomlaAuthenticator() { } function onAuthenticate(&$man) { global $mamboUser; $config =& $man->getConfig(); // Not logged in if ($mamboUser->id == 0) return false; // Replace ${user} in all config values foreach ($config as $key => $value) { // Skip replaceing {$user} in true/false stuff if ($value === true || $value === false) continue; $value = str_replace('${user}', $mamboUser->username, $value); $config[$key] = $value; } // Try create rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); $rootPathItems = explode(';', $rootPath); $rootPathItems = explode('=', $rootPathItems[0]); if (count($rootPathItems) > 1) $rootPath = $rootPathItems[1]; else $rootPath = $rootPathItems[0]; if (!file_exists($rootPath)) @mkdir($rootPath); // Is one of the valid user names return preg_match($config['JoomlaAuthenticator.valid_users'], $mamboUser->username); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("JoomlaAuthenticator", new Moxiecode_JoomlaAuthenticator()); ?>filemanager/plugins/ExternalAuthenticator/ExternalAuthenticator.php000066600000011115150472616010022047 0ustar00getConfig(); session_start(); $authURL = $config['ExternalAuthenticator.external_auth_url']; $secretKey = $config['ExternalAuthenticator.secret_key']; $prefix = isset($config['ExternalAuthenticator.session_prefix']) ? $config['ExternalAuthenticator.session_prefix'] : "mcmanager_"; $useCookie = isset($config['ExternalAuthenticator.use_cookie']) ? $config['ExternalAuthenticator.use_cookie'] == true : true; $dir = basename(dirname($_SERVER["PHP_SELF"])); // Always allow language packs to be loaded if ($dir == "language") { // Override language key if (isset($_SESSION[$prefix . "ExternalAuthenticator_general__language"])) $config["general.language"] = $_SESSION[$prefix . "ExternalAuthenticator_general__language"]; return true; } // Check local session if authenticated if ($dir == "rpc" || $dir == "stream") { if (isset($_SESSION[$prefix . 'ExternalAuthenticator']) && $_SESSION[$prefix . 'ExternalAuthenticator'] == true) { if (!$useCookie || isset($_COOKIE[$prefix . 'enabled']) && $_COOKIE[$prefix . 'enabled'] == md5($secretKey . $_SERVER['REMOTE_ADDR'])) { foreach ($_SESSION as $key => $value) { if (strpos($key, $prefix . "ExternalAuthenticator_") === 0) { $key = str_replace("__", ".", $key); $key = substr($key, strlen($prefix . "ExternalAuthenticator_")); $config[$key] = $value; } } // Try create rootpath $rootPath = $man->toAbsPath($config['filesystem.rootpath']); $rootPathItems = explode(';', $rootPath); $rootPathItems = explode('=', $rootPathItems[0]); if (count($rootPathItems) > 1) $rootPath = $rootPathItems[1]; else $rootPath = $rootPathItems[0]; if (!file_exists($rootPath)) @mkdir($rootPath); // Use rootpath as path if (!$config['filesystem.path'] || !$man->isChildPath($rootPath, $config['filesystem.path'])) $config['filesystem.path'] = $rootPath; return true; } } } if (isset($_POST['key'])) { // Generate data chunk $data = ""; $ignored = array("key"); foreach ($_POST as $key => $value) { if (!in_array($key, $ignored)) $data .= $value; } // Check input if ($_POST['key'] == md5($data . $secretKey)) { // Set authenticated session and cookie $_SESSION[$prefix . 'ExternalAuthenticator'] = true; if ($useCookie) setcookie($prefix . 'enabled', md5($secretKey . $_SERVER['REMOTE_ADDR']), 0, '/'); // Set config parameters foreach ($_POST as $key => $value) { if (!in_array($key, $ignored)) { $_SESSION[$prefix . 'ExternalAuthenticator_' . $key] = $value; $config[$key] = $value; } } return true; } else { sleep(1); // Sleep for bots die("Invalid input make sure that the secret keys match."); } } // Force absolute if (strpos($authURL, "http") !== 0 && strpos($authURL, "/") !== 0) $authURL = "plugins/ExternalAuthenticator/" . $authURL; // Setup return URL $prot = "http"; //$port = ""; if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") $prot = "https"; // Non default port //if ($_SERVER['SERVER_PORT'] != "80" && $_SERVER['SERVER_PORT'] != "443") // $port = ":" . $_SERVER['SERVER_PORT']; // If RPC or stream then return it using config if ($dir == "rpc" || $dir == "stream") { // This part doesn't work yet but isn't really needed. // Make it absolute if (strpos($authURL, "/") === 0) $authURL = $prot . "://" . $_SERVER['HTTP_HOST'] . $authURL; $returnURL = $prot . "://" . $_SERVER['HTTP_HOST'] . dirname(dirname($_SERVER['PHP_SELF'])) . "/index.php?type=" . $man->getType(); $config['authenticator.login_page'] = $authURL . "?return_url=" . urlencode($returnURL); return false; } // Not logged redirect to External backend $returnURL = $prot . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?type=" . $man->getType(); header('location: ' . $authURL . "?return_url=" . urlencode($returnURL)); die(); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("ExternalAuthenticator", new Moxiecode_ExternalAuthenticator()); ?>filemanager/plugins/ExternalAuthenticator/auth_example.asp000066600000002261150472616010020204 0ustar00<% @LANGUAGE="VBScript" %> <% Option Explicit %> <% ' Change this secret key so it matches the one in the imagemanager/filemanager config Private Const SECRET_KEY = "someSecretKey" Dim config, data, key, value ' Check if user is logged in here ' If Session("some_session") <> True Then ' Response.Write "You are not logged in." ' Response.End ' End If Set config = Server.CreateObject("Scripting.Dictionary") ' Override config values ' config("filesystem.path") = "c:/Inetpub/wwwroot/somepath" ' config("filesystem.rootpath") = "c:/Inetpub/wwwroot/somepath" ' Generate MD5 of config values data = "" For Each value In config.Items data = data & value Next key = MD5(data & SECRET_KEY) %>
        "> <% For Each key In config.Keys %> " value="<%= Server.HTMLEncode(config(key)) %>" /> <% Next %>
        filemanager/plugins/ExternalAuthenticator/md5.asp000066600000030135150472616010016216 0ustar00<% ' Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm, ' as set out in the memo RFC1321. ' ' ' ASP VBScript code for generating an MD5 'digest' or 'signature' of a string. The ' MD5 algorithm is one of the industry standard methods for generating digital ' signatures. It is generically known as a digest, digital signature, one-way ' encryption, hash or checksum algorithm. A common use for MD5 is for password ' encryption as it is one-way in nature, that does not mean that your passwords ' are not free from a dictionary attack. ' ' This is 'free' software with the following restrictions: ' ' You may not redistribute this code as a 'sample' or 'demo'. However, you are free ' to use the source code in your own code, but you may not claim that you created ' the sample code. It is expressly forbidden to sell or profit from this source code ' other than by the knowledge gained or the enhanced value added by your own code. ' ' Use of this software is also done so at your own risk. The code is supplied as ' is without warranty or guarantee of any kind. ' ' Should you wish to commission some derivative work based on this code provided ' here, or any consultancy work, please do not hesitate to contact us. ' ' Web Site: http://www.frez.co.uk ' E-mail: sales@frez.co.uk Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_WORD = 4 Private Const BITS_TO_A_WORD = 32 Private m_lOnBits(30) Private m_l2Power(30) m_lOnBits(0) = CLng(1) m_lOnBits(1) = CLng(3) m_lOnBits(2) = CLng(7) m_lOnBits(3) = CLng(15) m_lOnBits(4) = CLng(31) m_lOnBits(5) = CLng(63) m_lOnBits(6) = CLng(127) m_lOnBits(7) = CLng(255) m_lOnBits(8) = CLng(511) m_lOnBits(9) = CLng(1023) m_lOnBits(10) = CLng(2047) m_lOnBits(11) = CLng(4095) m_lOnBits(12) = CLng(8191) m_lOnBits(13) = CLng(16383) m_lOnBits(14) = CLng(32767) m_lOnBits(15) = CLng(65535) m_lOnBits(16) = CLng(131071) m_lOnBits(17) = CLng(262143) m_lOnBits(18) = CLng(524287) m_lOnBits(19) = CLng(1048575) m_lOnBits(20) = CLng(2097151) m_lOnBits(21) = CLng(4194303) m_lOnBits(22) = CLng(8388607) m_lOnBits(23) = CLng(16777215) m_lOnBits(24) = CLng(33554431) m_lOnBits(25) = CLng(67108863) m_lOnBits(26) = CLng(134217727) m_lOnBits(27) = CLng(268435455) m_lOnBits(28) = CLng(536870911) m_lOnBits(29) = CLng(1073741823) m_lOnBits(30) = CLng(2147483647) m_l2Power(0) = CLng(1) m_l2Power(1) = CLng(2) m_l2Power(2) = CLng(4) m_l2Power(3) = CLng(8) m_l2Power(4) = CLng(16) m_l2Power(5) = CLng(32) m_l2Power(6) = CLng(64) m_l2Power(7) = CLng(128) m_l2Power(8) = CLng(256) m_l2Power(9) = CLng(512) m_l2Power(10) = CLng(1024) m_l2Power(11) = CLng(2048) m_l2Power(12) = CLng(4096) m_l2Power(13) = CLng(8192) m_l2Power(14) = CLng(16384) m_l2Power(15) = CLng(32768) m_l2Power(16) = CLng(65536) m_l2Power(17) = CLng(131072) m_l2Power(18) = CLng(262144) m_l2Power(19) = CLng(524288) m_l2Power(20) = CLng(1048576) m_l2Power(21) = CLng(2097152) m_l2Power(22) = CLng(4194304) m_l2Power(23) = CLng(8388608) m_l2Power(24) = CLng(16777216) m_l2Power(25) = CLng(33554432) m_l2Power(26) = CLng(67108864) m_l2Power(27) = CLng(134217728) m_l2Power(28) = CLng(268435456) m_l2Power(29) = CLng(536870912) m_l2Power(30) = CLng(1073741824) Private Function LShift(lValue, iShiftBits) If iShiftBits = 0 Then LShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lValue And m_l2Power(31 - iShiftBits)) Then LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 Else LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) End If End Function Private Function RShift(lValue, iShiftBits) If iShiftBits = 0 Then RShift = lValue Exit Function ElseIf iShiftBits = 31 Then If lValue And &H80000000 Then RShift = 1 Else RShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) If (lValue And &H80000000) Then RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) End If End Function Private Function RotateLeft(lValue, iShiftBits) RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) End Function Private Function AddUnsigned(lX, lY) Dim lX4 Dim lY4 Dim lX8 Dim lY8 Dim lResult lX8 = lX And &H80000000 lY8 = lY And &H80000000 lX4 = lX And &H40000000 lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 Else lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult = lResult Xor lX8 Xor lY8 End If AddUnsigned = lResult End Function Private Function F(x, y, z) F = (x And y) Or ((Not x) And z) End Function Private Function G(x, y, z) G = (x And z) Or (y And (Not z)) End Function Private Function H(x, y, z) H = (x Xor y Xor z) End Function Private Function I(x, y, z) I = (y Xor (x Or (Not z))) End Function Private Sub FF(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub GG(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub HH(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Sub II(a, b, c, d, x, s, ac) a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)) a = RotateLeft(a, s) a = AddUnsigned(a, b) End Sub Private Function ConvertToWordArray(sMessage) Dim lMessageLength Dim lNumberOfWords Dim lWordArray() Dim lBytePosition Dim lByteCount Dim lWordCount Const MODULUS_BITS = 512 Const CONGRUENT_BITS = 448 lMessageLength = Len(sMessage) lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) ReDim lWordArray(lNumberOfWords - 1) lBytePosition = 0 lByteCount = 0 Do Until lByteCount >= lMessageLength lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) lByteCount = lByteCount + 1 Loop lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArray End Function Private Function WordToHex(lValue) Dim lByte Dim lCount For lCount = 0 To 3 lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) WordToHex = WordToHex & Right("0" & Hex(lByte), 2) Next End Function Public Function MD5(sMessage) Dim x Dim k Dim AA Dim BB Dim CC Dim DD Dim a Dim b Dim c Dim d Const S11 = 7 Const S12 = 12 Const S13 = 17 Const S14 = 22 Const S21 = 5 Const S22 = 9 Const S23 = 14 Const S24 = 20 Const S31 = 4 Const S32 = 11 Const S33 = 16 Const S34 = 23 Const S41 = 6 Const S42 = 10 Const S43 = 15 Const S44 = 21 x = ConvertToWordArray(sMessage) a = &H67452301 b = &HEFCDAB89 c = &H98BADCFE d = &H10325476 For k = 0 To UBound(x) Step 16 AA = a BB = b CC = c DD = d FF a, b, c, d, x(k + 0), S11, &HD76AA478 FF d, a, b, c, x(k + 1), S12, &HE8C7B756 FF c, d, a, b, x(k + 2), S13, &H242070DB FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE FF a, b, c, d, x(k + 4), S11, &HF57C0FAF FF d, a, b, c, x(k + 5), S12, &H4787C62A FF c, d, a, b, x(k + 6), S13, &HA8304613 FF b, c, d, a, x(k + 7), S14, &HFD469501 FF a, b, c, d, x(k + 8), S11, &H698098D8 FF d, a, b, c, x(k + 9), S12, &H8B44F7AF FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 FF b, c, d, a, x(k + 11), S14, &H895CD7BE FF a, b, c, d, x(k + 12), S11, &H6B901122 FF d, a, b, c, x(k + 13), S12, &HFD987193 FF c, d, a, b, x(k + 14), S13, &HA679438E FF b, c, d, a, x(k + 15), S14, &H49B40821 GG a, b, c, d, x(k + 1), S21, &HF61E2562 GG d, a, b, c, x(k + 6), S22, &HC040B340 GG c, d, a, b, x(k + 11), S23, &H265E5A51 GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA GG a, b, c, d, x(k + 5), S21, &HD62F105D GG d, a, b, c, x(k + 10), S22, &H2441453 GG c, d, a, b, x(k + 15), S23, &HD8A1E681 GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 GG d, a, b, c, x(k + 14), S22, &HC33707D6 GG c, d, a, b, x(k + 3), S23, &HF4D50D87 GG b, c, d, a, x(k + 8), S24, &H455A14ED GG a, b, c, d, x(k + 13), S21, &HA9E3E905 GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 GG c, d, a, b, x(k + 7), S23, &H676F02D9 GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A HH a, b, c, d, x(k + 5), S31, &HFFFA3942 HH d, a, b, c, x(k + 8), S32, &H8771F681 HH c, d, a, b, x(k + 11), S33, &H6D9D6122 HH b, c, d, a, x(k + 14), S34, &HFDE5380C HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 HH a, b, c, d, x(k + 13), S31, &H289B7EC6 HH d, a, b, c, x(k + 0), S32, &HEAA127FA HH c, d, a, b, x(k + 3), S33, &HD4EF3085 HH b, c, d, a, x(k + 6), S34, &H4881D05 HH a, b, c, d, x(k + 9), S31, &HD9D4D039 HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 HH b, c, d, a, x(k + 2), S34, &HC4AC5665 II a, b, c, d, x(k + 0), S41, &HF4292244 II d, a, b, c, x(k + 7), S42, &H432AFF97 II c, d, a, b, x(k + 14), S43, &HAB9423A7 II b, c, d, a, x(k + 5), S44, &HFC93A039 II a, b, c, d, x(k + 12), S41, &H655B59C3 II d, a, b, c, x(k + 3), S42, &H8F0CCC92 II c, d, a, b, x(k + 10), S43, &HFFEFF47D II b, c, d, a, x(k + 1), S44, &H85845DD1 II a, b, c, d, x(k + 8), S41, &H6FA87E4F II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 II c, d, a, b, x(k + 6), S43, &HA3014314 II b, c, d, a, x(k + 13), S44, &H4E0811A1 II a, b, c, d, x(k + 4), S41, &HF7537E82 II d, a, b, c, x(k + 11), S42, &HBD3AF235 II c, d, a, b, x(k + 2), S43, &H2AD7D2BB II b, c, d, a, x(k + 9), S44, &HEB86D391 a = AddUnsigned(a, AA) b = AddUnsigned(b, BB) c = AddUnsigned(c, CC) d = AddUnsigned(d, DD) Next MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) End Function %> filemanager/plugins/ExternalAuthenticator/auth_example.jsp000066600000004772150472616010020226 0ustar00<%@page import="java.util.*" %> <% String key, secretKey, data = ""; // Change this secret key so it matches the one in the imagemanager/filemanager config secretKey = "someSecretKey"; // Check here if the user is logged in or not /* if (session.getAttribute("some_session") != "somevalue") { out.print("You are not logged in."); return; } */ // Override any config values here Hashtable configuration = new Hashtable(); //configuration.put("filesystem.path", "c:/Inetpub/wwwroot/somepath"); //configuration.put("filesystem.rootpath", "c:/Inetpub/wwwroot/somepath"); // Generates a unique key of the config values with the secret key for (Enumeration e = configuration.keys(); e.hasMoreElements(); ) data += configuration.get(e.nextElement()); key = md5(data + secretKey); %> <%! public String md5(String str) { try { java.security.MessageDigest md5 = java.security.MessageDigest.getInstance("MD5"); char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i=0; i': buff.append(">"); break; case '"': buff.append("""); break; case '&': buff.append("&"); break; default: buff.append(chr); } } return buff.toString(); } %>
        "> <% for (Enumeration e = configuration.keys(); e.hasMoreElements(); ) { key = (String) e.nextElement(); %> " value="<%= htmlEncode((String) configuration.get(key)) %>" /> <% } %>
        filemanager/plugins/ExternalAuthenticator/auth_example.php000066600000001732150472616010020212 0ustar00
        $value) { echo ''; } ?>
        filemanager/plugins/ExternalAuthenticator/auth_drupal.php000066600000002245150472616010020046 0ustar00uid; // Generates a unique key of the config values with the secret key $key = md5(implode('', array_values($config)) . $secretKey); ?>
        $value) { echo ''; } ?>
        filemanager/plugins/WordpressAuthenticator/WordpressAuthenticator.php000066600000001436150472616010022470 0ustar00registerPlugin("WordpressAuthenticator", new Moxiecode_WordpressAuthenticator()); ?>filemanager/changelog.txt000066600000053672150472616010011531 0ustar00Version 3.1.0.5 (2009-01-22) Added new custom_query option. To enable you to add custom query parameters to initial page request. Added new docx word icon and mime type item to mime.types. Fixed so that the upload form closes automatically if all files was uploaded correctly. Fixed bug where a request to menu_icons.gif where produced and it produced a 404 web server error. Fixed bug where the item config in the session collection would be overwritten if register_globals where enabled in php.ini. Fixed bug where inserting links would fail the second time if the inlinepopups wasn't used in TinyMCE. Fixed bug where the Flash uploader was sending an incorrect application/x-www-form-urlencoded content type. Fixed bug where the ExternalAuthenticator would add double port numbers. Fixed bug where a multiple path value for the session override of the filesystem.rootpath item would fail. Fixed bug where opening a standalone instance while having TinyMCE on the same page would produce incorrect callback results. Fixed bug where the remove_script_host option wouldn't work correctly. Version 3.1.0.4 (2008-11-27) Fixed bug where the Flash uploader was compiled with debugging on. Fixed bug where downloading of files with spaces didn't work correctly. Fixed bug where it wouldn't load correctly correctly in old TinyMCE 2.x versions. Version 3.1.0.3 (2008-11-20) Fixed bug where inline dialogs wasn't opened correctly when loading the product cross domain. Fixed bug where it was returning incorrect content-encoding headers. Fixed bug where the multiple upload feature didn't work correctly when * was used for the valid extensions settings. Fixed bug where language packs wasn't loading correctly when TinyMCE was compressed using the gzip compressor. Fixed bug where switching from FileManager to ImageManager would fail some times when used with TinyMCE. Version 3.1.0.2 (2008-11-13) Added new possibility to have a custom function for the filemanager_insert_template option. Fixed bug where errors passed back from the server would be ignored by the Google gears implementation. Fixed bug where the file upload progress bar wasn't moving if upload errors occured. Fixed bug where domain relaxing didn't work when TinyMCE and the FileManager was loaded from another domain. Version 3.1.0.1 (2008-11-10) Fixed bug where it wasn't possible to override the preview.wwwroot and preview.urlprefix settings with mc_access files. Fixed bug with notice messages for missing items when using display_errors on. Fixed bug where it wasn't possible to load TinyMCE and the filemanager plugin from another sub domain. Fixed bug where the upload.chunk_size option didn't work correctly. Fixed bug where it was impossible to enable remember_last_path by default. Fixed bug where the onchange event wasn't fired as it was before when form items was changed by a browse call. Fixed bug where the category list and special folders list where separated by an odd margin in IE. Fixed so it's possible to see the current upload runtime when enablig the general.debug option. Version 3.1 (2008-11-06) Fixed bug with using the filemanager on a non default http port. Fixed so all new integration callback functions have a file object. Fixed bug where the toolbar would get a trailing focus rectangle on Gecko. Fixed bug where sorting was incorrect on non Windows operating systems. Fixed bug where single upload didn't work correctly. Fixed bug where the ClientResources class would produce an error due to an invalid regexp. Version 3.1b2 (2008-10-30) Added new file path presentation for edit file dialog. Fixed bug where createdir wasn't reloading the file list ones a directory was created. Fixed bug where it wasn't possible to override general.language using an external authenticator. Fixed bug where keepAlive handler was missing. It will not hit the backend each 5 minutes. Fixed bug where Gecko browsers would produce an traling focus border for toolbar items. Fixed bug where directory path would be on two lines if it was very long. Fixed bug where loading the xml resource files would break on some PHP installations. Fixed bug where add file action wasn't executed when multiple files where uploaded. Fixed bug where it wasn't possible to override path and rootpath settings from TinyMCE init. Fixed bug where rootpath names didn't work when specified in javascript options. Fixed bug where links would be inserted to beginning of editor instances on IE. Fixed bug where singe file uploads wasn't working correctly. Fixed bug where native windows wasn't move to top. Fixed bug where upload with upper case extensions would fail. Replaced upload.replace_diacritics with filesystem.clean_names. To make it more general and also take care of whitespace. Optimized file listing logic by 600%. The sorting was improved by sorting by the file names first and then creating file instances. Version 3.1b1 (2008-10-23) Added new multiple file upload uses Flash, Google Gears and Silverlight. Chunks large files by default. Added new edit file support. Files can now be edited in plain text. Added new edit tool item so the edit function can be enabled/disabled. Added new API for client side plugin logic. You can now add menu items, dialogs and buttons from plugins. Added new resources.xml file for all themes and plugins. These are used to compress and concat js and css files. Added new support for file and directory filtering from page level. Added new upload.replace_diacritics option. Replaces national characters like to aaou. Added new upload.multiple_upload option. Enables you to disable/enable this support. Added new upload.chunk_size option. Enables you to change the chunk size for each request. Added new support for cross sub domain usage by relaxing the document.domain field. Added new edit.include_file_pattern option. Enables you to include only specific files for editing. Added new edit.exclude_file_pattern option. Enables you to exclude specific files for editing. Added new edit.extensions option. Enables you to only include specific files for editing. Added new zip.include_file_pattern option. Enables you to include only specific files for zip compression. Added new zip.exclude_file_pattern option. Enables you to exclude specific files from zip compression. Added new zip.extensions option. Enables you to only include specific files for compression. Added new unzip.include_file_pattern option. Enables you to include only specific files for zip uncompression. Added new unzip.exclude_file_pattern option. Enables you to exclude specific files from zip uncompression. Added new unzip.extensions option. Enables you to only include specific files for uncompression. Added new target_frame option. Enables you to open any part of the FileManager in a custom iframe or frame. Added new browse method to the mcFileManager.js file that replaces the old open method. Added new createDir method to the mcFileManager.js file. Enables you to open the create directory dialog directly from page. Added new createDoc method to the mcFileManager.js file. Enables you to open the create document dialog directly from page. Added new createZip method to the mcFileManager.js file. Enables you to open the create zip dialog directly from page. Added new upload method to the mcFileManager.js file. Enables you to open the upload dialog directly from page. Added new edit method to the mcFileManager.js file. Enables you to open the edit file dialog directly from page. Added new functionality to retrive all the selected files to the page level callback function. Fixed bug where selection of files could be incorrect if shift key was used. Fixed so the mcfilemanager.js file is merged into the editor_plugin.js file to increase gzip compression. Fixed so preview of documents in the createdoc dialog are in inline windows. Fixed so all dialogs adds a shim for the background items. Fixed so the user can't change file extension on files they rename. Fixed so the remember_last_path option is disabled by default. Fixed bug where the buttons in dialogs would look incorrect in FF 3. Fixed bug where paste menu item wasn't disabled if there was no contents in clipboard. Fixed bug where it wouldn't display the input path in error message if it couldn't find a specific filesystem. Optimized the LocalFileImpl class for speed particularly on Windows. Version 3.0.9.2 (2008-09-11) Fixed bug the default insert template didn't respect the TinyMCE url settings. Fixed bug where the an exception would be produced if you used the standalone mode on a page where TinyMCE was included but not loaded. Fixed bug with authenticators producing and error if they was overriding the filesystem.rootpath to a path not within the configured rootpath. Version 3.0.9.1 (2008-07-09) Fixed bug where Firefox 3 would produce an exception about empty id passed to getElementById. Fixed bug where Firefox 3 would produce an exception about window.console being undefined. Fixed bug where the insertfile command didn't work correctly if you didn't specify an template. Version 3.0.9 (2008-07-02) Added new support for adding multiple templates for the insertfile button. Fixed bug where loading the FileManager on demand didn't load the language packs correctly. Fixed so it's not possible to open a hidden directory. It will automatically go to the parent of that dir. Fixed issue where it wouldn't setup an correct baseURL if the script was loaded dynamically. Version 3.0.8 (2008-04-29) Added possibility to load plugins from out side the FileManager path. Fixed bug where the filemanager was producing an dialog on IE if it was loaded over https. Fixed so plugin names are lowercase internally to avoid confusion. Fixed auto detection logic for the API base URL. It will now do this client side to avoid PHP bugs. Fixed bug where using the standalone integration on a page with TinyMCE without any editor instances would produce an error. Fixed so that the custom_data setting gets passed in as a parameter to the initial request for the index.php. Fixed so the SessionAuthenticator is enabled by default since people tend to miss adding any authentication. Version 3.0.7 (2008-03-20) Fixed so the plugin info is displayed correctly in TinyMCE 3.0 about dialog. Fixed bug where cookies could be interpreted as input parameters. Version 3.0.6.1 (2008-02-21) Fixed compatibility issue with the TinyMCE gzip compressor. Fixed bug where the FileManager didn't work if the inlinepopups wasn't used in TinyMCE 3. Version 3.0.6 (2008-02-21) Added support for loading the TinyMCE plugin from an external location. Added support for inlinepopups if used with TinyMCE 3.x. Added detection for proxies that doesn't support non encoded HTTP posts. Added support for ${user} replacement variable for the JoomlaAuthenticator class. Added new insert_filter option enabled you to filter data passed back from FM before it's inserted. Fixed bug where some zip files didn't work correctly. Fixed bug where it was impossible to unselect files. Fixed bug where loading non english language packs for the TinyMCE insertfile icon didn't work. Fixed bug where an empty value for the general.plugins option would produce errors. Fixed so the getSiteRoot will use the script_name instead of document_root. Version 3.0.5 (2007-11-22) Added new filemanager_handle option to the TinyMCE editor plugin. Fixed compatibility with the TinyMCE 3.0b1 API. Fixed security issue thanks to a report from Michel Weimerskirch. Removed all deprecated =& new statements from the PHP code to reduce notices. Version 3.0.4 (2007-11-02) Added new ExternalAuthenticator.session_prefix option to ExternalAuthenticator to separate sessions. Added new ExternalAuthenticator.use_cookie option. This will create a cookie based on the session_prefix. Added new compatibility with TinyMCE 3.x. Fixed so that the external authentication page is runned each time the FileManager opens. Fixed issue where it was impossible to select a file if a user switched from IM to FM but only included one of them in the page. Version 3.0.3 (2007-08-21) Added new external authenticator enables you to authenticate between backend and cross domains. Added new asp and jsp example authentication pages for the external authenticator. Added new non flash upload que since the flash uploader was to buggy. Fixed bug compatibility issues with older TinyMCE gzip compressors like the one in Wordpress. Fixed bug where custom insert callback functions also execured default logic. Fixed bug where create zip failed when using check all link. Fixed some issues with symlinks, they where not resolved when used in JS init calls. Fixed issue with the need to have index.php as the default document. Fixed bug where the mcFileManager.init call didn't work as expected. Fixed so the upload.use_flash is now set to false by default, was not working correctly. Version 3.0.2 (2007-06-20) Added new logging options, enables you to specify level, format, rotation, max size. Added cancel buttons to all dialogs for usability reasons. Added new config_prefix option to the SessionAuthenticator class, enables you to override any config option with a session. Added new valid/invalid/extensions options for previewing of files. For example PDF:s can now be excluded from a preview. Fixed so that all dialogs are closed when a operation is completed successfully. Fixed so the template selection box gets removed if no templates are specified. Fixed so the dialogs will open more nicely, less visual maniplulation. Fixed so URL convertion logic is executed before custom callbacks. Fixed so the element names can be element id's in a mcFileManager.open call. Fixed bug where the filemanager wasn't loading correctly if it was compressed using the TinyMCE Gzip compressor. Fixed some issues with the JoomlaAuthenticator, it now works in a multisite environment. Changed the parent directory icons to be an arrow for usability reasons. Fixed bug where the animation of the fading menus didn't finish correctly some times. Version 3.0.1 (2007-05-21) Added new upload.use_flash option, enables you to disable the flash uploader. Added new use_url_path JS integration option. Added new use path from url functionalty. Fixed problem with error reporting in PHP 5.x+. Fixed bug where the gzip compression failed if the accept encoding headers where missing. Fixed bug with preview.wwwroot not working correctly. Fixed bug with message "path not allowed", some installations use symlinks for their wwwroot. Fixed bug where it was sometimes resolved the URL to the js dir wrong in some PHP installations. Fixed bug where preview didn't work on files with spaces in the file name. Fixed so that the preview isn't enabled when the user clicks on a checkbox in file list. Fixed issue where the remember_last_path feature remembered favorites and history as well. Fixed issues with very old PHP installations that doesn't have file_get_contents. Fixed issue with IE producing warning message if it was loaded over HTTPS. Version 3.0 (2007-05-15) Moved the general.login_page option to authenticator.login_page. Added new _Template plugin, this is a example plugin. Fixed bug in Safari where it was impossible to scroll the file list. Fixed bug where zip files couldn't be inserted or downloaded. Fixed so that downloading is forced by replacing the content type. Fixed so that you can change the default file system impelementation. Added better support for national characters like in filenames. Version 3.0b3 (2007-05-10) Added new CustomInfoExample plugin. Displays how to inject custom file information. Added new include/exclude/extensions config options for stream section. Added better error handling when loading XML language packs. Added missing language items for add file(s) in flash upload dialog. Added fallback JSON RPC method when Apache is configured with mod_security. Added more rapid demo mode response. It only ask the server once. Fixed so upload button is disabled until the user selects a file. Fixed bug where non english language packs where loaded twice. Fixed bug where utf-8 encodings of language packs didn't work correctly. Fixed bug where relative path didn't work for the filesystem.rootpath config option. Fixed so the translation of the page is faster, so it doesn't flicker. Renamed all "directory" to "folder" in the English language pack. Version 3.0b1 (2007-04-13) First beta release of the complete rewrite of the FileManager PHP. Version 1.9 (2006-02-22) Added new download options, enables you to control what files users may download. Added new custom_data jsoption field, this enables you to pass custom data from page to a authenticator. Added new iframe support, openInIframe javascript function. Added new multiple root paths support, this gives the ability to have virtual named root paths. Added new better error handling, this will present a nice error dialog when a fatal error occurs. Added new general.debug option, this is useful if you are developing custom extensions. Added new general.error_log option, this enables you to log any errors that happen to a file. Added new JoomlaAuthenticatorImpl, example config and documentation. Fixed so buttons are better styled with CSS instad of a scripted hover action. Fixed an issue with the logger, a warning was displayed when no logfile was found, removed. Fixed bug where force_directory_template and directory_templates options wasn't sometimes working correctly together. Fixed bug where valid extensions wasn't presented correctly in the upload form. Fixed bug where mc_access files wasn't working correctly under Windows. Fixed bug where filesystem.readable/filesystem.writable wasn't working as exprected. Fixed issues where directory info dialog wasn't updated correctly when some actions where performed. Version 1.8 (2005-11-10) Fixed so the mcfilemanager is a plugin for TinyMCE, makes the installation process easier. Fixed issue with parsing of the XML language packs in latest PHP versions. Fixed so the preview frame gets updated if a user creates a directory/document or uploads a file. Added new DrupalAuthenicatorImpl for integration with Drupal CMS. Added new PHPNukeAuthenicatorImpl for integration with PHPNuke. Added new alert message when filemanager popups is getting blocked by popup blockers. Added new not_loggedin.php file, this can be used to present a error message when the user session was lost. Added German language pack contributed by Markus Vetten. Added French language pack contributed by Olivier Gaillot. VVersion 1.7 (2005-10-26) Fixed an issue with the language pack array merge in general.php. Fixed issue with short_open_tag = "Off", replaced all Nz9ӧEBP ,6Y%+F *Z͓+,Ibqxȿݦ"ߤ2L;p'M7k,:C7\ 7XD+1ݭn!J`;܉8<).mMm|vS ?mxvHׇ12FQ_2-Na,ϣ |v*Bh/Yy #+\Ok\d6KY*ױ7J.*³ce8 Uy":;ύJC=HJ|h#Vs`:2j z޵|`aI-ז| OZ\N!ds1KV3΃`[ˢEHΫKV[<+(*w7 >de2@/IߋޕwM{3oԛM~&! =a\tv^ק'xIbȡEf֐`hJ2{y#]KI Zq>+*`fp0he4 Q'&b6TP]-,hBy#L4q rA3q#ԥH3+C ޽*?yڬ@C`yrUq,"h2ZZlZᡖ @wxXC/?F.Wq΃<LY/pTd[!؄FydLf3}1a 'P]G>?ᮨE60|n¸D?bvݘMZiӍ(-!?)>,7,Bhv 0$u Y~>kV*G dKI_~c`Y(;7g lNc$l~ v X&]aݽ"ޮJ&R@i(r*Zk*Ov.KqD@YkY-`lWP:`-Һ0(9v]c%ZCU7:Ѽ l\Ȓbj1E'eL"YrDx!n(lf5%gPjLmT\+g<?d_(Z2zb>s1Qe7w髟>zɫ~8O?=z㇏aQ{d)Z%N227ł21͕Jp!x$⾢^S-nE1h-#h٫4*Yɓ^FiW~ϯ=zޓcSד@Aw5P\mt|NMkO;I<µh육=ꍙ`3v;\zۗJAh*. [,Z/_\FFlqz,A=AlL1BBy 8৊>$G AٙmE&tv~{[9$dH9D|&?+?>fʦkCNQFVjaʥ4Ec}ϓEZ A@Zi4K2Ky"\mP-"hO7ó_َOciJ?p%/pdyUv(- 1Uwee'* ֤9,44LK0y,2M $7N <g/yeň'{ a[LpY܅;l`˹_I+NAl9c TlDzCK  w,h3[MCGSz\$?&5P@7ߤL0řBtuv`E,e-}dd-4w( Z҉pT4 T}7oHĕ'`p Sm<MJ- B6ajrz%:f\uETp{-TB*7(z_^۷B p10f@Z٥$ [' ޞ8ݭ TPC}A تOՅdrFR솺˹yu3SwnoU%@!ƻV2\~=<(*+GE^t,LܩGU(*P PU rvs x@(s|{(D6Pv+gۺY,"7:rFݣq4:k#A4pGT!- qc T81d,Py m+5̿wIY,wc5TA'?'W"=׻7bwK9iʽy|#J2NT0 I"<q9ySj$K`I2y'62t"]7>M9>w倸N9'Ƥś6b?#`qA9 1TrDNE~z􀍿9 #cGUPrU sa ٛ(rtVb0xbcU)2c.LӌrDX zᡡ#TxR+ &B#~Zܡ0J*,, iǞ2]h3zY@" ƲpXKAQa^`'bP8״s/`?3d퍨Xǘ l>(EHy*| ArA}{#3ve $ UKd RFe֢{8cz\jb(cu)pOՙ`NZ[uk4쯥 & #4z*{~x#Ld*Xy}':-NN-; 47v ./RoX  (}.g0T}ѿyC#ȾNC@}(s( K@򨨸't6 L9a⳧D!Ը7O\+3,ߤ x<"E%CQd2f"kl?]QgUI 5bȤ|tB#q$<)tԆcG)_>ݮM'<aT]U*ȠduS?Xc2w SGlde=( ,+)ږ}B<- ,LwLoru@KBx!2_˰VSw Kq:wJ-`(Q{`?qJ`F1#%P SX%Bw8Z Nz=w&0r"b*/a نQఢ"NJrEV M,rR~<UY\Ws7ƀ4U: ګNMu&Ik, 8QH Lr 4dmU>k I\zaZX6PkxOqXWuq9#V :{< .ͣrҵn3miZ]E4B]P~^rs9 y :aL-N+ Z5^*GoW|!xK A h#Qfo?hJ$ '5։Q>,a~5bR%Hu[)_'kgogjMГ HI1Bķ8q.ƺ{]BΠ7'ۆ~Ljͧ*trkHYgn꾾E[reVn&.k˾0}E'n'Æ.6q C-E4_Obi?Au8Chaҙ/e"c-m1齃^[heՔ]{tW?{,~὘r_ԓ$UBݻ[ݵZ*mGm9b*~:vfo-Hɴɍ4"hhJ8a:<73o5 w%wQ:{8YmRyKrp_)?&g6ȳsSC~ 쭼(b: pC|2(?c Pa.ޤɒ Y}ݓ' Ktl nanBL'WMiE =og!9x&\^Z*57ͳC@ΥNs1JuIycGU;jG$cX1qVH~!(p{L5pJ)9ɦ;f?}2Ύ / RpR$}1qHGRwL]?^kT\k|ݭ߷]hPJ^SQp./)WxK 5K4>`@ wiefXFۆ0MŚH2`f<JZİ>{IZHnNRq_i +Fw[28!NZ˥crQXL./ǞӇJ>3iUlѠ. ?%h7UK[,N~ysD1]+Ñ9E8\ub9 <xSw+fTRI.vMy:ߑW M:9*R34MqW/p`OϠχ1#(+Yyxېؾ )cJr\c|v0*!5L llC;[YJ.ڞC75od6S6Zx gwz⻶{\O񓩎 ":t84.9ydb'%SƙY: ]s@Փ|3Cu!LsKu|AN穋d(&>+:0\LI| 87 v<7Cf(YmeS8 NP]tCI6N=.o4pȩNw eŵq;GF: ^ iQ^i!,]Ѻ|Xk~OTM!eób5}E\bf:Y,Gշ?3!ALB" W%u{J Lbv7cHwEp2Ra*cu:EQÎN4=tBL"w"U=,*eMMVRn+w.?)`=;V"L+9!l[m%]RE=^ŭ擀2qJ:qeuŘurrھ*N<܃DmH,)#k.ѼkwBiiZ_ ,9Py{tؔ/+N NH:kL|-=O'J92<:m`~uTj|XT݅cRrFLs?+w#|.zE)g`4ޤexO H qpUc,Xw,oo)f*hEit.y2FޠҼUA+}8@y@2I]=[dyG]}#lkn7 /!RQ+++JV3W0]aU'hs%Nyh̪B1/24nU<[n ͕RF01'MPlP\f7*S =[+jH0ڬ=f쓻dg:/Gvv:՗6CxMɐ 'G cnVSc}b~":)u3>NcI~nQ!Vw0LaFEQ+[ R )Z [0*=R#JygwJ]{7r:lO#{Q cVQ6" N!^ȯv0[(: < 5^nt8T#LlZi=0(Ny~\/Z)'`cDl d֔r)ʆ,PlO {Ap|!-vx Fz&[o_z*~sнL7ۧ'd4­+e2CtXfSބV$iiv7X*I n~Z%EmNuH0~,/V,u8و( 7̈Ae|4[Q *G ;frD(fF ςخe&AFTz/ަ_@vB `ro2V9HHLeum+sk&;S]x$'4lٷyC<6/33hCkOOr$a:gw@4r=9; p'4fP!θ&d蝹r00VllǦ<~ptqf` g/2%ǕYޞ9lY}8qRK/#DҸfilemanager/js/_cache/fm_core.gz000066600000060201150472616010012615 0ustar00Y{H(_D?,eICl,yVf6ؑޫX8laTjo-:-`t!&CLnd3Nen<^5.^g%sj]8U˖:=M,WtU,C*jjJo ~~yB>^`Ijyeܪ`Ql3<꾎'sS}BdZAGj|gL#xʦ oR4-m|z\O?&`Z+#{/,_ډ6DǐDܬͶYDZFQ /'(Lf)ߔG'`| 6Lr &&ĕT02fvN9?d:6pj=U@ƌE[ $wnh. mb3֎oH3 e[k3]'tu%l&b^c&n ~Û nli`4jq7py@M l`8c̝hcMDgFu?lUBFny9iV” Ӈ38/ 3{?&](ۇ]'uZ4/?,yނ'P{uBo޼HML/籗Z-ܬV3m$:5lI$́Ԕ[$~0T8yC!pɵ(Hujb8(U'yGC'^tي u1fOx "je\tqn`FV&L7E_&n[c"'|-Ӽ(‰(0 p]Rv]>Rkztfm%3x`or&@#i‹Q.@: L_ Iurcp\OlA M̨'tEfi (D/KWn<vtƒpLf3f1Wz{jq?~y59@e ##8q{^(f9-G$/HHۜԇ 91,v0۽u&ֹ*w@x1,jO㰜1 %ᥙ ;{N!]X'+H4M Cgn62yTsf&Y-NU" esOq2l6P$mX[i\N[김 YL)0`I<đW*MTpQZoYX`LSWq`vYx@Q` hn~ S TU&MfU-deSm!KDʎ =ʴ@(~L|.Jƕs5ߡg~Z* LF'b8#4QMO_1¼5Cmi&z@%Hӝ;SJɴijZ;-4:Y|SH"_ 7[%\xxܜ'K`rFX(DB\H>B@Xv!æ ,5Z(XCp=3ߝHjǗPF(t8KKt5RtvG{64YVOl 54 z GDjJ` aby*PF<*$p7Y؉Cw]P'S3t1V?.0Ngٝ8m,bHhEB~4v -Zـ|^h,Z$B<^NOluD1X@#AԱ R ȞuMjӘR| u@AFldj F 4 j KS-0d&[%"GJ0\`I<룡j*N %D׶\tk;Ō(863:/<5d* B~Q "(w.pbCJ_LbcP͓9 N",=mMG+ZQBR: 2B ի=̳}\ϘS0fq^Z-L#֨1܆Zt8TG'P _$B\sŋ=!\ onE<نH櫛EuXtG;s:d<-fNtG|OіSjO쌞J$q``-t+81^V>p/nU DrcDFrs ``)bj;εn|Y'#ZdCVTQZH9YeJEQ#>9Tiºк!p|noS05'+67u2]4;g(#2q2=U',{HS6+U ϱ"SҼ[C{0BʰQ(:P+.7_:kn_WSdb"wPkB^B}am:/Y2ZSMdqB?f.X'I8tZN(R@ʨ\h栭c\%f*x3m `>S;u^1Sij4SAV)їP]>*6${u1PڵE3{ WDS% ߜ!3ASXG\4`:`O;tzI掔/mCHrTtk%!scOFb\`[Ej# XŜԃ+j*QS:p=|zPo/N?0BXjMETr:9RtySlmk\б)~^0‰9fD)0YGYaj԰7Ji&cf8 *wo|i͂V "x"Bl?zpwίc.Y^LM6YYfkoby`YW ̺.J bȪY/<8Ɬ]زSLH'RX7`ȭ=fǯ$k wN 5[z2B"#FC_F^Nx?1s;@t՜[yyOm ltYb**c+VIz@Xh4sn7HmJ=S&+@V*DߥP6F+͸20[p VS.܊V eb&*iӮkՌbtoѳ~ʜ. Pkt S 3 <`fS6';˥ ؘH`o%+lXoC qIr Px)b? %-VR/oALՠ\>evЍu A6˾x3v UƧaJ|ȳk\_UQwHrze W Y~}9CُuRN@u~5=$Eh;ޫ}jWSY8CŎ[t8۸qٔM'BB՗[EdӅ3B_~>йf\i04Y-J ~:]e8{Wt4tdPyv/tTO_ ϫ`=j_jVu` V%(=$8)-F$u$b" 5tVPNh: PC,}Y\Mۗ`mDi kd1G+8GAQ;m Jku"RP!KFZiN$Kyh.DjS̰D.ZZ|\xC4 !V(4͈Fr+\ \[bEQ՞D#ΈUNiԲ1J!+֫fOAD:wMQJ$g*GyS"ܠ#0;^:8ӟz.n9Y+5]hKi7 \P+aFg<j5zXA-, Wo\|E _gD{dtI3feuiiLB/;S1IYGG塳Dw jU x|hCV^+y(iT]:7Np|;kc4)l hp: ՛zPG&PJU u-Ul!P:n<2c#:#CDF1i.ra[>nz&·pm[ Oj!V]ɱS5I;><ۍ fu/OY$酶J}M<2Sbg9(y)*ݠpyr"yȘ$?MȺ\5rWxU& P,cу6:d7ڔF޸cEl;m )3V]]>ָ֥ `a(-kq'M4Kk'\\y;|h8)V#p\_T=ծ{,TÒXHe98Xrǖ&U ľhAnS ]hIMu}I)F ۀ{ O ^GTozV!=R[VkZu+#SFE(yZ t7rAx  =).PͱU>. jHNɶ+e%Bj0v] /qEv+Qx1`#j \T" /g|y{;9\zP;I\cDHaisr޽,^::pov eς*D+Ɵ&#sTUnhY0 k^f`b&uﳓKh^EUynr=|W ҅6tuX&ӊRDi8)B&2zk33ےRg%V֞okc-9g =d}^4!Ӱ}BĪʓxm4])'8s\|U4 8]:[FlBM5aņ(xJ>I44fr1&U ;U*#Ƙ~=d,M]m2&&cdYy⢹dRhQk.r0榭LBCs4 TXmLmﲼiʳ7u86α˦Uc'(ÙHR]5"":bTϺijϦ<\02lU|#0vH.ӇEsS  Q#lp<1.C2 -݆Nc(`0kըI(jhO1~>vaet͞hA;6Ga#TCH4WP uX=˭@q9a\*P@M?d $Kn|bI,[-L>!6t J8XEc< <vjIV⠶Hu:}s}(χxĩęt]|&3Ӯj/9_|5Lɍz\860Э;T$@䃠"(ߞ+{uxQgߋiR-Abs/42_ ?Mv 3;ĞH'spoӾq4]MV[-SեSw8l_hXr˷a(<u𹲺A})4 VEYHz _ǘo ك!?`scgB:Pf$ÿJJTz3EdT /*n$tL!L4JJu n#tjR t{AlF~yla,u Oن)^ QL%YV(hVp9 54kw0&m@?S£8u2ip`i?A$&UlM?&;D3tyE$"S+"qdAG0Q:Di\f<˥$\o+\M9jcPuCPv%/[pe ^B`ZaOOs n d&hM`݁͟'+Oͥqʈ$w2-QU@|9&9j(],u-,̡ؐq0p셟S+ `z0WH.0EMiCDK89x7#nƂa Jfi/\!Q~RA=iV;1vJ7W^pkTƸztأb{&WeeٟW3/5vcJ=OGutQ?pN;s7%B_-xFԩ:wՎ;F pg^;FYRY K]V]:§j`Qr<(?Ӹ ~{!OibI H<_~ݷ0r$VF>B/;yaiB>x0a>.z5QY|aFÂp9ΰ2XHM&ؠ RK]Aߧ|D+ m 64A6PP3fH68|,7c"JЄ{4C`ȥ=uc[ݐT)&>.FxU~HJ]PꦫTr>{R~ۄx"rM"] V.-d#>TC- e 3JujecA@F;wD gLN&:䑍F5q'R'm(5FqFU1=$*_ `;8eJc΄eϚPr)gb+ ysFE@kxQd#jzځo0J=*jv.0dzߺUdypZ7l؆ ޳w>^$}l%X4@RlQ 83Չ4Dgq&<hzT 4T8z ,ʹLod~U6iKh9{{C Wbȴ ӱ 6i cQ@G:L0ꍊ)'G`?CA96NQD/dFSUc+sHʶ"eŠ&ӫ39t(*.`WE=T+ʚ}*"r )> *} zNj v4hQׂB i%Z16;mvv3];))eT\8tbb #"#R0Bq sHDE3J$EOVhD_~:c{|$["82;<[~crO1` $;rtC0sW&~Kb'gD">1r2Yoߦlw$zjcy)ͮVKn7%e v:Κae5!YJL@J7ьfTQft~>0}I("[jy74 Rɬ.<CJY}eezm=h(JNK#PHʛU.['cSH~hvv. zljQ;ytTVi8Q66T$ L0iӶZLd"oD4p!QA`IQ 1Eaz87?*;"rS^>|1z Bhw k8`UQ lF1}p=l^|Ϙ~*wMh@VD' όe% ^$L0Dɝ#M.6*b˃6oLsQ mMY-+J?{nʇf`׋M<]Q,zEº٬+pЫgaՌQp.bIbEALtӲ\[Q雙'<4L4{Q=ߏ6aͪ %'P-k'$'qh8/,M_ZNA#속lqdT"{N `R_I@ Rc?*W͘x87OJ^YbOˏ sM5}ve;(K[ΤǺKQx+S^/G \Ap7s,L:)kpi%3@վf^UTs곱|"^Bt+TUفC—h,vLViOUP݀YU8P.4] ߋ+wpb$ }zRԅ=o<՚h衝"|!0gTyt80 77LSg&/5x:Iʢ1*Ws~}1NXfdN7\"r^'* sqn>>(nP!!QQ 9M7QPk,{P-P@B,.Mhr3~uH)cwz؀[10x~&` lSPicN{"x>+w9Uω!8!p@$q:Ꜥ4Ƽ*͗Dih@Z'[pG5ģ Ȋ5F~]VasЯ+'_֠9i/Aa;^sFZ8Xkrr[pnh oP֓uwc&6BDz=;~0Fp!ʶ+Y hmĿ1(ى#+ϫ>İ,\Z'҇bGEבFt7 [h50~P0+S^D MPH7V#Uvl/9c̘cLw8o?p<0t estC6ш*VoHPёteC_ejI JW%R޿v..M6󌄚mVϺOZvcJ[tlKzUir y;< a>/ z8Dpi.H7. 3W;rEUyk@ NSR Pq]E6no+IrX" y&omȂ"CuX&(dmݵ'Y6ӌb̌!QzA@)طs~0Z^0r{#6 zzVꜻp8ȏJ{tq1!6ZQ 6D)]kV `VٛAWgGfc\9m DE?a_ò0CmV"sbVO.!Ӹȫ!$z*]ӰIGM. Sx6H5k9f63qAY;,։pӞާ4kC|'i/BV4gĔh's#˷կ#nxx50BAopWS`&|şoCV(^=L3п|eH i8Zoew`~>Etn!~ruz ic$jK*p0Ld<|M!}B E^G"G#|3PZm4jͳzD 7_/"ÒV6 q 7ŋOF ZV3:TIdֱ67&f#3"6>b5S#FK!y(2*rSb4 lZG:F|2ph"o A:īa(JsP5-ZzZNF Rہ77HwA.`:,fޜ$/d1ck}a!OJ?DHF] wA|^~⺫}ä՚>=çQԹvoQbǂ})zt0n|/x;뺵v&ɢɦdӖ7<;|@}IV6Hc "\soƜsxW1b03ZKJ:ޙu6=~w ~Z3 .ܒ, -j%|7! 2W>[ }ji:TWz4&O{14 rzb&hJv O _l3b)o++Iց/i>BvO{r.۬ ̞ ̚J1rɴH7Wgm2,7\VeGGʯa Y(}~02 \L` tao,Ygw:? jB=*mj(S]0Ǔ^`Q IԙYF4+jÊv+g(zlpP@>QK1I'DΊKɉ=^c)'QW%uIU|Lg2ŋV?]dd __f&vx4 ',bCLRA驁E;e 2(}ŧꢷ(4w׹kp&zh`AP` -ԛnS=b,| -BHRMJճS f~MW).Gp{u]}L[7_Oo_|χooݷ??oecžiof*ٞ!WdyIfg")U»X>) hh$MahX0~δ}8a4Niwd`ܴ~S  ގ㙺"jnjM_v3SW;N1Gի,8d`M6tɌE2=7hPT閨-)Jx 6~ŷ>>oƿDg3MefXrhs^ݯMTt!@$|& L9_eE!{X; J <|d}*lsݜkN?4''O@)\0G"R"u0!Fy }*ib*kB-ګG%1!JJh_8U_~QNA|)%抝iG_)yb~v (UP]j.^PegS˪t([EdɅS|`l':0n_*kN̛x?2uRg^ shodBolRRFN26).]z@fDzJ5{ la(M:밄Х Yla`SVӓ9`*f ^uF Kĭw{LaBi;H4Ney}bhN[H{>t^/j>"%YC!![|dW`ag,;c]Y=Guclη^a'zԥ\ozn 001PL3N(_R [LBu%ug2bC''rO JV5\y KÀQNڿ?MS^JT!6Bw!v 2ﻎV9.ļ2Tep;( Z0]汃$(3*]06_׼6y )ysdv ugy9B; C^ȵD% P \RmlSh!} -j*:ȱ .rh"B_B7`e\sˊOgpvmHb83ŵlޒBu-]Yszz"LTյr.\GqX[U K %:@Iw c^׏tonBZڃ#]Eu1lSjcĻRiYBl7<8H4L\Gdd nfzwqғ^#$=mi*@t'h3lϑ)hiL0\dgJt8 LwQ"B~1T w߾}ZXS- kֺŽvwN_g9(7[$@-+Je Xj1/}L=TmƎea5)[ogUBç&yꮩzdƂ[0IsF;'7uVOԼ19zQ@m*6lNuSͳM鄶tqV᭣kO[8jE*>/d*m{]Խ=ښ/$G=v݋EFY#^g3(L@[jKzmE B̊eFg,[Hc&TRKTqI[p|_2u {5<|6L,}Ψ0sw74FTl1$S!^S qh<ޫ}֫-qO j rXǦ^c  ) u6f@ڝ%7C `fJL`z{MY,X9]?+*N7 >2j[|Z O׀Z Rv5@tF[)jw/5hy3<QHJUY}3qEt!x*h$rj2֧꣓9q:=G3[޶UbDzxl'NvO]х+V+LPXך_:YatG/LٶԦMuQUWc+)SY}򭊋d(k -L]@qBVeI, $KhgHןdm"! _knuCFpn? ڦ"ۯۭV]O ٞS}'[IU%N[HZyh^ gI9D_mxjGB/@,48o5n]s<5}Fw'\mw^h(fŤc /i 3(<iɱfA,/=nIVubPB6-DmQYMƎMLM ?q=b~*d}݉ xՄy[>mm*if|B7a}m}8@+W>r)fղXoZV{CFqYnƶf7SŦVrBy 3gVwΖy~1iUv\}p/Oa]P)ϮrI{ٻ랭hyrL "}C*(ˑFK9yYRkG~{ p`*U>Iy C1!]˞ڇ)E"s>u4tG:g~g >Ե<T0Q={&eAY[GFY<نp[NqUUuyؼnb0#"zmix73s )Mk\(1v,5 7Z7ay |c`%m3:FX6$Vf g=w{9>,&/=E Dp/ͶG|e5/yQ(?d2cB6 Dfykjfa fbxȷ'\}r ۗ%ċ ě%\Ϝ~y// a"pm[4I8- W`0sF"E' Sq1HķC=^ZX, z͍#$.vpK%'=i]7u1_Yɿq$%%pc<5J? Fl@jFqbݪd {nf*WZZ^} v/w0 ( B@Skpl\Bڭř{wAbĻ ™WZǺ $htF?s9 k`XFK`s޿}`Gǟ{5v}չ,Ieۗسxw#kbKL]# DE%wz)_ {e0~'wx9e4Y6y \323APڌ1)>ȘvЮ+Sr?8*^UDTInav9o L<n|fM03{e# *7i8(1S ( ֌dbx=4yqr(Pl3O_>(7yN_{> FA;o F"v*ǯ:n_QGAYe|&nkOYȮ\Cayq9_/a2>N &6G PW/OzcIu(uk[~dgD>꨾p;Oo6ൄ"N._$`e#E^3PD/?"~{8q8382ےfTGĂù[pVgmFœ9v{Eb:^gqlY}yzY=( zx4\| BqqN%ӠY|V#g+qy U8E;rLV^ߺ xAhBPoO.!ŐWX-XL㼘 tsH\dz~nmD Q)I+a':f7!Ƅ#1D#z੬$9 /CɷSuqӑ_bT*'aF߭;G%sCVNL G8+? ~ oh_SY<]vgP^RFyy~9o__ɫ@ cZ7(`4s8ܒS#b߫dKyۗh_zƋ/N/29Cg`>:m]pn-$a]P _7?$92;Ra:G#0&y*|糛r>1 ٴHԏ,mMI!y:+vf6qk݋'4Wk 1?:?oz+\+]I'??>>7͢`C?OşH F F >$A5 /hs! vsAT@ ~FgȬ>ldK<|=^cԜMyo7L~biQ|?q61%OMo Cz4O/jz@̡ ox)O߰_ֹ,kqI'#I\ s% !3C 50?)p BG cXfgwZHe+փ@έȖS@r PBk o 6 LՁ/&NgJ t5e,)oqإ^i lԝ0ګJ^-8=9w< p*qv1ҷ!UVMg1yR: Y'n'0Rgd@ZSnyvNfDi]eFG=\SPwߴB_Z3 p5B1# !%M9,F؎ɲb*oD]b(;-SJ[=%\(PzLTvzMSaPoH f&`LH1XH j` zҐsgp8H/@3ts MY ^;ofPUӻ]+]&aY͌Ǘ=(d=v|o=i7ajꜮ~ yw[wu* a;sEz.Ġ|s-4}+:"ކMF%W''2Jyt0TiuK\K w)yJc*Y0, ,,JosnYRy"9YK$h5-U_YK=ZbG<(DφPL4Vpۿ[|9^}> Ӿ/8m(~e > u.T;L%V/([U~in~M>6΋PQi)*Eiഛľ̕~Vl:e{߮I%"B*(XJZ=^9E<.jƌf/o[#s!M?LAc+@'_Oq jف{{&q MM< 3yEYD qq@׷y"8$_Tj<_@ ;h!zX##uO0 Ū|=ُ Aey/9ldn}` 0UAeD\-LCQNMmsA :Nݎ72NŖ[GUˠGthW5KY8%N*ܠRülbW,ϫ7{<9`XѬAgb">D]0gKʬNO;@(syLS ^ eZxgWgH${rm(*^`lUs71Jx\h@>~Dg% 埡ovV=kA W3%y۝T+H%{թX,+h/zEtguM4f0tbbIO3gDL;ʠiJτnbBB# 'tZ3 T)y&#ģM=7/Ѐ{n{to Y5"`1mp|[Iٴr eJIg֢鬀$^ᵽGo8h~4'نQ sl^}Ż%(1GSxV!*CL&#L@a),.l^,6~֑&z֛WxN{e[z\YslIcPJx5`ts"_}j"֟=MY%^[,n'q`U(6jBqImo`԰{|ĥ[5~ zn(Ã^Ͳzll{.HV ;s/oU x8:6QDdc9e#>filemanager/js/_cache/fm_core.js000066600000237375150472616010012633 0ustar00(function(){try{var li=document.location.search.replace(/\?/,'').split('&'),query={},i;for(i=0;i)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
        "]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
        ","
        "]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
        ").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();(function($){function xmlEncode(s){return s?(''+s).replace(new RegExp('[<>&"\']','g'),function(c,b){switch(c){case '&':return '&';case '"':return '"';case '\'':return ''';case '<':return '<';case '>':return '>';}return c;}):s;};$.translate=function(s,e,va){return s.replace(/\{#([^\}]+)\}/g,function(a,b){var pa=b.split(/\./);if(MCManagerI18n[pa[0]])a=MCManagerI18n[pa[0]][pa[1]];a=a?a:'{#'+b+'}';if(va){a=a.replace(/\{([^\}]+)\}/g,function(a,b){return va[b]||a;});}return e?xmlEncode(a):a;});};$.translateElement=function(e){e=e||document.body;e.innerHTML=$.translate(e.innerHTML.replace(/=({#[a-z0-9_]+})/gi,'="$1"'),1);};document.title=$.translate(document.title.replace(/^(http|https):\/\/[a-z0-9._\-\s]+-/gi,''));$('body > *').each(function(i,v){if(!/(SCRIPT|BR|HR|INPUT|META|IMG|LINK|PARAM|IFRAME)/.test(v.nodeName))$.translateElement(v);});})(jQuery);(function($){$.fn.sortArray=function(by,desc){var data=$.makeArray(this);function numSort(a,b){a=parseFloat(a[by]);b=parseFloat(b[by]);a=isNaN(a)?0:a;b=isNaN(b)?0:b;return desc?b-a:a-b;};function strSort(a,b){try{a=''+a[by].toLowerCase();b=''+b[by].toLowerCase();if(a==b)return 0;if(desc?a>b:a');t.shim=$('#'+id+'_shim');}$(document.body).appendAll(['div',{id:id,'class':f.theme+' window'},['div',{id:id+'_container','class':'statusbar '+f.type},['div',{id:id+'_top','class':'windowtop'},['div',{'class':'left'}],['div',{'class':'middle'}],['div',{'class':'right'}],['div',{id:id+'_title','class':'title'},f.title],['a',{id:id+'_min',href:'','class':'action min'}],['a',{id:id+'_max',href:'','class':'action max'}],['a',{id:id+'_close',href:'','class':'action close'}],['a',{id:id+'_move','class':'action move',tabindex:'-1'}],['a',{id:id+'_resize_n','class':'action resize resize-n',tabindex:'-1'}],['a',{id:id+'_resize_nw','class':'action resize resize-nw',tabindex:'-1'}],['a',{id:id+'_resize_ne','class':'action resize resize-ne',tabindex:'-1'}] ],['div',{id:id+'_middle','class':'windowmiddle'},['div',{'class':'left'}],['div',{id:id+'_content','class':'middle'},' '],['div',{'class':'right'}],['div',{id:id+'_bigicon','class':'bigicon'}],['a',{id:id+'_resize_w','class':'action resize resize-w',tabindex:'-1'}],['a',{id:id+'_resize_e','class':'action resize resize-e',tabindex:'-1'}] ],['div',{id:id+'_bottom','class':'windowbottom'+(f.statusbar?' statusbarbottom':'')},['div',{'class':'left'}],['div',{'class':'middle'}],['div',{'class':'right'}],['div',{id:id+'_statustext','class':'statustext'},' '],['a',{id:id+'_resize_s','class':'action resize resize-s',tabindex:'-1'}],['a',{id:id+'_resize_sw','class':'action resize resize-sw',tabindex:'-1'}],['a',{id:id+'_resize_se','class':'action resize resize-se',tabindex:'-1'}] ] ] ]);if(f.bigicon)$('#'+id+'_bigicon').addClass(f.bigicon);if(f.chromeless)$('#'+id+'_container').addClass('chromeless');if(f.resizable)$('#'+id+'_container').addClass('resizable');if(f.statusbar){$('#'+id+'_container').addClass('statusbar');$('#'+id+'_bottom').addClass('statusbarbottom');}t.show().hide().resizeTo(f.width,f.height).moveTo(f.x,f.y).show();if(v=f.title)t.setTitle(v);if(v=f.content)t.setContent(v);if(v=f.url)t.setURL(v);function handleAction(e){var el=$(e.target),action,f;t.focus();if(el[0].nodeName=='A'&&el.hasClass('action')){action=$.grep(el[0].className.split(/\s+/),function(v){return !/^action|resize$/.test(v);}).join(' ');if(e.type=='mousedown')f=t.mouseDownActions[action];else{if(t.features.onaction){t.features.onaction.call(t,action);return false;}f=t.clickActions[action];}if(f){f.call(t,action,e);return false;}}};$('#'+id).click(handleAction).mousedown(handleAction);$($.WindowManager).trigger('WindowManager:open',[t]);return t;}});$.WindowManager={zIndex:100010,count:0,windows:[],i18n:{yes:'Yes',no:'No',ok:'Ok'},setup:function(){var w=window,lw,nwm,op,b;while((w=w.parent||w.opener)&&w!=lw){if(w.$&&w.$.WindowManager)nwm=w.$.WindowManager;lw=w;}if(nwm&&nwm!=this){$.CurrentWindowManager=$.WindowManager;b=document.location.pathname.replace(/[^\/]+$/,'');op=nwm.open;$.WindowManager=$.extend({},nwm,{open:function(f,a){if(!/^https?\:|\//.test(f.url))f.url=b+f.url;return op.call(nwm,f,a);}});nwm.find(window).setTitle(document.title);}else{$(window).bind('resize',function(){$($.WindowManager.windows).each(function(i,w){if(w.lastRect)w.resizeTo($.winWidth(),$.winHeight(),1);});});}$.WindowManager.currentWindow=$.WindowManager.find(window);},find:function(tw){var i,ifr,w;for(i=0;i'+msg+'
        '+''+this.i18n.yes+''+''+this.i18n.no+'');},modalBox:function(msg,f,cb){f=$.extend({type:'alert',bigicon:'error',width:400,height:130,onaction:function(a){if(a=='ok'){this.close();if(cb)cb.call(this,1);}else if(a=='close')this.close();}},f);return this.open(f).setContent('
        '+(msg||'')+'
        '+''+this.i18n.ok+'');},remove:function(w){var t=this,fr,z=0,nl=[];$(t.windows).each(function(i,cw){if(w==cw)return;if(cw.zIndex>z){z=cw.zIndex;fr=cw;}nl.push(cw);});t.windows=nl;if(fr)fr.focus();}};$.WindowManager.setup();})(jQuery);(function($){$.StatusWindow=function(f,a){var t=this;t.isIE6= /MSIE [56]/.test(navigator.userAgent);f=$.extend({type:'status',width:400,height:240,onaction:function(a){if(a=='ok')t.close();}},f);$.Window.call(t,f,a);};$.extend($.StatusWindow.prototype,$.Window.prototype,{setContent:function(co){var v,k,h='';if(typeof(co)!='string'){$(co).each(function(i,v){h+='
        '+'
        '+v.title+'
        '+'
        '+v.content+'
        '+'
        ';});}$('#'+this.id+'_statuscont').html(h||co);return this;},render:function(){var t=this,f,v;$.Window.prototype.render.call(t);$.Window.prototype.setContent.call(t,'
        '+''+$.WindowManager.i18n.ok+'');f=t.features;if(v=f.content)t.setContent(v);return t;}});if(!$.CurrentWindowManager){$.extend($.WindowManager,{status:function(f,cb){var t=this,w;f=$.extend({onaction:function(a){if(a=='ok'){w.close();if(cb)cb.call(t,1);}else if(a=='close')w.close();}},f);w=new $.StatusWindow(f).render();t.windows.push(w);return w.focus();},showProgress:function(f){var t=this,bl,id='progressWindow';t.hideProgress();t.progress=1;f=$.extend({theme:'clearlooks2',x:-1,y:-1},f);bl=$('#windowManProgressEventBlocker');if(!bl[0]){$(document.body).append($.createElm('div',{id:'windowManProgressEventBlocker','class':f.theme+'_event_blocker'}).addClass(f.theme+'_visible_event_blocker'));bl=$('#windowManProgressEventBlocker');}bl.show().css('z-index',t.zIndex++).css({width:$.winWidth(),height:$.winHeight(),position:t.isIE6?'absolute':'fixed'});$(document.body).appendAll(['div',{id:id,'class':f.theme+'_progress'},['div',{id:id+'_msg','class':'message'}] ]);$('#'+id+'_msg').html(f.message);$('#'+id).css({left:-1000,top:-1000}).show();if(f.x==-1)f.x=Math.round(($.winWidth() / 2) - ($('#' + id).width() / 2));if(f.y==-1)f.y=Math.round(($.winHeight() / 2) - ($('#' + id).height() / 2));$('#'+id).css({left:f.x,top:f.y});$(t).bind('WindowManager:open',function(){t.hideProgress();});},hideProgress:function(){var t=this;if(t.progress){$('#progressWindow').remove();$('#windowManProgressEventBlocker').hide();$(t).unbind('WindowManager:open',t.hideProgress);t.progress=0;}}});}})(jQuery);(function($){$.extend({createElm:function(n,a,h){n=$(document.createElement(n));n.attr(a).html(h);return n;},appendElements:function(te,ne){var i,n;if(typeof(ne)=='string')te.appendChild(document.createTextNode(ne));else if(ne.length){te=te.appendChild($.createElm(ne[0],ne[1])[0]);for(i=2;i)/gi,''))),opts);};$.extend($.template.helpers,{sizefix:function(v){v=parseInt(v);if(isNaN(v)||v==-1)return '';if(v>1048576)return Math.round(v/1048576,1)+" MB";if(v>1024)return Math.round(v/1024,1)+" KB";return v+" b";},encodeURIComponent:function(v){return encodeURIComponent(v);}});})(jQuery);(function($){function URI(u,s){var t=this,o,a,b;s=t.settings=s||{};if (/^(mailto|news|javascript|about):/i.test(u)|| /^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf(':/')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u= /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);$(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"]).each(function(i,v){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}};$.extend(URI.prototype,{setPath:function(p){var t=this;p= /^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;if(u==="./")return u;u=new URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i,l;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0,l=base.length;i=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return '/'+o.reverse().join('/');return '/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});$.parseURI=function(u,s){s=s||{};return new URI(u,$.extend({base_uri:new URI(s.base_url||document.location.href)},s));};})(jQuery);(function($){$.cleanName=function(s){var i,lo;lo=[ /[\300-\306]/g,'A', /[\340-\346]/g,'a', /\307/g,'C', /\347/g,'c', /[\310-\313]/g,'E', /[\350-\353]/g,'e', /[\314-\317]/g,'I', /[\354-\357]/g,'i', /\321/g,'N', /\361/g,'n', /[\322-\330]/g,'O', /[\362-\370]/g,'o', /[\331-\334]/g,'U', /[\371-\374]/g,'u' ];for(i=0;i "+r.tofile,content:$.translate(r.message)});}if(r.file!=undefined){r.file=r.file.replace(/\{[0-9]+\}/,root);r.file=r.file.replace(/\/+/,'/');errors.push({title:r.file,content:$.translate(r.message)});}}});if(errors.length){$.WindowManager.status({title:$.translate(args.message),content:errors});return true;}}},insertFiles:function(s){var t=this,args={};$(s.paths).each(function(i,v){args['path'+i]=v;});if(s.progress_message)$.WindowManager.showProgress({message:s.progress_message});RPC.exec('fm.insertFiles',args,function(data){var o={files:[]};$.WindowManager.hideProgress();$(RPC.toArray(data.result)).each(function(i,v){var u=v.url;if(s.relative_urls)u=$.parseURI(s.document_base_url||s.default_base_url).toRelative(u);else if(s.document_base_url||s.no_host)u=$.parseURI(s.document_base_url).toAbsolute($.parseURI(u).getURI(1),s.no_host);v={name:v.name,path:v.path,url:u,size:v.size,type:v.type,created:v.created,modified:v.modified,attribs:v.attribs,custom:$.extend({},v.custom)};o.files.push(v);});if(s.oninsert){if(s.insert_filter){$(o.files).each(function(i,f){s.insert_filter(f);});}s.oninsert(o);}});},insertFile:function(s){var ins=s.oninsert;s.paths=[s.path];s.oninsert=function(o){o.file=o.files[0];ins.call(this,o);};this.insertFiles(s);}};RPC.init();})(jQuery);(function($){var w,ed,wm,args={};window.focus();w=opener||parent;if(w.mcFileManager)args=w.mcFileManager.windowArgs;if(w.tinyMCE&&(ed=w.tinyMCE.activeEditor)){if(ed&&(wm=ed.windowManager)){if(!args&&wm.params)args=wm.params;if(wm.setTitle)wm.setTitle(window,document.title);}}if(!$.CurrentWindowManager){$.WindowManager.defaultWin={getArgs:function(){return args;},close:function(){if(ed&&wm.bookmark&&top!=window)ed.selection.moveToBookmark(wm.bookmark);if(wm)wm.close(window);else window.close();}};}})(jQuery);filemanager/js/_cache/fm_edit.gz000066600000001247150472616010012617 0ustar00Un0 . ` մЋ.֣tMINQ8IÆbD$(ҤudIԵZ[)Y]Uo-h uQh<ʤ>aa#왿tLؕ+z|kX PC#znjm*'ldSw@(-$;oQN%Vh ypcF/g QA5{kV#CO4sEWFRʭ~\Бo8Ht}c436G:lR-1VְcA ِWVpg{n`)c,>zkHic{ J*RMC1v1(?vғYcϥ`džىTF/2Kdˢ ѿu!Ј`tI%X`({܄w`b.x.rOl, AБiSI:)\eGSt(v:iWdNawĹ`'3z:׌L,<[R6o/<,F(WBWbTJVy+?ዄ- i ǰəoW酭˜d[YC1COK WO񀞷W14tvš-k?sfbi62`MS4Z]7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;;(function($){var $scrollTo=$.scrollTo=function(target,duration,settings){$(window).scrollTo(target,duration,settings);};$scrollTo.defaults={axis:'y',duration:1};$scrollTo.window=function(scope){return $(window).scrollable();};$.fn.scrollable=function(){return this.map(function(){var win=this.parentWindow||this.defaultView,elem=this.nodeName=='#document'?win.frameElement||win:this,doc=elem.contentDocument||(elem.contentWindow||elem).document,isWin=elem.setInterval;return elem.nodeName=='IFRAME'||isWin&&$.browser.safari?doc.body:isWin?doc.documentElement:this;});};$.fn.scrollTo=function(target,duration,settings){if(typeof duration=='object'){settings=duration;duration=0;}if(typeof settings=='function')settings={onAfter:settings};settings=$.extend({},$scrollTo.defaults,settings);duration=duration||settings.speed||settings.duration;settings.queue=settings.queue&&settings.axis.length>1;if(settings.queue)duration/=2;settings.offset=both(settings.offset);settings.over=both(settings.over);return this.scrollable().each(function(){var elem=this,$elem=$(elem),targ=target,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case 'number':case 'string':if( /^([+-]=)?\d+(px)?$/.test(targ)){targ=both(targ);break;}targ=$(targ,this);case 'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset();}$.each(settings.axis.split(''),function(i,axis){var Pos=axis=='x'?'Left':'Top',pos=Pos.toLowerCase(),key='scroll'+Pos,old=elem[key],Dim=axis=='x'?'Width':'Height',dim=Dim.toLowerCase();if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(targ.css('margin'+Pos))||0;attr[key]-=parseInt(targ.css('border'+Pos+'Width'))||0;}attr[key]+=settings.offset[pos]||0;if(settings.over[pos])attr[key]+=targ[dim]()* settings.over[pos];}else attr[key]=targ[pos];if( /^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max(Dim));if(!i&&settings.queue){if(old!=attr[key])animate(settings.onAfterFirst);delete attr[key];}});animate(settings.onAfter);function animate(callback){$elem.animate(attr,duration,settings.easing,callback&&function(){callback.call(this,target,settings);});};function max(Dim){var attr='scroll'+Dim,doc=elem.ownerDocument;return win?Math.max(doc.documentElement[attr],doc.body[attr]):elem[attr];};}).end();};function both(val){return typeof val=='object'?val:{top:val,left:val};};})(jQuery);(function($){var id=0;$.multiUpload=function(s){var up=this,mul;up.id=up.generateID();up.settings={};up.settings=s=$.extend(up.settings,s);if(s.max_size)s.max_size=up.parseSize(s.max_size);if(s.chunk_size)s.chunk_size=up.parseSize(s.chunk_size);if(s.oninit){$(up).bind('multiUpload:init',function(){s.oninit.call(up,up);});}up.init();$(['setup','filesSelected','fileProgress','filesProgress','filesUploaded','fileUploaded','fileUploadProgress']).each(function(){if(s[(this)])$(up).bind('multiUpload:'+this,s[(this)]);});$(up).trigger('multiUpload:setup');$(up).bind('multiUpload:selectFiles',function(){this.cache={};});$(up).bind('multiUpload:filesSelected',function(e,fs){var mx=up.settings.max_size;function filter(f){var m= /\.([^.]+)$/.exec(f.name.toLowerCase()),ext=m?m[1]:null;return ext&&$.inArray(ext,s.filter)!=-1&&(!mx||f.size1048576)return Math.round(v/1048576,1)+" MB";if(v>1024)return Math.round(v/1024,1)+" KB";return v+" b";},generateID:function(){return 'u'+(id++);},parseSize:function(sz){var mul;if(typeof(sz)=='string'){sz= /^([0-9]+)([mk]+)$/.exec(sz.toLowerCase().replace(/[^0-9mk]/g,''));mul=sz[2];sz=parseInt(sz[1]);if(mul=='m')sz *=1048576;if(mul=='k')sz *=1024;}return sz;}});$.extend($.multiUpload,{instances:{},create:function(s){return this.add(new $.multiUpload(s));},remove:function(id){if(this.get(id))delete this.instances[id];},add:function(up){return this.instances[up.id]=up;},get:function(id){return this.instances[id];}});})(jQuery);(function($){if(!$.multiUpload.initialized&&window.google&&google.gears){$.multiUpload.initialized=1;$.multiUpload.runtime='gears';$.extend($.multiUpload.prototype,{init:function(){var up=this;$(up).trigger('multiUpload:init');$(up).bind('multiUpload:selectFiles',function(e){var up=this,desk=google.gears.factory.create('beta.desktop'),s={};if(up.settings.filter[0]!='*')s.filter=$.map(up.settings.filter,function(v){return '.'+v});desk.openFiles(function(f){var sf=[];if(f.length){up._fireEvent('multiUpload:beforeFilesSelected');$(f).each(function(){var fo={id:up.generateID(),name:this.name,blob:this.blob,size:this.blob.length,loaded:0};up.files.push(fo);sf.push(fo);});up._fireEvent('multiUpload:filesSelected',[{files:sf}]);up._fireEvent('multiUpload:filesChanged');}else up._fireEvent('multiUpload:filesSelectionCancelled');},s);});$(up).bind('multiUpload:uploadFile',function(e,fo){var req,up=this,chunkSize,chunk=0,chunks,i,start,loaded=0,curChunkSize;chunkSize=up.settings.chunk_size||1024 * 1024;chunks=Math.ceil(fo.blob.length/chunkSize);uploadNextChunk();function uploadNextChunk(){var url=up.settings.upload_url;if(fo.status)return;curChunkSize=Math.min(chunkSize,fo.blob.length-(chunk * chunkSize));req=google.gears.factory.create('beta.httprequest');req.open('POST',url+(url.indexOf('?')==-1?'?':'&')+'name='+escape(fo.name)+'&chunk='+chunk+'&chunks='+chunks+'&path='+escape(up.settings.path));req.setRequestHeader('Content-Disposition','attachment; filename="'+fo.name+'"');req.setRequestHeader('Content-Type','application/octet-stream');req.setRequestHeader('Content-Range','bytes '+chunk * chunkSize);req.upload.onprogress=function(pr){fo.loaded=loaded+pr.loaded;up._fireEvent('multiUpload:fileUploadProgress',[{file:fo,loaded:fo.loaded,total:fo.size}]);};req.onreadystatechange=function(){var ar;if(req.readyState==4){if(req.status==200){ar={file:fo,chunk:chunk,chunks:chunks,response:req.responseText};up._fireEvent('multiUpload:chunkUploaded',[ar]);if(ar.cancel){fo.status='failed';up._fireEvent('multiUpload:filesChanged');up.uploadNext();return;}loaded+=curChunkSize;if(++chunk>=chunks){fo.status='completed';up._fireEvent('multiUpload:fileUploaded',[{file:fo,response:req.responseText}]);up._fireEvent('multiUpload:filesChanged');up.uploadNext();}else uploadNextChunk();}else up._fireEvent('multiUpload:uploadChunkError',[{file:fo,chunk:chunk,chunks:chunks,error:'Status: '+req.status}]);}};if(chunk=10){$.multiUpload.initialized=1;$.multiUpload.runtime='flash';$.multiUpload.instances=[];$.multiUpload._fireEvent=function(na,p1,p2,p3,p4){window.setTimeout(function(){$($.multiUpload.instances).each(function(i,v){$(v).trigger('multiUpload:'+na,[p1,p2,p3,p4]);v.repaint();});},0);};$.extend($.multiUpload.prototype,{getFlash:function(){return $('#flashuploader')[0];},repaint:function(){var up=this,fb=$(up.settings.flash_browse_button),off=fb.offset();up.flashContainer.css({position:'absolute',top:off.top,left:off.left,width:fb.width(),height:fb.height(),backgr2ound:'red'});},init:function(){var up=this,s=up.settings,so,fb;$.multiUpload.instances.push(up);$(up).bind('multiUpload:flashInit',function(e){$(up).trigger('multiUpload:init');});$(document.body).append('
        ');so=new SWFObject("js/jquery/jquery.multiupload.flash.swf","flashuploader","100%","100%","10.0");so.addVariable("file_filter",$.map(up.settings.filter,function(v){return '*.'+v}).join(';'));so.addParam("wmode","transparent");so.write("flashUploaderContainer");up.flashContainer=$('#flashUploaderContainer');$(function(e){up.repaint();});up.repaint();$(up).bind('multiUpload:flashSelectFiles',function(e,sel){$(sel).each(function(i,fo){up.files.push(fo);});$(up).trigger('multiUpload:filesSelected',[{files:sel}]);$(up).trigger('multiUpload:filesChanged');});$(up).bind('multiUpload:flashUploadComplete',function(e,o){var fo;if(fo=up.getFile(o.id)){if(!fo.status){fo.status='completed';$(up).trigger('multiUpload:fileUploaded',[{file:fo,response:o.text}]);}}$(up).trigger('multiUpload:filesChanged');up.uploadNext();});$(up).bind('multiUpload:flashUploadProcess',function(e,pr){var fo=up.getFile(pr.id);if(!fo.status){fo.loaded=pr.loaded;$(up).trigger('multiUpload:fileUploadProgress',[{file:fo,loaded:fo.loaded,total:fo.size}]);}});$(up).bind('multiUpload:flashIOError',function(e,o){var fo;if(fo=up.getFile(o.id)){if(!fo.status){fo.status='failed';$(up).trigger('multiUpload:uploadChunkError',[{file:fo,error:o.message}]);}}});$(up).bind('multiUpload:stopUpload',function(e){up.getFlash().cancelUpload();});$(up).bind('multiUpload:removeFile',function(e,fo){up.getFlash().removeFile(fo.id);});$(up).bind('multiUpload:clearFiles',function(e){up.getFlash().clearFiles();});$(up).bind('multiUpload:uploadFile',function(e,fo){var pageURL=document.location.href.replace(/\/[^\/]+$/g,'/');up.getFlash().uploadFile(fo.id,{upload_url:pageURL+up.settings.upload_url+'&path='+escape(up.settings.path)+'&name='+escape(fo.name),chunk_size:up.settings.chunk_size,file_field:'file0',post_args:{name0:fo.name}});});$(up).bind('multiUpload:flashUploadChunkComplete',function(e,o){var fo=up.getFile(o.id),arg;arg={file:fo,chunk:o.chunk,chunks:o.chunks,response:o.text};if(!fo.status)$(up).trigger('multiUpload:chunkUploaded',[arg]);if(arg.cancel){fo.status='failed';up.getFlash().cancelUpload();}});}});}})(jQuery); function onSilverlightError(sender,args){alert("onSilverlightError: "+args.errormessage);};(function($){function isInstalled(version){var isVersionSupported=false;var container=null;try{var control=null;try{control=new ActiveXObject('AgControl.AgControl');if(version==null)isVersionSupported=true;else if(control.IsVersionSupported(version))isVersionSupported=true;control=null;}catch(e){var plugin=navigator.plugins["Silverlight Plug-In"];if(plugin){if(version===null){isVersionSupported=true;}else{var actualVer=plugin.description;if(actualVer==="1.0.30226.2")actualVer="2.0.30226.2";var actualVerArray=actualVer.split(".");while(actualVerArray.length>3)actualVerArray.pop();while(actualVerArray.length<4)actualVerArray.push(0);var reqVerArray=version.split(".");while(reqVerArray.length>4)reqVerArray.pop();var requiredVersionPart,actualVersionPart,index=0;do{requiredVersionPart=parseInt(reqVerArray[index]);actualVersionPart=parseInt(actualVerArray[index]);index++;}while(index'+''+'
        ');}$(up).bind('multiUpload:slSelectFile',function(e,id,na,sz){var fo={id:id,name:na,size:sz,loaded:0};sel.push(fo);up.files.push(fo);});$(up).bind('multiUpload:slSelectSuccessful',function(){$(up).trigger('multiUpload:filesSelected',[{files:sel}]);$(up).trigger('multiUpload:filesChanged');sel=[];});$(up).bind('multiUpload:slSelectCancelled',function(){$(up).trigger('multiUpload:filesSelectionCancelled',[sel]);sel=[];});$(up).bind('multiUpload:slUploadFileProgress',function(e,id,lod,tot){var file=up.getFile(id);file.loaded=lod;$(up).trigger('multiUpload:fileUploadProgress',[{file:file,loaded:lod,total:tot}]);});$(up).bind('multiUpload:slUploadSuccessful',function(e,id,resp){var fo;if(fo=up.getFile(id)){if(!fo.status){fo.status="completed";$(up).trigger('multiUpload:fileUploaded',[{file:fo,response:resp}]);}}$(up).trigger('multiUpload:filesChanged');up.uploadNext();});$(up).bind('multiUpload:stopUpload',function(e){$.multiUpload.plugin.CancelUpload();});$(up).bind('multiUpload:slUploadChunkSuccessful',function(e,id,chunk,chunks,resp){var fo=up.getFile(id),ar={file:fo,chunk:chunk,chunks:chunks,response:resp};$(up).trigger('multiUpload:chunkUploaded',[ar]);if(ar.cancel){fo.status="failed";$.multiUpload.plugin.CancelUpload();}});$(up).bind('multiUpload:slUploadChunkError',function(e,id,chunk,chunks,err){$(up).trigger('multiUpload:uploadChunkError',[{file:up.getFile(id),chunk:chunk,chunks:chunks,error:err}]);});$(up).bind('multiUpload:selectFiles',function(e){$.multiUpload.plugin.SelectFiles('Files |'+$.map(up.settings.filter,function(v){return '*.'+v}).join(';'));});$(up).bind('multiUpload:removeFile',function(e,fo){$.multiUpload.plugin.RemoveFile(fo.id);});$(up).bind('multiUpload:uploadFile',function(e,fo){$.multiUpload.plugin.UploadFile(fo.id,up.settings.upload_url+'&name='+escape(fo.name)+"&path="+escape(up.settings.path),parseInt(up.settings.chunk_size));});$(up).bind('multiUpload:clearFiles',function(e){$.multiUpload.plugin.ClearFiles();});}});}})(jQuery);(function($){window.UploadDialog={currentWin:$.WindowManager.find(window),init:function(){var t=this,args;t.args=args=$.extend({path:'{default}',visual_path:'/'},t.currentWin.getArgs());t.fileListTpl=$.templateFromScript('#filelist_item_template');$('.uploadtype').html($.translate('{#upload.basic_upload}',0,{a:'','/a':''}));$('#createin').html(args.visual_path);$('form input[name=path]').val(args.path);$('form input[name=file0]').change(function(e){$('form input[name=name0]').val(t.cleanName(/([^\/\\]+)$/.exec(e.target.value)[0].replace(/\.[^\.]+$/,'')));});$('form').submit(function(){$.WindowManager.showProgress({message:$.translate('{#upload.progress}')});});if(document.location.hostname!=document.domain)$('form input[name=domain]').val(document.domain);t.path=args.path;$('#singleupload').click(function(e){$('#multiupload_view').hide();$('#singleupload_view').show();});RPC.exec('fm.getConfig',{path:args.path},function(data){var config=data.result,maxSize,upExt,fsExt,outExt=[],i,x,found;maxSize=config['upload.maxsize'];fsExt=config['filesystem.extensions'].split(',');upExt=config['upload.extensions'].split(',');t.debug=config['general.debug']=="true";t.shouldCleanNames=config['filesystem.clean_names']=="true";t.chunkSize=config['upload.chunk_size']||'1mb';$('#content').show();if($.multiUpload.initialized)$('#multiupload_view').show();else $('#singleupload_view').show();if(config['upload.multiple_upload']!="true"){$('#multiupload_view').hide();$('#singleupload_view').show();}maxSize=maxSize.replace(/\s+/,'');maxSize=maxSize.replace(/([0-9]+)/g,'$1 ');if(upExt[0]=='*')upExt=fsExt;if(fsExt[0]=='*')fsExt=upExt;for(i=0;i');inp=$('#rename').val(parts[1]);t.renameEnabled=1;inp.focus().blur(function(){t.endRename();}).keydown(function(e){var c=e.keyCode;if(c==13||c==27){if(c==13){fo.name=t.cleanName(inp.val())+parts[2];a.html(fo.name);}t.endRename();}});}e.preventDefault();return false;});});up.settings.flash_browse_button='#addmore';up.repaint();$('#filelist')[0].scrollTop=0;});$(up).bind('multiUpload:fileUploaded',function(e,o){$('#'+o.file.id).removeClass('failed').addClass('done');});$(up).bind('multiUpload:filesChanged',function(){calc(up);up.repaint();t.endRename();});$(up).bind('multiUpload:fileUploadProgress',function(e,pr){if(up.status){if(!pr.file.scroll){$('#filelist').scrollTo($('#'+pr.file.id),50);pr.file.scroll=1;}$('#'+pr.file.id+' td.status').html(Math.round(pr.loaded/pr.total * 100.0)+'%');calc(up);}});$(up).bind('multiUpload:chunkUploaded',function(e,o){var res=$.parseJSON(o.response),data=RPC.toArray(res.result);if(data[0]["status"]!='OK'){o.file.loaded=o.file.size;calc(up);$('#'+o.file.id).addClass('failed');$('#'+o.file.id+' td.status').html($.translate(data[0]["message"]));o.cancel=1;}});$(up).bind('multiUpload:uploadChunkError',function(e,o){$('#'+o.file.id).addClass('failed');$('#'+o.file.id+' td.status').html('Failed').attr('title',o.error);});$('#add, #addmore').click(function(e){up.selectFiles();e.preventDefault();return false;});$('#abortupload').click(function(e){up.stopUpload();$.WindowManager.info($.translate('{#upload.cancelled}'),function(){t.currentWin.close();});});$('#uploadstart').click(function(e){$('#uploadstart').parent().hide();$('#status').show();$('#statsrow').hide();$('#files .status').html('-');$('#files .fname a').addClass('disabled');startTime=new Date().getTime();up.startUpload();e.preventDefault();return false;});$('#uploadstop').click(function(e){up.stopUpload();e.preventDefault();return false;});$('#clear').click(function(e){up.clearFiles();$('#files').hide();$('#files tbody').html('');e.preventDefault();return false;});},insertFiles:function(pa,cb){var s=this.currentWin.getArgs();if(s.onupload){RPC.insertFiles({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,paths:pa,insert_filter:s.insert_filter,oninsert:function(o){s.onupload(o);if(cb)cb();}});}},isDemo:function(){if(this.currentWin.getArgs().is_demo){$.WindowManager.info($.translate('{#error.demo}'));return true;}},endRename:function(){if(this.renameEnabled){$('#files input').remove();$('#files a').show();this.renameEnabled=0;}}};window.handleJSON=function(data){window.focus();UploadDialog.handleSingleUploadResponse(data);};$(function(e){UploadDialog.init();});})(jQuery);filemanager/js/_cache/fm_filemanager.gz000066600000013570150472616010014146 0ustar00L& x:HKLelziVڶZy=YrJr$}OOGT,^z=6ˈIoW 3 :Mц@7dTr!ٶ5 VBjqÑ&{3O;R)K)ozU~7^cKtнA@R5S+zյ(UUoۿ󡓴O33߱ZNg"|&8 &l뿘zo !Է*z%iIĻtS#y~hLdMŜvyL8o{jLnJO[}/2o+s@lOc<) f[ Vn!_ g0Xcq.ïz50zwjbh$.zJLp_cq,\UyYrPilRxQx-kmEdQB74Zß5Qؘ 6zWʉy+y%0%/ٌGU"m6 mꜥM!k$$i|So`ޒw^7t ڈ.vM(szЄk8An}2GZS\ 8 a.~,DGKU+(=\VM8y: (apV޼lw2jE8u,^ כ7Jl;^I_.lV~ʤ: DX~(dr ۛ'nY"F=1N/FZ4)<Ëtw1i."|"*9,dƽbʕrS4:R㌹$ːµs@(UN3r`,*|?;PZ|a{J;%!tx.d!Fx6"Q'R 1C`EQ)t_a?Pͺ1eiwTDnS<vbޡ rF4S[GCCГ`]u v<׻(okҊ7eJjckN\KiZG>6>Dpb5cU2d.tKsV9N c!=K^ʣ۶PʥF+pҸ)/]d};͔FbLE>? xaPRP4W0Xt^˰6!1Y{Z6 n'I,?zw*zɨTŤV+Z=!0ѫ}L \/0b: H3&kKDl)lD;6hqZ__=Qa;Z~Ok {c0<$}GR[xpS&ʧv:J$zʞ ݧeGq:W֮~̊|)U4oQBdc4 ??qo:W-vz Y۴*ccdD'l(@ Po¾_{+-/ bg;_`3l蘛kkغaem%pUdk0X1WU ɦ${?y]L q S3L^|>_b[Kzb):Vs5T˕]^0u Gp 1]MuB`IHn7 D FpLV?Zu ` 'ؐ|"pLZ7$pԡ|"FخD@ə}ϧ"'p5XGaE8*<ޤYETgm z,/[Sla;JZ?aGuu>][+}HA܂_J:|4{4mWhu7zpxx9E}2a$'/#*_{P>bi5hXiaKK>:cU?Ƭ$#&fgf_&++lS m*[0,jI?E ! dNVN5>aV1 ̌E~+p© ħ=xK~gOcbb]N 1K Cl@ڹt1 0N?)Eo. w+5ɯ Ƣ0I2G]tொv+R7e Wj]XCjO=Um,S.&ۤ;@-,%UxYAEhw@=#/R\(E5> ֙H8O^V#ۙA8VtT"Ļ" h* v<-kso)s8&/ "YjPYFOSG%U{$u>Atq9; 6)6fPV1o'T| mfv =>L3 th 7#bSnFI#of}t{^gW&v/ßODI Lb\3x*6<)1M0dD1>{Sk >d ;>gq ||pp2]ˁp.n쨳%SzBfT}D;\8 gJph4'qG04z Kʣu[A G]y2[{!6bbV䱪P?'̆i,~!dzAE. 5En4 PhDq?L,st xl6PR)U8bpjLӞmE"=f MTED8<ϴ8ŀov cH)pX/ G;:EA7{yc^y8>=kk #obV-{*-+}:V %ץ(c$(˃ fc_ޕ'l K-h;0>ƅL4o+A?0}[eG⧽z_WE>šk!(Yuqpи&w~fvbGN]F-D,}5Ə5,c b?'omZ%{5Xp?K%%MI9cǎp%Ao NȦN/g1݊ii/:_9\ 'st#  9Gzlf:$3Ol@n;K RHR?q˶זذCr=`nB΅S?!jABk;e Ke0j8^7z)#Yf51qO|r|:E#R3S2j޳C鐞TmvcSչ@*GuPf|A_8ށE$naGLrֳ5DE; 6]RwÅ=򃅾fzZ_ؼ@)kY&itAg)pQ#u/Ul\îWfilemanager/js/_cache/fm_createdir.js000066600000003577150472616010013640 0ustar00(function($){window.CreateDirDialog={currentWin:$.WindowManager.find(window),init:function(){var t=this,args,cleanNames;args=$.extend({path:'{default}',visual_path:'/'},t.currentWin.getArgs());RPC.exec('fm.getConfig',{path:args.path},function(data){var config=data.result,templates=[],tpl;if(!RPC.handleError({message:'Get config error',visual_path:t.visualPath,response:data})){cleanNames=config['filesystem.clean_names']=="true";$(config['filesystem.directory_templates'].split(/,/)).each(function(i,v){if(v){v=$.trim(v).split('=');templates.push({name: /([^\/]+)$/.exec(v[0])[0],value:v[1]||v[0]});}});if(config['filesystem.force_directory_template']=="true"){$('#template').html('');if(templates.length==1)$('#templaterow').hide();}if(templates.length==0)$('#templaterow').hide();tpl=$.templateFromScript('#template_template');$(templates).each(function(i,v){$('#template').append(tpl,v);});$('#content').show();$('#createin').html(args.visual_path);$('form').submit(function(){var tpl=$('#template').val(),name=$('#dirname').val();if(cleanNames)name=$.cleanName(name);if(!t.isDemo()){RPC.exec('fm.createDirs',{path:args.path,name0:name,template0:tpl},function(data){var res=RPC.toArray(data.result),s=t.currentWin.getArgs();if(!RPC.handleError({message:'{#error.createdir_failed}',visual_path:args.visual_path,response:data})){if(s.oncreate){RPC.insertFile({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,path:res[0].file,progress_message:$.translate("{#message.insert}"),insert_filter:s.insert_filter,oninsert:function(o){s.oncreate(o);t.currentWin.close();}});}}});}return false;});$('#cancel').click(function(){t.currentWin.close();});}});},isDemo:function(){if(this.currentWin.getArgs().is_demo){$.WindowManager.info($.translate('{#error.demo}'));return true;}}};$(function(){CreateDirDialog.init();});})(jQuery);filemanager/js/_cache/fm_createzip.gz000066600000001072150472616010013654 0ustar00}T]o0+G{ma"ZRt2#i)Q;Iz_TDffvvn`/E6>w:MrjǢ:$eħtP:-J].KvGT~շW߂՝/.wo;6Ȣjp!%g&)LO|]4:շ3M 혜Ԍ6C[]ԋkk EM2kYZ/r,Ct{>1ѹe\/;$.winWidth()?$.winWidth()-m.width():x;y=y+m.height()>$.winHeight()?$.winHeight()-m.height():y;}m.css({left:x,top:y}).click(clickHandler);t.visible=1;$(t).trigger('DropMenu:show');$().trigger('DropMenu:show',[t]);return false;},hide:function(){if(!t.visible)return false;$('a[@rel='+t.id+']').parent().removeClass('active');$().unbind('mouseup',hideHandler);$('#'+t.id).unbind('mouseover',mouseOverHandler).hide();$('#'+t.id).unbind('click',clickHandler);t.visible=0;$.each(t.items,function(){if(this.hide)this.hide();});$(t).trigger('DropMenu:hide');$().trigger('DropMenu:hide',[t]);return false;},add:function(o){o.id=o.id||uniqueId();t.items.push(o);return o;},addSeparator:function(){return t.add({'class':s.separator_class,title:'separator'});},addMenu:function(o){if(!o.onClick)o.onClick=s.onClick;o=new DropMenu(o);o.parentMenu=t;return t.add(o);}});};jQuery.mcDropMenu=DropMenu;jQuery.fn.mcContextMenu=function(s){this.each(function(){var m=new $.mcDropMenu(s);m.render(this);$(this).bind('contextmenu',function(e){return m.show(e.clientX,e.clientY);});});};})(jQuery);(function($){window.BaseManager={currentWin:$.WindowManager.find(window),path:'{default}',visualPath:'',files:[],selectedFiles:[],focusedFile:null,demoMode:false,disabled:{},specialFolders:[],getFile:function(id){var o;$(this.files).each(function(){if(this.id==id)o=this;});return o;},setDisabled:function(v,st){this.disabled[v]=st;if(st)$('#'+v).addClass('disabled').addClass('deactivated');else $('#'+v).removeClass('disabled').removeClass('deactivated');},isDisabled:function(v){return this.disabled[v]?this.disabled[v]:0;},addSpecialFolder:function(o){this.specialFolders.push(o);},isDemo:function(){if(this.demoMode){$.WindowManager.info($.translate('{#error.demo}'));return true;}}};})(jQuery);(function($){window.FileManager=$.extend(BaseManager,{focusedIndex:-1,clipboard:null,access:'',tools:[ 'createdir','edit','createdoc','refresh','zip','upload','rename','cut','copy','paste','delete','view','download','insert','imagemanager','help' ],init:function(){var t=this,args=t.currentWin.getArgs(),uri,chunks;$('#selectall,#unselectall').removeClass('disabled');t.path=args.path||'{default}';t.rootPath=args.rootpath;t.extensions=args.extensions;t.include_file_pattern=args.include_file_pattern;t.exclude_file_pattern=args.exclude_file_pattern;t.include_directory_pattern=args.include_directory_pattern;t.exclude_directory_pattern=args.exclude_directory_pattern;t.remember_last_path=args.remember_last_path;t.urlSuffix='';if(document.domain!=document.location.hostname)t.urlSuffix='?domain='+document.domain;if(args.url){uri=$.parseURI(args.url,{base_url:args.document_base_url||args.default_base_url});if(uri)t.inputURL=uri.path.replace(/\/[^\/]+$/,'');}if(t.rootPath){chunks=t.rootPath.split(/=/);t.rootPathName=chunks.length>1?chunks[0]: /[^\/]+$/.exec(t.rootPath);t.rootPath=chunks[1]||t.rootPath;}t.fileListTpl=$.templateFromScript('#filelist_item_template');t.dirInfoTpl=$.templateFromScript('#dirinfo_template');t.caregoryListTpl=$.templateFromScript('#folders_template');t.previewFileTpl=$.templateFromScript('#preview_file_template');t.pathTpl=$.templateFromScript('#path_template');t.customDirsTpl=$.templateFromScript('#custom_dir_template');$('#filemanagerlist').css('height',$.winHeight()-140);$(window).bind('resize',function(){$('#filemanagerlist').css('height',$.winHeight()-140);});$().bind('action:selectall',function(){t.setFileSelection(0,t.files.length,true);});$().bind('action:unselectall',function(){t.focusFile(0);});$().bind('action:cut',function(){t.setClipBoard({files:t.selectedFiles,action:'cut'});});$().bind('action:copy',function(){t.setClipBoard({files:t.selectedFiles,action:'copy'});});$().bind('action:paste',function(){t.pasteFiles();});$().bind('action:rename',function(){t.renameFile(t.focusedFile);});$().bind('action:delete',function(){t.deleteFiles(t.selectedFiles);});$().bind('action:zip',function(){t.zipFiles();});$().bind('action:sortbyname',function(e){t.updateFileList('name',$(e.target).hasClass('sortasc'));});$().bind('action:sortbysize',function(e){t.updateFileList('size',$(e.target).hasClass('sortasc'));});$().bind('action:sortbytype',function(e){t.updateFileList('type',$(e.target).hasClass('sortasc'));});$().bind('action:sortbymodified',function(e){t.updateFileList('modified',$(e.target).hasClass('sortasc'));});$().bind('action:insert',function(){t.insertFiles();});$().bind('action:download',function(){t.downloadFile(t.focusedFile);});$().bind('action:view',function(){t.viewFile(t.focusedFile);});$().bind('action:createdir',function(){t.createDir();});$().bind('action:edit',function(){t.editFile(t.focusedFile);});$().bind('action:upload',function(){t.uploadFiles();});$().bind('action:createdoc',function(){t.createDoc();});$().bind('action:refresh',function(){t.listFiles();});$().bind('action:help',function(){});$().bind('action:imagemanager',function(){t.imageManager();});$().bind('filemanager:clipboardchanged',function(){if(t.clipboard&&!$('#paste').hasClass('deactivated'))$('#paste').removeClass('disabled');else $('#paste').addClass('disabled');});$().bind('selection:changed',function(){$(['cut','copy','delete','zip']).each(function(i,v){if(t.selectedFiles.length>0&&!$('#'+v).hasClass('deactivated'))$('#'+v).removeClass('disabled');else $('#'+v).addClass('disabled');});});$().bind('filelist:changed',function(){if(t.clipboard&&!$('#paste').hasClass('deactivated'))$('#paste').removeClass('disabled');else $('#paste').addClass('disabled');});$().bind('selection:changed',function(){if(t.focusedFile)$('#previewinfo').html(t.previewFileTpl,t.focusedFile);else $('#previewinfo').html(' ');$(['rename','insert','download','view','edit']).each(function(i,v){if(!t.focusedFile){$('#'+v).addClass('disabled');t.showPreview(0);}else if(!$('#'+v).hasClass('deactivated'))$('#'+v).removeClass('disabled');});if(t.focusedFile&&(!t.focusedFile.custom||!t.focusedFile.custom.editable))$('#edit').addClass('disabled');});$('#selection_actions li, #view_actions li, #tools li, #filemanagerlist a').each(function(i,v){$(v).click(function(e){if(!$(v).hasClass('disabled'))$().trigger('action:'+v.id,e);e.preventDefault();return false;});});$('#filemanagerlist').mousedown(function(e){if(e.shiftKey)e.preventDefault();});$('#filemanagerlist').bind('selectstart',function(e){e.preventDefault();});$('#category_list').click(function(e){var el=e.target;if(el.title)t.listFiles(el.title);e.preventDefault();return false;});$('#special_list').click(function(e){var el=e.target;if(el.title)t.listFiles(el.title);e.preventDefault();return false;});$('#filemanagerlist').click(t.handleSelection);$('#filemanagerlist').dblclick(t.handleSelection);$('#filemanagerlist').bind('contextmenu',t.handleSelection);$('#filemanagerlist').mcContextMenu({constrain:1,setup:function(m){$(m).bind('DropMenu:beforeshow',function(e,m){m.clear();m.add({title:$.translate('{#actions.cut}'),disabled:t.isDisabled('cut')||!t.selectedFiles.length,onclick:function(){t.setClipBoard({files:t.selectedFiles,action:'cut'});}});m.add({title:$.translate('{#actions.copy}'),disabled:t.isDisabled('copy')||!t.selectedFiles.length,onclick:function(){t.setClipBoard({files:t.selectedFiles,action:'copy'});}});m.add({title:$.translate('{#actions.paste}'),disabled:t.isDisabled('paste')||!t.clipboard,onclick:function(){t.pasteFiles();}});m.addSeparator();m.add({title:$.translate('{#actions.edit}'),disabled:!t.focusedFile||(!t.focusedFile.custom||!t.focusedFile.custom.editable)||t.isDisabled('edit')||!t.selectedFiles.length,onclick:function(){t.editFile(t.focusedFile);}});m.add({title:$.translate('{#actions.rename}'),disabled:t.isDisabled('rename')||!t.selectedFiles.length,onclick:function(){t.renameFile(t.focusedFile);}});m.add({title:$.translate('{#actions.deleteit}'),disabled:t.isDisabled('delete')||!t.selectedFiles.length,onclick:function(){t.deleteFiles(t.selectedFiles);}});m.add({title:$.translate('{#actions.zip}'),disabled:t.isDisabled('zip')||!t.selectedFiles.length,onclick:function(){t.zipFiles();}});});}});$().bind('DropMenu:show',function(e,m){$('#'+m.id).css('opacity',0).animate({opacity:0.9},100);});if(t.specialFolders.length){$(t.specialFolders).each(function(i,v){v.title=$.translate(v.title);$('#special_list').append(t.customDirsTpl,v);});$('#special_list').show();}setInterval(function(){RPC.exec('fm.keepAlive',{});},60 * 1000 * 5);},handleSelection:function(e){var t=FileManager,el=e.target,tr=$(el).parents('tr.listrow')[0],idx,type;if(tr&&el.nodeName!='INPUT'){idx=parseInt(tr.id.replace(/[^0-9]+/g,''));t.focusedFile=t.files[idx];type=t.focusedFile.type;$('#file_'+t.focusedIndex).removeClass('focused');if(e.shiftKey)t.setFileSelection(t.focusedIndex,idx,true,1);if($(el).hasClass('checkbox')){if($(tr).hasClass('selected')){$(tr).removeClass('focused');idx=-1;t.focusedFile=null;}else $(tr).addClass('focused');$(tr).toggleClass('selected');t.showPreview(0);}else{if(!e.shiftKey&&(type=='folder'||type=='parent'||type=='zip')&&e.type=='click'){if(type=='zip')t.listFiles('zip://'+t.focusedFile.path);else t.listFiles(t.focusedFile.path);t.showPreview(0);e.preventDefault();return false;}else if(e.type!='dblclick')t.showPreview(t.focusedFile);if(!e.shiftKey&&(e.type!='contextmenu'||!$(tr).hasClass('selected'))){$('#filemanagerlist tbody tr').removeClass('selected');$('#file_'+t.focusedIndex).removeClass('selected');}$(tr).addClass('focused').addClass('selected');}t.selectedFiles=[];$('#filemanagerlist tbody tr.selected').each(function(i,tr){t.selectedFiles.push(t.files[parseInt(tr.id.replace(/[^0-9]+/g,''))]);});t.focusedIndex=idx;$().trigger('selection:changed');if(e.type=='dblclick')t.insertFiles(t.selectedFiles);e.preventDefault();return false;}},createDir:function(){$.WindowManager.open({url:'createdir.html'+this.urlSuffix,width:520,height:320},{is_demo:this.demoMode,path:this.path,visual_path:this.visualPath,oncreate:function(){FileManager.listFiles();}});},createDoc:function(){$.WindowManager.open({url:'createdoc.html'+this.urlSuffix,width:520,height:320},{is_demo:this.demoMode,path:this.path,visual_path:this.visualPath,oncreate:function(){FileManager.listFiles();}});},uploadFiles:function(){$.WindowManager.open({url:'upload.html'+this.urlSuffix,width:550,height:360,scrolling:'no'},{is_demo:this.demoMode,path:this.path,visual_path:this.visualPath,onupload:function(){FileManager.listFiles();}});},zipFiles:function(){var files=[];$(this.selectedFiles).each(function(i,f){files.push(f.path);});$.WindowManager.open({url:'createzip.html'+this.urlSuffix,width:490,height:280},{is_demo:this.demoMode,files:files,path:this.path,visual_path:this.visualPath,oncreate:function(){FileManager.listFiles();}});},editFile:function(fi){$.WindowManager.open({url:'edit.html'+this.urlSuffix,width:750,height:450},{is_demo:this.demoMode,path:fi.path,visual_path:(this.visualPath+'/'+ /[^\/]+$/.exec(fi.path)).replace(/^\/\//,'/'),onsave:function(){FileManager.listFiles();}});},showPreview:function(fi){if(fi&&(!fi.custom||fi.custom.previewable)&&fi.type!='zip')$('#preview').attr('src','../../stream/index.php?cmd=fm.streamFile&path='+encodeURIComponent(fi.path)).css('visibility','visible');else $('#preview').attr('src',"javascript:''").css('visibility','hidden');},deleteFiles:function(fl){var t=this,args={};if(fl){$(fl).each(function(i,v){args['path'+i]=v.path;});$.WindowManager.confirm($.translate('{#message.confirm_delete}'),function(s){if(s){if(!t.isDemo()){RPC.exec('fm.deleteFiles',args,function(data){if(!RPC.handleError({message:'{#error.delete_failed}',visual_path:t.visualPath,response:data}))t.listFiles();});}}});}},pasteFiles:function(){var t=this,args={};if(t.clipboard&&!t.isDemo()){args.topath=t.path;$(t.clipboard.files).each(function(i,v){args['frompath'+i]=v.path;});$.WindowManager.showProgress({message:$.translate("{#message.paste_in_progress}")});if(t.clipboard.action=='cut'){RPC.exec('fm.moveFiles',args,function(data){$.WindowManager.hideProgress();if(!RPC.handleError({message:'{#error.move_failed}',visual_path:t.visualPath,response:data}))t.listFiles();});}else{RPC.exec('fm.copyFiles',args,function(data){$.WindowManager.hideProgress();if(!RPC.handleError({message:'{#error.copy_failed}',visual_path:t.visualPath,response:data}))t.listFiles();});}t.clipboard=null;$().trigger('filemanager:clipboardchanged');}},setClipBoard:function(clip){this.clipboard=clip;$().trigger('filemanager:clipboardchanged',clip);},insertFiles:function(){var t=this,s=t.currentWin.getArgs(),selectedPaths=[];$(t.selectedFiles).each(function(i,v){selectedPaths.push(v.path);});RPC.insertFiles({relative_urls:s.relative_urls,document_base_url:s.document_base_url,default_base_url:s.default_base_url,no_host:s.remove_script_host||s.no_host,paths:selectedPaths,insert_filter:s.insert_filter,progress_message:$.translate("{#message.insert}"),oninsert:function(o){if(s.oninsert){$(o.files).each(function(i,v){if(v.path==t.focusedFile.path)o.focusedFile=v;});s.oninsert(o);}t.currentWin.close();}});},renameFile:function(f){var t=this,inp,ext='',ma;t.curRenameFile=f;inp=$.createElm('input',{id:f.id+'_rename',type:"text","class":"text","value":f.name.replace(/\.[^\.]+$/,'')});$('#'+f.id+' td.file').append(inp).find('a').hide();if(ma= /\.[^\.]+$/.exec(f.name))ext=ma[0];inp.focus().blur(function(){t.endRename();}).keyup(function(e){var c=e.keyCode,na;if(c==13||c==27){if(c==13){if(!t.isDemo()){na=inp.val();if(t.shouldCleanNames)na=$.cleanName(na);RPC.exec('fm.moveFiles',{frompath0:f.path,toname0:na+ext},function(data){if(!RPC.handleError({message:'{#error.rename_failed}',visual_path:t.visualPath,response:data}))t.listFiles();});}}t.endRename();}})},endRename:function(){var td;if(this.curRenameFile){td=$('#'+this.curRenameFile.id+' td.file');td.find('input').remove();td.find('a').show();}},listFiles:function(p,col,des){var t=this,args=t.currentWin.getArgs();t.path=p||t.path;$('#dirinfo').hide();$('#progress').show();$('#filelist').html('');t.showPreview(0);RPC.exec('fm.listFiles',{path:t.path,root_path:t.rootPath,url:t.inputURL,extensions:t.extensions,include_file_pattern:t.include_file_pattern,exclude_file_pattern:t.exclude_file_pattern,include_directory_pattern:t.include_directory_pattern,exclude_directory_pattern:t.exclude_directory_pattern,config:'general,filesystem,imagemanager',remember_last_path:t.remember_last_path},function(data){var header,cfg,disabled,visible,argTools,argDisabledTools;if(!RPC.handleError({message:'List files error',visual_path:t.visualPath,response:data})){header=data.result.header;cfg=data.result.config;t.access=header.attribs;t.visualPath=header.visual_path;t.imageManagerURL=cfg['imagemanager.urlprefix'];t.demoMode=cfg['general.demo']=="true";t.path=header.path;function explode(s){return s?s.replace(/\s+/g,'').split(','):s;};t.shouldCleanNames=cfg['filesystem.clean_names']=="true";disabled=explode(cfg['general.disabled_tools']);visible=explode(cfg['general.tools']);if(argDisabledTools=explode(args.disabled_tools))disabled=jQuery.merge(argDisabledTools,disabled);if(argTools=explode(args.tools)){$(argTools).each(function(i,v){if(!$.inArray(v,visible))visible.push(v);});visible=$.grep(visible,function(v){return $.inArray(v,argTools);});}$(t.tools).each(function(i,v){var li=$('#'+v);t.setDisabled(v,$.inArray(v,disabled)!=-1);if($.inArray(v,visible)!=-1)li.show();else li.hide();});$('#tools').show();$('#progress').hide();$('#curpath').html(t.pathTpl,header).attr("title",t.visualPath);t.files=RPC.toArray(data.result);t.updateFileList(col,des);$().trigger('filelist:changed');}});},updateFileList:function(col,des){var t=this,info={dirs:0,files:0,filesize:0,access:t.access},co=0,fileLst;col=col||'name';$('thead a.sortdesc').removeClass('sortdesc');$('thead a.sortasc').removeClass('sortasc');$('#sortby'+col).removeClass('sort'+(des?'asc':'desc'));$('#sortby'+col).addClass('sort'+(des?'desc':'asc'));t.endRename();t.focusedIndex=-1;t.focusedFile=null;t.selectedFiles=[];$().trigger('selection:changed');this.files=$(this.files).sortArray(col,des);this.files=$.grep(this.files,function(v){return v.type=='folder'||v.type=='parent';}).concat($.grep(this.files,function(v){return v.type!='folder'&&v.type!='parent';}));$('#filelist').html('');$(this.files).each(function(i,f){if(f.type!='parent'){if(f.type=='folder')info.dirs++;else info.files++;if(f.size!=-1)info.filesize+=f.size;}f.id='file_'+i;});$('#dirinfo').html(t.dirInfoTpl,info);$('#dirinfo').show();fileLst=$('#filelist');$(this.files).each(function(){fileLst.append(t.fileListTpl,this);});},downloadFile:function(f){if(f.type!='folder'&&f.type!='parent')$('#preview').attr('src','../../stream/index.php?cmd=fm.download&path='+encodeURIComponent(f.path));},viewFile:function(f){if(f.type!='folder'&&f.type!='parent'&&f.type!='zip')window.open('../../stream/index.php?cmd=fm.streamFile&path='+encodeURIComponent(f.path),'View');},imageManager:function(){var suf;if(this.imageManagerURL.indexOf('?')!=-1)suf=this.urlSuffix.replace(/\?/,'&');document.location=this.imageManagerURL+suf;},focusFile:function(f){var t=this;if(f&&f.type=='parent')return;$('#filemanagerlist tbody tr').removeClass('selected').removeClass('focused');if(!f){t.selectedFiles=[];t.focusedFile=null;t.focusedIndex=-1;$().trigger('selection:changed');t.showPreview(0);return;}t.focusedIndex=f.index;t.focusedFile=f;t.selectedFiles=[f];$().trigger('selection:changed');$('#'+f.id).addClass('selected focused');t.showPreview(f);},setFileSelection:function(st,en,ck,nup){var t=this,i;function sel(v,i){if(v&&v.type!='parent'){v=$('#file_'+i);if(ck)v.addClass('selected');else if(!v.hasClass('focused'))v.removeClass('selected');}};for(i=st;i0[mHR .G{R+3*QcܥRJ[qpQhq"9r%̅SZpMVB9&ѱB$*"\[.P]-|]&sєX\#dy~ÏҿhKMj40Od2( W%",~Ȕy!1`#z6 /Ʋ7FheU@\n<\ҽ8pnq;8񭷍+wuYm,.9cBhHndo)8 RWkf> *4Nb(XorQ:9`VIiZKU5)x%Cw ;y/.>8~`?~i}ߖ1N filemanager/js/default.php000066600000000046150472616010011575 0ustar00filemanager/js/mcfilemanager.js000066600000015700150472616010012573 0ustar00/** * $Id: mcfilemanager.js 634 2009-01-08 16:52:45Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2008, Moxiecode Systems AB, All rights reserved. */ (function() { window.mcFileManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'file' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; idispatchEvent("onPreInit", array($type)); $mcConfig = $man->getConfig(); if ($package) { $compressor = new Moxiecode_JSCompressor(array( 'expires_offset' => 3600 * 24 * 10, 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'name' => $theme . "_" . $package )); require_once('../classes/Utils/ClientResources.php'); $resources = new Moxiecode_ClientResources(); // Load theme resources $resources->load('../pages/' . $theme . '/resources.xml'); // Load plugin resources $plugins = explode(',', $mcConfig["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); $files = $resources->getFiles($package); if ($resources->isDebugEnabled() || checkBool($mcConfig["general.debug"])) { header('Content-type: text/javascript'); $pagePath = dirname($_SERVER['SCRIPT_NAME']); echo "// Debug enabled, scripts will be loaded without compression\n"; echo "(function() {\n"; echo "var h = '';\n"; foreach ($files as $file) echo 'h += \'\';' . "\n"; echo "document.write(h);\n"; echo "})();\n"; } else { foreach ($files as $file) $compressor->addFile($file->getPath(), $file->isRemoveWhiteSpaceEnabled()); $compressor->compress($package); } die; } ?>filemanager/default.php000066600000000044150472616010011157 0ustar00filemanager/rpc/rpc.php000066600000006316150472616010011113 0ustar00decode($raw); // Parse prefix and method $chunks = explode('.', $input['method']); $type = $chunks[0]; $input['method'] = $chunks[1]; // Clean up type, only a-z stuff. $type = preg_replace("/[^a-z]/i", "", $type); if ($type == "") die('{"result":null,"id":null,"error":{"errstr":"No type set.","errfile":"","errline":null,"errcontext":"","level":"FATAL"}}'); // Include Base and Core and Config. $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $mcConfig =& $man->getConfig(); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch onInit event if ($man->isAuthenticated()) { $man->dispatchEvent("onBeforeRPC", array($input['method'], $input['params'][0])); $result = new stdClass(); $result->result = $man->executeEvent("onRPC", array($input['method'], $input['params'][0])); $result->id = $input['id']; $result->error = null; $data = $json->encode($result); //header('Content-Length: ' . strlen($data)); die($data); } else die('{"result":{"login_url":"' . addslashes($mcConfig["authenticator.login_page"]) . '"},"id":null,"error":{"errstr":"Access denied by authenicator.","errfile":"","errline":null,"errcontext":"","level":"AUTH"}}'); ?>filemanager/rpc/default.php000066600000000042150472616010011741 0ustar00filemanager/rpc/index.php000066600000000042150472616010011424 0ustar00filemanager/mime.types000066600000001672150472616010011047 0ustar00# # Mime types/Content Types for some common file extensions. (Apache style file format) # application/msword doc dot application/pdf pdf application/pgp-signature pgp application/postscript ps ai eps application/rtf rtf application/smil smi smil application/vnd.ms-excel xls xlb application/vnd.ms-powerpoint ppt pps pot application/zip zip application/x-java-archive jar application/x-javascript js application/x-shockwave-flash swf swfl application/vnd.openxmlformats docx pptx xlsx audio/x-pn-realaudio ra rm ram audio/mpeg mpga mpega mp2 mp3 audio/x-wav wav image/bmp bmp image/gif gif image/jpeg jpeg jpg jpe image/png png image/svg+xml svg svgz image/tiff tiff tif text/html htm html xhtml text/rtf rtf video/mpeg mpeg mpg mpe video/quicktime qt mov video/x-flv flv video/vnd.rn-realvideo rv text/plain asc txt text diff log filemanager/language/fm/fr.xml000066600000015046150472616010012350 0ustar00

        Francis THOMAS (frato@lecentre.net) This is the french language pack for the MCFileManager.
        Ce fichier existe dj. Le fichier source n'existe pas. Cette action est limite en mode dmonstration. Nom du fichier non valide. Vous n'avez pas de droits en criture sur ce fichier/dossier. La copie a choue. Le dplacement a chou. Template introuvable. La cration du document a choue. Vous ne disposez pas des droits pour raliser cette action. Ce fichier existe dj. L'envoi a chou, vrifiez les droits d'criture sur le dossier. La taille maximum est dpasse. Ce fichier n'existe pas. La suppression a choue. Le dossier existe dj. Aucun systme de fichier n'a t trouv. La cration du dossier a choue. La cration du zip a choue. Le changement de nom a chou. Zip termin. Copie termin. Dplacement termin. Le document a t cr. Suppression termine. Dossier cr. Keepalive Envoi termin. Voulez-vous vraiment couper les fichiers slectionns ? Voulez-vous vraiment copier les fichiers slectionns ? Voulez-vous vraiment coller les fichiers coups/copis ? Voulez-vous vraiment supprimer les fichiers slectionns ? Chargement du fichier, patientez... Collage en cours, patientez... Crer dossier Nouveau fichier Aide Rafrachir Upload dossier slectionn Image manager Moxiecode Gestionnaire de fichiers Ok Oui Non Crer Catgories Prvisualisation Favoris Historique Insrer Tlcharger Renommer Couper Copier Coller Supprimer Zipper Afficher Tout cocher Tout dcocher Ajouter aux favoris Supprimer des favoris Nom du fichier Taille Type Date de modification Avec la slection : Dossiers : Fichiers : Taille du fichier : accs : Chargement... Crer dossier Insrez le nom du dossier que vous voulez crer. Template : -- template -- Nom du dossier : Crer dans : Cration du dossier, patientez... Crer document Remplissez le formulaire pour crer un document depuis le template. Template : -- template -- Nom Chemin Prvisualisation Upload Utilisez le formulaire pour uploader des fichiers. Extensions valides : Taille max : Fichiers uploader : Comme : Chemin : Upload Parcourir Upload en cours, patientez... Crer un zip Nom du fichier zip crer. Nom : Chemin Insrer un fichier filemanager/language/fm/el.xml000066600000021552150472616010012340 0ustar00
        Dimitris Giannitsaros / MediSign SA This is the Greek language pack for the MCFileManager.
        HTML Script Flash Powerpoint Office Adobe acrobat Excel XML Moxiecode Moxiecode . / ; ; ; ; ;\n , . zip. Upload Download / / / / / / : / {path} . : /. : {path} , . / . : . : : : : : : : : : . / / : : : / . . : -- -- : : : . : . : . : .\\n : :; : . . : -- -- . : : : . : . : . : .\\n : ;. : . Upload upload . Upload : : : upload: : upload. Upload : . : . Remove zip . zip: : : CSize zip zip . zip : : .
        filemanager/language/fm/ru.xml000066600000146330150472616010012370 0ustar00
        dial.su Это Русский языковой пакет для TinyMCE
        требуется использовать WYSIWYG режим для этого поля? Применить Вставить Обновить Отменить Закрыть Просмотр Класс - не выбрано - Копировать / Вырезать / Вставить (не доступно в Mozilla и Firefox) \ n Вам интересная информация об этом? В данный момент не поддерживается Вашим браузером, используйте горячие клавиши Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool Ошибка: Введен ошибочное значение, отмечено красным Больше цветов Жирный (Ctrl + B) Курсив (Ctrl + I) Подчеркнутый (Ctrl + U) Зачеркнутый Список Список нумерованный Отменить (Ctrl + Z) Вернуть (Ctrl + Y) Удалить лишний код Стили Размер шрифта Шрифт Формат Абзац Div Стиль адреса Предварительно форматированный Заголовок 1 Заголовок 2 Заголовок 3 Заголовок 4 Заголовок 5 Заголовок 6 Цитата Код Пример кода Справочник термин Справочник описание Жирный (Ctrl + B) Курсив (Ctrl + I) Подчеркнутый (Ctrl + U) Зачеркнутый По левому краю По центру По правому краю По ширине Список Нумерованный список Уменьшить отступ Увеличить отступ Отменить (Ctrl + Z) Вернуть (Ctrl + Y) Вставить / изменить ссылку Удалить ссылку Добавить / изменить изображение Очистить лишний код Изменить HTML код Нижний индекс Верхний индекс Вставить горизонтальный разделитель Очистить форматирование Ваш произвольный описание здесь Выберите цвет текста Выберите цвет фона Вставить символ Toggle guidelines / invisible elements Добавить / изменить якорь Вырезать Копировать Вставить Свойства изображения Новый документ Помощь Цитата Копировать / Вырезать / Вставить (не доступно в Mozilla и Firefox) \ n Вам интересная информация об этом? Путь Вы уверены, что хотите все удалить? Перейти на панель кнопок - Alt + Q, Перейти к редактору - Alt-Z, Перейти на элемент пути - Alt-X Больше цветов О продукте TinyMCE О продукте ... Помощь Лицензия Плагины Плагин Автор Версия Загруженные плагины Добавить / изменить якорь Имя якоря Редактор HTML кода Переносить слова Выберите цвет Пипетка Пипетка цвета Палитра Палитра цветов По названию По названию Цвет: Наименование: Выбрать произвольный символ Добавить / изменить изображение Адрес Описание Список изображений Граница Размеры Верт. отступление Гориз. отступление Выравнивание По базовой линии По верхнему краю По центру По нижнему краю По верхнему краю текста По нижнему краю текста По левому краю По правому краю Добавить / изменить ссылку Адрес ссылки Открыть в ... этом же окне новом окне Заголовок Введенный URL похож на email адрес, вы хотите добавить необходимый префикс mailto:? Введенный URL похож на внешнюю ссылку, вы хотите добавить необходимый префикс http://? Список ссылок Выравнивание По левому краю По центру По правому краю По ширине % d.% m.% Y % H:% M:% S Вставить дату Вставить время январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь январь, февраль, март, апрель, май, июнь, июль, август, Сентябрь, Октябрь, Ноябрь, Декабрь воскресенье, понедельник, вторник, среда, четверг, пятницу, субботу, воскресенье Вс, Пн, Вт, Ср, Чт, Пт, Сб, Вс Печать Просмотр Направление слева направо Направление справа налево Вставить новый слой Вверх Переместить назад Toggle absolute positioning Новый слой ... Сохранить Отменить все изменения Вставить неразрывный пробел Запустить орфографию ieSpell не найдено. Хотите проинсталлировать? Горизонтальный разделитель Ширина Высота Без тени Смайлики Вставить смайл Смайлики Cool Cry Embarassed Foot in mouth Frown Innocent Kiss Laughing Money mouth Sealed Smile Surprised Tongue out Undecided Wink Yell Найти Найти / Заменить Найти еще Поиск завершен. Поисковый ряд не найден Найти Найти / Заменить Все вхождения строки были заменены Найти Заменить на Направление Вверх Вниз Учитывать регистр Найти далее Заменить Заменить все Вставить / изменить изображение 200 Общее Вид Дополнительно Общее Заголовок Просмотр Сохранять пропорции Направление языка Код языка Long description link Стиль Классы Слева направо Справа налево Id Image map Swap image Альтернативное изображение при наведении при отводе Другое Вид просмотра изображения Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off Добавить / изменить изображение Адрес изображения Описание Список изображений Граница Размеры Верт. отступ Гориз. отступ Выравнивание По базовой линии По верхнему краю По центру По нижнему краю По верхнему краю текста По нижнему краю текста По левому краю По правому краю Список изображений Вставить / изменить ссылку 200 Вставить / изменить ссылку Адрес Открыть в ... Заголовок Введенный URL похож на email адрес, вы хотите добавить необходимый префикс mailto? Введенный URL похож на внешнюю ссылку, вы хотите добавить необходимый префикс http://? Список ссылок Общее Popup События Дополнительно Общие свойства Свойства Popup События Расширение свойства Свойства Якоря Открыть в этом же окне / фрейме Открыть в родительском окне / фрейме Открыть в верхнем фрейме (заменить все фреймы) Открыть в новом окне Javascript popup Popup URL Название окна Вставить 'return false' Показывать скроллеры Показывать статус Показывать панели инструментов Показывать меню Показывать панель location Разрешать изменять размер Dependent (только для Mozilla / Firefox) Размер Позиция (X / Y) Id Стиль Классы Target name Направление языка Target language Код языка Target character encoding Target MIME type Relationship page to target Relationship target to page Tabindex Accesskey Слева направо Справа налево Список ссылок Citation Abbreviation Acronym Deletion Insertion Вставить / изменить атрибуты Заголовок ID Класс Стиль Цитата Дата / Время Направление текста Слева направо Справа налево Язык TabIndex AccessKey События Атрибуты Общее Атрибуты События Общие настройки Element Attributes Element Events Insertion Element Deletion Element Acronym Element Abbreviation Element Citation Element Удалить Вставить текущую дату / время Слева направо Справа налево Вставить / изменить атрибуты Редактировать CSS стиль Редактирование CSS стиля Применить Текст Фон Блок Box Граница Список Позиционирование Текст Шрифт Размер Толщина Стиль Variant Высота строки Case Цвет Оформление верхняя черта нижняя черта зачеркнутый мерцания ничего Цвет фона Фоновое изображение Повтор Attachment Горизонтальная позиция Вертикальная позиция Отступы между словами Отступы между буквами Вертикальное выравнивание Выравнивание текста Text indent Whitespace Display Ширина Высота Float Clear Padding Одинаково для всех Вверх Справа Снизу Слева Margin Стиль Ширина Высота Цвет Тип Bullet image Позиция Тип Видимость Z-index Overflow Placement Clip Вставить как текст Вставить из Word Выделить все Используйте CTRL + V для вставки текста в окно Сохранить переносы строк Используйте CTRL + V для вставки текста в окно Вставить новую таблицу Вставить строку до Добавить строку после Удалить строку Добавить столбец до Добавить столбец после Удалить столбец Разделить ячейки Объединить ячейки Свойства строке таблицы Свойства ячейки таблицы Свойства таблицы Вставить строку до Вставить строку после Вырезать строку таблицы Копировать строку таблицы Удалить таблицу Строка Поле Ячейка 30 Общее Дополнительно Общие свойства Расширенные свойства Row in table part Добавление / Изменение таблицы Ширина Высота Столбцы Сроки Расстояние между ячейками Отступы в ячейках Граница Выравнивание По умолчанию По левому краю По правому краю По центру Свойства строке таблицы Свойства ячейки таблицы Тип ячейки Вертикальное выравнивание По верхнему краю По нижнему краю цвет границы цвет фона Объединить ячейки Id Стиль Направление языка Код языка Target MIME-тип Слева направо Справа налево Фоновое изображение Общее Данные Заголовок Обновить текущую ячейку Обновить все ячейки в строке Обновить все ячейки в таблице Обновить текущую строку Обновить нечетные строки в таблице Обновить четные строки в таблице Обновить все строки в таблице Заголовок таблицы Тело таблицы Нижняя частсина Scope Row Group Col Group You've exceeded the maximum number of columns of ($ cols) You've exceeded the maximum number of rows of ($ rows) You've exceeded the maximum number of cells of ($ cells) Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table Table caption Фрейм none groups rows cols all Rules void above below hsides lhs rhs vsides box border Изменения, которые вы сделали, будут потеряны, если вы перейдете с этой страницы. Переключиться на весь экран Вставить / редактировать embedded media Редактировать embedded media Вставить / редактировать embedded media Общее Дополнительно Файл / URL Список Размеры Просмотр Сохранять пропорции Тип Id Название Класс верт.видступ гор.видступ Автоплей Луп Показывать меню Качество Scale Align SAlign WMode Фон Base Flashvars SWLiveConnect AutoHREF Кэш Hidden Controller Kiosk mode Play every frame Target cache No correction Enable JavaScript Start time End time Href Choke speed Target Громкость Автостарт Enabled Fullscreen Invoke URLs Mute Stretch to fit Windowless video Баланс Base URL Captioning id Current marker Current position Default frame Play count Rate UI Mode Flash options Quicktime options Windows media player options Real media player options Shockwave options Auto goto URL Center Image status Maintain aspect No java Prefetch Shuffle Console Num loops Controls Script callbacks Stretch style Stretch H-Align Stretch V-Align Sound Progress QT Src Streamed rtsp resources should be added to the QT Src field under the advanced tab \ nYou should also add a non streamed version to the Src field .. Top Right Bottom Left Center Top left Top right Bottom left Bottom right Flash video options Scale mode Buffer Start image Start time Default volumne Hidden GUI Auto start Loop Show scale modes Smooth video JS Callback Свойства документа Свойства документа Общее Вид Дополнительно Цель информации Язык и кодирования Заголовок Ключевые слова Описание Работы Doctype Код языка Направление языка Слева направо Справа налево XML declaration Кодировка Свойства фона Отступы Цвет ссылок Свойства текста Цвет фона Фоновое изображение Отступ слева Отступ справа Отступ сверху Отступ снизу Цвет текста Размер шрифта Шрифт Цвет ссылки Цвет ссылки при наведении Цвет нажатой ссылки Цвет активной ссылки Цвет Размер шрифта Семейство шрифта Index and follow the links Index and don't follow the links Do not index but follow the links Do not index and don \ 't follow the links Stylesheet and style properties Stylesheet Стиль Автор Копирайт Добавить новый элемент Удалить выделенный элемент Переместить элемент вверх Переместить элемент вниз Head elements Информация Title element Meta element Script element Style element Link element Base element Comment node Title element Script element Style element Base element Link element Meta элемент Комментарий Src Язык Href Target Type Charset Defer Media Properties Название Значение Содержание Rel Rev Href lang Общее Дополнительно Вставить шаблонный контент Шаблоны Шаблон Описание Вставить шаблонный контент Выберите шаблон Просмотр Внимание: обновления шаблона на другой может привести к потерям данных % Y-% m-% d% H:% M:% S % Y-% m-% d% H:% M:% S январь, февраль, март, апрель, май, июнь, июль, август, сентябрь, октябрь, ноябрь, декабрь январь, февраль, март, апрель, май, июнь, июль, август, Сентябрь, Октябрь, Ноябрь, Декабрь воскресенье, понедельник, вторник, среда, четверг, пятницу, субботу, воскресенье Вс, Пн, Вт, Ср, Чт, Пт, Сб, Вс Visual control characters on / off Переключить проверку Настройки проверки Игнорировать слово Игнорировать все Языки Пожалуйста, подождите ... Варианты Нет вариантов Ошибок не найдено Вставить разделитель страницы
        filemanager/language/fm/de.xml000066600000020034150472616010012322 0ustar00
        Moxiecode Systems AB / Translated by Markus Vetten This is the german language pack for the MCFileManager.
        Die Datei existiert bereits. Die Ausgangsdatei existiert nicht. Diese Option steht in der DEMO-Version nicht zur Verfgung. Der Dateiname ist ungltig. Es besteht kein Schreibzugriff auf die Datei/das Verzeichnis. Der Kopiervorgang ist fehlgeschlagen. Der Verschiebungsvorgang ist fehlgeschlagen. Die Ausgabeschablone konnte nicht gefunden werden. Die Datei konnte nicht erstellt werden. Sie haben nicht die ntigen Zugriffsrechte, um diese Aktion durchzufhren. Diese Datei existiert bereits. Der Hochladevorgang ist fehlgeschlagen, bitte prfen Sie die Schreibberechtigungen. Die maximale Dateigre wurde berschritten. Diese Datei existiert nicht. Der Lschvorgang ist fehlgeschlagen. Dieses Verzeichnis existiert bereits. Es konnte kein Dateisystem ermittelt werden. Das Verzeichnis konnte nicht erstellt werden. Die ZIP-Datei konnte nicht erstellt werden. Die Datei konnte nicht umbenannt werden. Die ZIP-Datei wurde erstellt. Der Kopiervorgang war erfolgreich. Der Verschiebungsvorgang war erfolgreich. Die Datei wurde erstellt. Der Lschvorgang war erfolgreich. Das Verzeichnis wurde erstellt. Ihre derzeitige Sitzung ist dabei auszulaufen. Der Hochladevorgang war erfolgreich. Sind Sie sicher, dass Sie die ausgewhlten Dateien ausschneiden mchten? Sind Sie sicher, dass Sie die ausgewhlten Dateien kopieren mchten? Sind Sie sicher, dass Sie die zuvor ausgeschnittenen bzw. kopierten Dateien hier einfgen mchten? Sind Sie sicher, dass Sie die ausgewhlten Dateien lschen mchten? Rufe Dateiinformationen ab, bitte warten... Verschiebungsvorgang luft, bitte warten... Verzeichnis erstellen Neue Datei Hilfe Aktualisieren Hochladen Ausgewhltes Verzeichnis Bilderverwaltung Dateiverwaltung Ok Ja Nein Erstellen Kategorien Vorschau Favoriten Verlauf Einfgen Herunterladen Umbenennen Ausschneiden Kopieren Einfgen Lschen zu ZIP-Archiv hinzufgen Ansehen alle auswhlen Auswahl aufheben Als Favorit eintragen Als Favorit entfernen Name Gre Typ nderungsdatum Operation: Verzeichnisse: Dateien: Dateigre insgesamt: Zugriffsrechte: Laden... Verzeichnis erstellen Geben Sie den Namen fr das Verzeichnis an, welches Sie erstellen mchten. Vorlage: -- Vorlage auswhlen -- Verzeichnisname: erstellen in: Erstelle Verzeichnis, bitte warten... Datei erstellen Fllen Sie das Formular aus, um eine Datei von einer Vorlage aus zu erstellen. Vorlage: -- Vorlage auswhlen -- Name Pfad Vorschau Hochladen Benutzen Sie dieses Formular, um Dateien hochzuladen. Zugelassene Dateiendungen: Maximale Dateigre: Datei: Name: Pfad: Hochladen Datei hinzufgen Lade Datei hoch, bitte warten... Archiv erstellen Geben Sie den Namen des Archivs an, das Sie erstellen mchten. Name: Pfad: Datei einfgen
        filemanager/language/fm/es.xml000066600000022316150472616010012346 0ustar00
        Moxiecode Systems AB Este es el paquete de lenguaje en espaol de MCFileManager.
        Archivo Ejecutable Archivo de Imagen Archivo Comprimido Archivo HTML o Script Archivo Media Archivo de sonido Archivo Flash Archivo Powerpoint Archivo de Documento Office documento Archivo Adobe acrobat Archivo Excel Archivo de texto Archivo XML Moxiecode File Browser Moxiecode File Browser Nombre de Archivo Tamao Fecha de Modificacin Est seguro de cortar y mover los archivos seleccionados? Est seguro de copiar los archivos seleccionados? Est seguro de colocar los archivos seleccionados del porta papeles? Est seguro de borrar los archivos seleccionados? Est seguro descomprimir el archivo seleccionado?\n Si el archivo comprimido es demasiado grande, la accin llevar su tiempo. Los siguientes archivos han sido borrados debido a que nos son archivos comprimidos (zip). Crear Directorio Crear Archivo Actualizar Subir nuevo archivo Descargar archivos seleccionados Propiedades de Archivo/Directorio Cortar archivos/directorios seleccionados Copiar archivos/directorios seleccionados Pegar archivos/directorios seleccionados Borrar archivos/directorios seleccionados Descomprimir el archivo seleccionado Comprimir los archivos/directorios seleccionados Cambiar a ImageManager Directorio Directorio Raz Toggle todos Error: El archivo/directorio {path} ya existe. Error: No tiene acceso a borrar Archivo o Directorios. Error: El directorio {path} No ha podido ser borrado, no est vaco. Informacin de Archivo / Directorio Informacin de Directorio Informacin de Archivo Fecha de creacin: Fecha de Modificacin: Acceso: Directorio: Subdirectorios: Archivos: Tamao total: Nombre: Tamao: descripcin: Previzualizar No puede previsualizarse. Seleccionar Ver Lectura No lectura Escritura No escritura Propiedades de Archivo / Directorio Propiedades de Archivo / Directorio Propiedades en: Nombre: Salvar Cancelar Error: Un archvio o directorio con el nombre especificado ya existe. Crear directorio Inserte el nombre del directorio que desea crear. Plantilla: -- Seleccionar Plantilla -- Nombre del Directorio: Crear en: Crear Cancelar Error: Debe especificar un nombre. Error: Debe seleccionar una plantilla. Error: La plantilla seleccionada no pudo ser localizada. Error: El nombre del directorio que intenta crear es invlido.\\nincluye caracteres no validos tales como: :; Error: El nombre del directorio especificado ya existe. Crear documento Llene la forma para crear un nuevo documento a partir de la plantilla. Plantilla: -- Seleccionar Plantilla -- Debe escribir un nombre de archivo para el nuevo documento. Nombre de Archivo: Crear en: Crear Cancelar Error: Debe especificar el nombre del documento. Error: Debe seleccionar una plantilla. Error: La plantilla seleccionada no pudo ser encontrada. Error: El nombre del archivo que intenta crear es invlido.\\nincluye caracteres no validos tales como: :;. Error: El nombre del archivo ya existe. Subir Use la forma para subir archivos. Subir a: Extensiones Validas: Mximo tamao permitido: Archivo para subir: Con nombre de archivo: Debe escribir un nombre de archivo para el archivo que desea subir. Subir Agregar Casilla Cancelar Error: El archivo que intenta subir ya existe. Error: El archivo que intenta subir sobrepasa el lmite del tamao permitido. Quitar Resumen de archivo comprimido Resumen de los archivos comprimidos seleccionados. Nombre del archivo comprimido: Carpeta actual: Archivos re-escribidos: Nombre Tamao Ctamao Existe Estatus Creado Descomprimir Cancelar Atrs Cerrar Aceptado Denegado Pasado Fallido Si No Crear zip Escriba el nombre del archivo zip que desea crear. El archivo zip ser creado en: Nombre: Debe escribir un nombre. Crear Cancelar
        filemanager/language/fm/ja_utf-8.xml000066600000022201150472616010013345 0ustar00
        Moxiecode Systems AB This is the japanese language pack for the MCFileManager.
        ファイル イメージファイル ZIPファイル HTMLファイル 映画 音声ファイル Flashファイル PowerPoint ドキュメントファイル ワードファイル PDF Excelファイル テキストファイル XMLファイル ファイル・ブラウザ ファイル・ブラウザ ファイル名 サイズ 更新日時 選択したファイルを切り取り? 選択したファイルをコピー? 貼り付けしますか? 選択したファイルを削除? 本当に選択されたファイルをunzipする?\nファイルが大きならば、時間がかかります。 次のファイルがzip形式ではないので外しました。 フォルダを新規作成 ファイルを新規作成 更新 ファイルをアップロード 選択したフィルをダウンロード ファイル・フォルダのプロパティ 選択したものを切り取り 選択したものをコピー 貼り付け 選択したものを削除 選択されたファイルをunzipする 選択されたファイルやフォルダをzipする 映像管理に行く フォルダ 上のフォルダ 全部をトグル エラー {path} がすでに存在する エラー:アクセス権利がないので、削除できない。 エラー: {path} が空ではないので、削除できない ファイル・フォルダの情報 フォルダ情報 ファイル情報 作成日時: 更新日時: アクセス: フォルダ: サッブフォルダ: ファイル: 合計ファイルサイズ: ファイル名: ファイルサイズ: ファイル説明: 下見 下見がない 選択 表示 読込み可 読込み不可 書込み可 書込み不可 ファイル・フォルダのプロパティ ファイル・フォルダのプロパティ プロパティ有効: 名前: 保存 キャンセル エラー:そのファイルやフォルダがすでに存在する フォルダ新規作成 フォルダ名 テンプレート: -- テンプレートを選択 -- フォルダ名: 作成先: 作成 キャンセル エラー:名前を設定していない エラー:テンプレートを設定していない エラー:テンプレートが見つからない エラー:フォルダ名が無効 エラー:そのフォルダがすでに存在する ファイル新規作成 テンプレートから作成 テンプレート: -- テンプレートを選択 -- ファイル名を記入する必要がある ファイル名: 作成先: 作成 キャンセル エラー:ファイル名が必要 Error: You must select a template. Error: The selected template could not be found. エラー:ファイル名が無効 エラー:そのファイルがすでに存在する アップロード ファイルをアップロードのフォルム アップロード先: 有効拡張形式: 最大サイズ: アップロードするファイル: ファイル名として: ファイル名を記入する必要がある アップロード アップロード追加 キャンセル エラー:そのファイルがすでに存在する エラー:そのファイルが大きすぎる 取り除く Unzipの概要 選択したzip形式のファイルの概要 zipファイル名: 現在のフォルダ: ファイルを上書き: 名前 サイズ Cーサイズ 存在する ステータス 作成した Unzip キャンセル 戻る 閉じる 受けた 否定した 成功した 失敗した はい いいえ zipを作成 作成したいzipファイルの名前を記入: zipファイルの保存先: 名前: ファイル名を入力する必要がある. 作成 キャンセル
        filemanager/language/fm/en.xml000066600000023713150472616010012343 0ustar00
        Moxiecode Systems AB Русский
        Файл уже сущесвует Файл не существует This action is restricted in demo mode. Неправильное имя файла Нет прав для чтения этого файла/папки Нет прав для записи в этот файл/папку Ошибка копирования Ошибка перемещения Шаблон не найден Ошибка создания документа У вас не достаточно прав для этого действия Файл уже существует Ошибка загрузки, проверьте права доступа Достигнут максимальный размер файла Файл не существует Ошибка удаления Папка уже существует No filesystem was found. Ошибка создания папки Создать архив Ошибка переименования Ошибка сохранения содержимого Архивирование прошло успешно Копирование прошло успешно Перемещение прошло успешно Создание документа прошло успешно Удаление прошло успешно Создание папки прошло успешно Keepalive Загрузка прошла успешно Вырезать выбранные файлы? Скопировать выбранные файлы? Вставить выбранные файлы? Удалить выбранные файлы? Получение информации, секундочку.. Идёт процес вставки Создать папку Новый файл Помощь Обновить Загрузить Текущая папка Менеджер картинок Загрузка и добавление файлов Ок Да Нет Создать Отмена Сохранить Папки Просмотр Избранное История Редактировать файл Редактировать содержимое файла Загрузка содержимого, секундочу Сохранение содержимого, сеундочку Путь к файлу: Вставить Загрузить Переименовать Вырезать Копировать Вставить Удалить Редактировать Архивировать Просмотр Выделить все Отменить выбор Добавить в избранное Удалить из избранного Имя Размер Тип Изменено С выбранным: Папки: Файлы: Общий размер файлов: Доступ: Загружаю... Создать папку Выберите имя папки Шаблон: -- Шаблоны -- Имя папки: Создать в: Создание папки, секундочку Создать документ Заполните форму для создания документа Шаблон: -- Шаблоны -- Имя Путь Просмотр Просмотр: {file} Загрузить Используйте данную форуму для загрузки файлов Разрешённые расширения: Максимальный размер файла: Файл для загрузки: Имя файла: Путь: Загрузить AДобавить файл(ы) Загружаю... Файлы уже загружены, хотите отменить загрузку? {files} файлов (размер {size}) находятся в ожидании загрузки. {loaded} из {total} загружено на скорости {speed}/сек. Отменить загрузку Добавить ещё Загрузить на сервер Загрузка отменена Выделите файлы Если возникают проблемы при загрузке, попробуйте {a}классический интерфейс{/a}. Удалить Файл Размер Статус Ни одного корректного файла не выбрано Создать архив Введите имя для создаваемого архива Имя: Путь Вставить файл Избранное Добавить в избранное Удалить из избранного Точно удалить из избранного Ошибка удаления из избранного История
        filemanager/language/fm/ja.xml000066600000022201150472616010012322 0ustar00
        Moxiecode Systems AB This is the japanese language pack for the MCFileManager.
        ファイル イメージファイル ZIPファイル HTMLファイル 映画 音声ファイル Flashファイル PowerPoint ドキュメントファイル ワードファイル PDF Excelファイル テキストファイル XMLファイル ファイル・ブラウザ ファイル・ブラウザ ファイル名 サイズ 更新日時 選択したファイルを切り取り? 選択したファイルをコピー? 貼り付けしますか? 選択したファイルを削除? 本当に選択されたファイルをunzipする?\nファイルが大きならば、時間がかかります。 次のファイルがzip形式ではないので外しました。 フォルダを新規作成 ファイルを新規作成 更新 ファイルをアップロード 選択したフィルをダウンロード ファイル・フォルダのプロパティ 選択したものを切り取り 選択したものをコピー 貼り付け 選択したものを削除 選択されたファイルをunzipする 選択されたファイルやフォルダをzipする 映像管理に行く フォルダ 上のフォルダ 全部をトグル エラー {path} がすでに存在する エラー:アクセス権利がないので、削除できない。 エラー: {path} が空ではないので、削除できない ファイル・フォルダの情報 フォルダ情報 ファイル情報 作成日時: 更新日時: アクセス: フォルダ: サッブフォルダ: ファイル: 合計ファイルサイズ: ファイル名: ファイルサイズ: ファイル説明: 下見 下見がない 選択 表示 読込み可 読込み不可 書込み可 書込み不可 ファイル・フォルダのプロパティ ファイル・フォルダのプロパティ プロパティ有効: 名前: 保存 キャンセル エラー:そのファイルやフォルダがすでに存在する フォルダ新規作成 フォルダ名 テンプレート: -- テンプレートを選択 -- フォルダ名: 作成先: 作成 キャンセル エラー:名前を設定していない エラー:テンプレートを設定していない エラー:テンプレートが見つからない エラー:フォルダ名が無効 エラー:そのフォルダがすでに存在する ファイル新規作成 テンプレートから作成 テンプレート: -- テンプレートを選択 -- ファイル名を記入する必要がある ファイル名: 作成先: 作成 キャンセル エラー:ファイル名が必要 Error: You must select a template. Error: The selected template could not be found. エラー:ファイル名が無効 エラー:そのファイルがすでに存在する アップロード ファイルをアップロードのフォルム アップロード先: 有効拡張形式: 最大サイズ: アップロードするファイル: ファイル名として: ファイル名を記入する必要がある アップロード アップロード追加 キャンセル エラー:そのファイルがすでに存在する エラー:そのファイルが大きすぎる 取り除く Unzipの概要 選択したzip形式のファイルの概要 zipファイル名: 現在のフォルダ: ファイルを上書き: 名前 サイズ Cーサイズ 存在する ステータス 作成した Unzip キャンセル 戻る 閉じる 受けた 否定した 成功した 失敗した はい いいえ zipを作成 作成したいzipファイルの名前を記入: zipファイルの保存先: 名前: ファイル名を入力する必要がある. 作成 キャンセル
        filemanager/language/fm/sv.xml000066600000021156150472616010012370 0ustar00
        Moxiecode Systems AB This is the Swedish language pack for the MCImageManager.
        Filen existerar redan. Kllfilen existerar inte. Denna operation r inte tillten i demostrations lget. Filens namn r inte tillten. Inga lsrttigheter till denna fil/katalog. Inga skrivrttigheter till denna fil/katalog. Kopieringen misslyckades. Frflyttningen/omdpningen misslyckades. Mallen kunde inte hittas. Dokumentet kunde inte skapas. Du har inga rttiheter att utfra denna operation. Mlfilen existerar redan. Uppladdningen misslyckades. Filen du frskte ladda upp r fr stor. Filen existerar inte. Rederingen misslyckades. Katalogen finns redan. Filsytem kunde inte hittas: {path}. Kunde inte skapa katalog. Kunde inte skapa zip fil. Kunde inte dpa om filen. Kunde inte spara filen. Zip filen har skapats. Kopieringen r utfrd. Frflyttningen r utfrd Dokumentet har skapats. Filen/katalogen har raderats. Katalogen har skapats. Keepalive Uppladdningen r utfrd. r du sker p att du vill klippaut de markerade filerna/katalogerna? r du sker p att du vill kopiera de markerade filerna/katalogerna? r du sker p att du vill klista in filerna hr? r du sker p att du vill radera de markerade filerna/katalogerna? Sammanstller information, var god vnta... Klista in pgr, var god vnta... Skapa katalog Nytt dokument Hjlp Uppdatera Ladda upp Katalog Image manager Moxiecode File Mananger Ok Ja Nej Skapa Avbryt Spara Kategorier Frhandsgranska Favoriter Historik Edit file Edit the contents of the file. Loading contents please wait. Saving contents please wait. File path: Vlj Laddahem Dpom Klipp ut Kopiera Klista in Radera Redigera Zippa Visa Markera alla Avmarkera alla Lggtill favoriter Radera favoriter Filnamn Storlek Filtyp ndrad Med markeringen: Kataloger: Filer: Total filstorlek: Rttigheter: Laddar... Skapa katalog Fyll i namnet p katalogen du vill skapa. Mall: -- Vlj mall -- Katalogens namn: Skapa i: Skapar katalog, var god vnta... Skapa katalog Fyll i formulret nedan fr att skapa ett dokument utifrn en mall. Mall: -- Vlj mall -- Namn Skvg Frhandsgranska Frhandsgranskning av: {file} Ladda upp Vlj filer att ladda upp nedan. Godknnda filndelser: Max storlek: Fill att ladda upp: Filnamn: Skvg: Ladda upp Lgg till fil(er) Laddar upp fil, var god vnta... Filer hller p att laddas upp, r du sker p att du vill avbryta? Du har {files} filer (totalt {size}) som vntar p att f bli uppladdade. {loaded} av {total} uppladdade med hastigheten {speed}/s. Avbryt uppladdning Lgg till fler? Ladda upp till servern Upladdningen avbruten Vlj filer Om du har problem att ladda upp kan du alltid anvnda den {a}enkla upladdaren{/a}. Radera Fil Storlek Status Du mste vlja ngra korrekta filer. Skapa zip arkiv Fyll i namnet p zip filen du vill skapa. Namn: Skvg Infoga fil Favoriter Lgg till favorit(er) Radera favorit r du sker p att du vill radera favoriten? Raderingen av favoriten misslyckades.. Historik
        filemanager/language/default.php000066600000000047150472616010012745 0ustar00filemanager/language/index.php000066600000000047150472616010012430 0ustar00filemanager/language/language.php000066600000006317150472616010013112 0ustar00dispatchEvent("onPreInit", array($type)); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch auth event to make authenticators override config options $man->isAuthenticated(); $langPack =& $man->getLangPack(); $groups =& $langPack->getGroups(); // TinyMCE specific format if ($format == "tinymce") { echo "tinyMCE.addToLang('',{\n"; $group = $groups['tinymce']; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});"; } else if ($format == "tinymce_3_x") { echo "tinyMCE.addI18n('" . $langPack->getLanguage() . "',{\n"; $group = $groups['tinymce']; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});"; } else if ($format == "old") { // Normal MC manager format echo "mox.require(['mox.lang.LangPack'], function() {\n"; foreach ($groups as $groupName => $group) { echo "mox.lang.LangPack.add('en', '" . $groupName . "', {\n"; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) echo ","; echo "\n"; } echo "});\n\n"; } echo "\n});\n\n"; echo "function translatePage() {"; echo "if (mox && mox.lang && mox.lang.LangPack)"; echo "mox.lang.LangPack.translatePage();"; echo "}"; } else { $content = ""; echo "var MCManagerI18n = {\n"; $groupNames = $groupIDs ? explode(',', $groupIDs) : array_keys($groups); foreach ($groupNames as $group) { if (strlen($content) > 0) $content .= ','; $content .= "'" . $group . "':{\n"; $group = $groups[$group]; $keys = array_keys($group); for ($i=0; $iencodeString($group[$keys[$i]]); if ($i != count($keys) - 1) $content .= ","; $content .= "\n"; } $content .= "}"; } echo $content . "};"; } ?>filemanager/index.php000066600000002765150472616010010656 0ustar00dispatchEvent("onPreInit", array($type)); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once($path); $config = $man->getConfig(); $suffix = ""; if ($domain) $suffix .= "?domain=" . $domain; // Dispatch onInityo event if ($man->isAuthenticated()) { $man->dispatchEvent("onInit"); header("Location: pages/". $config["general.theme"] ."/" . $page . $suffix); die(); } else { header("Location: ". $config["authenticator.login_page"] . "?return_url=" . urlencode($_SERVER['REQUEST_URI'])); die(); } ?>filemanager/stream/default.php000066600000000047150472616010012455 0ustar00filemanager/stream/index.php000066600000000047150472616010012140 0ustar00filemanager/stream/stream.php000066600000007716150472616010012336 0ustar00load('../pages/' . $theme . '/resources.xml'); if ($type) { $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $mcConfig = $man->getConfig(); // Load plugin resources $plugins = explode(',', $mcConfig["general.plugins"]); foreach ($plugins as $plugin) $resources->load('../plugins/' . $plugin . '/resources.xml'); } $file = $resources->getFile($package, $file); header('Content-type: ' . $file->getContentType()); readfile($file->getPath()); die(); } if ($cmd == "") die("No command."); $chunks = explode('.', $cmd); $type = $chunks[0]; $method = $cmd = $chunks[1]; // Clean up type, only a-z stuff. $type = preg_replace("/[^a-z]/i", "", $type); if ($type == "") die("No type set."); // Include Base and Core and Config. $man = new Moxiecode_ManagerEngine($type); require_once($basepath ."CorePlugin.php"); require_once("../config.php"); $man->dispatchEvent("onPreInit", array($type)); $mcConfig = $man->getConfig(); // Include all plugins $pluginPaths = $man->getPluginPaths(); foreach ($pluginPaths as $path) require_once("../". $path); // Dispatch onAuthenticate event if ($man->isAuthenticated()) { if ($_SERVER["REQUEST_METHOD"] == "GET") { $args = $_GET; // Dispatch event before starting to stream $man->dispatchEvent("onBeforeStream", array($cmd, &$args)); // Check command, do command, stream file. $man->dispatchEvent("onStream", array($cmd, &$args)); // Dispatch event after stream $man->dispatchEvent("onAfterStream", array($cmd, &$args)); } else if ($_SERVER["REQUEST_METHOD"] == "POST") { $args = array_merge($_POST, $_GET); $json = new Moxiecode_JSON(); // Dispatch event before starting to stream $man->dispatchEvent("onBeforeUpload", array($cmd, &$args)); // Check command, do command, stream file. $result = $man->executeEvent("onUpload", array($cmd, &$args)); $data = $result->toArray(); if (isset($args["chunk"])) { // Output JSON response to multiuploader die('{method:\'' . $method . '\',result:' . $json->encode($data) . ',error:null,id:\'m0\'}'); } else { // Output JSON function echo ''; } // Dispatch event after stream $man->dispatchEvent("onAfterUpload", array($cmd, &$args)); } } else { if (isset($_GET["format"]) && ($_GET["format"] == "flash")) header("HTTP/1.1 405 Method Not Allowed"); die('{"result":{login_url:"' . addslashes($mcConfig["authenticator.login_page"]) . '"},"id":null,"error":{"errstr":"Access denied by authenicator.","errfile":"","errline":null,"errcontext":"","level":"AUTH"}}'); } ?>filemanager/editor_plugin_src.js000066600000032747150472616010013112 0ustar00/** * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $ * * @author Moxiecode * @copyright Copyright 2004-2007, Moxiecode Systems AB, All rights reserved. */ (function() { window.mcFileManager = { settings : { document_base_url : '', relative_urls : false, remove_script_host : false, use_url_path : true, remember_last_path : 'auto', target_elements : '', target_form : '', handle : 'file' }, setup : function() { var t = this, o, d = document, cp = []; // Find document_base_url o = d.location.href; if (o.indexOf('?') != -1) o = o.substring(0, o.indexOf('?')); o = o.substring(0, o.lastIndexOf('/') + 1); t.settings.default_base_url = unescape(o); // Find script base URL function get(nl) { var i, n; for (i=0; i{$name}'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinymce.DOM.encode(v); } } )); } } }, v)); }); }, getInfo : function() { return mcFileManagerPlugin.getInfo(); }, createControl: function(n, cm) { var t = this, c, ed = t.editor, v; switch (n) { case 'insertfile': v = ed.getParam('filemanager_insert_template'); if (v instanceof Array) { c = cm.createMenuButton('insertfile', { title : 'filemanager_insertfile_desc', image : t.url + '/pages/fm/img/insertfile.gif', icons : false }); c.onRenderMenu.add(function(c, m) { tinymce.each(v, function(v) { m.add({title : v.title, onclick : function() { ed.execCommand('mceInsertFile', false, v); }}); }); }); } else { c = cm.createButton('insertfile', { title : 'filemanager_insertfile_desc', image : t.url + '/pages/fm/img/insertfile.gif', onclick : function() { ed.execCommand('mceInsertFile', false, {template : v}); } }); } return c; } return null; } }); tinymce.PluginManager.add('filemanager', tinymce.plugins.FileManagerPlugin); tinymce.ScriptLoader.load((tinymce.PluginManager.urls['filemanager'] || tinymce.baseURL + '/plugins/filemanager') + '/language/index.php?type=fm&format=tinymce_3_x&group=tinymce&prefix=filemanager_'); } // Setup TinyMCE 2.x plugin if (window.TinyMCE_Engine) { var TinyMCE_FileManagerPlugin = { setup : function() { var b = (window.realTinyMCE || tinyMCE).baseURL; mcFileManager.baseURL = b + '/plugins/filemanager/js'; document.write(''); }, initInstance : function(ed) { ed.settings.file_browser_callback = 'mcFileManager.filebrowserCallBack'; mcFileManager.settings.handle = tinyMCE.getParam('filemanager_handle', mcFileManager.settings.handle); }, getControlHTML : function(cn) { switch (cn) { case "insertfile": return tinyMCE.getButtonHTML(cn, 'lang_filemanager_insertfile_desc', '{$pluginurl}/pages/fm/img/insertfile.gif', 'mceInsertFile', false); } return ""; }, getInfo : function() { return mcFileManagerPlugin.getInfo(); }, execCommand : function(id, el, cmd, ui, v) { var ed = tinyMCE.getInstanceById(id); if (cmd == 'mceInsertFile') { mcFileManager.browse(tinyMCE.extend({ path : tinyMCE.getParam("filemanager_path"), rootpath : tinyMCE.getParam("filemanager_rootpath"), remember_last_path : tinyMCE.getParam("filemanager_remember_last_path"), custom_data : tinyMCE.getParam("filemanager_custom_data"), insert_filter : tinyMCE.getParam("filemanager_insert_filter"), oninsert : function(o) { var u, nl, i; if (!ed.selection.isCollapsed()) { ed.execCommand("createlink", false, "javascript:mce_temp_url();"); nl = tinyMCE.selectElements(ed.getBody(), 'A', function(n) { return tinyMCE.getAttrib(n, 'href') == "javascript:mce_temp_url();"; }); for (i = 0; i < nl.length; i++) { u = mcFileManagerPlugin.convertURL(o.focusedFile.url); nl[i].href = u; nl[i].setAttribute('mce_href', u); } } else { ed.execCommand('mceInsertContent', false, mcFileManagerPlugin.replace( tinyMCE.getParam('filemanager_insert_template', '{$name}'), o.focusedFile, { urlencode : function(v) { return escape(v); }, xmlEncode : function(v) { return tinyMCE.xmlEncode(v); } } )); } } }, v)); return true; } return false; } }; TinyMCE_FileManagerPlugin.setup(); tinyMCE.addPlugin('filemanager', TinyMCE_FileManagerPlugin); } })(); filemanager/config.php000066600000022254150472616010011007 0ustar00filemanager/includes/general.php000066600000010474150472616010012766 0ustar00 $value) $newarray[formatParam($name, $sanitize)] = formatParam($value, $sanitize); return $newarray; } return formatParam($httpRequestInput[$name], $sanitize); } function formatParam($str, $sanitize = false) { if ($sanitize) $str = preg_replace("/[^0-9a-z\-_,]+/i", "", $str); if (ini_get("magic_quotes_gpc")) $str = stripslashes($str); return $str; } function getClassName($obj) { return strtolower(get_class($obj)); } /** * Check if a value is true/false. * * @param string $str True/False value. * @return bool true/false */ function checkBool($str, $def = false) { if ($str === true) return true; if ($str === false) return false; $str = strtolower($str); if ($str == "true") return true; return $def; } /** * Returns a file extention from a path. * * @param string $path Path to grab extention from. * @return string File extention. */ function getFileExt($path) { $ar = explode('.', $path); return strtolower(array_pop($ar)); } /** * Returns the mime type of an path by resolving it agains a apache style "mime.types" file. * * @param String $path path to Map/get content type by * @patam String $mime_File Absolute filepath to mime.types style file. * @return String mime type of path or an empty string on failue. */ function mapMimeTypeFromUrl($path, $mime_file) { if (($fp = fopen($mime_file, "r"))) { $ar = explode('.', $path); $ext = strtolower(array_pop($ar)); while (!feof ($fp)) { $line = fgets($fp, 4096); $chunks = preg_split("/(\t+)|( +)/", $line); for ($i=1; $igetLogger(); if (!$mcLogger) { $mcLogger = new Moxiecode_Logger(); // Set logger options $mcLogger->setPath(dirname(__FILE__) . "/../logs"); $mcLogger->setMaxSize("100kb"); $mcLogger->setMaxFiles("10"); $mcLogger->setFormat("{time} - {message}"); } return $mcLogger; } function debug($msg) { $args = func_get_args(); $log =& getLogger(); $log->debug(implode(', ', $args)); } function info($msg) { $args = func_get_args(); $log =& getLogger(); $log->info(implode(', ', $args)); } function error($msg) { $args = func_get_args(); $log =& getLogger(); $log->error(implode(', ', $args)); } function warn($msg) { $args = func_get_args(); $log =& getLogger(); $log->warn(implode(', ', $args)); } function fatal($msg) { $args = func_get_args(); $log =& getLogger(); $log->fatal(implode(', ', $args)); } ?>filemanager/classes/FileManager/FileManagerPlugin.php000066600000037472150472616010016712 0ustar00setConfig($mcFileManagerConfig, false); $man->setLangPackPath("fm"); return false; } return true; } /** * Register file system. */ function onInit(&$man) { // Register file systems $man->registerFileSystem('zip', 'Moxiecode_ZipFileImpl'); return true; } /** * Gets executed when a RPC command is to be executed. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { switch ($cmd) { case "copyFiles": return $this->_copyFiles($man, $input); case "moveFiles": return $this->_moveFiles($man, $input); case "createDocs": return $this->_createDocs($man, $input); case "createZip": return $this->_createZip($man, $input); case "loadContent": return $this->_loadContent($man, $input); case "saveContent": return $this->_saveContent($man, $input); } return null; } /** * Gets called when custom data is to be added for a file custom data can for example be * plugin specific name value items that should get added into a file listning. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param BaseFile $file File reference to add custom info/data to. * @param string $type Where is the info needed for example list or info. * @param Array $custom Name/Value array to add custom items to. * @return bool true/false if the execution of the event chain should continue. */ function onCustomInfo(&$man, &$file, $type, &$input) { switch ($type) { case "list": $input['previewable'] = $file->isFile() && $man->verifyFile($file, "preview") >= 0; $input['editable'] = $file->isFile() && $man->verifyFile($file, "edit") >= 0; break; } return true; // Pass to next } // * * * * * * * * Private methods function _createZip(&$man, &$input) { $result = new Moxiecode_ResultSet("status,fromfile,tofile,message"); $config = $man->getConfig(); if (!$man->isToolEnabled("zip", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } $zipFile = $man->getFile($man->decryptPath($input["topath"]), $input["toname"] . ".zip"); if ($zipFile->exists()) { trigger_error("{#error.tofile_exists}", FATAL); die(); } $toZip = $man->getFile("zip://" . $man->decryptPath($input["topath"]), $input["toname"] . ".zip/"); for ($i=0; isset($input["frompath" . $i]); $i++) { $fromFile =& $man->getFile($man->decryptPath($input["frompath" . $i])); $toFile = $man->getFile("zip://" . $man->decryptPath($input["topath"]) . '/' . $input["toname"] . ".zip", $fromFile->getName()); $zipFile = $man->getFile($man->decryptPath($input["topath"]) . '/' . $input["toname"] . ".zip"); $config = $fromFile->getConfig(); if (checkBool($config['general.demo'])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.demo}"); continue; } // Check write access if (!checkBool($config["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } if ($man->verifyFile($fromFile, "createzip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if ($man->verifyFile($zipFile, "createzip") < 0) { $result->add("FAILED", $man->encryptPath($zipFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$fromFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_from_file}"); continue; } if ($man->verifyFile($fromFile, "zip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if ($fromFile->copyTo($toFile)) $result->add("OK", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#message.zip_success}"); else $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.createzip_failed}"); } return $result->toArray(); } function _copyFiles(&$man, &$input) { $result = new Moxiecode_ResultSet("status,fromfile,tofile,message"); $config = $man->getConfig(); if (!$man->isToolEnabled("copy", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } for ($i=0; isset($input["frompath" . $i]); $i++) { $fromFile =& $man->getFile($input["frompath" . $i]); $fromType = $fromFile->isFile() ? MC_IS_FILE : MC_IS_DIRECTORY; if (isset($input["toname" . $i])) { $toFile =& $man->getFile($fromFile->getParent(), $input["toname" . $i], $fromType); } else { if (isset($input["topath" . $i])) $toFile =& $man->getFile($input["topath" . $i], "", $fromType); else $toFile =& $man->getFile($input["topath"], $fromFile->getName(), $fromType); } if (!$fromFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_from_file}"); continue; } if ($toFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.tofile_exists}"); continue; } $toConfig = $toFile->getConfig(); if (checkBool($toConfig['general.demo'])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.demo}"); continue; } if ($man->verifyFile($toFile, "copy") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$toFile->canWrite()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!checkBool($toConfig["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } // Check if file can be zipped if (getClassName($toFile) == 'moxiecode_zipfileimpl') { if ($man->verifyFile($fromFile, "zip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } // Check if file can be unzipped if (getClassName($fromFile) == 'moxiecode_zipfileimpl') { if ($man->verifyFile($toFile, "unzip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } if ($fromFile->copyTo($toFile)) $result->add("OK", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#message.copy_success}"); else $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.copy_failed}"); } return $result->toArray(); } function _moveFiles(&$man, &$input) { $result = new Moxiecode_ResultSet("status,fromfile,tofile,message"); $config = $man->getConfig(); if (!$man->isToolEnabled("rename", $config) && !$man->isToolEnabled("cut", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } for ($i=0; isset($input["frompath" . $i]); $i++) { $fromFile =& $man->getFile($input["frompath" . $i]); $fromType = $fromFile->isFile() ? MC_IS_FILE : MC_IS_DIRECTORY; if (isset($input["toname" . $i])) { $toFile =& $man->getFile($fromFile->getParent(), $input["toname" . $i], $fromType); } else { if (isset($input["topath" . $i])) $toFile =& $man->getFile($input["topath" . $i], "", $fromType); else $toFile =& $man->getFile($input["topath"], $fromFile->getName(), $fromType); } // User tried to change extension if ($fromFile->isFile() && getFileExt($fromFile->getName()) != getFileExt($toFile->getName())) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.move_failed}"); continue; } if (!$fromFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_from_file}"); continue; } if ($toFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.tofile_exists}"); continue; } $toConfig = $toFile->getConfig(); if (checkBool($toConfig['general.demo'])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.demo}"); continue; } if ($man->verifyFile($toFile, "rename") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$toFile->canWrite()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!checkBool($toConfig["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } // Check if file can be zipped if (getClassName($toFile) == 'moxiecode_zipfileimpl') { if ($man->verifyFile($fromFile, "zip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } // Check if file can be unzipped if (getClassName($fromFile) == 'moxiecode_zipfileimpl') { if ($man->verifyFile($toFile, "unzip") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } if ($fromFile->renameTo($toFile)) $result->add("OK", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#message.move_success}"); else $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.move_failed}"); } return $result->toArray(); } function _createDocs(&$man, &$input) { $result = new Moxiecode_ResultSet("status,fromfile,tofile,message"); $config = $man->getConfig(); if (!$man->isToolEnabled("createdoc", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } for ($i=0; isset($input["frompath" . $i]) && isset($input["toname" . $i]); $i++) { $fromFile =& $man->getFile($input["frompath" . $i]); $ext = getFileExt($fromFile->getName()); $toFile =& $man->getFile($input["topath" . $i], $input["toname" . $i] . '.' . $ext); $toConfig = $toFile->getConfig(); if (checkBool($toConfig['general.demo'])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.demo}"); continue; } if ($man->verifyFile($toFile, "createdoc") < 0) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$toFile->canWrite()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!checkBool($toConfig["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!$fromFile->exists()) { $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.template_missing}"); continue; } if ($fromFile->copyTo($toFile)) { // Replace title $fields = $input["fields"]; // Replace all fields if ($fields) { // Read all data $stream = $toFile->open('r'); $fileData = $stream->readToEnd(); $stream->close(); // Replace fields foreach ($fields as $name => $value) $fileData = str_replace('${' . $name . '}', htmlentities($value), $fileData); // Write file data $stream = $toFile->open('w'); $stream->write($fileData); $stream->close(); } $result->add("OK", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#message.createdoc_success}"); } else $result->add("FAILED", $man->encryptPath($fromFile->getAbsolutePath()), $man->encryptPath($toFile->getAbsolutePath()), "{#error.createdoc_failed}"); } return $result->toArray(); } function _loadContent(&$man, &$input) { $file = $man->getFile($input["path"]); $config = $file->getConfig(); if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } if (!checkBool($config["filesystem.writable"])) { trigger_error("{#error.no_write_access}", FATAL); die(); } if ($man->verifyFile($file, "edit") < 0) { trigger_error($man->getInvalidFileMsg(), FATAL); die(); } if (!$file->canWrite()) { trigger_error("{#error.no_write_access}", FATAL); die(); } $reader = $file->open('r'); if ($reader) { $content = $reader->readToEnd(); $reader->close(); } else { trigger_error("{#error.no_read_access}", FATAL); die(); } return array("content" => $content); } function _saveContent(&$man, &$input) { $file = $man->getFile($input["path"]); $config = $file->getConfig(); if (!$man->isToolEnabled("edit", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } if (checkBool($config['general.demo'])) { trigger_error("{#error.demo}", FATAL); die(); } if (!checkBool($config["filesystem.writable"])) { trigger_error("{#error.no_write_access}", FATAL); die(); } if ($man->verifyFile($file, "edit") < 0) { trigger_error($man->getInvalidFileMsg(), FATAL); die(); } if (!$file->canWrite()) { trigger_error("{#error.no_write_access}", FATAL); die(); } $writer = $file->open('w'); if ($writer) { $writer->write($input["content"]); $writer->close(); } else { trigger_error("{#error.no_write_access}", FATAL); die(); } return array("status" => "OK"); } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("filemanager", new Moxiecode_FileManagerPlugin(), "fm"); ?>filemanager/classes/FileManager/FileSystems/ZipFileImpl.php000066600000032145150472616010020004 0ustar00_absPath = str_replace("zip://", "", $this->_absPath); preg_match("/^(.*?.zip)(.*?)$/i", $this->_absPath, $matches); $this->_zipPath = $matches[1]; $this->_innerPath = $matches[2]; if (!$this->_innerPath) $this->_innerPath = "/"; } /** * Returns the file name of a file. * * @return string File name of file. */ function getName() { return basename($this->_absPath); } /** * Returns the absolute path of the file. * * @return String absolute path of the file. */ function getAbsolutePath() { return "zip://" . $this->_absPath; } /** * Returns the parent files absolute path. * * @return String parent files absolute path. */ function getParent() { // If get parent on root the give it the local FS parent if ($this->_innerPath == "/") { $file = $this->_manager->getFile($this->_zipPath); return $file->getParent(); } return Moxiecode_BaseFileImpl::getParent(); } /** * Returns the parent files File instance. * * @return File parent files File instance or false if there is no more parents. */ function &getParentFile() { if ($this->_innerPath == "/") return $this->_manager->getFile($this->getParent()); $file = new Moxiecode_ZipFileImpl($this->_manager, $this->getParent()); return $file; } /** * Imports a local file to the file system, for example when users upload files. * * @param String $local_absolute_path Absolute path to local file to import. */ function importFile($local_absolute_path = "") { $zip =& $this->_getZip(); $zip->open(); if (is_file($local_absolute_path)) $zip->addFile($this->_innerPath, $local_absolute_path); else $zip->addDirectory($this->_innerPath, $local_absolute_path); $status = $zip->commit(); $zip->close(); return $status; } /** * Exports the file to the local system, for example a file from a zip or db file system. * * @param String $local_absolute_path Absolute path to local file. * @return true/false state if it was exported or not. */ function exportFile($local_absolute_path) { $zip =& $this->_getZip(); $zip->open(); $zip->extract($this->_innerPath, $local_absolute_path, true); $zip->close(); return true; } /** * Returns true if the file exists. * * @return boolean true if the file exists. */ function exists() { // If zip root if ($this->_innerPath == "/") return true; // Look for item inside zip $entry =& $this->_getZipEntry(); return $entry != null; } /** * Returns true if the file is a directory. * * @return boolean true if the file is a directory. */ function isDirectory() { // If zip root if ($this->_innerPath == "/") return true; if (!$this->exists()) return $this->_type == MC_IS_DIRECTORY; $entry =& $this->_getZipEntry(); return $entry->isDirectory(); } /** * Returns last modification date in ms as an long. * * @return long last modification date in ms as an long. */ function getLastModified() { $entry =& $this->_getZipEntry(); return $entry->getLastModified(); } /** * Returns creation date in ms as an long. * * @return long creation date in ms as an long. */ function getCreationDate() { $entry =& $this->_getZipEntry(); return $entry->getLastModified(); } /** * Returns true if the files is readable. * * @return boolean true if the files is readable. */ function canRead() { return true; } /** * Returns true if the files is writable. * * @return boolean true if the files is writable. */ function canWrite() { return true; } /** * Returns file size as an long. * * @return long file size as an long. */ function getLength() { $entry =& $this->_getZipEntry(); return $entry->getSize(); } /** * Copies this file to the specified file instance. * * @param File $dest File to copy to. * @return boolean true - success, false - failure */ function copyTo(&$dest) { if (getClassName($dest) == 'moxiecode_localfileimpl') return $this->exportFile($dest->getAbsolutePath()); if ($this->isDirectory()) { $handle_as_add_event = true; $treeHandler = new _ZipFileCopyDirTreeHandler($this->_manager, $this, $dest, $handle_as_add_event); $this->listTree($treeHandler); return true; } else { // From/To Zip if (getClassName($dest) == 'moxiecode_zipfileimpl') { $zip =& $this->_getZip(); $toZip =& $dest->_getZip(); $zip->open(); $toZip->open(); // Copy single file $entry =& $zip->getEntryByPath($this->_innerPath); if ($entry && $entry->isFile()) { $toZip->addData($dest->_innerPath, $entry->getData()); } else { // Copy directory $entries =& $zip->listEntries($this->_innerPath, true); for ($i=0; $iisFile()) $toZip->addData($dest->_innerPath, $entry->getData()); else $toZip->addDirectory($dest->_innerPath); } } $zip->close(); $toZip->commit(); $toZip->close(); } else { // Copy non local fs file $inStream =& $this->open('rb'); $outStream =& $dest->open('wb'); if ($inStream && $outStream) { while (($buff = $inStream->read()) != null) $outStream->write($buff); } if ($inStream) $inStream->close(); if ($outStream) $outStream->close(); } } return true; } /** * Deletes the file. * * @param boolean $deep If this option is enabled files will be deleted recurive. * @return boolean true - success, false - failure */ function delete($deep = false) { $zip =& $this->_getZip(); $zip->open(); if ($this->isFile()) $state = $zip->deleteFile($this->_innerPath); else $state = $zip->deleteDir($this->_innerPath, $deep); $zip->commit(); $zip->close(); return $state; } /** * Returns an array of BaseFile instances based on the specified filter instance. * * @param FileFilter &$filter FileFilter instance to filter files by. * @return Array array of File instances based on the specified filter instance. */ function &listFilesFiltered(&$filter) { $dirs = array(); $files = array(); $zip =& $this->_getZip(); $entries = $zip->listEntries($this->_innerPath); // Dirs foreach ($entries as $entry) { $zipFile = new Moxiecode_ZipFileImpl($this->_manager, $this->_absPath, $entry->getName()); $zipFile->_setZipEntry($entry); if ($filter->accept($zipFile) == BASIC_FILEFILTER_ACCEPTED) { if ($zipFile->isFile()) $files[] = $zipFile; else $dirs[] = $zipFile; } } $zip->close(); $ar = array_merge($dirs, $files); // Stupid PHP 5 notices return $ar; } /** * Creates a new directory. * * @return boolean true- success, false - failure */ function mkdir() { $zip =& $this->_getZip(); $zip->open(); $state = $zip->addDirectory($this->_innerPath); $zip->commit(); $zip->close(); return $state; } /** * Renames/Moves this file to the specified file instance. * * @param File $dest File to rename/move to. * @return boolean true- success, false - failure */ function renameTo(&$dest) { // If move within the same zip if (getClassName($dest) == 'moxiecode_zipfileimpl' && $this->_zipPath == $dest->_zipPath) { $zip =& $this->_getZip(); $zip->open(); $zip->moveEntry($this->_innerPath, $dest->_innerPath); $zip->commit(); $zip->close(); } else { // Copy and delete $this->copyTo($dest); $this->delete(true); } return true; } /* * Sets the last-modified time of the file or directory. * * @param String $datetime The new date/time to set the file, in timestamp format * @return boolean true- success, false - failure */ function setLastModified($datetime) { $zip =& $this->_getZip(); $zip->open(); // Check for file $entry =& $zip->getEntryByPath($this->_innerPath); // Check for dir if (!$entry) $entry =& $zip->getEntryByPath($this->_innerPath . '/'); // Update mod time $entry->setLastModified($datetime); $zip->commit(); $zip->close(); return $state; } /** * Returns a merged name/value array of config elements. * * @return Array Merged name/value array of config elements. */ function getConfig() { $file =& $this->_manager->getFile($this->_zipPath); return $file->getConfig(); } /** * Opens a file stream by the specified mode. The default mode is rb. * * @param String $mode Mode to open file by, r, rb, w, wb etc. * @return FileStream File stream implementation for the file system. */ function &open($mode = 'rb') { $ent = new Moxiecode_ZipFileStream($this, $mode); return $ent; } // * * Private methods function &_getZip() { $file = new Moxiecode_ZipFile($this->_zipPath); return $file; } function _setZipEntry(&$entry) { $this->_zipEntry = $entry; } function _getZipEntry() { if (!$this->_zipEntry) { $zip =& $this->_getZip(); $zip->open(); // Check for file $this->_zipEntry =& $zip->getEntryByPath($this->_innerPath); // Check for dir if (!$this->_zipEntry) $this->_zipEntry =& $zip->getEntryByPath($this->_innerPath . '/'); $zip->close(); } return $this->_zipEntry; } } class _ZipFileCopyDirTreeHandler extends Moxiecode_FileTreeHandler { var $_fromFile; var $_destFile; var $_manager; var $_handle_as_add_event; function _LocalCopyDirTreeHandler(&$manager, $from_file, $dest_file, $handle_as_add_event) { $this->_manager = $manager; $this->_fromFile = $from_file; $this->_destFile = $dest_file; $this->_handle_as_add_event = $handle_as_add_event; } /** * Handles a file instance while looping an tree of directories. * * @param File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $toPath = $this->_destFile->getAbsolutePath(); $toPath .= substr($file->getAbsolutePath(), strlen($this->_fromFile->getAbsolutePath())); $toFile = $this->_manager->getFile($toPath); // Do action if ($file->isDirectory()) $toFile->mkdir(); else $file->copyTo($toFile); return $this->CONTINUE; } } class Moxiecode_ZipFileStream extends Moxiecode_FileStream { var $_file; var $_mode; var $_pos; var $_buff; function Moxiecode_ZipFileStream(&$file, $mode) { $this->_file =& $file; $this->_mode = $mode; $this->_buff = ""; $this->_pos = 0; } function skip($bytes) { $data = read($bytes); return strlen($data); } function read($len = 1024) { // End of stream if ($this->_pos > 0) return null; $this->_pos++; // Open zip and extract the requested data $zip =& $this->_file->_getZip(); $zip->open(); $entry =& $zip->getEntryByPath($this->_file->_innerPath); $data = $entry->getData(); $zip->close(); return $data; } function readToEnd() { $data = ""; while (($chunk = $this->read(1024)) != null) $data .= $chunk; return $data; } function write($buff, $len = -1) { if ($len == -1) $len = strlen($buff); else $buff = substr($buff, 0, $len); $this->_pos += $len; $this->_buff .= $buff; } function close() { if ($this->_mode == 'w' || $this->_mode == 'wb' || $this->_mode == 'a' || $this->_mode == 'ab') { // Open zip and write the requested data $zip =& $this->_file->_getZip(); $zip->open(); $entry =& $zip->getEntryByPath($this->_file->_innerPath); // Overwrite existing file or create new if (!$entry) $zip->addData($this->_file->_innerPath, $this->_buff); else { if ($this->_mode == 'a' || $this->_mode == 'ab') $entry->setData($entry->getData() . $this->_buff); else $entry->setData($this->_buff); } $this->_buff = null; $zip->commit(); $zip->close(); } } } /* // Copy from local to other filesystem $to->importFile($from->getAbsolutePath()); // Move from local to other filesystem $to->importFile($from->getAbsolutePath()); $from->delete(); // Copy from other to local filesystem $from->exportFile($to->getAbsolutePath()); // Move from local to other filesystem $from->exportFile($to->getAbsolutePath()); $from->delete(); // Stream contents from two filesystems $in =& $from->open('rb'); $out =& $to->open('wb'); while ($buff = $in->read(8192)) $out->write($buff); $out->close(); */ ?>filemanager/classes/FileManager/Utils/ZipFile.class.php000066600000072425150472616010017124 0ustar00 * // Create a zip file and add a file and directory to it * $zip = new Moxiecode_ZipFile("test.zip"); * $zip->open(); * $zip->addFile("/mydir/myfile.txt", "c:/mylocalfile.txt"); * $zip->addDir("/mydir", "c:/mylocaldir"); * $zip->commit(); * $zip->close(); * * // Extract the zip file. * $zip = new Moxiecode_ZipFile("test.zip"); * $zip->open(); * $zip->extract('/', "c:/mylocaldir"); * $zip->close(); * * * @package MoxieZip */ class Moxiecode_ZipFile { /**#@+ * @access private */ var $_entries; var $_path; var $_fp; var $_offset; var $_size; var $_header; var $_entryLookup; var $_compressionLevel; /**#@-*/ /** * Constructor for the ZipFile. * * @param string $path Path to zip file. For example: mydir/test.zip */ function Moxiecode_ZipFile($path) { $header = array(); $header['disk'] = 0; $header['disks'] = 0; $header['comment'] = 0; $header['comment_len'] = 0; $this->_path = $path; $this->_header = $header; $this->_entryLookup = array(); $this->_compressionLevel = 5; } /** * Sets the compression level 0-9. Defaults to 5. * * @param int $level Compression level. */ function setCompressionLevel($level) { $this->_compressionLevel = $level; } /** * Sets the comment contents of the whole zip file. * * @param string $comment Comment to set on Zip file. */ function setComment($comment) { $this->_header['comment'] = $comment; $this->_header['comment_len'] = strlen($comment); } /** * Adds a string of data as a specific file inside the zip. * * @param string $zip_path File path inside the zip to store the data in for example /mydir/myfile.txt. * @param string $data Data to store inside the file. * @param string $comment Optional comment to add to the file inside the zip. */ function addData($zip_path, $data, $comment = "") { $zip_path = preg_replace('/^\//', '', $zip_path); $this->deleteFile($zip_path); $entry =& new Moxiecode_ZipEntry($this); $entry->setPath($zip_path); $entry->setData($data); $entry->setComment($comment); $this->buildPath($entry->getPath()); $this->addEntry($entry); } /** * Adds a local file to the zip file. * * @param string $zip_path Path to store the local file as inside the zip. For example /mydir/myfile.txt. * @param string $path Local file path to store inside the zip for example c:/myfile.txt * @param string $comment Optional comment to add to the file inside the zip. */ function addFile($zip_path, $path = "", $comment = "") { $zip_path = preg_replace('/^\//', '', $zip_path); $this->deleteFile($zip_path); $entry =& new Moxiecode_ZipEntry($this); if ($path != '') $entry->setLocalPath($path); $entry->setPath($zip_path); $entry->setComment($comment); $this->buildPath($entry->getPath()); $this->addEntry($entry); } /** * Adds a directory inside the zip file. This can be an empty directory or a local directory that * is to be added to the zip. * * @param string $zip_path Path to store the directory as inside the zip. For example /mydir/dir. * @param string $path Optional local file path for example c:/mydir. * @param string $comment Optional comment to add for directory inside the zip file. * @param bool $recursive Optional state to do a recursive add or not this is true by default. */ function addDirectory($zip_path, $path = "", $comment = "", $recursive = true) { $zip_path = preg_replace('/^\//', '', $zip_path); $zip_path = $this->_addTrailingSlash($zip_path); $this->deleteDir($zip_path); if ($path) { $path = realpath($path); $files = $this->_listTree($path, $recursive); foreach ($files as $file) { $entry =& new Moxiecode_ZipEntry($this); $entry->setPath($zip_path . substr($file, strlen($path) + 1)); $entry->setLocalPath($file); $entry->setComment($comment); $entry->setType(is_dir($file)); $this->addEntry($entry); $this->buildPath($entry->getPath(), is_dir($file)); } $this->buildPath($zip_path . substr($file, strlen($path) + 1), is_dir($file)); } else { $entry =& new Moxiecode_ZipEntry($this); $entry->setPath($zip_path); $entry->setComment($comment); $entry->setType(1); $this->addEntry($entry); $this->buildPath($entry->getPath()); } } /** * Moves/renames an entry inside the zip file. * * @param string $from_path Path to move the file/directory from. * @param string $to_oath Path to move the file/directory to. */ function moveEntry($from_path, $to_path) { $from_path = preg_replace('/^\//', '', $from_path); $to_path = preg_replace('/^\//', '', $to_path); $entry =& $this->getEntryByPath($from_path); if ($entry->isFile()) { unset($this->_entryLookup[$entry->getPath()]); $entry->setPath($to_path); $this->_entryLookup[$to_path] =& $entry; $this->buildPath($to_path); } else { $from_path = preg_replace('/\/$/', '', $from_path) . '/'; $to_path = preg_replace('/\/$/', '', $to_path) . '/'; $newEntries = array(); for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; // Move all entries if (strpos($entry->getPath(), $from_path) === 0) { unset($this->_entryLookup[$entry->getPath()]); $entry->setPath($to_path . substr($entry->getPath(), strlen($from_path))); $this->_entryLookup[$entry->getPath()] =& $entry; } } $this->buildPath($to_path); } } /** * Adds a new entry to the zip. An entry is an instance of the Moxiecode_ZipEntry class. * * @param Moxiecode_ZipEntry $entry Entry to add to zip file structure. */ function addEntry(&$entry) { if ($entry) { $this->_entries[] =& $entry; $this->_entryLookup[$entry->getPath()] =& $entry; } } /** * Builds a path inside the zip. This method will be executed by addFile/addDirectory to * build a complete structure inside the zip if a file like /a/b/c/d.txt would be added. * * @param string $path Path inside the zip file to build. * @param bool $is_dir Optional is it a directory or an file defaults to false. */ function buildPath($path, $is_dir = false) { $pos = strrpos($path, '/'); if ($pos === false) return; $path = substr($path, 0, $pos); // Check for dir $entry =& $this->getEntryByPath($path); if ($entry) return; // Dir not found create all parents $items = explode('/', $path); $path = ""; if ($is_dir) array_pop($items); foreach ($items as $item) { $path .= $item . '/'; // Look for entry $entry =& $this->getEntryByPath($path); if (!$entry) { $entry = new Moxiecode_ZipEntry($this); $entry->setPath($path); $this->addEntry($entry); } } } /** * Returns an entry instance by a specific path. * * @param string $path Path inside the zip to retrive. * @return Moxiecode_ZipEntry Zip entry instance for the specified zip path or null. */ function &getEntryByPath($path) { $path = preg_replace('/^\//', '', $path); if (isset($this->_entryLookup[$path])) return $this->_entryLookup[$path]; for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; if ($entry->getPath() == $path || $entry->getPath() == $path . '/') { $this->_entryLookup[$path] =& $entry; return $entry; } } $obj = null; // Stupid PHP 5 notices return $obj; } /** * Deletes a file inside the zip. * * @param string $path Path inside the zip to delete for example. /mydir/myfile.txt. * @return bool state if the file was deleted or not. */ function deleteFile($path) { $path = preg_replace('/^\//', '', $path); $newEntries = array(); $deleted = false; // No dir, no file = no need if (!isset($this->_entryLookup[$path]) && !isset($this->_entryLookup[$path . '/'])) return; for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; if ($entry->getPath() != $path) $newEntries[] =& $entry; else { unset($this->_entryLookup[$path]); $deleted = true; } } $this->_entries =& $newEntries; return $deleted; } /** * Deletes the specified directory inside the zip. * * @param string $path Path inside zip file to delete. For example: /mydir/mydir2. * @param bool $deep Optional state if it should delete the directory recursive. * @return bool state if the directory was deleted or not. */ function deleteDir($path, $deep = true) { $path = preg_replace('/^\//', '', $path); $path = $this->_addTrailingSlash($path); $deleted = false; // No dir, no file = no need if (!isset($this->_entryLookup[$path]) && !isset($this->_entryLookup[$path . '/'])) return; if (!$deep) { for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; if (strpos($entry->getPath(), $path) !== 0 && strlen($entry->getPath()) > strlen($path)) return false; } } $newEntries = array(); for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; if (strpos($entry->getPath(), $path) !== 0) $newEntries[] =& $entry; else { $deleted = true; unset($this->_entryLookup[$path]); } } $this->_entries =& $newEntries; return $deleted; } /** * Commits/stores the zip file to a specific path or the path specified in contructor. * * @param string $path Optional local file system path to store the zip to. * @return bool true/false state if the zip was stored or not. */ function commit($path = '') { $paths = array(); $status = false; // Get entry paths for ($i=0; $i_entries); $i++) $paths[] = $this->_entries[$i]->getPath(); // Sort entry paths sort($paths); $tmpFile = false; if (!$path) $path = $this->_path; $this->_size = 0; $this->_offset = 0; // If zip is the same and open use tmp file if ($this->_fp && $path == $this->_path) { $tmpFile = true; $path = $path . ".tmp"; } // Write output file if (file_exists($path)) @unlink($path); $fp = @fopen($path, 'wb'); if ($fp) { for ($i=0; $igetEntryByPath($paths[$i]); $this->_writeLocalFileHeader($fp, $entry); } for ($i=0; $igetEntryByPath($paths[$i]); $this->_writeCentralDirHeader($fp, $entry); } $this->_writeCentralDirEnd($fp); @fclose($fp); $status = true; } // If zip is the same and open use tmp file if ($tmpFile) { $this->close(); if (file_exists($this->_path)) @unlink($this->_path); @rename($this->_toOSPath($path), $this->_toOSPath($this->_path)); } return $status; } /** * Opens the zip file for read or write access. */ function open() { if (!$this->_fp) { // Load zip if (!file_exists($this->_path)) return; $this->_fp = @fopen($this->_path, "rb"); if ($this->_fp) { // Parse local file headers while ($header = $this->_readLocalFileHeader()) { /*echo "Local file header:\n"; var_dump($header);*/ $entry =& new Moxiecode_ZipEntry($this, $header); $this->_entries[] =& $entry; $this->_entryLookup[$entry->getPath()] =& $entry; } // Parse central dir headers while ($header = $this->_readCentralDirHeader()) { /*echo "Central dir header:\n"; var_dump($header);*/ // Append to existing headers for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; if ($entry->getPath() == $header['filename']) $entry->_addHeader($header); } } // Parse central dir end header if ($header = $this->_readCentralDirEnd()) { /*echo "Central dir end:\n"; var_dump($header);*/ $this->_setHeader($header); } } } } /** * Closes the zip file. */ function close() { if ($this->_fp) { @fclose($this->_fp); $this->_fp = null; } } /** * Extract the specified zip path as a local path. * * @param string $zip_path Location inside the zip to extract for example: /mydir/myfile or / for the whole zip. * @param string $path Local file system path to unpack the zip to. * @param bool $is_target Optional state if the contents should be unpacks inside the specified path or as the specified path. */ function extract($zip_path, $path, $is_target = false) { $path = $this->_toUnixPath($path); // Extract single file $entry =& $this->getEntryByPath($zip_path); if ($entry && $entry->isFile()) { if ($is_target) $this->_extractEntry($entry, $path); else $this->_extractEntry($entry, $path . "/" . $entry->getName()); return; } // Extract files $entries =& $this->listEntries($zip_path, true); for ($i=0; $i_addTrailingSlash($path) . preg_replace('/^([^\/]+\/)/', '', $entries[$i]->getPath()); else $outPath = $this->_addTrailingSlash($path) . $entries[$i]->getPath(); if ($entry->isDirectory()) $this->_mkdirs($this->_toOSPath($outPath)); else $this->_extractEntry($entry, $outPath); } } /** * Returns all entries inside the zip file as an array. * * @return Array Array of all zip entries. */ function getEntries() { $this->open(); return $this->_entries; } /** * Lists entires inside the zip file. * * @param string $path Zip path to list files inside. For example: /mydir. * @param bool $deep List files recursive or not. Defaults to false. * @return Array Array of zip entries. */ function &listEntries($path = '/', $deep = false) { $path = preg_replace('/^\//', '', $path); $path = $this->_addTrailingSlash($path); if ($path == '') $path = '/'; $slashCount = substr_count($path, '/'); $entries = $this->getEntries(); $output = array(); for ($i=0; $i_entries); $i++) { $entry =& $this->_entries[$i]; $entryPath = $entry->getPath(); $entryPath = preg_replace('/\/$/', '', $entryPath); if (!$deep) { if ($path == '/' && substr_count($entryPath, '/') == 0) $output[] =& $entry; else if (strpos($entryPath, $path) === 0 && substr_count($entryPath, '/') == $slashCount) $output[] =& $entry; } else { if ($path == '/' || strpos($entryPath, $path) === 0) $output[] =& $entry; } } return $output; } /**#@+ * @access private */ function _setHeader($header) { $this->_header; } function _getHeader() { return $this->_header; } function _extractEntry(&$entry, $path) { // Make parent dir $ar = explode('/', $path); array_pop($ar); $this->_mkdirs(implode('/', $ar)); // Extract file contents $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $entry->getData()); fclose($fp); } } function _writeLocalFileHeader($fp, &$entry) { $header = $entry->_getHeader(); $data = ''; // Compress data and set some headers $header['filename_len'] = strlen($entry->getPath()); // Convert unix time to dos time $date = getdate($header['unixtime']); $header['mtime'] = ($date['hours'] << 11) + ($date['minutes'] << 5) + $date['seconds'] / 2; $header['mdate'] = (($date['year'] - 1980) << 9) + ($date['mon'] << 5) + $date['mday']; // Total commander has strange issues if ($header['size'] == 0) $header['compressed_size'] = 0; // Data to compress if ($header['size'] > 0 || ($entry->_isDirty && $entry->isFile())) { if ($entry->_isDirty) { $data = $entry->getData(); $header['size'] = strlen($data); $header['crc'] = crc32($data); $header['compression'] = 0x0008; // deflate $header['flag'] = 0x0002; // Compress $data = @gzdeflate($data, $this->_compressionLevel); $header['compressed_size'] = strlen($data); } else $data = $entry->getRawData(); } // Pack and write header fwrite($fp, pack("VvvvvvVVVvv", 0x04034b50, // Signature $header['version'], $header['flag'], $header['compression'], $header['mtime'], $header['mdate'], $header['crc'], $header['compressed_size'], $header['size'], $header['filename_len'], $header['extra_len'] ), 30); // Write filename and compressed data fwrite($fp, $entry->getPath(), $header['filename_len']); if (isset($header['extra'])) fwrite($fp, $header['extra'], $header['extra_len']); fwrite($fp, $data, $header['compressed_size']); $header['offset'] = $this->_offset; $this->_offset += 30 + $header['filename_len'] + $header['extra_len'] + $header['compressed_size']; $entry->_setHeader($header); } function _writeCentralDirHeader($fp, &$entry) { $header = $entry->_getHeader(); // Set extra parameters $header['version'] = 0x0014; $header['version_extracted'] = $header['compression'] == 8 ? 0x0014 : 0x000A; $header['disk'] = 0x0000; $header['iattr'] = 0x0001; $header['eattr'] = $entry->isDirectory() ? 0x00000010 : 0x00000020; // Write central directory record fwrite($fp, pack("VvvvvvvVVVvvvvvVV", 0x02014b50, // Signature $header['version'], $header['version_extracted'], $header['flag'], $header['compression'], $header['mtime'], $header['mdate'], $header['crc'], $header['compressed_size'], $header['size'], $header['filename_len'], $header['extra_len'], $header['comment_len'], $header['disk'], $header['iattr'], $header['eattr'], $header['offset'] ), 46); // Write filename fwrite($fp, $entry->getPath(), $header['filename_len']); if (isset($header['extra'])) fwrite($fp, $header['extra'], $header['extra_len']); if (isset($header['comment'])) fwrite($fp, $header['comment'], $header['comment_len']); $this->_size += 46 + $header['filename_len'] + $header['extra_len'] + $header['comment_len']; } function _writeCentralDirEnd($fp) { $header = $this->_header; $header['start'] = count($this->_entries); $header['entries'] = count($this->_entries); $header['size'] = $this->_size; $header['offset'] = $this->_offset; // Write end of central directory record fwrite($fp, pack("VvvvvVVv", 0x06054b50, // Signature $header['disk'], $header['disks'], $header['start'], $header['entries'], $header['size'], $header['offset'], $header['comment_len'] ), 22); fwrite($fp, $header['comment'], $header['comment_len']); } function _readLocalFileHeader() { $header = array(); // Read signature $oldPos = ftell($this->_fp); $buff = @fread($this->_fp, 4); $data = unpack('Vsignature', $buff); // Is not local file header if ($data['signature'] != 0x04034b50) { fseek($this->_fp, $oldPos, SEEK_SET); return null; } // Read header $buff = fread($this->_fp, 26); $data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $buff); $header = array_merge($data, $header); // Read filename if ($header['filename_len'] > 0) $header['filename'] = fread($this->_fp, $header['filename_len']); // Read extra if ($header['extra_len'] != 0) $header['extra'] = fread($this->_fp, $header['extra_len']); // Convert DOS date/time to UNIX Timestamp if ($header['mdate'] && $header['mtime']) { $header['unixtime'] = gmmktime(($header['mtime'] & 0xF800) >> 11, ($header['mtime'] & 0x07E0) >> 5, ($header['mtime'] & 0x001F) * 2, ($header['mdate'] & 0x01E0) >> 5, $header['mdate'] & 0x001F, (($header['mdate'] & 0xFE00) >> 9) + 1980); } // Store away data offset and jump behind data $header['data_offset'] = ftell($this->_fp); fseek($this->_fp, $header['compressed_size'], SEEK_CUR); return $header; } function _readCentralDirHeader() { $header = array(); // Read signature $oldPos = ftell($this->_fp); $buff = @fread($this->_fp, 4); $data = unpack('Vsignature', $buff); // Is not central dir header if ($data['signature'] != 0x02014B50) { fseek($this->_fp, $oldPos); return null; } // Read header $buff = fread($this->_fp, 42); $data = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/viattr/Veattr/Voffset', $buff); $header = array_merge($data, $header); // Read filename if ($header['filename_len'] != 0) $header['filename'] = fread($this->_fp, $header['filename_len']); // Read extra if ($header['extra_len'] != 0) $header['extra'] = fread($this->_fp, $header['extra_len']); // Read comment if ($header['comment_len'] != 0) $header['comment'] = fread($this->_fp, $header['comment_len']); // Convert DOS date/time to UNIX Timestamp if ($header['mdate'] && $header['mtime']) { $header['unixtime'] = gmmktime(($header['mtime'] & 0xF800) >> 11, ($header['mtime'] & 0x07E0) >> 5, ($header['mtime'] & 0x001F) * 2, ($header['mdate'] & 0x01E0) >> 5, $header['mdate'] & 0x001F, (($header['mdate'] & 0xFE00) >> 9) + 1980); } return $header; } function _readCentralDirEnd() { $header = array(); // Read signature $oldPos = ftell($this->_fp); $buff = @fread($this->_fp, 4); $data = unpack('Vsignature', $buff); // Is not central dir header if ($data['signature'] != 0x06054b50) { fseek($this->_fp, $oldPos); return null; } // Read header $buff = fread($this->_fp, 22); $data = unpack('vdisk/vdisks/vstart/ventries/Vsize/Voffset/vcomment_len', $buff); $header = array_merge($data, $header); // Read comment if ($header['comment_len'] > 0) $header['comment'] = fread($this->_fp, $header['comment_len']); return $header; } function _getFileData($header, $uncompres = true) { $data = ""; if ($this->_fp) { $oldPos = ftell($this->_fp); fseek($this->_fp, $header['data_offset']); $buff = @fread($this->_fp, $header['compressed_size']); if ($uncompres && $header['compression'] == 8 && $header['compressed_size'] > 0) $data = @gzinflate($buff); else $data = $buff; fseek($this->_fp, $oldPos); } return $data; } function _addTrailingSlash($path) { if (strlen($path) > 0 && $path[strlen($path)-1] != '/') $path .= '/'; return $path; } function _removeTrailingSlash($path) { // Is root if ($path == "/") return $path; if ($path == "") return $path; if ($path[strlen($path)-1] == '/') $path = substr($path, 0, strlen($path)-1); return $path; } function _toUnixPath($path) { return str_replace(DIRECTORY_SEPARATOR, "/", $path); } function _toOSPath($path) { return str_replace("/", DIRECTORY_SEPARATOR, $path); } function _listTree($path, $recursive = true) { $files = array(); if ($dir = opendir($path)) { while (false !== ($file = readdir($dir))) { if ($file == "." || $file == "..") continue; $file = $path . "/" . $file; $files[] = $file; if (is_dir($file) && $recursive) $files = array_merge($files, $this->_listTree($file, $recursive)); } closedir($dir); } return $files; } function _mkdirs($path, $rights = 0777) { $path = preg_replace('/\/$/', '', $path); $dirs = array(); // Figure out what needs to be created while ($path) { if (file_exists($path)) break; $dirs[] = $path; $pathAr = explode("/", $path); array_pop($pathAr); $path = implode("/", $pathAr); } // Create the dirs $dirs = array_reverse($dirs); foreach ($dirs as $path) { if (!@is_dir($path) && strlen($path) > 0) mkdir($path, $rights); } } /**#@-*/ } /** * Zip file entry this class represents a entry within the zip for example a file or a directory. * * Example of usage: *
         * // Create a zip file and add a file and directory to it
         * $zip = new Moxiecode_ZipFile("test.zip");
         * $zip->open();
         * $entries = $zip->listEntries('/', true);
         * foreach ($entries as $entry) {
         * 	echo $entry->getPath();
         * }
         * $zip->close();
         * 
        * * @package MoxieZip */ class Moxiecode_ZipEntry { /**#@+ * @access private */ var $_zip; var $_header; var $_data; var $_rawData; var $_isDirty; var $_localPath; /**#@-*/ /** * Constructs a new zip entry. * * @param Moxiecode_ZipFile $zip Zip file to bind entry to. * @param Array $header Optional header array. */ function Moxiecode_ZipEntry(&$zip, $header = false) { if (!$header) { $header = array(); $header['version'] = 0x0014; $header['version_extracted'] = 0x0000; $header['flag'] = 0; $header['compression'] = 0; $header['mtime'] = 0; $header['mdate'] = 0; $header['crc'] = 0; $header['compressed_size'] = 0; $header['size'] = 0; $header['filename_len'] = 0; $header['extra_len'] = 0; $header['comment_len'] = 0; $header['disk'] = 0; $header['iattr'] = 0; $header['eattr'] = 0; $header['offset'] = 0; $header['filename'] = ''; $header['extra'] = ''; $header['comment'] = ''; $header['unixtime'] = time(); } $this->_zip = $zip; $this->_header = $header; $this->_isDirty = false; } /** * Returns the raw uncompressed data inside the zip for the entry. * * @return string Raw data string. */ function getRawData() { if (!$this->_rawData) $this->_rawData = $this->_zip->_getFileData($this->_header, false); return $this->_rawData; } /** * Sets the raw uncompressed data inside the zip of the entry. * * @param string $data Raw data string. */ function setRawData($data) { $this->_rawData = $data; } /** * Returns the uncompressed data of the entry. * * @return string Uncompressed zip entry data. */ function getData() { if ($this->_localPath) $this->setData(file_get_contents($this->_localPath)); if ($this->_data) return $this->_data; return $this->_zip->_getFileData($this->_header); } /** * Sets the date for the zip entry. * * @param string $data Data to set inside zip entry. */ function setData($data) { $this->_header['unixtime'] = time(); $this->_header['size'] = strlen($data); $this->_data = $data; $this->_isDirty = true; } /** * Sets the local path for the entry. The specified file will be stored * inside the zip for the specific entry. * * @param string $path Local file system path to store inside zip entry. */ function setLocalPath($path) { $this->_header['unixtime'] = filemtime($path); $this->_localPath = $path; $this->_isDirty = true; } /** * Returns the local file system path for the entry. * * @return string Local file system path for the entry. */ function getLocalPath() { return $this->_localPath; } /** * Returns the last modified time of the zip entry as a unix timestamp. * * @return int Last modified time of the zip entry as a unix timestamp. */ function getLastModified() { return $this->_header['unixtime']; } /** * Sets the last modified time of the zip entry as a unix timestamp. * * @param int $date Last modified time of the zip entry as a unix timestamp. */ function setLastModified($date) { $this->_header['unixtime'] = $date; } /** * Returns the internal zip path. For example /mydir/myfile.txt. * * @return string Internal zip path. For example /mydir/myfile.txt. */ function getPath() { return $this->_header['filename']; } /** * Sets the internal zip path. For example /mydir/myfile.txt. * * @param string $path Internal zip path. For example /mydir/myfile.txt. */ function setPath($path) { $path = preg_replace('/^\//', '', $path); $path = $this->_zip->_toUnixPath($path); $this->_header['filename'] = $path; $this->_header['filename_len'] = strlen($path); } /** * Sets the comment for the zip entry. * * @param string $comment Comment for the zip entry. */ function setComment($comment) { $this->_header['comment'] = $comment; $this->_header['comment_len'] = strlen($comment); } /** * Gets the comment for the zip entry. * * @return string Comment for the zip entry. */ function getComment() { return $this->_header['comment']; } /** * Sets the extra field for the zip entry. * * @param string $extra Extra field for the zip entry. */ function setExtra($extra) { $this->_header['extra'] = $extra; $this->_header['extra_len'] = strlen($extra); } /** * Gets the extra field for the zip entry. * * @return string Extra field for the zip entry. */ function getExtra() { return $this->_header['extra']; } /** * Returns the zip entry size in bytes. * * @return int Numner of bytes for the zip entry. */ function getSize() { return $this->_header['size']; } /** * Returns the file name/directory name for the zip entry. * * @return string File name/directory name for the zip entry. */ function getName() { $ar = explode('/', $this->_zip->_removeTrailingSlash($this->_header['filename'])); return array_pop($ar); } /** * Sets the type for the entry. 1 equals directory 0 equals file. * * @param int $type Type for the entry. 1 equals directory 0 equals file. */ function setType($type) { if ($type == 1) $this->_header['filename'] = $this->_zip->_addTrailingSlash($this->_header['filename']); } /** * Returns true/false if the entry is a file or not. * * @return bool true/false if the entry is a file or not. */ function isFile() { return !$this->isDirectory(); } /** * Returns true/false if the entry is a directory or not. * * @return bool true/false if the entry is a directory or not. */ function isDirectory() { return substr($this->getPath(), strlen($this->getPath()) - 1) == '/'; } /**#@+ * @access private */ function _addHeader($header) { $this->_header = array_merge($this->_header, $header); } function _getHeader() { return $this->_header; } function _setHeader($header) { $this->_header = $header; } /**#@-*/ } ?>filemanager/classes/ManagerPlugin.php000066600000020410150472616010013720 0ustar00filemanager/classes/Authenticators/IPAuthenticator.php000066600000002303150472616010017230 0ustar00getConfig(); $ipNums = split(',', $config['IPAuthenticator.ip_numbers']); $currentIP = $this->_ip2int($_SERVER["REMOTE_ADDR"]); foreach ($ipNums as $ip) { $ipRange = split('-', $ip); if (count($ipRange) == 1 && $this->_ip2int($ipRange[0]) == $currentIP) return true; if (count($ipRange) == 2 && $currentIP >= $this->_ip2int($ipRange[0]) && $currentIP <= $this->_ip2int($ipRange[1])) return true; } return false; } function _ip2int($addr) { $ips = split("\.", $addr); return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256); } } // Add plugin to MCManager $man->registerPlugin("IPAuthenticator", new Moxiecode_IPAuthenticator()); ?>filemanager/classes/Authenticators/BaseAuthenticator.php000066600000001215150472616010017573 0ustar00registerPlugin("BaseAuthenticator", new Moxiecode_BaseAuthenticator()); ?>filemanager/classes/Authenticators/SessionAuthenticator.php000066600000005403150472616010020347 0ustar00getConfig(); // Support both old and new format $loggedInKey = isset($config['SessionAuthenticator.logged_in_key']) ? $config['SessionAuthenticator.logged_in_key'] : $config["authenticator.session.logged_in_key"]; $userKey = isset($config['SessionAuthenticator.user_key']) ? $config['SessionAuthenticator.user_key'] : $config["authenticator.session.user_key"]; $pathKey = isset($config['SessionAuthenticator.path_key']) ? $config['SessionAuthenticator.path_key'] : $config["authenticator.session.path_key"]; $rootPathKey = isset($config['SessionAuthenticator.rootpath_key']) ? $config['SessionAuthenticator.rootpath_key'] : $config["authenticator.session.rootpath_key"]; $configPrefix = (isset($config['SessionAuthenticator.config_prefix']) ? $config['SessionAuthenticator.config_prefix'] : "mcmanager") . "."; // Switch path if (isset($_SESSION[$pathKey])) $config['filesystem.path'] = $_SESSION[$pathKey]; // Switch root if (isset($_SESSION[$rootPathKey])) $config['filesystem.rootpath'] = $_SESSION[$rootPathKey]; $user = isset($_SESSION[$userKey]) ? $_SESSION[$userKey] : ""; $user = preg_replace('/[\\\\\\/:]/i', '', $user); // Override by prefix foreach ($_SESSION as $key => $value) { if (strpos($key, $configPrefix) === 0) $config[substr($key, strlen($configPrefix))] = $value; } foreach ($config as $key => $value) { // Skip replaceing {$user} in true/false stuff if ($value === true || $value === false) continue; $value = str_replace('${user}', $user, $value); $config[$key] = $value; } // Force update of internal state $man->setConfig($config); return isset($_SESSION[$loggedInKey]) && checkBool($_SESSION[$loggedInKey]); } } // Add plugin to MCManager $man->registerPlugin("SessionAuthenticator", new Moxiecode_SessionAuthenticator()); ?>filemanager/classes/FileSystems/LocalFileImpl.php000066600000061433150472616010016124 0ustar00_manager =& $manager; $this->_type = $type; if ($child_name != "") $this->_absPath = $this->_manager->removeTrailingSlash($absolute_path) . "/" . $child_name; else $this->_absPath = $absolute_path; // Force it absolute if (strpos($this->_absPath, '..') !== false) $this->_absPath = $this->_manager->toUnixPath(realpath($this->_absPath)); } /** * Set a bool regarding events triggering. * * @param Bool $trigger Trigger or not to trigger. */ function setTriggerEvents($trigger) { $this->_events = $trigger; } /** * Returns bool if events are to be triggered or not. * * @return Bool bool for triggering events or not. */ function getTriggerEvents() { return $this->_events; } /** * Returns the parent files absolute path. * * @return String parent files absolute path. */ function getParent() { $pathAr = explode("/", $this->_absPath); array_pop($pathAr); $path = implode("/", $pathAr); // TODO: Check this return ($path == "") ? null : $path; } /** * Returns the parent files File instance. * * @return File parent files File instance or false if there is no more parents. */ function &getParentFile() { $file = new Moxiecode_LocalFileImpl($this->_manager, $this->getParent()); return $file; } /** * Returns the file name of a file. * * @return string File name of file. */ function getName() { return basename($this->_manager->toOSPath($this->_absPath)); } /** * Returns the absolute path of the file. * * @return String absolute path of the file. */ function getAbsolutePath() { return $this->_absPath; } /** * Imports a local file to the file system, for example when users upload files. * * @param String $local_absolute_path Absolute path to local file to import. */ function importFile($local_absolute_path = "") { $this->_clearCache(); // Add action if ($this->_events) { if ($this->isFile()) { $this->_manager->dispatchEvent("onBeforeFileAction", array(ADD_ACTION, &$this)); $this->_manager->dispatchEvent("onFileAction", array(ADD_ACTION, &$this)); } else { $this->_manager->dispatchEvent("onBeforeFileAction", array(MKDIR_ACTION, &$this)); $this->_manager->dispatchEvent("onFileAction", array(MKDIR_ACTION, &$this)); } } // Chmod the file if (($mask = $this->_getConfigValue("filesystem.local.file_mask", false)) !== false) @chmod($this->_manager->toOSPath($this->_absPath), intval($mask, 8)); // Chown the file if (($owner = $this->_getConfigValue("filesystem.local.file_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($this->_absPath), $owner); } /** * Returns true if the file exists. * * @return boolean true if the file exists. */ function exists() { if (isset($this->_statCache['exists'])) return $this->_statCache['exists']; // Returns false if safe mode is on and the user/group is not the same as apache return ($this->_statCache['exists'] = file_exists($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the file is a directory. * * @return boolean true if the file is a directory. */ function isDirectory() { if (!$this->exists()) return $this->_type == MC_IS_DIRECTORY; if (isset($this->_statCache['is_dir'])) return $this->_statCache['is_dir']; return ($this->_statCache['is_dir'] = is_dir($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the file is a file. * * @return boolean true if the file is a file. */ function isFile() { if (!$this->exists()) return $this->_type == MC_IS_FILE; if (isset($this->_statCache['is_file'])) return $this->_statCache['is_file']; return ($this->_statCache['is_file'] = is_file($this->_manager->toOSPath($this->_absPath))); } /** * Returns last modification date in ms as an long. * * @return long last modification date in ms as an long. */ function getLastModified() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][9]; } /** * Returns creation date in ms as an long. * * @return long creation date in ms as an long. */ function getCreationDate() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][10]; } /** * Returns true if the files is readable. * * @return boolean true if the files is readable. */ function canRead() { if (isset($this->_statCache['is_readable'])) return $this->_statCache['is_readable']; return ($this->_statCache['is_readable'] = is_readable($this->_manager->toOSPath($this->_absPath))); } /** * Returns true if the files is writable. * * @return boolean true if the files is writable. */ function canWrite() { // Check parent if (!$this->exists()) { $file =& $this->getParentFile(); if ($this->getAbsolutePath() == $file->getAbsolutePath()) return false; return $file->canWrite(); } if (isset($this->_statCache['is_writeable'])) return $this->_statCache['is_writeable']; // Is windows if (DIRECTORY_SEPARATOR == "\\") { $path = $this->_manager->toOSPath($this->_absPath); if (is_file($path)) { $fp = @fopen($path, 'ab'); if ($fp) { fclose($fp); return true; } } else if (is_dir($path)) { $tmpnam = time() . md5(uniqid('iswritable')); if (@touch($path . '\\' . $tmpnam)) { unlink($path . '\\' . $tmpnam); return true; } } return false; } // Other OS:es return ($this->_statCache['is_writeable'] = is_writeable($this->_manager->toOSPath($this->_absPath))); } /** * Returns file size as an long. * * @return long file size as an long. */ function getLength() { if (!isset($this->_statCache['stat'])) $this->_statCache['stat'] = @stat($this->_manager->toOSPath($this->_absPath)); return $this->_statCache['stat'][7]; } /** * Copies this file to the specified file instance. * * @param File $dest File to copy to. * @return boolean true - success, false - failure */ function copyTo(&$dest) { $this->_clearCache(); if ($dest->exists()) return false; // Copy in to your self? if (strpos($dest->getAbsolutePath(), $this->getAbsolutePath()) === 0) return false; // Different file system then import if (getClassName($dest) != 'moxiecode_localfileimpl') return $dest->importFile($this->getAbsolutePath()); $dest->_clearCache(); if ($this->isDirectory()) { $handle_as_add_event = true; $treeHandler = new _LocalCopyDirTreeHandler($this->_manager, $this, $dest, $handle_as_add_event); $this->listTree($treeHandler); return true; } else { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(COPY_ACTION, &$this, &$dest)); $status = $this->_absPath == $dest->_absPath || copy($this->_manager->toOSPath($this->_absPath), $this->_manager->toOSPath($dest->_absPath)); // Chmod the file if (($mask = $dest->_getConfigValue("filesystem.local.file_mask", false)) !== false) @chmod($this->_manager->toOSPath($dest->_absPath), intval($mask, 8)); // Chown the file if (($owner = $dest->_getConfigValue("filesystem.local.file_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($dest->_absPath), $owner); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(COPY_ACTION, &$this, &$dest)); return $status; } } /** * Deletes the file. * * @param boolean $deep If this option is enabled files will be deleted recurive. * @return boolean true - success, false - failure */ function delete($deep = false) { if (!$this->exists()) return false; $this->_clearCache(); if (is_dir($this->_manager->toOSPath($this->_absPath))) { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(RMDIR_ACTION, &$this)); if ($deep) { // Get all the files $treeHandler = new _LocalDeleteDirTreeHandler($this->_manager, $this); $this->listTree($treeHandler); // Delete the files $files = array_reverse($treeHandler->getFiles()); foreach ($files as $file) $file->delete(); // Hmm, should be better return true; } if (($status = rmdir($this->_manager->toOSPath($this->_absPath))) && ($this->_events)) $this->_manager->dispatchEvent("onFileAction", array(RMDIR_ACTION, &$this)); } else { if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(DELETE_ACTION, &$this)); if (($status = unlink($this->_manager->toOSPath($this->_absPath))) && ($this->_events)) $this->_manager->dispatchEvent("onFileAction", array(DELETE_ACTION, &$this)); } return $status; } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Returns an array of BaseFile instances based on the specified filter instance. * * @param FileFilter &$filter FileFilter instance to filter files by. * @return Array array of File instances based on the specified filter instance. */ function &listFilesFiltered(&$filter) { $dir = $this->_absPath; $files = array(); $dirs = array(); $fileArray = array(); $dirArray = array(); if ($fHnd = opendir($this->_manager->toOSPath($dir))) { // Is there a trailing slash on the dir? Get rid of it //if ($dir[sizeof($dir)] == "/") // $dir = substr($dir, 0, sizeof($dir) -1); while (false !== ($file = readdir($fHnd))) { if ($file == "." || $file == "..") continue; // Returns false if safe mode is on and the user/group is not the same as apache $path = $dir . "/" . $file; if (file_exists($path)) { // We are at root! if ($dir == "/") $dir = ""; if (is_file($path)) $fileArray[] = $file; else $dirArray[] = $file; } } // Close handle closedir($fHnd); sort($dirArray); sort($fileArray); // Add dirs foreach ($dirArray as $adir) { $file = new Moxiecode_LocalFileImpl($this->_manager, $dir . "/" . $adir); if ($filter->accept($file) < 0) continue; array_push($files, $file); } // Add files foreach ($fileArray as $afile) { $file = new Moxiecode_LocalFileImpl($this->_manager, $dir . "/" . $afile); if ($filter->accept($file) < 0) continue; array_push($files, $file); } } return $files; } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. */ function listTree(&$file_tree_handler) { $this->_listTree($this, $file_tree_handler, new Moxiecode_DummyFileFilter(), 0); } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file * if the file filter accepts the file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. * @param FileTreeHandler &$file_filter FileFilter instance to filter files by. */ function listTreeFiltered(&$file_tree_handler, &$file_filter) { $this->_listTree($this, $file_tree_handler, $file_filter, 0); } /** * Creates a new directory. * * @return boolean true- success, false - failure */ function mkdir() { $this->_clearCache(); if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(MKDIR_ACTION, &$this)); $tpl = $this->_getConfigValue("filesystem.local.directory_template", false); if ($tpl) $status = copy($this->_manager->toAbsPath($tpl), $this->_manager->toOSPath($this->_absPath)); else $status = mkdir($this->_manager->toOSPath($this->_absPath)); // Chmod the dir if (($mask = $this->_getConfigValue("filesystem.local.directory_mask", false)) !== false) @chmod($this->_manager->toOSPath($this->_absPath), intval($mask, 8)); // Chown the dir if (($owner = $this->_getConfigValue("filesystem.local.directory_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($this->_absPath), $owner); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(MKDIR_ACTION, &$this)); return $status; } /** * Renames/Moves this file to the specified file instance. * * @param File $dest File to rename/move to. * @return boolean true- success, false - failure */ function renameTo(&$dest) { $this->_clearCache(); // Already exists if ($dest->exists()) return false; if ($this->_events) $this->_manager->dispatchEvent("onBeforeFileAction", array(RENAME_ACTION, &$this, &$dest)); if ($this->_absPath != $dest->_absPath) $status = rename($this->_manager->toOSPath($this->_absPath), $this->_manager->toOSPath($dest->_absPath)); if ($status && $this->_events) $this->_manager->dispatchEvent("onFileAction", array(RENAME_ACTION, &$this, &$dest)); $isFile = is_file($this->_manager->toOSPath($this->_absPath)); // Chmod the file/directory if (($mask = $dest->_getConfigValue("filesystem.local." . ($isFile ? "file" : "directory") . "_mask", false)) !== false) @chmod($this->_manager->toOSPath($dest->_absPath), intval($mask, 8)); // Chown the file/directory if (($owner = $dest->_getConfigValue("filesystem.local." . ($isFile ? "file" : "directory") . "_owner", false)) !== false) $this->_chown($this->_manager->toOSPath($dest->_absPath), $owner); return $status; } /* * Sets the last-modified time of the file or directory. * * @param String $datetime The new date/time to set the file, in timestamp format * @return boolean true- success, false - failure */ function setLastModified($datetime) { $this->_clearCache(); return touch($this->_manager->toOSPath($this->_absPath), $datetime); } /** * Opens a file stream by the specified mode. The default mode is rb. * * @param String $mode Mode to open file by, r, rb, w, wb etc. * @return FileStream File stream implementation for the file system. */ function &open($mode = 'rb') { $this->_clearCache(); $stream = new Moxiecode_LocalFileStream($this, $mode); return $stream; } // * * Private methods function _clearCache() { $this->_statCache = array(); } /** * Lists files recursive, and places the files in the specified array. */ function _listTree($file, &$file_tree_handler, &$file_filter, $level) { $state = $file_tree_handler->CONTINUE; if ($file_filter->accept($file)) { $state = $file_tree_handler->handle($file, $level); if ($state == $file_tree_handler->ABORT || $state == $file_tree_handler->ABORT_FOLDER) return $state; } $files = $file->listFiles(); foreach ($files as $file) { if ($file_filter->accept($file)) { if ($file->isFile()) { // This is some weird shit! //if (!is_object($file_filter)) $state = $file_tree_handler->handle($file, $level); } else { $state = $this->_listTree($file, $file_tree_handler, $file_filter, ++$level); --$level; } } if ($state == $file_tree_handler->ABORT) return $state; } return $file_tree_handler->CONTINUE; } /** * Returns a merged name/value array of config elements. * * @return Array Merged name/value array of config elements. */ function getConfig() { $globalConf = $this->_manager->getConfig(); // Not cached config if (!$this->_config) { $localConfig = array(); $this->_config = $globalConf; // Get files up the tree $accessFiles = array(); $file =& $this; if ($file->isFile()) $file =& $file->getParentFile(); while ($file->exists() && $file->getAbsolutePath() != "/") { $accessFile = new Moxiecode_LocalFileImpl($this->_manager, $file->getAbsolutePath(), $globalConf["filesystem.local.access_file_name"]); if ($accessFile->exists()) $accessFiles[] = $accessFile; // Is not a valid path break loop if (!$this->_manager->verifyPath($file->getParent())) break; $file =& $file->getParentFile(); } // Parse and merge $allowoverrideKeys = array(); foreach ($this->_config as $key => $value) { $keyChunks = explode('.', $key); if ($keyChunks[count($keyChunks)-1] == "allow_override") { foreach (explode(',', $value) as $keySuffix) { $keyChunks[count($keyChunks)-1] = $keySuffix; $allowoverrideKeys[] = implode('.', $keyChunks); } } } foreach (array_reverse($accessFiles) as $accessFile) { $config = array(); // Parse ini file if (($fp = fopen($this->_manager->toOSPath($accessFile->getAbsolutePath()), "r"))) { while (!feof($fp)) { $line = trim(fgets($fp)); // Skip comments if (substr($line, 0, 1) == "#") continue; // Split rows if (($pos = strpos($line, "=")) !== FALSE) $config[substr($line, 0, $pos)] = substr($line, $pos+1); } fclose($fp); } // Handle local config values $curDir = $this->isFile() ? $this->getParent() : $this->getAbsolutePath(); if ($accessFile->getParent() == $curDir) { foreach ($config as $key => $value) { if (substr($key, 0, 1) == '_') $localConfig[substr($key, 1)] = $value; } } // Parse allow keys and deny keys $denyOverrideKeys = array(); foreach ($config as $key => $value) { $keyChunks = explode('.', $key); $lastChunk = $keyChunks[count($keyChunks)-1]; if ($lastChunk == "allow_override" || $lastChunk == "deny_override") { foreach (explode(',', $value) as $keySuffix) { $keyChunks[count($keyChunks)-1] = $keySuffix; $allowDenyKey = implode('.', $keyChunks); if (in_array($allowDenyKey, $allowoverrideKeys)) { if ($lastChunk == "allow_override") $allowoverrideKeys[] = $allowDenyKey; else $denyOverrideKeys[] = $allowDenyKey; } } } } // Remove the denied keys from the allow list /* foreach ($denyOverrideKeys as $denyKey) { for ($i=0; $i $value) { $validAllKey = false; foreach ($allowoverrideKeys as $allowkey) { if (strpos($allowkey, "*") > 0) { $allowkey = str_replace("*", "", $allowkey); // echo $allowkey . "," . $key . strpos($allowkey, $key) . "
        "; if (strpos($key, $allowkey) === 0) { $validAllKey = true; break; } } } if ((in_array($key, $allowoverrideKeys) || $validAllKey) && !in_array($key, $denyOverrideKeys)) { if (strpos($value, '${') !== false) $value = str_replace('${configpath}', $accessFile->getParent(), $value); $this->_config[$key] = $value; } } } // Variable substitute the values foreach ($this->_config as $key => $value) { if (!is_array($value) && strpos($value, '${') !== false) { if ($this->isFile()) $path = $this->getAbsolutePath(); else $path = $this->getParent(); $value = str_replace('${path}', $path, $value); $value = str_replace('${rootpath}', $this->_manager->toUnixPath($this->_manager->_rootPaths[0]), $value); // Handle multiple rootpaths for ($i=0; $i_manager->_rootPaths); $i++) $value = str_replace('${rootpath' . $i . '}', $this->_manager->toUnixPath($this->_manager->_rootPaths[$i]), $value); $this->_config[$key] = $value; } } // Force local config foreach ($localConfig as $key => $value) { //$this->_config[$key] = $value; $validAllKey = false; foreach ($allowoverrideKeys as $allowkey) { if (strpos($allowkey, "*") > 0) { $allowkey = str_replace("*", "", $allowkey); // echo $allowkey . "," . $key . strpos($allowkey, $key) . "
        "; if (strpos($key, $allowkey) === 0) { $validAllKey = true; break; } } } if ((in_array($key, $allowoverrideKeys) || $validAllKey) && !in_array($key, $denyOverrideKeys)) { if (strpos($value, '${') !== false) $value = str_replace('${configpath}', $accessFile->getParent(), $value); $this->_config[$key] = $value; } } /* foreach ($this->_config as $key => $value) { if (in_array($key, $allowoverrideKeys)) { // Seems to be a variable if (strpos($value, '${') !== false) { $matches = array(); preg_match_all('/\${(.*)}/i', $value, $matches); var_dump($matches); foreach ($matches as $match) $this->_config[$key] = str_replace('${' . $match . '}', $this->_config[$match], $this->_config[$key]); } } }*/ } return $this->_config; } /** * Returns a config value by the specified key. * * @param String key Key to return value by. * @param String default_value Optional default value. * @return String Value returned from config. */ function _getConfigValue($key, $default_value = "") { $config = $this->getConfig(); if (isset($config[$key])) return $config[$key] ? $config[$key] : $default_value; else return $default_value; } function _chown($path, $owner) { if ($owner == "") return; $owner = explode(":", $owner); // Only user if (count($owner) == 1) array_push($owner, ""); // Hmm if (count($owner) != 2) return; // Set user if ($owner[0] != "") @chown($path, $owner[0]); // Set group if ($owner[1] != "") @chgrp($path, $owner[1]); } function _cmpByName($file1, $file2) { $al = strtolower($file1->getName()); $bl = strtolower($file2->getName()); if ($al == $bl) return 0; return $al > $bl ? 1 : -1; } } class _LocalCopyDirTreeHandler extends Moxiecode_FileTreeHandler { var $_fromFile; var $_destFile; var $_manager; var $_handle_as_add_event; function _LocalCopyDirTreeHandler(&$manager, $from_file, $dest_file, $handle_as_add_event) { $this->_manager = $manager; $this->_fromFile = $from_file; $this->_destFile = $dest_file; $this->_handle_as_add_event = $handle_as_add_event; } /** * Handles a file instance while looping an tree of directories. * * @param File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $toPath = $this->_destFile->getAbsolutePath(); $toPath .= substr($file->getAbsolutePath(), strlen($this->_fromFile->getAbsolutePath())); $toFile = $this->_manager->getFile($toPath); //debug($file->getAbsolutePath() . "->" . $toPath); // Do action if ($file->isDirectory()) $toFile->mkdir(); else $file->copyTo($toFile); return $this->CONTINUE; } } class _LocalDeleteDirTreeHandler extends Moxiecode_FileTreeHandler { var $_manager; var $_dir; var $_files; function _LocalDeleteDirTreeHandler(&$manager, $dir) { $this->_manager = $manager; $this->_dir = $dir; $this->_files = array(); } /** * Returns all the files and dirs. * * @return Array All the files and dirs. */ function getFiles() { return $this->_files; } /** * Handles a file instance while looping an tree of directories. * * @param File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $this->_files[] = $file; //$file->delete(); return $this->CONTINUE; } } class Moxiecode_LocalFileStream extends Moxiecode_FileStream { var $_fp; var $_file; function Moxiecode_LocalFileStream(&$file, $mode) { $this->_file = $file; $this->_fp = fopen($file->getAbsolutePath(), $mode); } function skip($bytes) { $pos = ftell($this->_fp); fseek($this->_fp, $bytes, SEEK_CUR); return ftell($this->_fp) - $pos; } function read($len = 1024) { return fread($this->_fp, $len); } function readToEnd() { $data = ""; while (($chunk = $this->read(1024)) != null) $data .= $chunk; return $data; } function write($buff, $len = -1) { if ($len == -1) return fwrite($this->_fp, $buff); return fwrite($this->_fp, $buff, $len); } function close() { $this->_file->_clearCache(); @fclose($this->_fp); $this->_fp = null; } } ?>filemanager/classes/FileSystems/BaseFileImpl.php000066600000010530150472616010015734 0ustar00_manager =& $manager; $this->_type = $type; if ($child_name != "") $this->_absPath = $this->_manager->removeTrailingSlash($absolute_path) . "/" . $child_name; else $this->_absPath = $absolute_path; } /** * Set a bool regarding events triggering. * * @param Bool $trigger Trigger or not to trigger. */ function setTriggerEvents($trigger) { $this->_events = $trigger; } /** * Returns bool if events are to be triggered or not. * * @return Bool bool for triggering events or not. */ function getTriggerEvents() { return $this->_events; } /** * Returns the parent files absolute path. * * @return String parent files absolute path. */ function getParent() { $pathAr = explode("/", $this->getAbsolutePath()); array_pop($pathAr); $path = implode("/", $pathAr); return ($path == "") ? "/" : $path; } /** * Returns the file name of a file. * * @return string File name of file. */ function getName() { return basename($this->_absPath); } /** * Returns the absolute path of the file. * * @return String absolute path of the file. */ function getAbsolutePath() { return $this->_absPath; } /** * Returns true if the file is a directory. * * @return boolean true if the file is a directory. */ function isDirectory() { if (!$this->exists()) return $this->_type == MC_IS_DIRECTORY; return is_dir($this->_manager->toOSPath($this->_absPath)); } /** * Returns true if the file is a file. * * @return boolean true if the file is a file. */ function isFile() { if (!$this->exists()) return $this->_type == MC_IS_FILE; return !$this->isDirectory(); } /** * Returns an array of File instances. * * @return Array array of File instances. */ function &listFiles() { $files = $this->listFilesFiltered(new Moxiecode_DummyFileFilter()); return $files; } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. */ function listTree(&$file_tree_handler) { $this->_listTree($this, $file_tree_handler, new Moxiecode_DummyFileFilter(), 0); } /** * Lists the file as an tree and calls the specified FileTreeHandler instance on each file * if the file filter accepts the file. * * @param FileTreeHandler &$file_tree_handler FileTreeHandler to invoke on each file. * @param FileTreeHandler &$file_filter FileFilter instance to filter files by. */ function listTreeFiltered(&$file_tree_handler, &$file_filter) { $this->_listTree($this, $file_tree_handler, $file_filter, 0); } // * * Private methods /** * Lists files recursive, and places the files in the specified array. */ function _listTree($file, &$file_tree_handler, &$file_filter, $level) { $state = $file_tree_handler->CONTINUE; if ($file_filter->accept($file)) { $state = $file_tree_handler->handle($file, $level); if ($state == $file_tree_handler->ABORT || $state == $file_tree_handler->ABORT_FOLDER) return $state; } $files = $file->listFiles(); foreach ($files as $file) { if ($file_filter->accept($file)) { if ($file->isFile()) { // This is some weird shit! //if (!is_object($file_filter)) $state = $file_tree_handler->handle($file, $level); } else { $state = $this->_listTree($file, $file_tree_handler, $file_filter, ++$level); --$level; } } if ($state == $file_tree_handler->ABORT) return $state; } return $file_tree_handler->CONTINUE; } } ?>filemanager/classes/FileSystems/BaseFile.php000066600000014545150472616010015124 0ustar00filemanager/classes/FileSystems/FileStream.php000066600000002526150472616010015501 0ustar00filemanager/classes/FileSystems/RootFileImpl.php000066600000002617150472616010016014 0ustar00_manager; $files = array(); $roots = $man->getRootPaths(); foreach ($roots as $root) { $file = $man->getFile($root); // Configured root doesn't exists if (!$file->exists()) { error("Configured root: " . $root . " could not be found."); continue; } if ($filter->accept($file)) $files[] = $file; } return $files; } } ?>filemanager/classes/FileSystems/FileTreeHandler.php000066600000011423150472616010016437 0ustar00_onlyFiles = false; $this->_onlyDirs = false; } /** * Sets only files mode. * * @param bool $only_files true if only files should be added to output. */ function setOnlyFiles($only_files) { $this->_onlyFiles = $only_files; } /** * Gets only files mode. * * @return bool true if only files should be added to output. */ function getOnlyFiles() { return $this->_onlyFiles; } /** * Sets only dirs mode. * * @param bool $only_dirs true if only dirs should be added to output. */ function setOnlyDirs($only_dirs) { $this->_onlyDirs = $only_dirs; } /** * Gets only dirs mode. * * @return bool true if only dirs should be added to output. */ function getOnlyDirs() { return $this->_onlyDirs; } /** * Sets the max level to include in tree parse. * * @param int $level max level to include in tree parse. */ function setMaxLevel($level) { $this->_maxLevel = $level; } /** * Sets is the result is to be built in to an array or not. * The result is returned by getFileArray when the tree list completes. * Note: The default value of this state is false. * * @param boolean $state True if the result is to be built in to an array or not. */ function setMakeArray($state) { $this->_makeArray = $state; if ($this->_makeArray) $this->_array = array(); } /** * Returns the tree as an array of MCE_File instances. This method * will not return anything if the setMakeArray isn't set to true. * * @return Array Array of MCE_File instances. */ function &getFileArray() { return $this->_array; } /** * Handles a file instance while looping an tree of directories. * * @param MCE_File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { $add = true; if (is_array($this->_array) && $this->_onlyDirs && $file->isFile()) $add = false; if (is_array($this->_array) && $this->_onlyFiles && $file->isDir()) $add = false; if ($add) $this->_array[] = $file; if ($this->_maxLevel && $level >= $this->_maxLevel) return $this->ABORT_FOLDER; return $this->CONTINUE; } /**#@-*/ } class Moxiecode_ConfigFilteredFileTreeHandler extends Moxiecode_BasicFileTreeHandler { var $_config; /** * Handles a file instance while looping an tree of directories. * * @param MCE_File $file File object reference * @param int $level Current level of tree parse * @return int State of what to do next can be CONTINUE, ABORT or ABORTFOLDER. */ function handle($file, $level) { if ($file->isDirectory() || !is_array($this->_config)) { if ($level == 0) return parent::handle($file, $level); else $parentFile = $file->getParentFile(); $this->_config = $parentFile->getConfig(); } $filter = new Moxiecode_BasicFileFilter(); $filter->setIncludeFilePattern($this->_config['filesystem.include_file_pattern']); $filter->setExcludeFilePattern($this->_config['filesystem.exclude_file_pattern']); $filter->setIncludeDirectoryPattern($this->_config['filesystem.include_directory_pattern']); $filter->setExcludeDirectoryPattern($this->_config['filesystem.exclude_directory_pattern']); $filter->setOnlyDirs($this->_onlyDirs); if (!$filter->accept($file)) return $this->ABORT_FOLDER; return parent::handle($file, $level); } } ?>filemanager/classes/FileSystems/FileFilter.php000066600000026267150472616010015503 0ustar00_filters = array(); } /** * Adds a new filter to check. * * @param Moxiecode_FileFilter $file_filter Filter to add. */ function addFilter(&$file_filter) { $this->_filters[] = $file_filter; } /** * Returns true or false if the file is accepted or not. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { for ($i = 0; $i < count($this->_filters); $i++) { $state = $this->_filters[$i]->accept($file); if ($state < 0) return $state; } return 1; } } /** * DummyFileFiler this filter accepts all files. * * @package mce.core */ class Moxiecode_DummyFileFilter extends Moxiecode_FileFilter { /** * Returns true or false if the file is accepted or not. * Note: This dummb method allways returns true. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { return true; } } // Define reason constants define('BASIC_FILEFILTER_ACCEPTED', 1); define('BASIC_FILEFILTER_INVALID_EXTENSION', -1); define('BASIC_FILEFILTER_INVALID_NAME', -2); /** * Basic file filter, this class handles some common filter problems * and is possible to extend if needed. * * @package mce.core */ class Moxiecode_BasicFileFilter extends Moxiecode_FileFilter { /**#@+ * @access private */ var $_excludeFolders; var $_includeFolders; var $_excludeFiles; var $_includeFiles; var $_includeFilePattern; var $_excludeFilePattern; var $_includeDirectoryPattern; var $_excludeDirectoryPattern; var $_filesOnly; var $_dirsOnly; var $_includeWildcardPattern; var $_excludeWildcardPattern; var $_extensions; var $_maxLevels; var $_debug; /**#@+ * @access public */ /** * Main constructor. */ function BasicFileFilter() { $this->_debug = false; $this->_extensions = ""; } /** * Sets if debug mode is on or off, default off. * * @param boolean $state if true debug mode is enabled. */ function setDebugMode($state) { $this->_debug = $state; } /** * Sets if only files are to be accepted in result. * * @param boolean $files_only True if only files are to be accepted. */ function setOnlyFiles($files_only) { $this->_filesOnly = $files_only; } /** * Sets if only dirs are to be accepted in result. * * @param boolean $dirs_only True if only dirs are to be accepted. */ function setOnlyDirs($dirs_only) { $this->_dirsOnly = $dirs_only; } /** * Sets maximum number of directory levels to accept. * * @param int $max_levels Maximum number of directory levels to accept. */ function setMaxLevels($max_levels) { $this->_maxLevels = $max_levels; } /** * Sets a comma separated list of valid file extensions. * * @param String $extensions Comma separated list of valid file extensions. */ function setIncludeExtensions($extensions) { if ($extensions == "*" || $extensions == "") return; $this->_extensions = explode(',', strtolower($extensions)); } /** * Sets comma separated string list of filenames to exclude. * * @param String $files separated string list of filenames to exclude. */ function setExcludeFiles($files) { if ($files != "") $this->_excludeFiles = split(',', $files); } /** * Sets comma separated string list of filenames to include. * * @param String $files separated string list of filenames to include. */ function setIncludeFiles($files) { if ($files != "") $this->_includeFiles = split(',', $files); } /** * Sets comma separated string list of foldernames to exclude. * * @param String $folders separated string list of foldernames to exclude. */ function setExcludeFolders($folders) { if ($folders != "") $this->_excludeFolders = split(',', $folders); } /** * Sets comma separated string list of foldernames to include. * * @param String $folders separated string list of foldernames to include. */ function setIncludeFolders($folders) { if ($folders != "") $this->_includeFolders = split(',', $folders); } /** * Sets a regexp pattern that is used to accept files path parts. * * @param String $pattern regexp pattern that is used to accept files path parts. */ function setIncludeFilePattern($pattern) { $this->_includeFilePattern = $pattern; } /** * Sets a regexp pattern that is used to deny files path parts. * * @param String $pattern regexp pattern that is used to deny files path parts. */ function setExcludeFilePattern($pattern) { $this->_excludeFilePattern = $pattern; } /** * Sets a regexp pattern that is used to accept directory path parts. * * @param String $pattern regexp pattern that is used to accept directory path parts. */ function setIncludeDirectoryPattern($pattern) { $this->_includeDirectoryPattern = $pattern; } /** * Sets a regexp pattern that is used to deny directory path parts. * * @param String $pattern regexp pattern that is used to deny directory path parts. */ function setExcludeDirectoryPattern($pattern) { $this->_excludeDirectoryPattern = $pattern; } /** * Sets a wildcard pattern that is used to accept files path parts. * * @param String $pattern wildcard pattern that is used to accept files path parts. */ function setIncludeWildcardPattern($pattern) { if ($pattern != "") $this->_includeWildcardPattern = $pattern; } /** * Sets a wildcard pattern that is used to deny files path parts. * * @param String $pattern wildcard pattern that is used to deny files path parts. */ function setExcludeWildcardPattern($pattern) { if ($pattern != "") $this->_excludeWildcardPattern = $pattern; } /** * Returns true or false if the file is accepted or not. * * @param MCE_File $file File to grant or deny. * @return boolean true or false if the file is accepted or not. */ function accept(&$file) { $name = $file->getName(); $absPath = $file->getAbsolutePath(); $isFile = $file->isFile(); // Handle exclude folders if (is_array($this->_excludeFolders)) { foreach ($this->_excludeFolders as $folder) { if (strpos($absPath, $folder) != "") { if ($this->_debug) debug("File denied \"" . $absPath . "\" by \"excludeFolders\"."); return BASIC_FILEFILTER_INVALID_NAME; } } } // Handle include folders if (is_array($this->_includeFolders)) { $state = false; foreach ($this->_includeFolders as $folder) { if (strpos($absPath, $folder) != "") { $state = true; break; } } if (!$state) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFolders\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle exclude files if (is_array($this->_excludeFiles) && $isFile) { foreach ($this->_excludeFiles as $fileName) { if ($name == $fileName) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeFiles\"."); return BASIC_FILEFILTER_INVALID_NAME; } } } // Handle include files if (is_array($this->_includeFiles) && $isFile) { $state = false; foreach ($this->_includeFiles as $fileName) { if ($name == $fileName) { $state = true; break; } } if (!$state) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFiles\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle file patterns if ($isFile) { if ($this->_dirsOnly) { if ($this->_debug) debug("File denied \"" . $absPath . "\" by \"dirsOnly\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude pattern if ($this->_excludeFilePattern && preg_match($this->_excludeFilePattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeFilePattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle include pattern if ($this->_includeFilePattern && !preg_match($this->_includeFilePattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeFilePattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } } else { if ($this->_filesOnly) { if ($this->_debug) debug("Dir denied \"" . $absPath . "\" by \"filesOnly\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude pattern if ($this->_excludeDirectoryPattern && preg_match($this->_excludeDirectoryPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeDirectoryPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle include pattern if ($this->_includeDirectoryPattern && !preg_match($this->_includeDirectoryPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeDirectoryPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } } // Handle include wildcard pattern if ($this->_includeWildcardPattern && !$this->_fnmatch($this->_includeWildcardPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"includeWildcardPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle exclude wildcard pattern if ($this->_excludeWildcardPattern && $this->_fnmatch($this->_excludeWildcardPattern, $name)) { if ($this->_debug) debug("File \"" . $absPath . "\" denied by \"excludeWildcardPattern\"."); return BASIC_FILEFILTER_INVALID_NAME; } // Handle file exntetion pattern if (is_array($this->_extensions) && $isFile) { $ar = explode('.', $absPath); $ext = strtolower(array_pop($ar)); $valid = false; foreach ($this->_extensions as $extension) { if ($extension == $ext) { $valid = true; break; } } if (!$valid) return BASIC_FILEFILTER_INVALID_EXTENSION; } return BASIC_FILEFILTER_ACCEPTED; } function _fnmatch($pattern, $file) { return ereg($this->_fnmatch2regexp(strtolower($pattern)), strtolower($file)); } function _fnmatch2regexp($str) { $s = ""; for ($i = 0; $ifilemanager/classes/ManagerEngine.php000066600000100543150472616010013675 0ustar00_plugins = array(); $this->_prefixes = array(); $this->_rootPaths = array(); $this->_config = array(); $this->_type = $type; } /** * Sets the name/value array of config options. This method will also force some relative config option paths to absolute. * * @param Array $config Name/value array of config options. * @param bool $setup_values True/false if the paths etc of the config should be set to default values or not. */ function setConfig($config, $setup_values = true) { $this->_rootPaths = array(); if ($setup_values) { // Auto add rootpaths and force them absolute in config $newRoots = array(); $roots = explode(';', $config['filesystem.rootpath']); foreach ($roots as $root) { $rootParts = explode('=', $root); // Unnamed root if (count($rootParts) == 1) { $rootParts[0] = $this->removeTrailingSlash($this->toAbsPath($rootParts[0])); $this->addRootPath($rootParts[0]); } // Named root if (count($rootParts) == 2) { $rootParts[1] = $this->removeTrailingSlash($this->toAbsPath($rootParts[1])); $this->addRootPath($rootParts[1]); } $newRoots[] = implode('=', $rootParts); } $config['filesystem.rootpath'] = implode(';', $newRoots); // Force absolute path if ($config['filesystem.path'] == "") $config['filesystem.path'] = $this->_rootPaths[0]; else $config['filesystem.path'] = $this->removeTrailingSlash($this->toAbsPath($config['filesystem.path'])); // Check if path is within any of the roots $found = false; foreach ($this->_rootPaths as $root) { if ($this->isChildPath($root, $config['filesystem.path'])) { $found = true; break; } } // Path was not within any of the rootpaths use the first one if (!$found) $config['filesystem.path'] = $this->_rootPaths[0]; // Setup absolute wwwroot if (isset($config['preview.wwwroot']) && $config['preview.wwwroot']) $config['preview.wwwroot'] = $this->toUnixPath($this->toAbsPath($config['preview.wwwroot'])); else $config['preview.wwwroot'] = $this->getSiteRoot(); // Setup preview.urlprefix if ($config["preview.urlprefix"]) { if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") $config["preview.urlprefix"] = str_replace("{proto}", "https", $config["preview.urlprefix"]); else $config["preview.urlprefix"] = str_replace("{proto}", "http", $config["preview.urlprefix"]); $config["preview.urlprefix"] = str_replace("{host}", $_SERVER['HTTP_HOST'], $config["preview.urlprefix"]); $config["preview.urlprefix"] = str_replace("{port}", $_SERVER['SERVER_PORT'], $config["preview.urlprefix"]); } } $this->_config =& $config; } function getType() { return $this->_type; } function setLangPackPath($path) { $this->_langPackPath = $path; } function getLangPackPath() { return $this->_langPackPath; } /** * Returns a LanguagePack instance of the current language pack. * * @return LanguagePack Instance of the current language pack. */ function &getLangPack() { if (!$this->_language) { $config = $this->getConfig(); $this->_language = new Moxiecode_LanguagePack(); $this->_language->load($this->toAbsPath("language/" . $this->_langPackPath . "/" . $config['general.language'] . ".xml")); } return $this->_language; } /** * Returns a lang item by group and key. * * @param string $group Language group to look in. * @param string $item Item to get inside group. * @param Array $replace Name/Value array of variables to replace in language pack. * @return string Language pack string loaded from XML file. */ function getLangItem($group, $item, $replace = array()) { $pack =& $this->getLangPack(); $string = $pack->get($group, $item); foreach ($replace as $key => $val) $string = str_replace("{". $key ."}", $val, $string); return $string; } /** * Returns an array of plugin paths to be loaded/required/includes. * * @return Array Array of file paths to load. */ function getPluginPaths() { global $basepath; $config = $this->getConfig(); $plugins = array(); if (isset($config["general.plugins"]) && $config["general.plugins"]) $plugins = preg_split("/,/i", $config["general.plugins"]); $out = array(); foreach($plugins as $plugin) { if (!isset($this->_plugins[strtolower($plugin)])) { // Check for single file plugins if (file_exists($basepath . "../plugins/" . $plugin . ".php")) $out[] = "plugins/" . $plugin . ".php"; else $out[] = "plugins/" . $plugin . "/". $plugin . ".php"; } } // Check the string first if ($config["authenticator"] == "") $config["authenticator"] = "BaseAuthenticator"; $authenticators = array(); // Check string for delimiter, preg_split returns php warning if delimiter is not found! if (strpos($config["authenticator"], "+") || strpos($config["authenticator"], "|")) $authenticators = preg_split("/\+|\|/i", $config["authenticator"], -1, PREG_SPLIT_NO_EMPTY); if (count($authenticators) != 0) { foreach ($authenticators as $auth) { // Check for single file plugins if (!isset($this->_plugins[strtolower($auth)])) { if (file_exists($basepath . "../plugins/" . $auth . ".php")) $out[] = "plugins/" . $auth . ".php"; else $out[] = "plugins/" . $auth . "/". $auth . ".php"; } } } else { if (!isset($this->_plugins[strtolower($config["authenticator"])])) { if (file_exists($basepath . "Authenticators/" . $config["authenticator"] . ".php")) $out[] = "classes/Authenticators/" . $config["authenticator"] . ".php"; else if (file_exists($basepath . "../plugins/" . $config["authenticator"] . ".php")) $out[] = "plugins/" . $config["authenticator"] . ".php"; else $out[] = "plugins/" . $config["authenticator"] . "/" . $config["authenticator"] . ".php"; } } // Check so that they all exists foreach ($out as $path) { if (!file_exists($basepath . "../" . $path)) trigger_error("Plugin could not be found: " . $path, FATAL); } return $out; } /** * Adds a path to the list of root paths. * * @param String $path Path to add must be a absolute path. */ function addRootPath($path) { $this->_rootPaths[] = $path; } /** * Returns an array of root paths. * * @return Array Root paths. */ function getRootPaths() { return $this->_rootPaths; } /** * Returns a plugin by id/name. * * @param String $name Plugin id/name. * @return MCManagerPlugin instance object. */ function getPlugin($name) { return isset($this->_plugins[$name]) ? $this->_plugins[$name] : null; } /** * Returns a true/false check for plugin. * * @param String $name Plugin id/name. * @return Bool true/false */ function hasPlugin($name) { return isset($this->_plugins[$name]); } /** * Returns a name/value array of plugins. * * @return Array name/value array of MCManagerPlugin instances. */ function getPlugins() { return $this->_plugins; } /** * Registers a plugin by id/name. * * @param $name Id/name to register plugin by. * @param $plugin Plugin instance to register/add to list. * * @return SmallMCEPlugin The added plugin instance. */ function ®isterPlugin($name, &$plugin, $prefix = false) { $name = strtolower($name); $this->_plugins[$name] =& $plugin; if ($prefix != false) $this->_prefixes[$name] = $prefix; return $plugin; } /** * Returns the MCManager config as name/value array. * * @return Array MCManager config as name/value array. */ function &getConfig() { return $this->_config; } /** * Returns the a config item by name. * * @param string $key Config item key to retrive. * @param string $def Default value to return. * @return mixed config item by name. */ function getConfigItem($key, $def = false) { return isset($this->_config[$key]) ? $this->_config[$key] : $def; } /** * Returns a merged JS config. It will only export configured items controlled by the allow_export suffix. * * @return Array Name/Value array of JS config options. */ function &getJSConfig($config = false, $prefixes = '*') { $encrypted = array("filesystem.path", "filesystem.rootpath", "filesystem.directory_templates"); $jsConfig = array(); $prefixes = explode(",", $prefixes); if (!$config) $config = $this->getConfig(); foreach ($config as $name => $value) { $pos = strpos($name, ".allow_export"); if ($pos > 0) { $names = explode(",", $value); $prefix = substr($name, 0, $pos); if (in_array("*", $prefixes) || in_array($prefix, $prefixes)) { foreach ($names as $key) { $key = $prefix . "." . $key ; // Encrypt some paths if (in_array($key, $encrypted)) $jsConfig[$key] = "" . $this->encryptPath($config[$key]); else $jsConfig[$key] = "" . is_bool($config[$key]) ? ($config[$key] ? "true" : "false") : $config[$key]; } } } } return $jsConfig; } /** * Encrypts the specified path so that it doesn't contain full paths on the client side of the application. * * @param string $path Path to encrypt. * @return string Encrypted short path. */ function encryptPath($path) { $config = $this->getConfig(); if (checkBool($config['general.encrypt_paths'])) { $count = 0; foreach ($this->_rootPaths as $rootPath) { // Needs encryption? if ($rootPath != "/") $path = str_replace($rootPath, "{" . $count++ . "}", $path); } } return utf8_encode($path); } /** * Decrypts the specified path from a non absolute path to a absolute path. * * @param string $path Path to decrypt. * @return string Decrypted absolute path. */ function decryptPath($path) { if (!$path) return ""; $count = 0; $path = $this->toUnixPath($path); // Is relative path if (!(strpos($path, '/') === 0 || strpos($path, ':') !== false || strpos($path, '{') !== false)) $path = realpath(dirname(__FILE__) . '/../' . $path); foreach ($this->_rootPaths as $rootPath) $path = str_replace("{" . $count++ . "}", $rootPath, $path); $path = str_replace("{default}", $this->_config["filesystem.path"], $path); return $path; } /** * isAuthenticated checks against the configuration and sends events to auth plugins. * This method will also call the onBeforeInit, onInit and onAfterInit methods if the user was authenticated. * * @return bool Returns true if authenticated, false if not. */ function isAuthenticated() { $config = $this->getConfig(); $authenticators = strtolower($config["authenticator"]); // Check the string first if ($authenticators != "" && $authenticators != "BaseAuthenticator") { if (strpos($authenticators, "|") && strpos($authenticators, "+")) trigger_error("You can not use both + and | at the same time for adding authenticators.", FATAL); $pass = false; // Check for AND authenticators if (strpos($authenticators, "+")) { $authArray = preg_split("/\+/i", $authenticators, -1, PREG_SPLIT_NO_EMPTY); if (!$authArray) trigger_error("No Authenticator could be used.", FATAL); // Verify that all authenticators exists foreach($authArray as $auth) { if (!$this->hasPlugin($auth)) trigger_error("Authenticator \"". htmlentities($auth) ."\" was not found.", FATAL); } // Default to true $pass = true; // Send AND event foreach ($authArray as $auth) { $plugin = $this->getPlugin($auth); if ($pass && !$plugin->onAuthenticate($this)) $pass = false; } // Check for OR authentocator string } else if (strpos($authenticators, "|")) { $authArray = preg_split("/\|/i", $authenticators, -1, PREG_SPLIT_NO_EMPTY); if (!$authArray) trigger_error("No Authenticator could be used.", FATAL); // Verify that all authenticators exists foreach ($authArray as $auth) { if (!$this->hasPlugin($auth)) trigger_error("Authenticator \"". htmlentities($auth) ."\" was not found.", FATAL); } // Default to false $pass = false; // Send OR event foreach ($authArray as $auth) { $plugin = $this->getPlugin($auth); if ($plugin->onAuthenticate($this)) $pass = true; } } else { $plugin = $this->getPlugin($authenticators); if ($plugin->onAuthenticate($this)) $pass = true; } } else $pass = true; // Is authenticated, call onInit if ($pass) $this->dispatchEvent("onInit"); // Set config again to update rootpaths etc $this->setConfig($this->_config); return $pass; } /** * Dispatches a event to all registered plugins. This method will loop through all plugins and call the specific event if this * event method returns false the chain will be terminated. * * @param String $event Event name to be dispatched for example onAjaxCommand. * @param Array $args Optional array with arguments. * @return Bool Returns true of a plugin returned true, false if not. */ function dispatchEvent($event, $args=false) { // Setup event arguments $keys = array_keys($this->_plugins); for ($i=0; $i_plugins[$keys[$i]]; // Valid prefix if (isset($this->_prefixes[$keys[$i]])) { if ($this->_type != $this->_prefixes[$keys[$i]]) continue; } switch ($event) { case "onAuthenticate": if (!$plugin->onAuthenticate($this)) return false; break; case "onInit": if (!$plugin->onInit($this)) return false; break; case "onPreInit": if (!$plugin->onPreInit($this, $args[0])) return false; break; case "onLogin": if (!$plugin->onLogin($this)) return false; break; case "onLogout": if (!$plugin->onLogout($this)) return false; break; case "onBeforeFileAction": if (!isset($args[2])) $args[2] = null; if (!$plugin->onBeforeFileAction($this, $args[0], $args[1], $args[2])) return false; break; case "onFileAction": if (!isset($args[2])) $args[2] = null; if (!$plugin->onFileAction($this, $args[0], $args[1], $args[2])) return false; break; case "onBeforeRPC": if (!$plugin->onBeforeRPC($this, $args[0], $args[1])) return false; break; case "onBeforeStream": if (!$plugin->onBeforeStream($this, $args[0], $args[1])) return false; break; case "onStream": if (!$plugin->onStream($this, $args[0], $args[1])) return false; break; case "onAfterStream": if (!$plugin->onAfterStream($this, $args[0], $args[1])) return false; break; case "onBeforeUpload": if (!$plugin->onBeforeUpload($this, $args[0], $args[1])) return false; break; case "onAfterUpload": if (!$plugin->onAfterUpload($this, $args[0], $args[1])) return false; break; case "onCustomInfo": if (!$plugin->onCustomInfo($this, $args[0], $args[1], $args[2])) return false; break; case "onListFiles": if (!$plugin->onListFiles($this, $args[0], $args[1])) return false; break; case "onInsertFile": if (!$plugin->onInsertFile($this, $args[0])) return false; break; } } return true; } /** * Executes a event in all registered plugins if a plugin returns a object or array the execution chain will be * terminated. * * @param String $event Event name to be dispatched for example onAjaxCommand. * @param Array $args Optional array with arguments. * @return Bool Returns true of a plugin returned true, false if not. */ function executeEvent($event, $args=false) { // Setup event arguments $keys = array_keys($this->_plugins); for ($i=0; $i_plugins[$keys[$i]]; // Valid prefix if (isset($this->_prefixes[$keys[$i]])) { if ($this->_type != $this->_prefixes[$keys[$i]]) continue; } switch ($event) { case "onRPC": $result =& $plugin->onRPC($this, $args[0], $args[1]); if (!is_null($result)) return $result; break; case "onUpload": $result =& $plugin->onUpload($this, $args[0], $args[1]); if (!is_null($result)) return $result; break; } } return null; } function getInvalidFileMsg() { return $this->_invalidFileMsg; } /** * Returns the wwwroot if it fails it will trigger a fatal error. * * @return String wwwroot or null string if it was impossible to get. */ function getSiteRoot() { // Check config if (isset($this->_config['preview.wwwroot']) && $this->_config['preview.wwwroot']) return $this->toUnixPath(realpath($this->_config['preview.wwwroot'])); // Try script file if (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["SCRIPT_FILENAME"])) { $path = str_replace($this->toUnixPath($_SERVER["SCRIPT_NAME"]), "", $this->toUnixPath($_SERVER["SCRIPT_FILENAME"])); if (is_dir($path)) return $this->toUnixPath(realpath($path)); } // If all else fails, try this. if (isset($_SERVER["SCRIPT_NAME"]) && isset($_SERVER["PATH_TRANSLATED"])) { $path = str_replace($this->toUnixPath($_SERVER["SCRIPT_NAME"]), "", str_replace("//", "/", $this->toUnixPath($_SERVER["PATH_TRANSLATED"]))); if (is_dir($path)) return $this->toUnixPath(realpath($path)); } // Check document root if (isset($_SERVER['DOCUMENT_ROOT'])) return $this->toUnixPath(realpath($_SERVER['DOCUMENT_ROOT'])); trigger_error("Could not resolve WWWROOT path, please set an absolute path in preview.wwwroot config option. Check the Wiki documentation for details.", FATAL); return null; } /** * Returns a absolute file system path of a absolute URI path for example /mydir/myfile.htm * will be resolved to /www/mywwwroot/mydir/myfile.htm. * * @param String $uri Absolute URI path for example /mydir/myfile.htm * @param String $root Option site root to use. * @return String Absolute file system path or empty string on failure. */ function resolveURI($uri, $root = false) { // Use default root if not specified if (!$root) $root = $this->getSiteRoot(); return realpath($root . $uri); } /** * Returns a site absolute path from a absolute file system path for example /www/mywwwroot/mydir/myfile.htm * will be converted to /mydir/myfile.htm. * * @param String $abs_path Absolute path for example /mydir/myfile.htm * @return String Site absolute path (URI) or empty string on failure. */ function convertPathToURI($abs_path, $root = false) { $log =& $this->getLogger(); // No root defined use specified root if (!$root) $root = $this->getSiteRoot(); if (!$root) { trigger_error("Could not resolve WWWROOT path, please set an absolute path in preview.wwwroot config option.", FATAL); die(); } if ($root == "/") { if ($log && $log->isDebugEnabled()) $log->info("ConvertPathToURI: SiteRoot=" . $root . ", Path: " . $abs_path . " -> URI: " . $abs_path); return $abs_path; } $uri = substr($abs_path, strlen($root)); if ($log && $log->isDebugEnabled()) $log->info("ConvertPathToURI: SiteRoot=" . $root . ", Path: " . $abs_path . " -> URI: " . $uri); return $uri; } /** * Converts a URI such as /somedir/somefile.gif to /system/path/somedir/somefile.gif * * @param String $uri URI to convert to path. * @param String $root Optional site root to use. * @return String Path out of URI. */ function convertURIToPath($uri, $root = false) { $log =& $this->getLogger(); if (!$root) $root = $this->getSiteRoot(); if ($log && $log->isDebugEnabled()) $log->info("ConvertURIToPath: SiteRoot=" . $root . ", URI: " . $uri . " -> Path: " . $this->removeTrailingSlash($root) . $uri); return $this->removeTrailingSlash($root) . $uri; } /** * Converts an path into a visualy presentatble path. So that special folder names * gets translated and root paths gets replaced with their names. * * @param String $path Path to convert into a visual path. * @return String Visual path based on input path. */ function toVisualPath($path, $root = false) { $fs = "file"; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } $path = $this->decryptPath($path); // Speficied root if ($root) { $pos = strpos($path, $root); if ($pos === 0) $path = substr($path, strlen($root)); if ($path == "") $path = "/"; // Re-attach fs if ($fs != "file") $path = $fs . "://" . $path; return $this->encryptPath($path); } // Use config roots $rootNames = $this->_getRootNames(); foreach ($rootNames as $rootPath => $name) { $pos = strpos($path, $rootPath); if ($pos === 0) { $path = substr($path, strlen($rootPath)); if ($name == "/") $name = ""; $path = "/" . $name . $path; } } if (!$path) $path = "/"; // Re-attach fs if ($fs != "file") $path = $fs . "://" . $path; return $this->encryptPath($path); } /** * Verifies that a path is within the parent path. * * @param String $parent_path Parent path that must contain the path. * @param String $path Path that must contained the parent path. * @return Bool true if it's valid, false if it's not. */ function isChildPath($parent_path, $path) { return strpos(strtolower($path), strtolower($parent_path)) === 0; } /** * Checks if a specific tool is enabled or not. * * @param string $tool Tool to check for. * @param Array $config Name/Value config array to check tool against. * @return bool true/false if the tool is enabled or not. */ function isToolEnabled($tool, $config = false) { if (!$config) $config = $this->getConfig(); $ar = explode(',', $config['general.disabled_tools']); if (in_array($tool, $ar)) return false; $ar = explode(',', $config['general.tools']); if (in_array($tool, $ar)) return true; return false; } /** * Verifies that the specified path is within valid root paths. * * @param String $path Path to verify. * @return Bool true if the path is valid, false if it's invalid. */ function verifyPath($path) { $fs = "file"; $valid = false; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } // Filesystem wasn't found if (!isset($this->_fileSystems[$fs])) { trigger_error($this->getLangItem("error", "no_filesystem", array("path" => $path)), FATAL); die(); } $path = $this->decryptPath($path); // /../ is never valid if (indexOf($this->addTrailingSlash($path), "/../") != -1) return false; if ($fs != 'file') return true; foreach ($this->_rootPaths as $rootPath) { if ($this->isChildPath($rootPath, $path)) $valid = true; } return $valid; } /** * Returns the file system for a path for file if it couldn't be extracted. * * @param string $path Path to get FS from. * @return string Filesystem for path. */ function getFSFromPath($path) { $fs = "file"; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) $fs = $matches[1]; return $fs; } /** * Verifies that the specified file is valid agains the filters specified in config. * * @param String $path Path to verify. * @param String $action Action to get config options by. * @param Array $config Name/Value array of config options. * @return int Reason why it was denied. */ function verifyFile($file, $action = false, $config = false) { $config = $config ? $config : $file->getConfig(); // Verify filesystem config $fileFilter = new Moxiecode_BasicFileFilter(); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); $this->_invalidFileMsg = "{#error.invalid_filename}"; $status = $fileFilter->accept($file); if ($status != BASIC_FILEFILTER_ACCEPTED) { if ($status == BASIC_FILEFILTER_INVALID_NAME) { if ($file->isFile() && isset($config['filesystem.invalid_file_name_msg'])) $this->_invalidFileMsg = $config['filesystem.invalid_file_name_msg']; else if (!$file->isFile() && isset($config['filesystem.invalid_directory_name_msg'])) $this->_invalidFileMsg = $config['filesystem.invalid_directory_name_msg']; if (!$this->_invalidFileMsg) $this->_invalidFileMsg = "{#error.invalid_filename}"; } return $status; } // Verify action specific config $fileFilter = new Moxiecode_BasicFileFilter(); if ($action) { if (isset($config[$action . '.include_directory_pattern'])) $fileFilter->setIncludeDirectoryPattern($config[$action . '.include_directory_pattern']); if (isset($config[$action . '.exclude_directory_pattern'])) $fileFilter->setExcludeDirectoryPattern($config[$action . '.exclude_directory_pattern']); if (isset($config[$action . '.include_file_pattern'])) $fileFilter->setIncludeFilePattern($config[$action . '.include_file_pattern']); if (isset($config[$action . '.exclude_file_pattern'])) $fileFilter->setExcludeFilePattern($config[$action . '.exclude_file_pattern']); if (isset($config[$action . '.extensions'])) $fileFilter->setIncludeExtensions($config[$action . '.extensions']); } else return BASIC_FILEFILTER_ACCEPTED; $status = $fileFilter->accept($file); if ($status != BASIC_FILEFILTER_ACCEPTED) { if ($status == BASIC_FILEFILTER_INVALID_NAME) { $this->_invalidFileMsg = "{#error.invalid_filename}"; if ($file->isFile()) { if (isset($config[$action . '.invalid_file_name_msg'])) $this->_invalidFileMsg = $config[$action . '.invalid_file_name_msg']; } else { if (isset($config[$action . '.invalid_directory_name_msg'])) $this->_invalidFileMsg = $config[$action . '.invalid_directory_name_msg']; } } return $status; } return BASIC_FILEFILTER_ACCEPTED; } /** * Returns a file object represtentation of a file path this * will also do security checks agains the list of valid paths * so that file IO can't be done outside the valid paths. * * @param String $path Path to return as File object. * @param String $file_name Optional file name. * @param String $type Optional file type. * @return File File object representation of a file. */ function &getFile($path, $file_name = "", $type = MC_IS_FILE) { $path = utf8_decode($path); $file_name = utf8_decode($file_name); $fs = 'file'; $matches = array(); $oldpath = $path; // Parse out FS if (preg_match('/([a-z]+):\/\/(.+)/', $path, $matches)) { $fs = $matches[1]; $path = $matches[2]; } // Filesystem wasn't found if (!isset($this->_fileSystems[$fs])) { trigger_error($this->getLangItem("error", "no_filesystem", array("path" => $path)), FATAL); die(); } $path = $this->decryptPath($path); $path = $this->removeTrailingSlash($this->toUnixPath($path)); // Verfiy path if no file was returned if ($fs == 'file' && !$this->verifyPath($path)) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } // Validate file name if ($fs == 'file' && $file_name) { if (preg_match('/[\\\\\\/:]+/', $file_name, $matches)) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } } // Get file instance $file = new $this->_fileSystems[$fs]($this, $path, $file_name, $type); // Verfiy path if no file was returned if ($fs == 'file' && !$this->verifyPath($file->getAbsolutePath())) { $log =& $this->getLogger(); if ($log && $log->isDebugEnabled()) $log->debug("Could not access path: " . $path); trigger_error("{#error.no_access}", FATAL); die(); } return $file; } /** * Converts a relative path to absolute path. * * @param string $path Path to convert to absolute. * @param string $basepath Optional base path default to ../. */ function toAbsPath($path, $basepath = false) { $path = $this->toUnixPath($path); if (!$basepath) $basepath = dirname(__FILE__) . "/../"; // Is absolute unix or windows if (substr($path, 0, 1) == '/' || strpos($path, ":") !== false) { // Resolve symlinks $tmp = realpath($path); if ($tmp) $path = $tmp; return $this->toUnixPath($path); } $path = $this->toUnixPath($this->addTrailingSlash($this->toUnixPath(realpath($basepath))) . $path); // Local FS and exists remove any ../../ if (strpos($path, "://") === false && file_exists($path)) $path = $this->toUnixPath(realpath($path)); return $path; } /** * Converts a Unix path to OS specific path. * * @param String $path Unix path to convert. */ function toOSPath($path) { return str_replace("/", DIRECTORY_SEPARATOR, $path); } /** * Converts a OS specific path to Unix path. * * @param String $path OS path to convert to Unix style. */ function toUnixPath($path) { return str_replace(DIRECTORY_SEPARATOR, "/", $path); } /** * Adds a trailing slash to a path. * * @param String path Path to add trailing slash on. * @return String New path with trailing slash. */ function addTrailingSlash($path) { if (strlen($path) > 0 && $path[strlen($path)-1] != '/') $path .= '/'; return $path; } /** * Removes the trailing slash from a path. * * @param String path Path to remove trailing slash from. * @return String New path without trailing slash. */ function removeTrailingSlash($path) { // Is root if ($path == "/") return $path; if ($path == "") return $path; if ($path[strlen($path)-1] == '/') $path = substr($path, 0, strlen($path)-1); return $path; } /** * Adds a new file system bu name. * * @param String $protocol File protocol like zip/ftp etc. * @param String $file_system Name of class to create instances by. */ function registerFileSystem($protocol, $file_system) { $this->_fileSystems[$protocol] = $file_system; } /** * Returns a logger instance. * * @return Logger New logger instance. */ function &getLogger() { if (!$this->_logger) { $log = new Moxiecode_Logger(); $null = null; // PHP why!!! Other languages can return null if (!checkBool($this->getConfigItem("log.enabled"))) return $null; // Set logger options $log->setLevel($this->getConfigItem("log.level", "fatal")); $log->setPath($this->toAbsPath($this->getConfigItem("log.path", "logs"))); $log->setFileName($this->getConfigItem("log.filename", "{level}.log")); $log->setFormat($this->getConfigItem("log.format", "[{time}] [{level}] {message}")); $log->setMaxSize($this->getConfigItem("log.max_size", "100k")); $log->setMaxFiles($this->getConfigItem("log.max_files", "10")); $this->_logger = $log; } return $this->_logger; } // * * * * * * * Private methods function _getRootNames() { $config = $this->getConfig(); $output = array(); $roots = explode(';', $config['filesystem.rootpath']); foreach ($roots as $root) { $rootParts = explode('=', $root); if (count($rootParts) > 1) $output[$rootParts[1]] = $rootParts[0]; else { $output[$rootParts[0]] = basename($root); // If it's root if ($output[$rootParts[0]] == "") $output[$rootParts[0]] = "/"; } } return $output; } /**#@-*/ } ?>filemanager/classes/CorePlugin.php000066600000074416150472616010013255 0ustar00 $val){ if ($val == '..') {array_pop($tmp);} else {array_push($tmp,$val);} } $xpath = implode("/",$tmp); return $xpath; } /** * $Id: CorePlugin.php 618 2008-11-27 16:03:32Z spocke $ * * @package MCManagerCore * @author Moxiecode * @copyright Copyright 2007, Moxiecode Systems AB, All rights reserved. */ // Load local file system require_once($basepath . "FileSystems/LocalFileImpl.php"); require_once($basepath . "FileSystems/RootFileImpl.php"); /** * This plugin contains the Core logic shared between manager products. * * @package MCManagerCore */ class Moxiecode_CorePlugin extends Moxiecode_ManagerPlugin { /**#@+ * @access public */ /** * Constructs a new MCManagerCore instance. */ function Moxiecode_CorePlugin() { } /** * Register file system. */ function onInit(&$man) { $config = $man->getConfig(); // Register local and root file system $man->registerFileSystem('file', isset($config['filesystem']) ? $config['filesystem'] : 'Moxiecode_LocalFileImpl'); $man->registerFileSystem('root', 'Moxiecode_RootFileImpl'); return true; } /** * Gets executed when a RPC command is to be executed. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd RPC Command to be executed. * @param object $input RPC input object data. * @return object Result data from RPC call or null if it should be passed to the next handler in chain. */ function onRPC(&$man, $cmd, $input) { switch ($cmd) { case "deleteFiles": return $this->_deleteFile($man, $input); case "listFiles": return $this->_listFiles($man, $input); case "createDirs": return $this->_createDirs($man, $input); case "getConfig": return $this->_getConfig($man, $input); case "insertFiles": return $this->_insertFiles($man, $input); case "loopBack": return $this->_loopBack($input); case "keepAlive": return $this->_keepAlive($man, $input); } return null; } /** * Gets called when data is streamed to client. This method should setup * HTTP headers, content type etc and simply send out the binary data to the client and the return false * ones that is done. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd Stream command that is to be performed. * @param string $input Array of input arguments. * @return bool true/false if the execution of the event chain should continue. */ function onStream(&$man, $cmd, $input) { $config = $man->getConfig(); // Download stream if ($cmd == "download") { if ($man->verifyPath($input["path"])) { $file =& $man->getFile($input["path"]); $config = $file->getConfig(); if ($man->verifyFile($file, "download") > 0 && $file->exists()) { // Get the mimetype, need to go to ../ parent folder cause... well we have to. //$mimeType = mapMimeTypeFromUrl($file->getAbsolutePath(), "../". $config['stream.mimefile']); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $file->getName() . "\""); // Stream data $stream =& $file->open('rb'); if ($stream) { while (($buff = $stream->read()) != null) echo $buff; $stream->close(); } return false; } } else { header('HTTP/1.0 404 Not found'); header('status: 404 Not found'); echo "Requested resource could not be found. Or access was denied."; die(); } // Do not pass to next return false; } // Normal stream if ($cmd == "streamFile") { if (!$man->verifyPath($input["path"]) < 0) { trigger_error("Path verification failed.", FATAL); die(); } $file = $man->getFile($input["path"]); $config = $file->getConfig(); if (!$file->exists()) { trigger_error("File not found.", FATAL); die(); } else { if (getClassName($file) == 'moxiecode_localfileimpl') { // Redirect to data $url = $man->removeTrailingSlash($config['preview.urlprefix']) . $man->convertPathToURI($file->getParent() . "/" . str_replace("+", "%20", urlencode($file->getName())), $config["preview.wwwroot"]) . $config['preview.urlsuffix']; // Passthrough rnd if (isset($input["rnd"])) $url .= (strpos($url, "?") === false ? "?" : "&") . "rnd=" . $input["rnd"]; header('location: ' . $url); die(); } else { // Verify that we can stream this one if ($man->verifyFile($file, "stream") < 0) { header('HTTP/1.0 404 Not found'); header('status: 404 Not found'); echo "Requested resource could not be found. Or access was denied."; die(); } // Get the mimetype, need to go to ../ parent folder cause... well we have to. $mimeType = mapMimeTypeFromUrl($file->getAbsolutePath(), "../". $config['stream.mimefile']); header("Content-type: " . $mimeType); // Stream data $stream =& $file->open('rb'); if ($stream) { while (($buff = $stream->read()) != null) echo $buff; $stream->close(); } } return false; } } // Devkit commands switch ($cmd) { case "viewServerInfo": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); phpinfo(); break; case "downloadServerInfo": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); // Get all ini settings $data = ini_get_all(); // Setup all headers header("Content-type: text/plain; charset=UTF-8"); header("Content-Disposition: attachment; filename=dump.txt"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); echo "# Config from config.php" . "\r\n\r\n"; foreach ($config as $key => $value) { if (is_bool($value)) echo $key . "=" . ($value ? "true" : "false") . "\r\n"; else echo $key . "=" . $value . "\r\n"; } // Dump INI settings echo "\r\n# PHP INI settings file\r\n\r\n"; foreach ($data as $key => $value) echo $key . "=" . $value['local_value'] . "\r\n"; // Dump function support echo "\r\n# Function check" . "\r\n\r\n"; $functions = array( "ImagecreateFromJpeg", "ImageJpeg", "ImagecreateFromGif", "ImageGif", "ImagecreateFromPng", "ImagePng", "gzdeflate", "gzinflate" ); foreach ($functions as $function) echo $function . "=" . (function_exists($function) ? "ok" : "missing") . "\r\n"; // Dump rootpath access echo "\r\n# Rootpath access" . "\r\n\r\n"; foreach ($man->getRootPaths() as $rootpath) { $stat = stat($rootpath); echo $rootpath . "\r\n"; echo " is_readable=" . (is_readable($rootpath) ? "readable" : "not readable") . "\r\n"; echo " is_writable=" . (is_writable($rootpath) ? "writable" : "not writable") . "\r\n"; foreach ($stat as $key => $value) echo " " . $key . "=" . $value . "\r\n"; } break; case "viewLog": if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); header('Content-type: text/plain'); if ($input['level'] == "debug") echo @file_get_contents("../logs/debug.log"); else echo @file_get_contents("../logs/error.log"); break; case "clearLog": header('Content-type: text/plain'); if (!checkBool($config['general.debug'])) die("You have to enable debugging in config by setting general.debug to true."); if ($input['level'] == "debug") $log = "../logs/debug.log"; else $log = "../logs/error.log"; @unlink($log); for ($i=0; $i<10; $i++) @unlink($log . "." . $i); echo "Logs cleared."; break; } // Pass to next return true; } /** * Gets called when data is streamed/uploaded from client. This method should take care of * any uploaded files and move them to the correct location. * * @param MCManager $man MCManager reference that the plugin is assigned to. * @param string $cmd Upload command that is to be performed. * @param string $input Array of input arguments. * @return object Result object data or null if the event wasn't handled. */ function onUpload(&$man, $cmd, $input) { if ($cmd == "upload") { // Setup response $result = new Moxiecode_ResultSet("status,file,message"); $path = $man->decryptPath($input["path"]); $config = $man->getConfig(); if ($man->verifyPath($path)) { $file =& $man->getFile($path); $config = $file->getConfig(); $maxSizeBytes = preg_replace("/[^0-9]/", "", $config["upload.maxsize"]); if (strpos((strtolower($config["upload.maxsize"])), "k") > 0) $maxSizeBytes *= 1024; if (strpos((strtolower($config["upload.maxsize"])), "m") > 0) $maxSizeBytes *= (1024 * 1024); // Is chunked upload if (isset($input["chunk"])) { $filename = $input["name"]; $chunk = intval($input["chunk"]); $chunks = intval($input["chunks"]); // No access, tool disabled if (in_array("upload", explode(',', $config['general.disabled_tools'])) || !$file->canWrite() || !checkBool($config["filesystem.writable"])) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); return $result; } $file =& $man->getFile($path, $filename, MC_IS_FILE); if ($man->verifyFile($file, "upload") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result; } // Hack attempt if ($filename == $config['filesystem.local.access_file_name']) { $result->add("MCACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); return $result; } // Only peform IO when not in demo mode if (!checkBool($config['general.demo'])) { if ($chunk == 0 && $file->exists() && (!isset($config["upload.overwrite"]) || $config["upload.overwrite"] == false)) { $result->add("OVERWRITE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.file_exists}"); return $result; } if ($chunk == 0 && $file->exists() && $config["upload.overwrite"] == true) $file->delete(); // Write file $stream =& $file->open($chunk == 0 ? 'wb' : 'ab'); if ($stream) { $in = fopen("php://input", "rb"); if ($in) { while ($buff = fread($in, 4096)) $stream->write($buff); } $stream->close(); } // Check file size if ($file->getLength() > $maxSizeBytes) { $file->delete(); $result->add("SIZE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.error_to_large}"); return $result; } // Verify uploaded file, if it fails delete it $status = $man->verifyFile($file, "upload"); if ($status < 0) { $file->delete(); $result->add("FILTER_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); return $result; } // Import file when all chunks are complete if ($chunk == $chunks - 1) { clearstatcache(); debug($chunk, $chunks, filesize($file->getAbsolutePath()), $chunk == 0 ? 'wb' : 'ab'); $file->importFile(); } } $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.upload_ok}"); return $result; } else { // Ok lets check the files array out. for ($i=0; isset($_FILES['file' . $i]['tmp_name']); $i++) { $filename = utf8_encode($input["name" . $i]); // Do nothing in demo mode if (checkBool($config['general.demo'])) { $result->add("DEMO_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.demo}"); continue; } // No access, tool disabled if (in_array("upload", explode(',', $config['general.disabled_tools'])) || !$file->canWrite() || !checkBool($config["filesystem.writable"])) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); continue; } // Get ext to glue back on $ext = ""; if (strpos(basename($_FILES['file' . $i]['name']), ".") > 0) { $ar = explode('.', basename($_FILES['file' . $i]['name'])); $ext = array_pop($ar); } $file =& $man->getFile($path, $filename . "." . $ext, "", MC_IS_FILE); if ($man->verifyFile($file, "upload") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } $config = $file->getConfig(); if (is_uploaded_file($_FILES['file' . $i]['tmp_name'])) { // Hack attempt if ($filename == $config['filesystem.local.access_file_name']) { @unlink($_FILES['file' . $i]['tmp_name']); $result->add("MCACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.no_access}"); continue; } if ($file->exists() && (!isset($config["upload.overwrite"]) || $config["upload.overwrite"] == false)) { @unlink($_FILES['file' . $i]['tmp_name']); $result->add("OVERWRITE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.file_exists}"); continue; } if ($file->exists() && $config["upload.overwrite"] == true) $file->delete(); if (getClassName($file) == 'moxiecode_localfileimpl') { if (!move_uploaded_file($_FILES['file' . $i]['tmp_name'], $file->getAbsolutePath())) { $result->add("RW_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.upload_failed}"); continue; } // Dispatch add event $file->importFile(); } else $file->importFile($_FILES['file' . $i]['tmp_name']); if ($file->getLength() > $maxSizeBytes) { $file->delete(); $result->add("SIZE_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.error_to_large}"); continue; } // Verify uploaded file, if it fails delete it $status = $man->verifyFile($file, "upload"); if ($status < 0) { $file->delete(); $result->add("FILTER_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.upload_ok}"); } else $result->add("GENERAL_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.upload_failed}"); } } } else $result->add("PATH_ERROR", $man->encryptPath($path), "{#error.upload_failed}"); return $result; } } // * * * * * * * * Private methods function _deleteFile(&$man, &$input) { $result = new Moxiecode_ResultSet("status,file,message"); for ($i=0; isset($input["path" . $i]); $i++) { $file =& $man->getFile($input["path" . $i]); $config = $file->getConfig(); if (checkBool($config['general.demo'])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.demo}"); continue; } if (!$man->isToolEnabled("delete", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } if (!$file->exists()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.file_not_exists}"); continue; } if ($man->verifyFile($file, "delete") < 0) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } if (!$file->canWrite()) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } if (!checkBool($config["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } if ($file->delete($config['filesystem.delete_recursive'])) $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.delete_success}"); else $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.delete_failed}"); } return $result->toArray(); } function _insertFiles(&$man, $input) { $result = new Moxiecode_ResultSet("name,path,url,size,type,created,modified,attribs,custom"); $indata = array(); for ($i=0; isset($input['path' . $i]); $i++) { $custom = array(); $file = $man->getFile($input["path". $i]); if (!$file->exists()) { trigger_error("{#error.file_not_exists}", FATAL); die; } $ar = explode('.', $file->getName()); $ext = array_pop($ar); $man->dispatchEvent("onCustomInfo", array(&$file, "insert", &$custom)); $status = $man->dispatchEvent("onInsertFile", array(&$file)); $config = $file->getConfig(); $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $url = $man->removeTrailingSlash($config['preview.urlprefix']) . $man->convertPathToURI($file->getAbsolutePath(), $config["preview.wwwroot"]); $result->add($file->getName(), $man->encryptPath($file->getAbsolutePath()), utf8_encode($url), $file->getLength(), $ext, $file->getCreationDate(), $file->getLastModified(), $attribs, $custom); } return $result->toArray(); } function _listDefault(&$man, $file, $input, &$result, $filter_root_path) { $config = $man->getConfig(); // Setup input file filter $inputFileFilter = new Moxiecode_BasicFileFilter(); if (isset($input['include_directory_pattern']) && $input['include_directory_pattern']) $inputFileFilter->setIncludeDirectoryPattern($input['include_directory_pattern']); if (isset($input['exclude_directory_pattern']) && $input['exclude_directory_pattern']) $inputFileFilter->setExcludeDirectoryPattern($input['exclude_directory_pattern']); if (isset($input['include_file_pattern']) && $input['include_file_pattern']) $inputFileFilter->setIncludeFilePattern($input['include_file_pattern']); if (isset($input['exclude_file_pattern']) && $input['exclude_file_pattern']) $inputFileFilter->setExcludeFilePattern($input['exclude_file_pattern']); if (isset($input['extensions']) && $input['extensions']) $inputFileFilter->setIncludeExtensions($input['extensions']); // If file doesn't exists use default path if (!$file->exists()) { $file = $man->getFile($config['filesystem.path']); $result->setHeader("path", $man->encryptPath($file->getAbsolutePath())); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($file->getAbsolutePath()) : $man->encryptPath($file->getAbsolutePath())); } // List files $config = $file->getConfig(); if ($file->isDirectory()) { // Setup file filter $fileFilter = new Moxiecode_BasicFileFilter(); //$fileFilter->setDebugMode(true); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); // If file is hidden then try the parent if ($fileFilter->accept($file) <= 0) { $file = $file->getParentFile(); $result->setHeader("path", $man->encryptPath($file->getAbsolutePath())); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($file->getAbsolutePath()) : $man->encryptPath($file->getAbsolutePath())); } if (isset($input["filter"]) && $input["filter"] != null) $fileFilter->setIncludeWildcardPattern($input["filter"]); if (isset($input["only_dirs"]) && checkBool($input["only_dirs"])) $fileFilter->setOnlyDirs(true); else if (!checkBool($config["filesystem.list_directories"], true) || (isset($input["only_files"]) && checkBool($input["only_files"]))) $fileFilter->setOnlyFiles(true); // List files $combinedFilter = new Moxiecode_CombinedFileFilter(); $combinedFilter->addFilter($fileFilter); $combinedFilter->addFilter($inputFileFilter); $files =& $file->listFilesFiltered($combinedFilter); $showparent = isset($input["no_parent"]) ? checkBool($input["no_parent"]) : true; $showparent = $showparent && $man->verifyPath($file->getParent()); if (!isset($input["only_dirs"])) $showparent = $showparent && checkBool($config["filesystem.list_directories"], true); // Add parent if ($showparent && !isset($input["only_files"])) { // Remove files below root if ($filter_root_path && getClassName($file) == 'moxiecode_localfileimpl') { if (!$man->isChildPath($filter_root_path, $file->getParent())) return $files; } if ($file->getAbsolutePath() != $filter_root_path) $result->add("..", $man->encryptPath($file->getParent()), -1, "parent", "", "", "", array()); } } else trigger_error("The specified path is not a directory. Probably an incorrect setting for the filesystem.rootpath option.", FATAL); return $files; } /** * Lists files. */ function _listFiles(&$man, $input) { $result = new Moxiecode_ResultSet("name,path,size,type,created,modified,attribs,custom"); $config = $man->getConfig(); $files = array(); $rootNames = $man->_getRootNames(); if (isset($input["path"]) && $input["path"]) { // URL specified if (isset($input["url"]) && $input["path"] == '{default}') $input["path"] = $man->convertURIToPath($input["url"]); if (isset($input['remember_last_path'])) { if ($input['remember_last_path'] !== 'auto') $remember = checkBool($input['remember_last_path']); else $remember = checkBool($config['general.remember_last_path']); if ($remember) { if (isset($_COOKIE["MCManager_". $man->getType() . "_lastPath"]) && $input["path"] == '{default}') { $tmpPath = $_COOKIE["MCManager_". $man->getType() . "_lastPath"]; if ($man->getFSFromPath($tmpPath) == "file" && $tmpPath) $input["path"] = $tmpPath; } else { if ($man->getFSFromPath($input["path"]) == "file") setcookie("MCManager_". $man->getType() . "_lastPath", $input["path"], time() + (3600*24*30)); // 30 days } } } $input["path"] = $man->toAbsPath($man->decryptPath($input["path"])); $input["path"] = normalizePath($input['path']); $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"]) : $man->encryptPath($input["path"])); // Move path inside rootpath if it's localfs if ($filterRootPath && $man->getFSFromPath($input["path"]) == 'file') { if (!$man->isChildPath($filterRootPath, $input["path"])) $input["path"] = $filterRootPath; $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"], $filterRootPath) : $man->encryptPath($input["path"])); } // Not valid path use default path if ($man->getFSFromPath($input["path"]) == 'file' && !$man->verifyPath($input["path"])) { $input["path"] = $config['filesystem.path']; $result->setHeader("path", $man->encryptPath($input["path"])); $result->setHeader("visual_path", checkBool($config['general.user_friendly_paths']) ? $man->toVisualPath($input["path"]) : $man->encryptPath($input["path"])); } $file =& $man->getFile($input["path"]); $config = $file->getConfig(); $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $result->setHeader("attribs", $attribs); $files = $this->_listDefault($man, $file, $input, $result, $filterRootPath); } else { trigger_error("ListFiles input not valid.", FATAL); die(); } if (isset($input["page_size"])) { if ($file->getAbsolutePath() != $filterRootPath && $man->verifyPath($file->getParent())) $pageSize = $input["page_size"] - 1; else $pageSize = $input["page_size"]; $pages = ceil(count($files) / $pageSize); // Setup response $result->setHeader("pages", $pages > 1 ? $pages : 1); $result->setHeader("count", count($files)); if (!isset($input["page"])) $input["page"] = 0; // Remove non visible files $files = array_slice($files, ($input["page"] * $pageSize), $pageSize); } // Add directories $listFS = $man->getFSFromPath($input["path"]); foreach ($files as $file) { // Remove files below root if ($filterRootPath && $listFS == 'file') { if (!$man->isChildPath($filterRootPath, $file->getAbsolutePath())) continue; } // Setup fields $custom = array(); // Attribs: R = Read, W = Write (cut/delete/rename), D = Download, S = Stream/Preview, I = Insert $attribs = ($file->canRead() && checkBool($config["filesystem.readable"]) ? "R" : "-") . ($file->canWrite() && checkBool($config["filesystem.writable"]) ? "W" : "-"); $cdate = date($config['filesystem.datefmt'], $file->getCreationDate()); $mdate = date($config['filesystem.datefmt'], $file->getLastModified()); $filePath = $man->encryptPath($file->getAbsolutePath()); if ($file->isFile()) $type = getFileExt($file->getName()); else $type = "folder"; $man->dispatchEvent("onCustomInfo", array(&$file, "list", &$custom)); // Special treatment of roots $name = $file->getName(); if ($input["path"] == "root:///") { foreach ($rootNames as $rootPath => $rootName) { if ($file->getAbsolutePath() == $rootPath) { $name = $rootName; break; } } } $result->add(utf8_encode($name), $filePath, $file->isFile() ? $file->getLength() : -1, $type, $cdate, $mdate, $attribs, $custom); } if (isset($input["config"])) $result->setConfig($man->getJSConfig($config, $input["config"])); return $result->toArray(); } function _filterFile(&$file, $input) { $config = $file->getConfig(); // Setup file filter $fileFilter = new Moxiecode_BasicFileFilter(); //$fileFilter->setDebugMode(true); $fileFilter->setIncludeDirectoryPattern($config['filesystem.include_directory_pattern']); $fileFilter->setExcludeDirectoryPattern($config['filesystem.exclude_directory_pattern']); $fileFilter->setIncludeFilePattern($config['filesystem.include_file_pattern']); $fileFilter->setExcludeFilePattern($config['filesystem.exclude_file_pattern']); $fileFilter->setIncludeExtensions($config['filesystem.extensions']); if (isset($input["only_dirs"]) && checkBool($input["only_dirs"])) $fileFilter->setOnlyDirs(true); return ($fileFilter->accept($file) > 0); } function _createDirs(&$man, $input) { $result = new Moxiecode_ResultSet("status,file,message"); // Get input data $path = $man->decryptPath($input['path']); $dir =& $man->getFile($path); $config = $dir->getConfig(); if (checkBool($config["general.demo"])) { $result->add("DEMO_ERROR", $man->encryptPath($dir->getAbsolutePath()), "{#error.demo}"); return $result->toArray(); } if (!$man->isToolEnabled("createdir", $config)) { trigger_error("{#error.no_access}", FATAL); die(); } for ($i=0; isset($input['name' . $i]); $i++) { // Get dir info $name = $input['name' . $i]; $template = false; if (isset($input['template' . $i])) $template = $man->decryptPath($input['template' . $i]); // Setup target file $file =& $man->getFile($path, $name, MC_IS_DIRECTORY); if ($man->verifyFile($file, "createdir") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } // Check write access if (!checkBool($config["filesystem.writable"])) { $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); continue; } // Setup template dir if ($template) { $templateFile =& $man->getFile($template, "", MC_IS_DIRECTORY); if (!$templateFile->exists()) { $result->add("TEMPLATE_ERROR", $man->encryptPath($templateFile->getAbsolutePath()), "{#error.template_missing}"); continue; } if ($man->verifyFile($templateFile, "createdir") < 0) { $result->add("ACCESS_ERROR", $man->encryptPath($file->getAbsolutePath()), $man->getInvalidFileMsg()); continue; } } else $templateFile = null; // Check if target exists if ($file->exists()) { $result->add("EXISTS_ERROR", $man->encryptPath($file->getAbsolutePath()), "{#error.folder_exists}"); continue; } // Create directory if ($templateFile) $status = $templateFile->copyTo($file); else $status = $file->mkdir(); if ($status) $result->add("OK", $man->encryptPath($file->getAbsolutePath()), "{#message.directory_ok}"); else $result->add("FAILED", $man->encryptPath($file->getAbsolutePath()), "{#error.no_write_access}"); } return $result->toArray(); } function _getConfig(&$man, $input) { $globalConfig = $man->getConfig(); if (!isset($input['prefixes'])) $input["prefixes"] = "*"; // If debug mode return all if (!isset($input['path']) && isset($input['debug']) && checkBool($globalConfig['general.debug'])) return $man->getConfig(); if (!isset($input['path'])) { trigger_error("{#error.file_not_exists}", FATAL); die; } $file =& $man->getFile($input['path']); if (!$file->exists()) { trigger_error("{#error.file_not_exists}", FATAL); die; } $config = $file->getConfig(); // If debug mode return all if (isset($input['debug']) && checkBool($globalConfig['general.debug'])) return $config; return $man->getJSConfig($config, $input["prefixes"]); } /** * Simple keepalive function. */ function _keepAlive(&$man, $input) { $result = new Moxiecode_ResultSet("status,time,message"); $man->dispatchEvent("onKeepAlive"); // Return status KEEPALIVE, current time on server and message. $result->add("KEEPALIVE", time(), "{#message.keepalive}"); return $result->toArray(); } /** * Simple loopback function. Used for debugging purposes of the RPC functionality. */ function _loopBack($input) { return $input; } /**#@-*/ } // Add plugin to MCManager $man->registerPlugin("core", new Moxiecode_CorePlugin()); ?>filemanager/classes/Utils/LanguagePack.php000066600000021437150472616010014623 0ustar00_header = array(); $this->_items = array(); $this->_cdataArr = array(); $this->_currentTarget = ""; $this->_currentLanguage = "en"; $this->_currentDir = "ltr"; $this->_header["major"] = 0; $this->_header["minor"] = 1; $this->_header["releasedate"] = date("Y-m-d"); } function setLanguage($language) { $this->_currentLanguage = $language; } function getLanguage() { return $this->_currentLanguage; } /* Loads XML string */ function loadXML($data) { // Check encoding on data preg_match('//m', $data, $matches); $encoding = "UTF-8"; // Found XML encoding if (count($matches) > 1) $encoding = strtoupper($matches[1]); $this->_encoding = $encoding; // OMG! PHP Xpath is crappy, cant detect CDATA, haxx! $data = preg_replace("/<\!\[CDATA\[/", "_parser = xml_parser_create($encoding); // Auto detect for PHP4/PHP5 xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_set_character_data_handler($this->_parser, "_saxCharacterData"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if (!xml_parse($this->_parser, $data, true)) trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), E_USER_ERROR); xml_parser_free($this->_parser); } /* Loads XML file */ function load($file) { if (($fp = @fopen($file, "r"))) { $data = ''; while (!feof($fp)) $data .= fread($fp, 8192); fclose($fp); if (ini_get("magic_quotes_gpc")) $data = stripslashes($data); $this->loadXML($data); } else trigger_error("Could not open XML: ". $file, E_USER_ERROR); } function save($file, $enc="UTF-8") { if (($fp = @fopen($file, "w"))) { fwrite($fp, $this->toString($enc)); fclose($fp); } else trigger_error("Could not open XML for writing: ". $file, E_USER_ERROR); } function getGroups() { return $this->_items[$this->_currentLanguage]["data"]; } function setGroups($groups) { $this->_items[$this->_currentLanguage]["data"] = $groups; } function getGroup($name) { return $this->_items[$this->_currentLanguage]["data"][$name]; } function get($target, $name) { return isset($this->_items[$this->_currentLanguage]["data"][$target][$name]) ? $this->_items[$this->_currentLanguage]["data"][$target][$name] : ("$" . $name . "$"); } function set($target, $name, $value, $cdata = 3) { if ($cdata != 3) { if (!isset($this->_cdataArr[$this->_currentLanguage])) $this->_cdataArr[$this->_currentLanguage] = array(); if (!isset($this->_cdataArr[$this->_currentLanguage][$target])) $this->_cdataArr[$this->_currentLanguage][$target] = array(); $this->_cdataArr[$this->_currentLanguage][$target][$name] = $cdata; } if (!isset($this->_items[$this->_currentLanguage]["data"][$target])) $this->_items[$this->_currentLanguage]["data"][$target] = array(); $this->_items[$this->_currentLanguage]["data"][$target][$name] = $value; } function getLanguageTitle() { return $this->_items[$this->_currentLanguage]["title"]; } function setAuthor($author) { $this->_header["author"] = $author; } function getAuthor() { return $this->_header["author"]; } function setVersion($major, $minor, $releasedate) { $this->_header["major"] = $major; $this->_header["minor"] = $minor; $this->_header["releasedate"] = $releasedate; } function getMinor() { return $this->_header["minor"]; } function getMajor() { return $this->_header["major"]; } function getReleaseDate() { return $this->_header["releasedate"]; } function getDescription() { return $this->_header["description"]; } function setDescription($description) { $this->_header["description"] = $description; } function createLanguage($lang, $dir, $title) { $this->_currentLanguage = $lang; $this->_items[$lang] = array("dir" => $dir, "title" => $title, "data" => array()); } function updateLanguage($target, $lang, $dir, $title) { $this->_currentLanguage = $lang; $this->_items[$lang] = $this->_items[$target]; unset($this->_items[$target]); $this->_items[$lang]["dir"] = $dir; $this->_items[$lang]["title"] = $title; $this->_cdataArr[$lang] = $this->_cdataArr[$target]; unset($this->_cdataArr[$target]); } // * * Private methods function _saxStartElement($parser, $name, $attrs) { $this->_tag = $name; $this->_tagAttrs = $attrs; $this->_tagContent = ""; switch($name) { case "LANGUAGE": $this->_currentLanguage = $this->_tagAttrs["CODE"]; $this->_currentDir = $this->_tagAttrs["DIR"]; $this->_items[$this->_currentLanguage] = array("dir" => $this->_currentDir, "title" => $this->_tagAttrs["TITLE"], "data" => array()); break; case "GROUP": $this->_currentTarget = $this->_tagAttrs["TARGET"]; $this->_items[$this->_currentLanguage]["data"][$this->_tagAttrs["TARGET"]] = array(); break; } } function _saxEndElement($parser, $name) { preg_match('/^#CDATA#/', $this->_tagContent, $matches); $this->_tagContent = preg_replace("/^#CDATA#/", "", $this->_tagContent); if (count($matches) == 0) $this->_tagContent = trim($this->_tagContent); switch($name) { case "ITEM": if (count($matches) != 0) { if (!isset($this->_cdataArr[$this->_currentLanguage])) $this->_cdataArr[$this->_currentLanguage] = array(); if (!isset($this->_cdataArr[$this->_currentLanguage][$this->_currentTarget])) $this->_cdataArr[$this->_currentLanguage][$this->_currentTarget] = array(); $this->_cdataArr[$this->_currentLanguage][$this->_currentTarget][$this->_tagAttrs["NAME"]] = true; } $this->_items[$this->_currentLanguage]["data"][$this->_currentTarget][$this->_tagAttrs["NAME"]] = $this->_tagContent; break; case "AUTHOR": $this->_header["author"] = $this->_tagContent; break; case "VERSION": $this->_header["minor"] = trim($this->_tagAttrs["MINOR"]); $this->_header["major"] = trim($this->_tagAttrs["MAJOR"]); $this->_header["releasedate"] = trim($this->_tagAttrs["RELEASEDATE"]); break; case "DESCRIPTION": $this->_header["description"] = $this->_tagContent; break; } // Clear memory! $this->_tagContent = ""; $this->_tag = ""; $this->_tagAttrs = ""; } function _saxCharacterData($parser, $data) { $this->_tagContent .= $data; } function xmlEncode($str) { if (strtolower($this->_encoding) == "utf-8") return utf8_encode(htmlspecialchars($str, ENT_QUOTES, $this->_encoding)); return htmlspecialchars($str, ENT_QUOTES, $this->_encoding); } function toString($enc = "") { $oldenc = ""; if ($enc == "") $enc = $this->_encoding; else { $oldenc = $this->_encoding; $this->_encoding = $enc; } $doc = ""; $doc .= ''. "\n"; $doc .= ''. "\n"; $doc .= '
        '. "\n"; $doc .= ' '. $this->xmlEncode($this->_header["author"]) .''. "\n"; $doc .= ' '. "\n"; $doc .= ' '. $this->xmlEncode($this->_header["description"]) .''. "\n"; $doc .= '
        '. "\n"; foreach($this->_items as $code => $language) { $doc .= ' '. "\n"; foreach($language["data"] as $target => $group) { $doc .= ' '. "\n"; foreach($group as $name => $item) { if (isset($this->_cdataArr[$code]) && isset($this->_cdataArr[$code][$target]) && isset($this->_cdataArr[$code][$target][$name]) && $this->_cdataArr[$code][$target][$name]) { $doc .= ' '. "\n"; } else $doc .= ' '. $this->xmlEncode($item) .''. "\n"; } $doc .= ' '. "\n"; } $doc .= ' '. "\n"; } $doc .= '
        '. "\n"; if ($oldenc != "") $this->_encoding = $oldenc; return $doc; } } ?>filemanager/classes/Utils/Error.php000066600000016367150472616010013400 0ustar00id = $id; } function handleError($errno, $errstr, $errfile, $errline, $errcontext) { global $man; $error = array(); $log = false; $error['title'] = ""; $error['break'] = false; $error['errstr'] = $errstr; //$error['errcontext'] = $errcontext; $error['errcontext'] = ""; $error['errfile'] = ""; $error['errline'] = ""; // Add file and line only in debug mode if (isset($man)) { $mcConfig = $man->getConfig(); $log = $man->getLogger(); if (checkBool($mcConfig['general.debug'])) { $error['errfile'] = $errfile; $error['errline'] = $errline; } } switch ($errno) { case E_USER_ERROR: $error['title'] = "Fatal Error"; $error['break'] = true; break; case E_USER_NOTICE: $error['title'] = "Notice"; $error['break'] = false; break; case E_USER_WARNING: $error['title'] = "Warning"; $error['break'] = true; break; case E_PARSE: $error['title'] = "PHP Parse Error"; $error['break'] = true; if ($log) $log->fatal($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_ERROR: $error['title'] = "PHP Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_WARNING: $error['title'] = "PHP Warning"; $error['break'] = false; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_CORE_ERROR: $error['title'] = "PHP Error : Core Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_CORE_WARNING: $error['title'] = "PHP Error : Core Warning"; $error['break'] = true; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_COMPILE_ERROR: $error['title'] = "PHP Error : Compile Error"; $error['break'] = true; if ($log) $log->error($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_COMPILE_WARNING: $error['title'] = "PHP Error : Compile Warning"; $error['break'] = true; if ($log) $log->warn($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_NOTICE: $error['title'] = "PHP Notice"; $error['break'] = false; if ($log) $log->info($error['title'] . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; case E_STRICT: $error['title'] = "PHP Strict"; $error['break'] = false; if ($log) $log->info($error['title'] . " (" . $errno . ")" . ", Msg: " . $error['errstr'] . " in " . $error['errfile'] . "(" . $error['errline'] . ")"); break; } // Add error number $error['title'] = $error['title'] . " (". $errno .")"; return $error; } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function JSONErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { unset($data['break']); unset($data['title']); $data['level'] = "FATAL"; $json = new Moxiecode_JSON(); $result = new stdClass(); $result->result = null; $result->id = 'err'; $result->error = $data; echo $json->encode($result); die(); } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function JSErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { echo 'alert(\'' . addslashes($data['errstr']) . '\');'; die(); } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function StreamErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { if ($_SERVER["REQUEST_METHOD"] == "GET") { header("HTTP/1.1 500 Internal server error"); die($errstr); } else { unset($data['break']); unset($data['title']); $data['level'] = "FATAL"; $json = new Moxiecode_JSON(); $result = new stdClass(); $result->result = null; $result->id = 'err'; $result->error = $data; echo ''; die(); } } } /** * Calls the MCError class, returns true. * * @param Int $errno Number of the error. * @param String $errstr Error message. * @param String $errfile The file the error occured in. * @param String $errline The line in the file where error occured. * @param Array $errcontext Error context array, contains all variables. * @return Bool Just return true for now. */ function HTMLErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { global $MCErrorHandler; // Ignore these if ($errno == E_STRICT) return true; // Just pass it through to the class. $data = $MCErrorHandler->handleError($errno, $errstr, $errfile, $errline, $errcontext); if ($data['break']) { die($errstr); } } ?>filemanager/classes/Utils/ClientResources.php000066600000006443150472616010015412 0ustar00_settings = array_merge($default, $settings); $this->_files = array(); } function isDebugEnabled() { return $this->_debug; } function getSetting($name, $default = false) { return isset($this->_settings["name"]) ? $this->_settings["name"] : $default; } function getPackageIDs() { return array_keys($this->_files); } function &getFile($package, $file_id) { $files = $this->getFiles($package); foreach ($files as $file) { if ($file->getId() == $file_id) return $file; } return null; } function getFiles($package) { return isset($this->_files[$package]) ? $this->_files[$package] : array(); } function load($xml_file) { $this->_path = dirname($xml_file); if (!file_exists($xml_file)) return; $fp = @fopen($xml_file, "r"); if ($fp) { $data = ''; while (!feof($fp)) $data .= fread($fp, 8192); fclose($fp); if (ini_get("magic_quotes_gpc")) $data = stripslashes($data); } $this->_parser = xml_parser_create('UTF-8'); xml_set_object($this->_parser, $this); xml_set_element_handler($this->_parser, "_saxStartElement", "_saxEndElement"); xml_parser_set_option($this->_parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); if (!xml_parse($this->_parser, $data, true)) trigger_error(sprintf("Language pack loading failed, XML error: %s at line %d.", xml_error_string(xml_get_error_code($this->_parser)), xml_get_current_line_number($this->_parser)), E_USER_ERROR); xml_parser_free($this->_parser); } // * * Private methods function _saxStartElement($parser, $name, $attrs) { switch ($name) { case "RESOURCES": if (!$this->_debug) $this->_debug = isset($attrs["DEBUG"]) && $attrs["DEBUG"] == 'yes'; break; case "PACKAGE": $this->_packageID = isset($attrs["ID"]) ? $attrs["ID"] : 'noid'; if (!isset($this->_files[$this->_packageID])) $this->_files[$this->_packageID] = array(); break; case "FILE": $this->_files[$this->_packageID][] = new Moxiecode_ClientResourceFile( isset($attrs["ID"]) ? $attrs["ID"] : "", str_replace("\\", DIRECTORY_SEPARATOR, $this->_path . '/' . $attrs["PATH"]), !isset($attrs["KEEPWHITESPACE"]) || $attrs["KEEPWHITESPACE"] != "yes", isset($attrs["TYPE"]) ? $attrs["TYPE"] : '' ); break; } } function _saxEndElement($parser, $name) { } } class Moxiecode_ClientResourceFile { /**#@+ @access private */ var $_id, $_contentType, $_path, $_remove_whitespace; /**#@-*/ function Moxiecode_ClientResourceFile($id, $path, $remove_whitespace, $content_type) { $this->_id = $id; $this->_path = $path; $this->_remove_whitespace = $remove_whitespace; $this->_contentType = $content_type; } function isRemoveWhitespaceEnabled() { return $this->_remove_whitespace; } function getId() { return $this->_id; } function getContentType() { return $this->_contentType; } function getPath() { return $this->_path; } } ?>filemanager/classes/Utils/JSCompressor.php000066600000017337150472616010014676 0ustar00_items = array(); $default = array( 'expires_offset' => '10d', 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'patch_ie' => true, 'remove_firebug' => false, 'name' => '' ); $this->_settings = array_merge($default, $settings); $this->_lastUpdate = 0; } /** * Add raw contents as part of the concatenation/compression. This method should only be used if * you really need to. * * @param String $content Content to add as part of the concatenation process. */ function addContent($content) { $this->_items[] = array('content', $content); } /** * Adds a file to the concatenation/compression process. * * @param String $path Path to the file to include in the compressed package/output. * @param bool $whitespace Set this state to false to skip whitespace removal for the specified file. */ function addFile($path, $whitespace = true) { $this->_items[] = array('file', $path, $whitespace); $mtime = @filemtime($path); if ($mtime > $this->_lastUpdate) $this->_lastUpdate = $mtime; } /** * Compress and output all files that got added to the process by addFile. */ function compress() { $key = ""; foreach ($this->_items as $item) $key .= $item[1]; // Setup some variables $cacheFile = $this->_settings['cache_dir'] . "/"; if ($this->_settings['name']) $cacheFile .= preg_replace('/[^a-z0-9_]/i', '', $this->_settings['name']); else $cacheFile .= md5($key); $supportsGzip = false; $content = ""; $encodings = array(); // Check if it supports gzip if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING']))); if ($this->_settings['gzip_compress'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('gzencode') && !ini_get('zlib.output_compression')) { $enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip"; $supportsGzip = true; $cacheFile .= ".gz"; } else $cacheFile .= ".js"; // Set headers header("Content-type: text/javascript;charset=" . $this->_settings['charset']); header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $this->_parseTime($this->_settings['expires_offset'])) . " GMT"); header("Cache-Control: public, max-age=" . $this->_parseTime($this->_settings['expires_offset'])); // Output explorer workaround or compressed file if (!isset($_GET["gz"]) && $supportsGzip && $this->_settings['patch_ie'] && strpos($_SERVER["HTTP_USER_AGENT"], "MSIE") !== false) { // Build request URL $url = $_SERVER["PHP_SELF"]; if (isset($_SERVER["QUERY_STRING"]) && $_SERVER["QUERY_STRING"]) $url .= "?" . $_SERVER["QUERY_STRING"] . "&gz=1"; else $url .= "?gz=1"; // This script will ensure that the gzipped script gets loaded on IE versions with the Gzip request chunk bug echo 'var gz;try {gz = new XMLHttpRequest();} catch(gz) { try {gz = new ActiveXObject("Microsoft.XMLHTTP");}'; echo 'catch (gz) {gz = new ActiveXObject("Msxml2.XMLHTTP");}}'; echo 'gz.open("GET", "' . $url . '", false);gz.send(null);eval(gz.responseText);'; die(); } // Use cached file if ($this->_settings['disk_cache'] && file_exists($cacheFile) && @filemtime($cacheFile) == $this->_lastUpdate) { if ($supportsGzip) header("Content-Encoding: " . $enc); echo $this->_getFileContents($cacheFile); return; } // Load content foreach ($this->_items as $item) { if ($item[0] == 'file') $chunk = $this->_getFileContents($item[1]); else $chunk = $item[1]; // Remove UTF-8 BOM if (substr($chunk, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) $chunk = substr($chunk, 3); if ($this->_settings['remove_whitespace'] && $item[2]) $chunk = $this->_removeWhiteSpace($chunk); if (!$item[2]) $chunk = "\n" . $chunk . ";\n"; $content .= $chunk; } // Remove firebug calls if ($this->_settings['remove_firebug']) $content = preg_replace('/console\\.[^;]+;/', '', $content); // GZip content if ($supportsGzip) { header("Content-Encoding: " . $enc); $content = gzencode($content, 9, FORCE_GZIP); } // Write cache file if ($this->_settings['disk_cache']) { if (!is_dir($this->_settings['cache_dir'])) @mkdir($this->_settings['cache_dir']); $this->_putFileContents($cacheFile, $content); if (@file_exists($cacheFile)) @touch($cacheFile, $this->_lastUpdate); } // Output content to client echo $content; } /**#@+ @access private */ function _removeWhiteSpace($content) { $this->_strings = array(); $this->_count = 0; // Replace strings and regexps $content = preg_replace_callback('/\\\\(\"|\'|\\/)/', array(&$this, '_encode'), $content); // Replace all \/, \", \' with tokens $content = preg_replace_callback('/(\'[^\'\\n\\r]*\')|("[^"\\n\\r]*")|(\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?))|([^\\w\\x24\\/\'"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', array(&$this, '_strToItems'), $content); // Remove comments $content = preg_replace('/(\\/\\/[^\\n\\r]*[\\n\\r])|(\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/)/', '', $content); // Remove whitespace $content = preg_replace('/[\r\n]+/', ' ', $content); $content = preg_replace('/\s*([=&|!+\\-\\/?:;,\\^\\(\\)\\{\\}<>%]+)\s*/', '$1', $content); $content = preg_replace('/(;)\s+/', '$1', $content); $content = preg_replace('/\s+/', ' ', $content); // Restore strings and regexps $content = preg_replace_callback('/@([^]+)/', array(&$this, '_itemsToStr'), $content); $content = preg_replace_callback('/#([^]+)/', array(&$this, '_decode'), $content); // Restore all \/, \", \' return $content; } function _putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } function _getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fread($fp, 1024); fclose($fp); return $content; } function _strToItems($matches) { $this->_strings[] = $matches[0]; return '@' . ($this->_count++) . ''; } function _itemsToStr($matches) { return $this->_strings[intval($matches[1])]; } function _encode($matches) { $this->_strings[] = $matches[0]; return '#' . ($this->_count++) . ''; } function _decode($matches) { return $this->_strings[intval($matches[1])]; } function _parseTime($time) { $multipel = 1; // Hours if (strpos($time, "h") != false) $multipel = 60 * 60; // Days if (strpos($time, "d") != false) $multipel = 24 * 60 * 60; // Months if (strpos($time, "m") != false) $multipel = 24 * 60 * 60 * 30; // Trim string return intval($time) * $multipel; } /**#@-*/ } ?>filemanager/classes/Utils/Logger.class.php000066600000012531150472616010014617 0ustar00_path = ""; $this->_filename = "{level}.log"; $this->setMaxSize("100k"); $this->_maxFiles = 10; $this->_level = MC_LOGGER_DEBUG; $this->_format = "[{time}] [{level}] {message}"; } /** * Sets the current log level, use the MC_LOGGER constants. * * @param int $level Log level instance for example MC_LOGGER_DEBUG. */ function setLevel($level) { if (is_string($level)) { switch (strtolower($level)) { case "debug": $level = MC_LOGGER_DEBUG; break; case "info": $level = MC_LOGGER_INFO; break; case "warn": case "warning": $level = MC_LOGGER_WARN; break; case "error": $level = MC_LOGGER_ERROR; break; case "fatal": $level = MC_LOGGER_FATAL; break; default: $level = MC_LOGGER_FATAL; } } $this->_level = $level; } /** * Returns the current log level for example MC_LOGGER_DEBUG. * * @return int Current log level for example MC_LOGGER_DEBUG. */ function getLevel() { return $this->_level; } function setPath($path) { $this->_path = $path; } function getPath() { return $this->_path; } function setFileName($file_name) { $this->_filename = $file_name; } function getFileName() { return $this->_filename; } function setFormat($format) { $this->_format = $format; } function getFormat() { return $this->_format; } function setMaxSize($size) { // Fix log max size $logMaxSizeBytes = intval(preg_replace("/[^0-9]/", "", $size)); // Is KB if (strpos((strtolower($size)), "k") > 0) $logMaxSizeBytes *= 1024; // Is MB if (strpos((strtolower($size)), "m") > 0) $logMaxSizeBytes *= (1024 * 1024); $this->_maxSizeBytes = $logMaxSizeBytes; $this->_maxSize = $size; } function getMaxSize() { return $this->_maxSize; } function setMaxFiles($max_files) { $this->_maxFiles = $max_files; } function getMaxFiles() { return $this->_maxFiles; } function debug($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_DEBUG, implode(', ', $args)); } function info($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_INFO, implode(', ', $args)); } function warn($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_WARN, implode(', ', $args)); } function error($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_ERROR, implode(', ', $args)); } function fatal($msg) { $args = func_get_args(); $this->_logMsg(MC_LOGGER_FATAL, implode(', ', $args)); } function isDebugEnabled() { return $this->_level >= MC_LOGGER_DEBUG; } function isInfoEnabled() { return $this->_level >= MC_LOGGER_INFO; } function isWarnEnabled() { return $this->_level >= MC_LOGGER_WARN; } function isErrorEnabled() { return $this->_level >= MC_LOGGER_ERROR; } function isFatalEnabled() { return $this->_level >= MC_LOGGER_FATAL; } function _logMsg($level, $message) { $roll = false; if ($level < $this->_level) return; $logFile = $this->toOSPath($this->_path . "/" . $this->_filename); switch ($level) { case MC_LOGGER_DEBUG: $levelName = "DEBUG"; break; case MC_LOGGER_INFO: $levelName = "INFO"; break; case MC_LOGGER_WARN: $levelName = "WARN"; break; case MC_LOGGER_ERROR: $levelName = "ERROR"; break; case MC_LOGGER_FATAL: $levelName = "FATAL"; break; } $logFile = str_replace('{level}', strtolower($levelName), $logFile); $text = $this->_format; $text = str_replace('{time}', date("Y-m-d H:i:s"), $text); $text = str_replace('{level}', strtolower($levelName), $text); $text = str_replace('{message}', $message, $text); $message = $text . "\r\n"; // Check filesize if (file_exists($logFile)) { $size = @filesize($logFile); if ($size + strlen($message) > $this->_maxSizeBytes) $roll = true; } // Roll if the size is right if ($roll) { for ($i=$this->_maxFiles-1; $i>=1; $i--) { $rfile = $this->toOSPath($logFile . "." . $i); $nfile = $this->toOSPath($logFile . "." . ($i+1)); if (@file_exists($rfile)) @rename($rfile, $nfile); } @rename($logFile, $this->toOSPath($logFile . ".1")); // Delete last logfile $delfile = $this->toOSPath($logFile . "." . ($this->_maxFiles + 1)); if (@file_exists($delfile)) @unlink($delfile); } // Append log line if (($fp = @fopen($logFile, "a")) != null) { @fputs($fp, $message); @fflush($fp); @fclose($fp); } } /** * Converts a Unix path to OS specific path. * * @param String $path Unix path to convert. */ function toOSPath($path) { return str_replace("/", DIRECTORY_SEPARATOR, $path); } } ?>filemanager/classes/Utils/JSON.php000066600000027146150472616010013055 0ustar00_data = $data; $this->_len = strlen($data); $this->_pos = -1; $this->_location = JSON_IN_BETWEEN; $this->_lastLocations = array(); $this->_needProp = false; } function getToken() { return $this->_token; } function getLocation() { return $this->_location; } function getTokenName() { switch ($this->_token) { case JSON_BOOL: return 'JSON_BOOL'; case JSON_INT: return 'JSON_INT'; case JSON_STR: return 'JSON_STR'; case JSON_FLOAT: return 'JSON_FLOAT'; case JSON_NULL: return 'JSON_NULL'; case JSON_START_OBJ: return 'JSON_START_OBJ'; case JSON_END_OBJ: return 'JSON_END_OBJ'; case JSON_START_ARRAY: return 'JSON_START_ARRAY'; case JSON_END_ARRAY: return 'JSON_END_ARRAY'; case JSON_KEY: return 'JSON_KEY'; } return 'UNKNOWN'; } function getValue() { return $this->_value; } function readToken() { $chr = $this->read(); if ($chr != null) { switch ($chr) { case '[': $this->_lastLocation[] = $this->_location; $this->_location = JSON_IN_ARRAY; $this->_token = JSON_START_ARRAY; $this->_value = null; $this->readAway(); return true; case ']': $this->_location = array_pop($this->_lastLocation); $this->_token = JSON_END_ARRAY; $this->_value = null; $this->readAway(); if ($this->_location == JSON_IN_OBJECT) $this->_needProp = true; return true; case '{': $this->_lastLocation[] = $this->_location; $this->_location = JSON_IN_OBJECT; $this->_needProp = true; $this->_token = JSON_START_OBJ; $this->_value = null; $this->readAway(); return true; case '}': $this->_location = array_pop($this->_lastLocation); $this->_token = JSON_END_OBJ; $this->_value = null; $this->readAway(); if ($this->_location == JSON_IN_OBJECT) $this->_needProp = true; return true; // String case '"': case '\'': return $this->_readString($chr); // Null case 'n': return $this->_readNull(); // Bool case 't': case 'f': return $this->_readBool($chr); default: // Is number if (is_numeric($chr) || $chr == '-' || $chr == '.') return $this->_readNumber($chr); return true; } } return false; } function _readBool($chr) { $this->_token = JSON_BOOL; $this->_value = $chr == 't'; if ($chr == 't') $this->skip(3); // rue else $this->skip(4); // alse $this->readAway(); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _readNull() { $this->_token = JSON_NULL; $this->_value = null; $this->skip(3); // ull $this->readAway(); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _readString($quote) { $output = ""; $this->_token = JSON_STR; $endString = false; while (($chr = $this->peek()) != -1) { switch ($chr) { case '\\': // Read away slash $this->read(); // Read escape code $chr = $this->read(); switch ($chr) { case 't': $output .= "\t"; break; case 'b': $output .= "\b"; break; case 'f': $output .= "\f"; break; case 'r': $output .= "\r"; break; case 'n': $output .= "\n"; break; case 'u': $output .= $this->_int2utf8(hexdec($this->read(4))); break; default: $output .= $chr; break; } break; case '\'': case '"': if ($chr == $quote) $endString = true; $chr = $this->read(); if ($chr != -1 && $chr != $quote) $output .= $chr; break; default: $output .= $this->read(); } // String terminated if ($endString) break; } $this->readAway(); $this->_value = $output; // Needed a property if ($this->_needProp) { $this->_token = JSON_KEY; $this->_needProp = false; return true; } if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function _int2utf8($int) { $int = intval($int); switch ($int) { case 0: return chr(0); case ($int & 0x7F): return chr($int); case ($int & 0x7FF): return chr(0xC0 | (($int >> 6) & 0x1F)) . chr(0x80 | ($int & 0x3F)); case ($int & 0xFFFF): return chr(0xE0 | (($int >> 12) & 0x0F)) . chr(0x80 | (($int >> 6) & 0x3F)) . chr (0x80 | ($int & 0x3F)); case ($int & 0x1FFFFF): return chr(0xF0 | ($int >> 18)) . chr(0x80 | (($int >> 12) & 0x3F)) . chr(0x80 | (($int >> 6) & 0x3F)) . chr(0x80 | ($int & 0x3F)); } } function _readNumber($start) { $value = ""; $isFloat = false; $this->_token = JSON_INT; $value .= $start; while (($chr = $this->peek()) != -1) { if (is_numeric($chr) || $chr == '-' || $chr == '.') { if ($chr == '.') $isFloat = true; $value .= $this->read(); } else break; } $this->readAway(); if ($isFloat) { $this->_token = JSON_FLOAT; $this->_value = floatval($value); } else $this->_value = intval($value); if ($this->_location == JSON_IN_OBJECT && !$this->_needProp) $this->_needProp = true; return true; } function readAway() { while (($chr = $this->peek()) != null) { if ($chr != ':' && $chr != ',' && $chr != ' ') return; $this->read(); } } function read($len = 1) { if ($this->_pos < $this->_len) { if ($len > 1) { $str = substr($this->_data, $this->_pos + 1, $len); $this->_pos += $len; return $str; } else return $this->_data[++$this->_pos]; } return null; } function skip($len) { $this->_pos += $len; } function peek() { if ($this->_pos < $this->_len) return $this->_data[$this->_pos + 1]; return null; } } /** * This class handles JSON stuff. * * @package MCManager.utils */ class Moxiecode_JSON { function Moxiecode_JSON() { } function decode($input) { $reader = new Moxiecode_JSONReader($input); return $this->readValue($reader); } function readValue(&$reader) { $this->data = array(); $this->parents = array(); $this->cur =& $this->data; $key = null; $loc = JSON_IN_ARRAY; while ($reader->readToken()) { switch ($reader->getToken()) { case JSON_STR: case JSON_INT: case JSON_BOOL: case JSON_FLOAT: case JSON_NULL: switch ($reader->getLocation()) { case JSON_IN_OBJECT: $this->cur[$key] = $reader->getValue(); break; case JSON_IN_ARRAY: $this->cur[] = $reader->getValue(); break; default: return $reader->getValue(); } break; case JSON_KEY: $key = $reader->getValue(); break; case JSON_START_OBJ: case JSON_START_ARRAY: if ($loc == JSON_IN_OBJECT) $this->addArray($key); else $this->addArray(null); $cur =& $obj; $loc = $reader->getLocation(); break; case JSON_END_OBJ: case JSON_END_ARRAY: $loc = $reader->getLocation(); if (count($this->parents) > 0) { $this->cur =& $this->parents[count($this->parents) - 1]; array_pop($this->parents); } break; } } return $this->data[0]; } // This method was needed since PHP is crapy and doesn't have pointers/references function addArray($key) { $this->parents[] =& $this->cur; $ar = array(); if ($key) $this->cur[$key] =& $ar; else $this->cur[] =& $ar; $this->cur =& $ar; } function getDelim($index, &$reader) { switch ($reader->getLocation()) { case JSON_IN_ARRAY: case JSON_IN_OBJECT: if ($index > 0) return ","; break; } return ""; } function encode($input) { switch (gettype($input)) { case 'boolean': return $input ? 'true' : 'false'; case 'integer': return (int) $input; case 'float': case 'double': return (float) $input; case 'NULL': return 'null'; case 'string': return $this->encodeString($input); case 'array': return $this->_encodeArray($input); case 'object': return $this->_encodeArray(get_object_vars($input)); } return ''; } function encodeString($input) { // Needs to be escaped if (preg_match('/[^a-zA-Z0-9]/', $input)) { $output = ''; for ($i=0; $i_utf82utf16($char))); } if (($byte & 0xF0) == 0xE0) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2])); $i += 2; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xF8) == 0xF0) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]))); $i += 3; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xFC) == 0xF8) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]), ord($input[$i + 4]))); $i += 4; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } if (($byte & 0xFE) == 0xFC) { $char = pack('C*', $byte, ord($input[$i + 1]), ord($input[$i + 2], ord($input[$i + 3]), ord($input[$i + 4]), ord($input[$i + 5]))); $i += 5; $output .= sprintf('\u%04s', bin2hex($this->_utf82utf16($char))); } else if ($byte < 128) $output .= $input[$i]; } } return '"' . $output . '"'; } return '"' . $input . '"'; } function _utf82utf16($utf8) { if (function_exists('mb_convert_encoding')) return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); switch (strlen($utf8)) { case 1: return $utf8; case 2: return chr(0x07 & (ord($utf8[0]) >> 2)) . chr((0xC0 & (ord($utf8[0]) << 6)) | (0x3F & ord($utf8[1]))); case 3: return chr((0xF0 & (ord($utf8[0]) << 4)) | (0x0F & (ord($utf8[1]) >> 2))) . chr((0xC0 & (ord($utf8[1]) << 6)) | (0x7F & ord($utf8[2]))); } return ''; } function _encodeArray($input) { $output = ''; $isIndexed = true; $keys = array_keys($input); for ($i=0; $iencodeString($keys[$i]) . ':' . $this->encode($input[$keys[$i]]); $isIndexed = false; } else $output .= $this->encode($input[$keys[$i]]); if ($i != count($keys) - 1) $output .= ','; } return $isIndexed ? '[' . $output . ']' : '{' . $output . '}'; } } ?> filemanager/classes/Utils/CSSCompressor.php000066600000014545150472616010015010 0ustar00_items = array(); $default = array( 'expires_offset' => '10d', 'disk_cache' => true, 'cache_dir' => '_cache', 'gzip_compress' => true, 'remove_whitespace' => true, 'charset' => 'UTF-8', 'convert_urls' => true, 'name' => '' ); $this->_settings = array_merge($default, $settings); $this->_lastUpdate = 0; } /** * Add raw contents as part of the concatenation/compression. This method should only be used if * you really need to. * * @param String $content Content to add as part of the concatenation process. */ function addContent($content) { $this->_items[] = array('content', $content); } /** * Adds a file to the concatenation/compression process. * * @param String $path Path to the file to include in the compressed package/output. * @param bool $whitespace Set this state to false to skip whitespace removal for the specified file. */ function addFile($path, $whitespace = true) { $this->_items[] = array('file', $path, $whitespace); $mtime = @filemtime($path); if ($mtime > $this->_lastUpdate) $this->_lastUpdate = $mtime; } /** * Compress and output all files that got added to the process by addFile. */ function compress() { $key = ""; foreach ($this->_items as $item) $key .= $item[1]; // Setup some variables $cacheFile = $this->_settings['cache_dir'] . "/"; if ($this->_settings['name']) $cacheFile .= preg_replace('/[^a-z0-9_]/i', '', $this->_settings['name']); else $cacheFile .= md5($key); $supportsGzip = false; $content = ""; $encodings = array(); // Check if it supports gzip if (isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING']))); if ($this->_settings['gzip_compress'] && (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('gzencode') && !ini_get('zlib.output_compression')) { $enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip"; $supportsGzip = true; $cacheFile .= ".gz"; } else $cacheFile .= ".css"; // Set headers header("Content-type: text/css;charset=" . $this->_settings['charset']); header("Cache-Control: must-revalidate"); // Must be there for IE 6 header("Vary: Accept-Encoding"); // Handle proxies header("Expires: " . gmdate("D, d M Y H:i:s", time() + $this->_parseTime($this->_settings['expires_offset'])) . " GMT"); // Use cached file if ($this->_settings['disk_cache'] && file_exists($cacheFile) && @filemtime($cacheFile) == $this->_lastUpdate) { if ($supportsGzip) header("Content-Encoding: " . $enc); echo $this->_getFileContents($cacheFile); return; } // Load content foreach ($this->_items as $item) { if ($item[0] == 'file') $chunk = $this->_getFileContents($item[1]); else $chunk = $item[1]; // Remove UTF-8 BOM if (substr($chunk, 0, 3) == pack("CCC", 0xef, 0xbb, 0xbf)) $chunk = substr($chunk, 3); if (!preg_match('/[\r\n]$/', $chunk)) $chunk .= "\n"; if ($this->_settings['remove_whitespace'] && $item[2]) $chunk = $this->_removeWhiteSpace($chunk); // Convert urls if ($this->_settings['convert_urls']) { $chunk = preg_replace('/\\$base/', dirname($_SERVER['SCRIPT_NAME']), $chunk); $chunk = preg_replace('/url\\([\'"]?(?!\\/|http)/', '$0' . dirname($item[1]) . '/', $chunk); } $content .= $chunk; } // GZip content if ($supportsGzip) { header("Content-Encoding: " . $enc); $content = gzencode($content, 9, FORCE_GZIP); } // Write cache file if ($this->_settings['disk_cache']) { if (!is_dir($this->_settings['cache_dir'])) @mkdir($this->_settings['cache_dir']); $this->_putFileContents($cacheFile, $content); if (@file_exists($cacheFile)) @touch($cacheFile, $this->_lastUpdate); } // Output content to client echo $content; } /**#@+ @access private */ function _removeWhiteSpace($content) { // Remove comments $content = preg_replace('/(\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/)/', '', $content); // Remove whitespace at the beginning and end of CSS $content = preg_replace('/^[\r\n]+/', '', $content); $content = preg_replace('/[\r\n]+$/', "\n", $content); // Remove redundant linebreaks $content = preg_replace('/\r\n/', "\n", $content); $content = preg_replace('/\n+/', "\n", $content); // Remove whitespace before/after styles inside rules $content = preg_replace('/\\{\\s*(.*?)\\s*\\}/', '{$1}', $content); // Remove remove whitespace between style rules and after the last one $content = preg_replace('/;\\s+/', ';', $content); $content = preg_replace('/\\{([^\\}]+);\\}/', '{$1}', $content); // Remove whitespace between : $content = preg_replace('/\\s*\\:\\s*/', ':', $content); return $content; } function _putFileContents($path, $content) { if (function_exists("file_put_contents")) return @file_put_contents($path, $content); $fp = @fopen($path, "wb"); if ($fp) { fwrite($fp, $content); fclose($fp); } } function _getFileContents($path) { $path = realpath($path); if (!$path || !@is_file($path)) return ""; if (function_exists("file_get_contents")) return @file_get_contents($path); $content = ""; $fp = @fopen($path, "r"); if (!$fp) return ""; while (!feof($fp)) $content .= fread($fp, 1024); fclose($fp); return $content; } function _parseTime($time) { $multipel = 1; // Hours if (strpos($time, "h") != false) $multipel = 60 * 60; // Days if (strpos($time, "d") != false) $multipel = 24 * 60 * 60; // Months if (strpos($time, "m") != false) $multipel = 24 * 60 * 60 * 30; // Trim string return intval($time) * $multipel; } /**#@-*/ } ?>filemanager/classes/Utils/ResultSet.php000066600000002526150472616010014231 0ustar00_cols = explode(',', $cols); $this->_rows = array(); $this->_config = null; } function add() { $this->_rows[] = func_get_args(); } function setHeader($name, $value) { $this->_header[$name] = $value; } function setConfig($config) { $this->_config = $config; } function getRowCount() { return count($this->_rows); } function getRows() { $rowsArr = array(); for ($i=0; $i_rows);$i++) $rowsArr[] = $this->getRow($i); return $rowsArr; } function getRow($index) { if ($index < 0) return null; $row = $this->_rows[$index]; $obj = array(); for ($i=0; $i_cols[$i]] = $row[$i]; return $obj; } function toArray() { $ar = array( "header" => $this->_header, "columns" => $this->_cols, "data" => $this->_rows ); if (is_array($this->_config)) $ar["config"] = $this->_config; return $ar; } } ?>filemanager/login_session_auth.php000066600000006146150472616010013440 0ustar00Wiki for more details.'; if (isset($_POST['submit_button'])) { // If password match, then set login if ($_POST['login'] == $username && $_POST['password'] == $password && $password) { // Set session session_start(); $_SESSION['isLoggedIn'] = true; $_SESSION['user'] = $_POST['login']; // Override any config option //$_SESSION['imagemanager.filesystem.rootpath'] = 'some path'; //$_SESSION['filemanager.filesystem.rootpath'] = 'some path'; // Redirect header("location: " . $_POST['return_url']); die; } else $msg = "Wrong username/password."; } ?> Sample login page
        " />
        Example login
        " />
        " />
        filemanager/docs/license.html000066600000015274150472616010012275 0ustar00 Commercial license - Single site license

        Commercial license - Single site license

        End User License Agreement For Moxiecode FileManager (MCFileManager)

        This license is for 1 copy of the Moxiecode FileManager Software on 1 web site/domain.

        THE MOXIECODE MCFILEMANAGER SOFTWARE LICENSE AGREEMENT

        This License Agreement is a legal agreement between you ("LICENSEE") (either an individual or a single entity) and Moxiecode Systems AB ("MOXIECODE") for the software product Moxiecode FileManager which includes computer software and electronic documentation (collectively the "SOFTWARE"). Read it carefully before completing the installation process and using the SOFTWARE. If you did not obtain this copy of the SOFTWARE legally, please destroy the copy immediately.

        By installing, copying, or otherwise using the SOFTWARE, you agree to be bound by the terms of this License Agreement.

        If you do not agree to the terms of this License Agreement, MOXIECODE is unwilling to license the SOFTWARE. In such event, you may not install, copy or otherwise use the SOFTWARE.

        YOU AGREE THAT YOUR USE OF THE SOFTWARE ACKNOWLEDGES THAT YOU HAVE READ THIS LICENSE, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS.

        1. Using the SOFTWARE

        If you have purchased a license for the SOFTWARE, subject to the terms and conditions of this Agreement, MOXIECODE grants you, LICENSEE, a limited, non-exclusive, non-transferable, non-sublicenseable license to install one (1) copy of the SOFTWARE only on a single web site/domain and use that copy of the SOFTWARE only in accordance with this Agreement.

        LICENSEE may use the SOFTWARE to operate in conjunction with other SOFTWARE.

        If the SOFTWARE is to be installed on multiple web sites (development web sites not included), a separate SOFTWARE license must be acquired for each individual web site or a server SOFTWARE license if multiple sites use the SOFTWARE on the same server.

        LICENSEE may make a copy of the SOFTWARE solely for backup or archival purposes, provided that LICENSEE reproduces and includes all copyright and other proprietary notice(s) on the copy.

        2. Restrictions

        LICENSEE may not:
        (i) Rent, lease, lend, transfer or otherwise transfer rights to the SOFTWARE.
        (ii) Translate, adapt, modify the SOFTWARE or create derivative works based upon the SOFTWARE or any part thereof except configuration.
        (iii) Distribute copies of the SOFTWARE.
        (iv) Electronically transfer the SOFTWARE over a network, a telephone circuit or the Internet to a non-LICENCEE.
        (v) Remove any proprietary notices or labels on the SOFTWARE.
        (vi) Use the SOFTWARE to encode, reproduce or copy any material or intellectual property you do not have the right to encode, reproduce or copy.

        3. Termination

        This License Agreement is effective until terminated. MOXIECODE may terminate this License Agreement if LICENSEE fails to comply with the terms and conditions of this License Agreement. In such event, LICENSEE must destroy all copies of the SOFTWARE and all of its component parts. All provisions relating the ownership, disclaimer of warranties, limitation of liability and the general provisions shall survive the termination of this License Agreement.

        4. Ownership

        The SOFTWARE is licensed, NOT sold. The foregoing License Agreement gives LICENSEE limited rights to use the SOFTWARE. All rights, title and interest, including all copyrights, in and to the SOFTWARE and any copies LICENSEE is permitted to make herein are exclusively owned by MOXIECODE and/or its suppliers and are protected by copyright, trademark and trade secret law and international treaties. MOXIECODE retains all rights not expressly granted to LICENSEE in this License Agreement.

        5. Limited Warranty.

        MOXIECODE warrants to you that for a period of fifteen (15) days from the date of purchase, as evidenced by a copy of the receipt, the media on which SOFTWARE is furnished (if any) will be free of defects in materials and workmanship under normal use. Except for the foregoing, SOFTWARE is provided "AS IS". Your exclusive remedy and MOXIECODE's entire liability under this limited warranty will be at MOXIECODE's option to replace SOFTWARE or refund the fee paid for SOFTWARE.

        6. DISCLAIMER OF WARRANTY.

        UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.

        7. LIMITATION OF LIABILITY.

        TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL MOXIECODE OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF MOXIECODE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. In no event will MOXIECODE's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for SOFTWARE under this Agreement. The foregoing limitations will apply even if the above stated warranty fails of its essential purpose.

        9. Governing Law.

        Any action related to this Agreement will be governed by Swedish law. No choice of law rules of any jurisdiction will apply.

        10. Severability.

        If any provision of this Agreement is held to be unenforceable, This Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate.

        11. Entire Agreement

        This License Agreement constitutes the entire agreement between LICENSEE and MOXIECODE and supersedes any other prior agreements or understandings, whether oral or written, regarding the SOFTWARE. If a provision of this agreement is deemed null and void, invalid or without effect, the remainder of this agreement shall remain in effect.

        filemanager/examples.html000066600000007015150472616010011533 0ustar00 MCFileManager Example

        Simple example

        This is the most simple form of integration.

        [MCFileManager]

        Relative URL example

        This example will output the selected files as relative to the current document.

        [MCFileManager]

        Absolute URL with document_base_url option

        This example will output the selected files as absolute URLs but with a different domain prefix.

        [MCFileManager]

        Absolute URL without host

        This example will output the selected files as absolute URLs but without the protocol and host name parts.

        [MCFileManager]

        Specify default path

        This example shows how the default path can be specified with JavaScript, it also disables the remember last path feature.

        [MCFileManager]

        Specify rootpath

        This example shows how the rootpath can be specified with JavaScript.

        [MCFileManager]

        Custom JavaScript insert script

        This example shows how one could implement a custom insertion JavaScript.

        [MCFileManager]

        Custom filter script

        This example shows you how to change/filter data passed back.

        [MCFileManager]

        Filtered file list example

        This is the most simple form of integration.

        [MCFileManager]










        example/editor_plugin.js000066600000001534150472616010011412 0ustar00(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();example/js/dialog.js000066600000001116150472616010010415 0ustar00tinyMCEPopup.requireLangPack(); var ExampleDialog = { init : function() { var f = document.forms[0]; // Get the selected contents as text and place it in the input f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'}); f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg'); }, insert : function() { // Insert the contents from the input into the document tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value); tinyMCEPopup.close(); } }; tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog); example/dialog.htm000066600000001566150472616010010166 0ustar00 {#example_dlg.title}

        Here is a example dialog.

        Selected text:

        Custom arg:

        example/langs/en.js000066600000000114150472616010010245 0ustar00tinyMCE.addI18n('en.example',{ desc : 'This is just a template button' }); example/langs/en_dlg.js000066600000000117150472616010011076 0ustar00tinyMCE.addI18n('en.example_dlg',{ title : 'This is just a example title' }); example/editor_plugin_src.js000066600000005532150472616010012263 0ustar00/** * 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() { // Load plugin specific language pack tinymce.PluginManager.requireLangPack('example'); tinymce.create('tinymce.plugins.ExamplePlugin', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); ed.addCommand('mceExample', function() { ed.windowManager.open({ file : url + '/dialog.htm', width : 320 + parseInt(ed.getLang('example.delta_width', 0)), height : 120 + parseInt(ed.getLang('example.delta_height', 0)), inline : 1 }, { plugin_url : url, // Plugin absolute URL some_custom_arg : 'custom arg' // Custom argument }); }); // Register example button ed.addButton('example', { title : 'example.desc', cmd : 'mceExample', image : url + '/img/example.gif' }); // Add a node change handler, selects the button in the UI when a image is selected ed.onNodeChange.add(function(ed, cm, n) { cm.setActive('example', n.nodeName == 'IMG'); }); }, /** * Creates control instances based in the incomming name. This method is normally not * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons * but you sometimes need to create more complex controls like listboxes, split buttons etc then this * method can be used to create those. * * @param {String} n Name of the control to create. * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control. * @return {tinymce.ui.Control} New control instance or null if no control was created. */ createControl : function(n, cm) { return null; }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Example plugin', author : 'Some author', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example', version : "1.0" }; } }); // Register plugin tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin); })();example/img/example.gif000066600000000127150472616010011103 0ustar00GIF89a!,. Ok̺}qQ(̞5(`Db;bbcode/editor_plugin.js000066600000006237150472616010011202 0ustar00(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/(.*?)<\/font>/gi,"$1");b(//gi,"[img]$1[/img]");b(/(.*?)<\/span>/gi,"[code]$1[/code]");b(/(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/(.*?)<\/span>/gi,"[u]$1[/u]");b(//gi,"[u]");b(/]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/
        /gi,"\n");b(//gi,"\n");b(/
        /gi,"\n");b(/

        /gi,"");b(/<\/p>/gi,"\n");b(/ |\u00a0/gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"
        ");b(/\[b\]/gi,"");b(/\[\/b\]/gi,"");b(/\[i\]/gi,"");b(/\[\/i\]/gi,"");b(/\[u\]/gi,"");b(/\[\/u\]/gi,"");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'$2');b(/\[url\](.*?)\[\/url\]/gi,'$1');b(/\[img\](.*?)\[\/img\]/gi,'');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'$2');b(/\[code\](.*?)\[\/code\]/gi,'$1 ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'$1 ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();bbcode/editor_plugin_src.js000066600000010222150472616010012036 0ustar00/** * 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() { tinymce.create('tinymce.plugins.BBCodePlugin', { init : function(ed, url) { var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase(); ed.onBeforeSetContent.add(function(ed, o) { o.content = t['_' + dialect + '_bbcode2html'](o.content); }); ed.onPostProcess.add(function(ed, o) { if (o.set) o.content = t['_' + dialect + '_bbcode2html'](o.content); if (o.get) o.content = t['_' + dialect + '_html2bbcode'](o.content); }); }, getInfo : function() { return { longname : 'BBCode Plugin', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods // HTML -> BBCode in PunBB dialect _punbb_html2bbcode : function(s) { s = tinymce.trim(s); function rep(re, str) { s = s.replace(re, str); }; // example: to [b] rep(/(.*?)<\/a>/gi,"[url=$1]$2[/url]"); rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); rep(/(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]"); rep(/(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]"); rep(/(.*?)<\/span>/gi,"[color=$1]$2[/color]"); rep(/(.*?)<\/font>/gi,"[color=$1]$2[/color]"); rep(/(.*?)<\/span>/gi,"[size=$1]$2[/size]"); rep(/(.*?)<\/font>/gi,"$1"); rep(//gi,"[img]$1[/img]"); rep(/(.*?)<\/span>/gi,"[code]$1[/code]"); rep(/(.*?)<\/span>/gi,"[quote]$1[/quote]"); rep(/(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]"); rep(/(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]"); rep(/(.*?)<\/em>/gi,"[code][i]$1[/i][/code]"); rep(/(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]"); rep(/(.*?)<\/u>/gi,"[code][u]$1[/u][/code]"); rep(/(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]"); rep(/<\/(strong|b)>/gi,"[/b]"); rep(/<(strong|b)>/gi,"[b]"); rep(/<\/(em|i)>/gi,"[/i]"); rep(/<(em|i)>/gi,"[i]"); rep(/<\/u>/gi,"[/u]"); rep(/(.*?)<\/span>/gi,"[u]$1[/u]"); rep(//gi,"[u]"); rep(/]*>/gi,"[quote]"); rep(/<\/blockquote>/gi,"[/quote]"); rep(/
        /gi,"\n"); rep(//gi,"\n"); rep(/
        /gi,"\n"); rep(/

        /gi,""); rep(/<\/p>/gi,"\n"); rep(/ |\u00a0/gi," "); rep(/"/gi,"\""); rep(/</gi,"<"); rep(/>/gi,">"); rep(/&/gi,"&"); return s; }, // BBCode -> HTML from PunBB dialect _punbb_bbcode2html : function(s) { s = tinymce.trim(s); function rep(re, str) { s = s.replace(re, str); }; // example: [b] to rep(/\n/gi,"
        "); rep(/\[b\]/gi,""); rep(/\[\/b\]/gi,""); rep(/\[i\]/gi,""); rep(/\[\/i\]/gi,""); rep(/\[u\]/gi,""); rep(/\[\/u\]/gi,""); rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"$2"); rep(/\[url\](.*?)\[\/url\]/gi,"$1"); rep(/\[img\](.*?)\[\/img\]/gi,""); rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"$2"); rep(/\[code\](.*?)\[\/code\]/gi,"$1 "); rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"$1 "); return s; } }); // Register plugin tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin); })();iespell/editor_plugin.js000066600000001615150472616010011414 0ustar00(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();iespell/editor_plugin_src.js000066600000002627150472616010012267 0ustar00/** * 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() { tinymce.create('tinymce.plugins.IESpell', { init : function(ed, url) { var t = this, sp; if (!tinymce.isIE) return; t.editor = ed; // Register commands ed.addCommand('mceIESpell', function() { try { sp = new ActiveXObject("ieSpell.ieSpellExtension"); sp.CheckDocumentNode(ed.getDoc().documentElement); } catch (e) { if (e.number == -2146827859) { ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) { if (s) window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); }); } else ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number); } }); // Register buttons ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'}); }, getInfo : function() { return { longname : 'IESpell (IE Only)', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell); })();typograf/css/typograf.css000066600000001152150472616010011541 0ustar00body { margin:0; padding:0; } table { width:100%; } table td{ vertical-align:top; } #edit { text-decoration:none; border-bottom:dashed 1px; } #tbefore_text { width:100%; height:400px; } .wrapper { width:98%; position:relative; padding:5px; padding-bottom:60px; } .loader { background:transparent url(../img/loader.gif) no-repeat 50% 100px; height:200px; } #send { margin-top:100px; } .bottom{ height:25px; border-top:solid 1px #ccc; position:fixed; bottom:0; left:0; right:0; text-align:center; background:#ddd; padding:5px; } .bottom button{ margin:0 20px; } typograf/editor_plugin.js000066600000001521150472616010011606 0ustar00(function(){tinymce.create('tinymce.plugins.typograf',{getInfo:function(){return{longname:'Russian Typograf',author:'Alexandr Shvets',authorurl:'http://drupaldance.com/',infourl:'http://drupaldance.com/russian-typograf-for-tinyMCE',version:'1.0'}},init:function(ed,url){ed.addCommand('mceInsertTypography',function(ui,v){if(ui){editor_text=ed.getContent();strip=editor_text.replace(/<[^>]*>/g,"");if(strip.length){ed.windowManager.open({file:url+'/typograf.html',width:700,height:580,scrollbars:'yes',inline:1},{plugin_url:url,text:editor_text})}else{alert('Введите немного текста, для начала.')}}else{ed.setContent(v.html)}});ed.addButton('typograf',{title:'typograf.insert',cmd:'mceInsertTypography',image:url+'/img/typograf.gif',ui:true})}});tinymce.PluginManager.add('typograf',tinymce.plugins.typograf)})();typograf/js/typograf.js000066600000006761150472616010011224 0ustar00function urlencode( str ) { // http://kevin.vanzonneveld.net // + original by: Philip Peterson // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: AJ // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // % note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/ // * example 1: urlencode('Kevin van Zonneveld!'); // * returns 1: 'Kevin+van+Zonneveld%21' // * example 2: urlencode('http://kevin.vanzonneveld.net/'); // * returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F' // * example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a'); // * returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a' var histogram = {}, histogram_r = {}, code = 0, tmp_arr = []; var ret = str.toString(); var replacer = function(search, replace, str) { var tmp_arr = []; tmp_arr = str.split(search); return tmp_arr.join(replace); }; // The histogram is identical to the one in urldecode. histogram['!'] = '%21'; histogram['%20'] = '+'; // Begin with encodeURIComponent, which most resembles PHP's encoding functions ret = encodeURIComponent(ret); for (search in histogram) { replace = histogram[search]; ret = replacer(search, replace, ret) // Custom replace. No regexing } // Uppercase for full PHP compatibility return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) { return "%"+m2.toUpperCase(); }); return ret; } // edit link click function edit_source() { text = document.getElementById('tbefore_text'); div = document.getElementById('tbefore'); text.value = div.innerHTML; div.style.display = 'none'; text.style.display = 'block'; } // refresh button click function send_data() { text = document.getElementById('tbefore_text'); div = document.getElementById('tbefore'); // if textarea is visible, we should first update data div if (text.style.display == 'block'){ div.innerHTML = text.value; text.style.display = 'none'; div.style.display = 'block'; } // send data to typograf TypografDialog.send(div.innerHTML); } var TypografDialog = { init : function(ed) { before = tinyMCEPopup.getWindowArg("text"); plugin_url = tinyMCEPopup.getWindowArg("plugin_url"); document.getElementById("tbefore").innerHTML = before; this.send(before); }, send : function(text) { document.getElementById('tafter').innerHTML = '

        '; request = new XMLHttpRequest(); request.open("POST", plugin_url + '/handler.php'); request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset:UTF-8'); request.onreadystatechange = function(aEvt){ if (request.readyState == 4){ if(request.status == 200){ document.getElementById('tafter').innerHTML = request.responseText; } } } request.send('text='+urlencode(text)); }, saveContent : function() { tinyMCEPopup.execCommand("mceInsertTypography", false, { html : document.getElementById('tafter').innerHTML, }); tinyMCEPopup.close(); } }; tinyMCEPopup.onInit.add(TypografDialog.init, TypografDialog); typograf/editor_plugin_src.js000066600000002674150472616010012467 0ustar00/** * $RCSfile: editor_plugin_src.js,v $ * $Revision: 1.3 $ * $Date: 2006/03/27 17:41:43 $ * * @author Alexandr Shvets * */ (function() { tinymce.create('tinymce.plugins.typograf', { getInfo : function() { return { longname : 'Russian Typograf', author : 'Alexandr Shvets', authorurl : 'http://drupaldance.com/', infourl : 'http://drupaldance.com/russian-typograf-for-tinyMCE', version : '1.0' }; }, init : function(ed, url) { ed.addCommand('mceInsertTypography', function(ui, v) { if (ui) { editor_text = ed.getContent(); strip = editor_text.replace(/<[^>]*>/g, ""); if (strip.length) { ed.windowManager.open({ file : url + '/typograf.html', width : 700, height : 580, scrollbars : 'yes', inline : 1 }, { plugin_url : url, text : editor_text } ); } else { alert('Введите немного текста, для начала.'); } } else { ed.setContent(v.html); } }); ed.addButton('typograf', {title : 'typograf.insert', cmd : 'mceInsertTypography', image : url + '/img/typograf.gif', ui : true}); } }); // Register plugin tinymce.PluginManager.add('typograf', tinymce.plugins.typograf); })();typograf/typograf.html000066600000003103150472616010011123 0ustar00 Typograf
        До типографирования (изменить) После типографирования
        typograf/typographus.php000066600000034525150472616010011514 0ustar00 false, self::HTML_ENTITIES => false ); private $_encoding; private $_sym = array( 'nbsp' => ' ', 'lnowrap' => '', 'rnowrap' => '', 'lquote' => '«', 'rquote' => '»', 'lquote2' => '„', 'rquote2' => '“', 'mdash' => '—', 'ndash' => '–', 'minus' => '–', // соотв. по ширине символу +, есть во всех шрифтах 'hellip' => '…', 'copy' => '©', 'trade' => '', 'apos' => ''', // см. http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos 'reg' => '®', 'multiply' => '×', '1/2' => '½', '1/4' => '¼', '3/4' => '¾', 'plusmn' => '±', 'rarr' => '→', 'larr' => '←', 'rsquo' => '’' ); /** * Укажите кодировку для обработки текста в кодировке, отличной от WINDOWS-1251. * @param String $encoding */ public function __construct($encoding = null){ $this->_encoding = $encoding; } private $_safeBlocks = array( ']*>' => '<\/pre>', ']*>' => '<\/style>', ']*>' => '<\/script>', '', ']*>' => '<\/code>', ); /** * Добавляет безопасный блок, который не будет обрабатываться типографом. * * @param String $openTag * @param String $closeTag */ public function addSafeBlock($openTag, $closeTag){ $this->_safeBlocks[$openTag] = $closeTag; } /** * Устанавливает соответствие между символом и его представлением. * * @param String $sym * @param String $entity */ public function setSym($sym, $entity){ $this->_sym[$sym] = $entity; } public function setOpt($key, $value){ $this->$_options[$key] = $value; } /** * При $opt = true все ё преобразуются в е. */ public function convertE($opt = false){ $this->setOpt[self::CONVERT_E] = $opt; } /** * Вызывает типограф, обходя html-блоки и безопасные блоки * * @param String $str * @return String */ public function process($str){ if($this->_encoding!=null){ $str = iconv($this->_encoding, 'WINDOWS-1251', $str); } $str = html_entity_decode($str); $pattern = '('; foreach ($this->_safeBlocks as $start => $end){ $pattern .= "$start.*$end|"; } $pattern .= '<[^>]*[\s][^>]*>)'; $str = preg_replace_callback("~$pattern~isU", array('self', '_stack'), $str); $str = $this->typo_text($str); $str = strtr($str, self::_stack()); if($this->_encoding!=null){ $str = iconv('WINDOWS-1251', $this->_encoding, $str); } return $str; } /** * Накапливает исходный код безопасных блоков при использовании в качестве * обратного вызова. При отдельном использовании возвращает накопленный * массив. * * @param array $matches * @return array */ private static function _stack($matches = false){ static $safe_blocks = array(); if ($matches !== false){ $key = '<'.count($safe_blocks).'>'; $safe_blocks[$key] = $matches[0]; return $key; } else{ $tmp = $safe_blocks; unset($safe_blocks); return $tmp; } } /** * Применяет все переданные правила к тексту * @param array * @return String */ private function apply_rules($rules, $str){ return preg_replace(array_keys($rules), array_values($rules), $str); } /** * Главная функция типографа. * @param String $str * @return String */ private function typo_text($str){ $sym = $this->_sym; if (trim($str) == '') return ''; $html_tag = '(?:(?U)<.*>)'; $hellip = '\.{3,5}'; //Слово $word = '[a-zA-Zа-яА-Я_]'; //Начало слова $phrase_begin = "(?:$hellip|$word|\n)"; //Конец слова $phrase_end = '(?:[)!?.:;#*\\\]|$|'.$word.'|'.$sym['rquote'].'|'.$sym['rquote2'].'|"|"|'.$sym['hellip'].'|'.$sym['copy'].'|'.$sym['trade'].'|'.$sym['apos'].'|'.$sym['reg'].'|\')'; //Знаки препинания (троеточие и точка - отдельный случай!) $punctuation = '[?!:,;]'; //Аббревиатуры $abbr = '(?:ООО|ОАО|ЗАО|ЧП|ИП|НПФ|НИИ)'; //Предлоги и союзы $prepos = 'а|в|во|вне|и|или|к|о|с|у|о|со|об|обо|от|ото|то|на|не|ни|но|из|изо|за|уж|на|по|под|подо|пред|предо|про|над|надо|как|без|безо|что|да|для|до|там|ещё|их|или|ко|меж|между|перед|передо|около|через|сквозь|для|при|я'; $metrics = 'мм|см|м|км|г|кг|б|кб|мб|гб|dpi|px'; $shortages = 'г|гр|тов|пос|c|ул|д|пер|м'; $money = 'руб\.|долл\.|евро|у\.е\.'; $counts = 'млн\.|тыс\.'; $any_quote = "(?:$sym[lquote]|$sym[rquote]|$sym[lquote2]|$sym[rquote2]|"|\")"; $rules_strict = array( // Много пробелов или табуляций -> один пробел '~( |\t)+~' => ' ', // Запятые после «а» и «но». Если уже есть — не ставим. '~([^,])\s(а|но)\s~' => '$1, $2 ', ); $rules_symbols = array( //Лишние знаки. //TODO: сделать красиво '~([^!])!!([^!])~' => '$1!$2', '~([^?])\?\?([^?])~' => '$1?$2', '~(\w);;(\s)~' => '$1;$2', '~(\w)\.\.(\s)~' => '$1.$2', '~(\w),,(\s)~' => '$1,$2', '~(\w)::(\s)~' => '$1:$2', '~(\w)([,.!?;:])\s([,.!?;:])(\s)~' => '$1$2$4', '~(!!!)!+~' => '$1', '~(\?\?\?)\?+~' => '$1', '~(;;;);+~' => '$1', '~(\.\.\.)\.+~' => '$1', '~(,,,),+~' => '$1', '~(:::):+\s~' => '$1', //Занятная комбинация '~!\?~' => '?!', // Знаки (c), (r), (tm) '~\((c|с)\)~i' => $sym['copy'], '~\(r\)~i' => $sym['reg'], '~\(tm\)~i' => $sym['trade'], // От 2 до 5 знака точки подряд - на знак многоточия (больше - мб авторской задумкой). "~$hellip~" => $sym['hellip'], // Спецсимволы для 1/2 1/4 3/4 '~\b1/2\b~' => $sym['1/2'], '~\b1/4\b~' => $sym['1/4'], '~\b3/4\b~' => $sym['3/4'], //LО'Лайт "~([a-zA-Z])'([а-яА-Я])~i" => '$1'.$sym['rsquo'].'$2', "~'~" => $sym['apos'], //str_replace? // Размеры 10x10, правильный знак + убираем лишние пробелы '~(\d+)\s{0,}?[x|X|х|Х|*]\s{0,}(\d+)~' => '$1'.$sym['multiply'].'$2', //+- '~([^\+]|^)\+-~' => '$1'.$sym['plusmn'], //Стрелки '~([^-]|^)->~' => '$1'.$sym['rarr'], '~<-([^-]|$)~' => $sym['larr'].'$1', ); $rules_quotes = array( // Разносим неправильные кавычки '~([^"]\w+)"(\w+)"~' => '$1 "$2"', '~"(\w+)"(\w+)~' => '"$1" $2', // Превращаем кавычки в ёлочки. Двойные кавычки склеиваем. "~(?<=\\s|^|[>(])($html_tag*)($any_quote)($html_tag*$phrase_begin$html_tag*)~" => '$1'.$sym['lquote'].'$3', "~($html_tag*(?:$phrase_end|[0-9]+)$html_tag*)($any_quote)($html_tag*$phrase_end$html_tag*|\\s|[,<-])~" => '$1'.$sym['rquote'].'$3', ); $rules_braces = array( // Оторвать скобку от слова '~(\w)\(~' => '$1 (', //Слепляем скобки со словами '~\(\s~s' => '(', '~\s\)~s' => ')', ); $rules_main = array( // Оторвать тире от слова '~(\w)- ~' => '$1 - ', //Знаки с предшествующим пробелом… нехорошо! '~('.$phrase_end.') +('.$punctuation.'|'.$sym['hellip'].')~' => '$1$2', '~('.$punctuation.')('.$phrase_begin.')~' => '$1 $2', //Для точки отдельно '~(\w)\s(?:\.)(\s|$)~' => '$1.$2', //Неразрывные названия организаций и абревиатуры форм собственности // ~ почему не один  ? // ! названия организаций тоже могут содержать пробел ! '~('.$abbr.')\s+"(.*)"~' => $sym['lnowrap'].'$1 "$2"'.$sym['rnowrap'], //Нельзя отрывать сокращение от относящегося к нему слова. //Например: тов. Сталин, г. Воронеж //Ставит пробел, если его нет. И точку тоже ставит на всякий случай. :) '~(^|[^a-zA-Zа-яА-Я])('.$shortages.')\.?\s?([А-Я0-9]+)~s' => '$1$2.'.$sym['nbsp'].'$3', //Не отделять стр., с. и т.д. от номера. '~(стр|с|табл|рис|илл)\.?\s*(\d+)~si' => '$1.'.$sym['nbsp'].'$2', //Не разделять 2007 г., ставить пробел, если его нет. Ставит точку, если её нет. '~([0-9]+)\s*([гГ])\.\s~s' => '$1'.$sym['nbsp'].'$2. ', //Неразрывный пробел между цифрой и единицей измерения '~([0-9]+)\s*('.$metrics.')~s' => '$1'.$sym['nbsp'].'$2', //Сантиметр в квадрате '~(\s'.$metrics.')(\d+)~' => '$1$2', // Знак дефиса или два знака дефиса подряд — на знак длинного тире. // + Нельзя разрывать строку перед тире, например: Знание — сила, Курить — здоровью вредить. '/(\s+)(--?|—|—)(?=\s)/' => $sym['nbsp'].$sym['mdash'], '/(^)(--?|—|—)(?=\s)/' => $sym['mdash'], // Знак дефиса, ограниченный с обоих сторон цифрами — на знак короткого тире. '/(?<=\d)-(?=\d)/' => $sym['ndash'], // Нельзя оставлять в конце строки предлоги и союзы '/(?<=\s|^|\W)('.$prepos.')(\s+)/i' => '$1'.$sym['nbsp'], // Нельзя отрывать частицы бы, ли, же от предшествующего слова, например: как бы, вряд ли, так же. "/(?<=\\S)(\\s+)(ж|бы|б|же|ли|ль|либо|или)(?=$html_tag*[\\s)!?.])/i" => $sym['nbsp'].'$2', // Неразрывный пробел после инициалов. '~([А-ЯA-Z]\.)\s?([А-ЯA-Z]\.)\s?([А-Яа-яA-Za-z]+)~s' => '$1$2'.$sym['nbsp'].'$3', // Сокращения сумм не отделяются от чисел. '~(\d+)\s?('.$counts.')~s' => '$1'.$sym['nbsp'].'$2', //«уе» в денежных суммах '~(\d+|'.$counts.')\s?уе~s' => '$1'.$sym['nbsp'].'у.е.', // Денежные суммы, расставляя пробелы в нужных местах. '~(\d+|'.$counts.')\s?('.$money.')~s' => '$1'.$sym['nbsp'].'$2', // Неразрывные пробелы в кавычках //"/($sym[lquote]\S*)(\s+)(\S*$sym[rquote])/U" => '$1'.$sym["nbsp"].'$3', //Номер версии программы пишем неразрывно с буковкой v. '~([vв]\.) ?([0-9])~i' => '$1'.$sym['nbsp'].'$2', '~(\w) ([vв]\.)~i' => '$1'.$sym['nbsp'].'$2', //% не отделяется от числа '~([0-9]+)\s+%~' => '$1%', ); $str = $this->apply_rules($rules_quotes, $str); // Вложенные кавыки. $i=0; $lev = 5; while (($i<$lev) && preg_match('~«(?:[^»]*?)«~', $str)){ $i++; $str = preg_replace('~«([^»]*?)«(.*?)»~s', '«$1'.$sym['lquote2'].'$2'.$sym['rquote2'], $str); } $i=0; while (($i++<$lev) && preg_match('~»(?:[^«]*?)»~', $str)){ $i++; $str = preg_replace('~»([^«]*?)»~', $sym['rquote2'].'$1»', $str); } $str = $this->apply_rules($rules_strict, $str); $str = $this->apply_rules($rules_main, $str); $str = $this->apply_rules($rules_symbols, $str); $str = $this->apply_rules($rules_braces, $str); if($this->_options[self::CONVERT_E]){ $str = str_replace(array('Ё', 'ё'), array('Е', 'е'), $str); } if($this->_options[self::HTML_ENTITIES]){ $str = htmlentities($str); } return $str; } } typograf/handler.php000066600000001163150472616010010534 0ustar00process($word); print $out_txt;typograf/img/loader.gif000066600000004761150472616010011126 0ustar00GIF89aѦنʞoon~~}bba! NETSCAPE2.0!Created with ajaxload.info! , $AeZ <䠒ÌQ46<A ßHa:ID0Fa\xG3! O:-RjTJ*  t ~" ds]  )t-"i;H>nQg]_* R3 GI? ˴v$ýj3!! , $0eZy0q PУW )";qX^D50 Ո%`rJ{ 1$ʈ!! , $@e6$Ơ` 3*=  P\"F`P-d5V"2|?n"!( )e4xyc?   3 #wyJ l% o^[b_0 V T[0m $4>'VZ c3$X%!! , $`e:D3 H0,'j0Qs L(2HMj#ȉB \Oi`u=YEVL=I  > suI WJm| \"_b0 BcV"d]*K1" H|@B?I4# S$-||!! , $4ea:D hI /K$W- 0(`3F=pf@tQ  {f~*yS*mg) enu E^Z^ g@ kw(b& -w#" xW"t ##%U$`to!! , $4ea:* 1v/Kdzk#  F Y" % E  Cb AI4$ (z:2 mI Ll## F##>F!! , $4ea:* 1v/KdVtKG227D"$)Qqp8 y l |~6zw2j# F " % VC ]6a$ Q :2 \  EF I&x "͓F4$]#x!! , $4eZi䠒J16e E,C\3 ^3[ S|?!;typograf/img/typograf.gif000066600000000477150472616010011513 0ustar00GIF89a6poniigIHFba_TTR[ZXĵʘVVV֣|DCAjjjdddkjjOOONNL@@?^^^kkkqqpwvtutr{zxIIHppp!6,\@pH,ȤR Ux&P6@!a̦|lM@V H03%DG- DG5D#G&0B,KBA;noneditable/editor_plugin.js000066600000012520150472616010012240 0ustar00(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret";r=tinymce.isGecko?"\u200B":"\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return''+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+""})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();noneditable/editor_plugin_src.js000066600000040573150472616010013120 0ustar00/** * 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 TreeWalker = tinymce.dom.TreeWalker; var externalName = 'contenteditable', internalName = 'data-mce-' + externalName; var VK = tinymce.VK; function handleContentEditableSelection(ed) { var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret'; // Setup invisible character use zero width space on Gecko since it doesn't change the height of the container invisibleChar = tinymce.isGecko ? '\u200B' : '\uFEFF'; // Returns the content editable state of a node "true/false" or null function getContentEditable(node) { var contentEditable; // Ignore non elements if (node.nodeType === 1) { // Check for fake content editable contentEditable = node.getAttribute(internalName); if (contentEditable && contentEditable !== "inherit") { return contentEditable; } // Check for real content editable contentEditable = node.contentEditable; if (contentEditable !== "inherit") { return contentEditable; } } return null; }; // Returns the noneditable parent or null if there is a editable before it or if it wasn't found function getNonEditableParent(node) { var state; while (node) { state = getContentEditable(node); if (state) { return state === "false" ? node : null; } node = node.parentNode; } }; // Get caret container parent for the specified node function getParentCaretContainer(node) { while (node) { if (node.id === caretContainerId) { return node; } node = node.parentNode; } }; // Finds the first text node in the specified node function findFirstTextNode(node) { var walker; if (node) { walker = new TreeWalker(node, node); for (node = walker.current(); node; node = walker.next()) { if (node.nodeType === 3) { return node; } } } }; // Insert caret container before/after target or expand selection to include block function insertCaretContainerOrExpandToBlock(target, before) { var caretContainer, rng; // Select block if (getContentEditable(target) === "false") { if (dom.isBlock(target)) { selection.select(target); return; } } rng = dom.createRng(); if (getContentEditable(target) === "true") { if (!target.firstChild) { target.appendChild(ed.getDoc().createTextNode('\u00a0')); } target = target.firstChild; before = true; } //caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style:'border: 1px solid red'}, invisibleChar); caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar); if (before) { target.parentNode.insertBefore(caretContainer, target); } else { dom.insertAfter(caretContainer, target); } rng.setStart(caretContainer.firstChild, 1); rng.collapse(true); selection.setRng(rng); return caretContainer; }; // Removes any caret container except the one we might be in function removeCaretContainer(caretContainer) { var child, currentCaretContainer, lastContainer; if (caretContainer) { rng = selection.getRng(true); rng.setStartBefore(caretContainer); rng.setEndBefore(caretContainer); child = findFirstTextNode(caretContainer); if (child && child.nodeValue.charAt(0) == invisibleChar) { child = child.deleteData(0, 1); } dom.remove(caretContainer, true); selection.setRng(rng); } else { currentCaretContainer = getParentCaretContainer(selection.getStart()); while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) { if (currentCaretContainer !== caretContainer) { child = findFirstTextNode(caretContainer); if (child && child.nodeValue.charAt(0) == invisibleChar) { child = child.deleteData(0, 1); } dom.remove(caretContainer, true); } lastContainer = caretContainer; } } }; // Modifies the selection to include contentEditable false elements or insert caret containers function moveSelection() { var nonEditableStart, nonEditableEnd, isCollapsed, rng, element; // Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside function hasSideContent(element, left) { var container, offset, walker, node, len; container = rng.startContainer; offset = rng.startOffset; // If endpoint is in middle of text node then expand to beginning/end of element if (container.nodeType == 3) { len = container.nodeValue.length; if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) { return; } } else { // Can we resolve the node by index if (offset < container.childNodes.length) { // Browser represents caret position as the offset at the start of an element. When moving right // this is the element we are moving into so we consider our container to be child node at offset-1 var pos = !left && offset > 0 ? offset-1 : offset; container = container.childNodes[pos]; if (container.hasChildNodes()) { container = container.firstChild; } } else { // If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element return !left ? element : null; } } // Walk left/right to look for contents walker = new TreeWalker(container, element); while (node = walker[left ? 'prev' : 'next']()) { if (node.nodeType === 3 && node.nodeValue.length > 0) { return; } else if (getContentEditable(node) === "true") { // Found contentEditable=true element return this one to we can move the caret inside it return node; } } return element; }; // Remove any existing caret containers removeCaretContainer(); // Get noneditable start/end elements isCollapsed = selection.isCollapsed(); nonEditableStart = getNonEditableParent(selection.getStart()); nonEditableEnd = getNonEditableParent(selection.getEnd()); // Is any fo the range endpoints noneditable if (nonEditableStart || nonEditableEnd) { rng = selection.getRng(true); // If it's a caret selection then look left/right to see if we need to move the caret out side or expand if (isCollapsed) { nonEditableStart = nonEditableStart || nonEditableEnd; var start = selection.getStart(); if (element = hasSideContent(nonEditableStart, true)) { // We have no contents to the left of the caret then insert a caret container before the noneditable element insertCaretContainerOrExpandToBlock(element, true); } else if (element = hasSideContent(nonEditableStart, false)) { // We have no contents to the right of the caret then insert a caret container after the noneditable element insertCaretContainerOrExpandToBlock(element, false); } else { // We are in the middle of a noneditable so expand to select it selection.select(nonEditableStart); } } else { rng = selection.getRng(true); // Expand selection to include start non editable element if (nonEditableStart) { rng.setStartBefore(nonEditableStart); } // Expand selection to include end non editable element if (nonEditableEnd) { rng.setEndAfter(nonEditableEnd); } selection.setRng(rng); } } }; function handleKey(ed, e) { var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement; function getNonEmptyTextNodeSibling(node, prev) { while (node = node[prev ? 'previousSibling' : 'nextSibling']) { if (node.nodeType !== 3 || node.nodeValue.length > 0) { return node; } } }; function positionCaretOnElement(element, start) { selection.select(element); selection.collapse(start); } function canDelete(backspace) { var rng, container, offset, nonEditableParent; function removeNodeIfNotParent(node) { var parent = container; while (parent) { if (parent === node) { return; } parent = parent.parentNode; } dom.remove(node); moveSelection(); } function isNextPrevTreeNodeNonEditable() { var node, walker, nonEmptyElements = ed.schema.getNonEmptyElements(); walker = new tinymce.dom.TreeWalker(container, ed.getBody()); while (node = (backspace ? walker.prev() : walker.next())) { // Found IMG/INPUT etc if (nonEmptyElements[node.nodeName.toLowerCase()]) { break; } // Found text node with contents if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) { break; } // Found non editable node if (getContentEditable(node) === "false") { removeNodeIfNotParent(node); return true; } } // Check if the content node is within a non editable parent if (getNonEditableParent(node)) { return true; } return false; } if (selection.isCollapsed()) { rng = selection.getRng(true); container = rng.startContainer; offset = rng.startOffset; container = getParentCaretContainer(container) || container; // Is in noneditable parent if (nonEditableParent = getNonEditableParent(container)) { removeNodeIfNotParent(nonEditableParent); return false; } // Check if the caret is in the middle of a text node if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) { return true; } // Resolve container index if (container.nodeType == 1) { container = container.childNodes[offset] || container; } // Check if previous or next tree node is non editable then block the event if (isNextPrevTreeNodeNonEditable()) { return false; } } return true; } startElement = selection.getStart() endElement = selection.getEnd(); // Disable all key presses in contentEditable=false except delete or backspace nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement); if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) { // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) { return; } e.preventDefault(); // Arrow left/right select the element and collapse left/right if (keyCode == VK.LEFT || keyCode == VK.RIGHT) { var left = keyCode == VK.LEFT; // If a block element find previous or next element to position the caret if (ed.dom.isBlock(nonEditableParent)) { var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling; var walker = new TreeWalker(targetElement, targetElement); var caretElement = left ? walker.prev() : walker.next(); positionCaretOnElement(caretElement, !left); } else { positionCaretOnElement(nonEditableParent, left); } } } else { // Is arrow left/right, backspace or delete if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) { caretContainer = getParentCaretContainer(startElement); if (caretContainer) { // Arrow left or backspace if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) { nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true); if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { e.preventDefault(); if (keyCode == VK.LEFT) { positionCaretOnElement(nonEditableParent, true); } else { dom.remove(nonEditableParent); return; } } else { removeCaretContainer(caretContainer); } } // Arrow right or delete if (keyCode == VK.RIGHT || keyCode == VK.DELETE) { nonEditableParent = getNonEmptyTextNodeSibling(caretContainer); if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { e.preventDefault(); if (keyCode == VK.RIGHT) { positionCaretOnElement(nonEditableParent, false); } else { dom.remove(nonEditableParent); return; } } else { removeCaretContainer(caretContainer); } } } if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) { e.preventDefault(); return false; } } } }; ed.onMouseDown.addToTop(function(ed, e) { var node = ed.selection.getNode(); if (getContentEditable(node) === "false" && node == e.target) { // Expand selection on mouse down we can't block the default event since it's used for drag/drop moveSelection(); } }); ed.onMouseUp.addToTop(moveSelection); ed.onKeyDown.addToTop(handleKey); ed.onKeyUp.addToTop(moveSelection); }; tinymce.create('tinymce.plugins.NonEditablePlugin', { init : function(ed, url) { var editClass, nonEditClass, nonEditableRegExps; // Converts configured regexps to noneditable span items function convertRegExpsToNonEditable(ed, args) { var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass); // Don't replace the variables when raw is used for example on undo/redo if (args.format == "raw") { return; } while (i--) { content = content.replace(nonEditableRegExps[i], function(match) { var args = arguments, index = args[args.length - 2]; // Is value inside an attribute then don't replace if (index > 0 && content.charAt(index - 1) == '"') { return match; } return '' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + ''; }); } args.content = content; }; editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " "; nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; // Setup noneditable regexps array nonEditableRegExps = ed.getParam("noneditable_regexp"); if (nonEditableRegExps && !nonEditableRegExps.length) { nonEditableRegExps = [nonEditableRegExps]; } ed.onPreInit.add(function() { handleContentEditableSelection(ed); if (nonEditableRegExps) { ed.selection.onBeforeSetContent.add(convertRegExpsToNonEditable); ed.onBeforeSetContent.add(convertRegExpsToNonEditable); } // Apply contentEditable true/false on elements with the noneditable/editable classes ed.parser.addAttributeFilter('class', function(nodes) { var i = nodes.length, className, node; while (i--) { node = nodes[i]; className = " " + node.attr("class") + " "; if (className.indexOf(editClass) !== -1) { node.attr(internalName, "true"); } else if (className.indexOf(nonEditClass) !== -1) { node.attr(internalName, "false"); } } }); // Remove internal name ed.serializer.addAttributeFilter(internalName, function(nodes, name) { var i = nodes.length, node; while (i--) { node = nodes[i]; if (nonEditableRegExps && node.attr('data-mce-content')) { node.name = "#text"; node.type = 3; node.raw = true; node.value = node.attr('data-mce-content'); } else { node.attr(externalName, null); node.attr(internalName, null); } } }); // Convert external name into internal name ed.parser.addAttributeFilter(externalName, function(nodes, name) { var i = nodes.length, node; while (i--) { node = nodes[i]; node.attr(internalName, node.attr(externalName)); node.attr(externalName, null); } }); }); }, getInfo : function() { return { longname : 'Non editable elements', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin); })();save/editor_plugin.js000066600000003041150472616010010710 0ustar00(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();save/editor_plugin_src.js000066600000004575150472616010011574 0ustar00/** * 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() { tinymce.create('tinymce.plugins.Save', { init : function(ed, url) { var t = this; t.editor = ed; // Register commands ed.addCommand('mceSave', t._save, t); ed.addCommand('mceCancel', t._cancel, t); // Register buttons ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'}); ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'}); ed.onNodeChange.add(t._nodeChange, t); ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave'); }, getInfo : function() { return { longname : 'Save', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save', version : tinymce.majorVersion + "." + tinymce.minorVersion }; }, // Private methods _nodeChange : function(ed, cm, n) { var ed = this.editor; if (ed.getParam('save_enablewhendirty')) { cm.setDisabled('save', !ed.isDirty()); cm.setDisabled('cancel', !ed.isDirty()); } }, // Private methods _save : function() { var ed = this.editor, formObj, os, i, elementId; formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form'); if (ed.getParam("save_enablewhendirty") && !ed.isDirty()) return; tinyMCE.triggerSave(); // Use callback instead if (os = ed.getParam("save_onsavecallback")) { if (ed.execCallback('save_onsavecallback', ed)) { ed.startContent = tinymce.trim(ed.getContent({format : 'raw'})); ed.nodeChanged(); } return; } if (formObj) { ed.isNotDirty = true; if (formObj.onsubmit == null || formObj.onsubmit() != false) formObj.submit(); ed.nodeChanged(); } else ed.windowManager.alert("Error: No form element found."); }, _cancel : function() { var ed = this.editor, os, h = tinymce.trim(ed.startContent); // Use callback instead if (os = ed.getParam("save_oncancelcallback")) { ed.execCallback('save_oncancelcallback', ed); return; } ed.setContent(h); ed.undoManager.clear(); ed.nodeChanged(); } }); // Register plugin tinymce.PluginManager.add('save', tinymce.plugins.Save); })();searchreplace/css/searchreplace.css000066600000000252150472616010013455 0ustar00.panel_wrapper {height:85px;} .panel_wrapper div.current {height:85px;} /* IE */ * html .panel_wrapper {height:100px;} * html .panel_wrapper div.current {height:100px;} searchreplace/editor_plugin.js000066600000002026150472616010012555 0ustar00(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();searchreplace/js/searchreplace.js000066600000006732150472616010013136 0ustar00tinyMCEPopup.requireLangPack(); var SearchReplaceDialog = { init : function(ed) { var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode"); t.switchMode(m); f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string"); // Focus input field f[m + '_panel_searchstring'].focus(); mcTabs.onChange.add(function(tab_id, panel_id) { t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); }); }, switchMode : function(m) { var f, lm = this.lastMode; if (lm != m) { f = document.forms[0]; if (lm) { f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value; f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked; f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked; f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked; } mcTabs.displayTab(m + '_tab', m + '_panel'); document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none"; document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none"; this.lastMode = m; } }, searchNext : function(a) { var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; // Get input f = document.forms[0]; s = f[m + '_panel_searchstring'].value; b = f[m + '_panel_backwardsu'].checked; ca = f[m + '_panel_casesensitivebox'].checked; rs = f['replace_panel_replacestring'].value; if (tinymce.isIE) { r = ed.getDoc().selection.createRange(); } if (s == '') return; function fix() { // Correct Firefox graphics glitches // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? r = se.getRng().cloneRange(); ed.getDoc().execCommand('SelectAll', false, null); se.setRng(r); }; function replace() { ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE }; // IE flags if (ca) fl = fl | 4; switch (a) { case 'all': // Move caret to beginning of text ed.execCommand('SelectAll'); ed.selection.collapse(true); if (tinymce.isIE) { ed.focus(); r = ed.getDoc().selection.createRange(); while (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); r.select(); replace(); fo = 1; if (b) { r.moveEnd("character", -(rs.length)); // Otherwise will loop forever } } tinyMCEPopup.storeSelection(); } else { while (w.find(s, ca, b, false, false, false, false)) { replace(); fo = 1; } } if (fo) tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced')); else tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); return; case 'current': if (!ed.selection.isCollapsed()) replace(); break; } se.collapse(b); r = se.getRng(); // Whats the point if (!s) return; if (tinymce.isIE) { ed.focus(); r = ed.getDoc().selection.createRange(); if (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); r.select(); } else tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); tinyMCEPopup.storeSelection(); } else { if (!w.find(s, ca, b, false, false, false, false)) tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound')); else fix(); } } }; tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog); searchreplace/langs/ru_dlg.js000066600000002365150472616010012277 0ustar00tinyMCE.addI18n('ru.searchreplace_dlg',{ searchnext_desc:"\u041D\u0430\u0439\u0442\u0438 \u0435\u0449\u0435", notfound:"\u041F\u043E\u0438\u0441\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D. \u041F\u043E\u0438\u0441\u043A\u043E\u0432\u044B\u0439 \u0440\u044F\u0434 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D", search_title:"\u041D\u0430\u0439\u0442\u0438", replace_title:"\u041D\u0430\u0439\u0442\u0438 / \u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C", allreplaced:"\u0412\u0441\u0435 \u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u044F \u0441\u0442\u0440\u043E\u043A\u0438 \u0431\u044B\u043B\u0438 \u0437\u0430\u043C\u0435\u043D\u0435\u043D\u044B", findwhat:"\u041D\u0430\u0439\u0442\u0438", replacewith:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430", direction:"\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435", up:"\u0412\u0432\u0435\u0440\u0445 ", down:"\u0412\u043D\u0438\u0437", mcase:"\u0423\u0447\u0438\u0442\u044B\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0438\u0441\u0442\u0440", findnext:"\u041D\u0430\u0439\u0442\u0438 \u0434\u0430\u043B\u0435\u0435", replace:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C", replaceall:"\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u0435" });searchreplace/langs/en_dlg.js000066600000000675150472616010012255 0ustar00tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"});searchreplace/editor_plugin_src.js000066600000003307150472616010013427 0ustar00/** * 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() { tinymce.create('tinymce.plugins.SearchReplacePlugin', { init : function(ed, url) { function open(m) { // Keep IE from writing out the f/r character to the editor // instance while initializing a new dialog. See: #3131190 window.focus(); ed.windowManager.open({ file : url + '/searchreplace.htm', width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)), height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)), inline : 1, auto_focus : 0 }, { mode : m, search_string : ed.selection.getContent({format : 'text'}), plugin_url : url }); }; // Register commands ed.addCommand('mceSearch', function() { open('search'); }); ed.addCommand('mceReplace', function() { open('replace'); }); // Register buttons ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'}); ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'}); ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch'); }, getInfo : function() { return { longname : 'Search/Replace', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin); })();searchreplace/searchreplace.htm000066600000012162150472616010012670 0ustar00 {#searchreplace_dlg.replace_title}
        wordcount/editor_plugin.js000066600000003650150472616010012004 0ustar00(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();wordcount/editor_plugin_src.js000066600000006211150472616010012647 0ustar00/** * 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() { tinymce.create('tinymce.plugins.WordCount', { block : 0, id : null, countre : null, cleanre : null, init : function(ed, url) { var t = this, last = 0, VK = tinymce.VK; t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == ’ t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g); t.update_rate = ed.getParam('wordcount_update_rate', 2000); t.update_on_delete = ed.getParam('wordcount_update_on_delete', false); t.id = ed.id + '-word-count'; ed.onPostRender.add(function(ed, cm) { var row, id; // Add it to the specified id or the theme advanced path id = ed.getParam('wordcount_target_id'); if (!id) { row = tinymce.DOM.get(ed.id + '_path_row'); if (row) tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '0'); } else { tinymce.DOM.add(id, 'span', {}, '0'); } }); ed.onInit.add(function(ed) { ed.selection.onSetContent.add(function() { t._count(ed); }); t._count(ed); }); ed.onSetContent.add(function(ed) { t._count(ed); }); function checkKeys(key) { return key !== last && (key === VK.ENTER || last === VK.SPACEBAR || checkDelOrBksp(last)); } function checkDelOrBksp(key) { return key === VK.DELETE || key === VK.BACKSPACE; } ed.onKeyUp.add(function(ed, e) { if (checkKeys(e.keyCode) || t.update_on_delete && checkDelOrBksp(e.keyCode)) { t._count(ed); } last = e.keyCode; }); }, _getCount : function(ed) { var tc = 0; var tx = ed.getContent({ format: 'raw' }); if (tx) { tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars // deal with html entities tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' '); tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation var wordArray = tx.match(this.countre); if (wordArray) { tc = wordArray.length; } } return tc; }, _count : function(ed) { var t = this; // Keep multiple calls from happening at the same time if (t.block) return; t.block = 1; setTimeout(function() { if (!ed.destroyed) { var tc = t._getCount(ed); tinymce.DOM.setHTML(t.id, tc.toString()); setTimeout(function() {t.block = 0;}, t.update_rate); } }, 1); }, getInfo: function() { return { longname : 'Word Count plugin', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount); })(); autoresize/editor_plugin.js000066600000002742150472616010012153 0ustar00(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();autoresize/editor_plugin_src.js000066600000007707150472616010013030 0ustar00/** * 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() { /** * Auto Resize * * This plugin automatically resizes the content area to fit its content height. * It will retain a minimum height, which is the height of the content area when * it's initialized. */ tinymce.create('tinymce.plugins.AutoResizePlugin', { /** * Initializes the plugin, this will be executed after the plugin has been created. * This call is done before the editor instance has finished it's initialization so use the onInit event * of the editor instance to intercept that event. * * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. * @param {string} url Absolute URL to where the plugin is located. */ init : function(ed, url) { var t = this, oldSize = 0; if (ed.getParam('fullscreen_is_enabled')) return; /** * This method gets executed each time the editor needs to resize. */ function resize() { var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight; // Get height differently depending on the browser used myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight); // Don't make it smaller than the minimum height if (myHeight > t.autoresize_min_height) resizeHeight = myHeight; // If a maximum height has been defined don't exceed this height if (t.autoresize_max_height && myHeight > t.autoresize_max_height) { resizeHeight = t.autoresize_max_height; body.style.overflowY = "auto"; de.style.overflowY = "auto"; // Old IE } else { body.style.overflowY = "hidden"; de.style.overflowY = "hidden"; // Old IE body.scrollTop = 0; } // Resize content element if (resizeHeight !== oldSize) { deltaSize = resizeHeight - oldSize; DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px'); oldSize = resizeHeight; // WebKit doesn't decrease the size of the body element until the iframe gets resized // So we need to continue to resize the iframe down until the size gets fixed if (tinymce.isWebKit && deltaSize < 0) resize(); } }; t.editor = ed; // Define minimum height t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight)); // Define maximum height t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0)); // Add padding at the bottom for better UX ed.onInit.add(function(ed){ ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px'); }); // Add appropriate listeners for resizing content area ed.onChange.add(resize); ed.onSetContent.add(resize); ed.onPaste.add(resize); ed.onKeyUp.add(resize); ed.onPostRender.add(resize); if (ed.getParam('autoresize_on_init', true)) { ed.onLoad.add(resize); ed.onLoadContent.add(resize); } // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample'); ed.addCommand('mceAutoResize', resize); }, /** * Returns information about the plugin as a name/value array. * The current keys are longname, author, authorurl, infourl and version. * * @return {Object} Name/value array containing information about the plugin. */ getInfo : function() { return { longname : 'Auto Resize', author : 'Moxiecode Systems AB', authorurl : 'http://tinymce.moxiecode.com', infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize', version : tinymce.majorVersion + "." + tinymce.minorVersion }; } }); // Register plugin tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin); })(); insertdatetime/editor_plugin.js000066600000003613150472616010013000 0ustar00(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length