/** | |
* Functions for the ExtendedFileManager, used by manager.php only | |
* Authors: Wei Zhuo, Afru, Krzysztof Kotowicz, Raimund Meyer | |
* Version: Updated on 08-01-2005 by Afru | |
* Version: Updated on 20-06-2006 by Krzysztof Kotowicz | |
* Version: Updated on 17-11-2006 by Raimund Meyer | |
* Version: Updated on 20-01-2008 by Raimund Meyer | |
* Package: ExtendedFileManager (EFM 1.4) | |
* http://www.afrusoft.com/htmlarea | |
*/ | |
function comboSelectValue(c, val) { | |
var ops = c.getElementsByTagName("option"); | |
for (var i = ops.length; --i >= 0;) { | |
var op = ops[i]; | |
op.selected = (op.value == val); | |
} | |
c.value = val; | |
} | |
//Translation | |
function i18n(str) { | |
return Xinha._lc(str, 'ExtendedFileManager'); | |
} | |
//set the alignment options | |
function setAlign(align) | |
{ | |
var selection = document.getElementById('f_align'); | |
for(var i = 0; i < selection.length; i++) | |
{ | |
if(selection.options[i].value == align) | |
{ | |
selection.selectedIndex = i; | |
break; | |
} | |
} | |
} | |
function onTargetChanged() { | |
var f = document.getElementById("f_other_target"); | |
if (this.value == "_other") { | |
f.style.visibility = "visible"; | |
f.select(); | |
f.focus(); | |
} else f.style.visibility = "hidden"; | |
} | |
function init () | |
{ | |
if (typeof imgManager == 'undefined' ) | |
{ | |
setTimeout(init,10); // sometimes we are too hasty | |
return; | |
} | |
var w = 650; | |
var h = 600; | |
window.resizeTo(w,h); | |
var page = Xinha.pageSize(window); | |
window.resizeTo(w,h); | |
var dim = Xinha.viewportSize(window); | |
window.resizeBy(0, page.y - dim.y + 5); | |
dim = Xinha.viewportSize(window); | |
if (!Xinha.is_ie) | |
{ | |
var x = opener.screenX + (opener.outerWidth - dim.x) / 2; | |
var y = opener.screenY + (opener.outerHeight - dim.x) / 2; | |
} | |
else | |
{//IE does not have window.outer... , so center it on the screen at least | |
var x = (self.screen.availWidth - dim.x) / 2; | |
var y = (self.screen.availHeight - dim.y) / 2; | |
} | |
window.moveTo(x,y); | |
__xinha_dlg_init(); | |
__dlg_translate('ExtendedFileManager'); | |
var uploadForm = document.getElementById('uploadForm'); | |
if(uploadForm) uploadForm.target = 'imgManager'; | |
var editor = window.dialogArguments.editor; | |
var param = window.dialogArguments.param; | |
var startDir = null; | |
if(manager_mode=="image" && param) | |
{ | |
var absoluteURL = new RegExp('^https?://'); | |
if (param.f_url.length > 0 && !absoluteURL.test(param.f_url) && typeof param.baseHref == "string") { | |
// URL is not absolute, prepend baseHref | |
param.f_url = param.baseHref + param.f_url; | |
} | |
// strip base_url from url | |
var image_regex = new RegExp( '(https?://[^/]*)?' + base_url.replace(/\/$/, '') ); | |
param.f_url = param.f_url.replace( image_regex, "" ); | |
// The image URL may reference one of the automatically resized images | |
// (when the user alters the dimensions in the picker), clean that up | |
// so it looks right and we get back to a normal f_url | |
var rd = (_resized_dir) ? _resized_dir.replace(Xinha.RE_Specials, '\\$1') + '/' : ''; | |
var rp = _resized_prefix.replace(Xinha.RE_Specials, '\\$1'); | |
var dreg = new RegExp('^(.*/)' + rd + rp + '_([0-9]+)x([0-9]+)_([^/]+)$'); | |
var match = param.f_url.match(dreg); | |
if(dreg.test(param.f_url)) | |
{ | |
param.f_url = RegExp.$1 + RegExp.$4; | |
param.f_width = RegExp.$2; | |
param.f_height = RegExp.$3; | |
} | |
document.getElementById("f_url").value = param["f_url"]; | |
document.getElementById("f_alt").value = param["f_alt"]; | |
document.getElementById("f_title").value = param["f_title"]; | |
document.getElementById("f_border").value = param["f_border"]; | |
document.getElementById("f_width").value = param["f_width"]; | |
document.getElementById("f_height").value = param["f_height"]; | |
document.getElementById("f_margin").value = param["f_margin"]; | |
document.getElementById("f_padding").value = param["f_padding"]; | |
document.getElementById("f_borderColor").value = param["f_borderColor"]; | |
document.getElementById("f_backgroundColor").value = param["f_backgroundColor"]; | |
setAlign(param["f_align"]); | |
document.getElementById("f_url").focus(); | |
document.getElementById("orginal_width").value = param["f_width"]; | |
document.getElementById("orginal_height").value = param["f_height"]; | |
// Locate to the correct directory | |
var dreg = new RegExp('^(.*/)([^/]+)$'); | |
if (dreg.test(param['f_url'])) | |
{ | |
startDir = RegExp.$1; | |
} | |
document.getElementById('f_preview').src = _backend_url + '__function=thumbs&img=' + param.f_url; | |
} | |
else if(manager_mode=="link" && param) | |
{ | |
var target_select = document.getElementById("f_target"); | |
var absoluteURL = new RegExp('^(/|(https?://))'); | |
if (param.f_href.length > 0 && !absoluteURL.test(param.f_href) && typeof param.baseHref == "string") { | |
// URL is not absolute, prepend baseHref | |
param.f_href = param.baseHref + param.f_href; | |
} | |
// strip base_url from href | |
var href_regex = new RegExp( '(https?://[^/]*)?' + base_url.replace(/\/$/, '') ); | |
param.f_href = param.f_href.replace( href_regex, "" ); | |
// Locate to the correct directory | |
var dreg = new RegExp('^(.*/)([^/]+)$'); | |
if (dreg.test(param['f_href'])) | |
{ | |
startDir = RegExp.$1; | |
} | |
else | |
{ | |
startDir = document.cookie.match(/EFMStartDirlink=(.*?)(;|$)/); | |
if (startDir) startDir = startDir[1]; | |
} | |
if (param) | |
{ | |
if ( typeof param["f_href"] != "undefined" ) | |
{ | |
document.getElementById("f_href").value = param["f_href"]; | |
document.getElementById("f_title").value = param["f_title"]; | |
comboSelectValue(target_select, param["f_target"]); | |
if (target_select.value != param.f_target) | |
{ | |
var opt = document.createElement("option"); | |
opt.value = param.f_target; | |
opt.innerHTML = opt.value; | |
target_select.appendChild(opt); | |
opt.selected = true; | |
} | |
} | |
} | |
if ( param["f_usetarget"] == false || manager_show_target != false) | |
{ | |
document.getElementById("f_target_label").style.visibility = "hidden"; | |
document.getElementById("f_target").style.visibility = "hidden"; | |
document.getElementById("f_other_target").style.visibility = "hidden"; | |
} | |
if (target_select && param["f_usetarget"] && manager_show_target != false) | |
{ | |
var opt = document.createElement("option"); | |
opt.value = "_other"; | |
opt.innerHTML = i18n("Other"); | |
target_select.appendChild(opt); | |
target_select.onchange = onTargetChanged; | |
} | |
document.getElementById("f_href").focus(); | |
} | |
else if (!param) | |
{ | |
startDir = document.cookie.match(new RegExp ("EFMStartDir" + manager_mode + "=(.*?)(;|$)")); | |
if (startDir) | |
{ | |
startDir = startDir[1]; | |
} | |
} | |
if ( startDir ) | |
{ | |
iframeUrl += '&dir=' + startDir; | |
var dirPath = document.getElementById('dirPath'); | |
for(var i = 0; i < dirPath.options.length; i++) | |
{ | |
if(dirPath.options[i].value == encodeURIComponent(startDir)) | |
{ | |
dirPath.options[i].selected = true; | |
break; | |
} | |
} | |
}; | |
imgManager.location.replace(iframeUrl); | |
if (manager_mode == 'image' && typeof Xinha.colorPicker != "undefined" && document.getElementById('f_backgroundColor') && document.getElementById('f_backgroundColor').type == 'text') { | |
// Hookup color pickers | |
var pickerConfig = { | |
cellsize:editor.config.colorPickerCellSize, | |
granularity:editor.config.colorPickerGranularity, | |
websafe:editor.config.colorPickerWebSafe, | |
savecolors:editor.config.colorPickerSaveColors | |
}; | |
new Xinha.colorPicker.InputBinding(document.getElementById('f_backgroundColor'),pickerConfig); | |
new Xinha.colorPicker.InputBinding(document.getElementById('f_borderColor'),pickerConfig); | |
} | |
setTimeout(function() { resize();addEvent(window, 'resize', resize); }, 500); | |
} | |
function pasteButton(action) | |
{ | |
var buttonHolder = document.getElementById('pasteBtn'); | |
if (!buttonHolder.firstChild) | |
{ | |
var a = document.createElement('a'); | |
a.href = "javascript:void(0);"; | |
var img = document.createElement('img'); | |
img.src = window.opener.Xinha.getPluginDir('ExtendedFileManager')+'/img/edit_paste.gif'; | |
img.alt = i18n('Paste'); | |
a.appendChild(img); | |
buttonHolder.appendChild(a); | |
} | |
buttonHolder.onclick = function() { | |
if(typeof imgManager != 'undefined') imgManager.paste(action); | |
if (action.action == 'moveFile' || action.action == 'moveDir' ) | |
{ | |
this.onclick = null; | |
this.removeChild(this.firstChild) | |
} | |
} | |
switch (action.action) | |
{ | |
case 'copyFile': | |
buttonHolder.firstChild.title = i18n('Copy "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here'); | |
break; | |
case 'copyDir': | |
buttonHolder.firstChild.title = i18n('Copy folder "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here'); | |
break; | |
case 'moveFile': | |
buttonHolder.firstChild.title = i18n('Move "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here'); | |
break; | |
break; | |
case 'moveDir': | |
buttonHolder.firstChild.title = i18n('Move folder "$file='+action.file+'$" from "$dir='+decodeURIComponent(action.dir)+'$" here'); | |
break; | |
} | |
} | |
function onCancel() | |
{ | |
__dlg_close(null); | |
return false; | |
} | |
function onOK() | |
{ | |
if(manager_mode=="image") | |
{ | |
// pass data back to the calling window | |
var fields = ["f_url", "f_alt", "f_title", "f_align", "f_border", "f_margin", "f_padding", "f_height", "f_width", "f_borderColor", "f_backgroundColor"]; | |
var param = new Object(); | |
for (var i in fields) | |
{ | |
var id = fields[i]; | |
var el = document.getElementById(id); | |
if(id == "f_url" && el.value.indexOf('://') < 0 && el.value ) | |
param[id] = makeURL(base_url,el.value); | |
else | |
param[id] = el.value; | |
} | |
// See if we need to resize the image | |
var origsize = | |
{ | |
w:document.getElementById('orginal_width').value, | |
h:document.getElementById('orginal_height').value | |
} | |
if( (origsize.w != param.f_width) | |
|| (origsize.h != param.f_height) ) | |
{ | |
// Yup, need to resize | |
var resized = Xinha._geturlcontent(window.opener.Xinha.getPluginDir('ExtendedFileManager') + '/' + _backend_url + '&__function=resizer&img=' + encodeURIComponent(document.getElementById('f_url').value) + '&width=' + param.f_width + '&height=' + param.f_height); | |
// alert(resized); | |
resized = eval(resized); | |
if(resized) | |
{ | |
param.f_url = makeURL(base_url, resized); | |
} | |
} | |
__dlg_close(param); | |
return false; | |
} | |
else if(manager_mode=="link") | |
{ | |
var required = { | |
// f_href shouldn't be required or otherwise removing the link by entering an empty | |
// url isn't possible anymore. | |
// "f_href": i18n("You must enter the URL where this link points to") | |
}; | |
for (var i in required) { | |
var el = document.getElementById(i); | |
if (!el.value) { | |
alert(required[i]); | |
el.focus(); | |
return false; | |
} | |
} | |
// pass data back to the calling window | |
var fields = ["f_href", "f_title", "f_target" ]; | |
var param = new Object(); | |
for (var i in fields) { | |
var id = fields[i]; | |
var el = document.getElementById(id); | |
if(id == "f_href" && el.value.indexOf('://') < 0 ) | |
param[id] = makeURL(base_url,el.value); | |
else | |
param[id] = el.value; | |
} | |
if (param.f_target == "_other") | |
param.f_target = document.getElementById("f_other_target").value; | |
// alert(param.f_target); | |
__dlg_close(param); | |
return false; | |
} | |
} | |
//similar to the Files::makeFile() in Files.php | |
function makeURL(pathA, pathB) | |
{ | |
if(pathA.substring(pathA.length-1) != '/') | |
pathA += '/'; | |
if(pathB.charAt(0) == '/'); | |
pathB = pathB.substring(1); | |
return pathA+pathB; | |
} | |
function updateDir(selection) | |
{ | |
var newDir = selection.options[selection.selectedIndex].value; | |
changeDir(newDir); | |
} | |
function goUpDir() | |
{ | |
var selection = document.getElementById('dirPath'); | |
var currentDir = selection.options[selection.selectedIndex].text; | |
if(currentDir.length < 2) | |
return false; | |
var dirs = currentDir.split('/'); | |
var search = ''; | |
for(var i = 0; i < dirs.length - 2; i++) | |
{ | |
search += dirs[i]+'/'; | |
} | |
for(var i = 0; i < selection.length; i++) | |
{ | |
var thisDir = selection.options[i].text; | |
if(thisDir == search) | |
{ | |
selection.selectedIndex = i; | |
var newDir = selection.options[i].value; | |
changeDir(newDir); | |
break; | |
} | |
} | |
} | |
function changeDir(newDir) | |
{ | |
if(typeof imgManager != 'undefined') | |
imgManager.changeDir(newDir); | |
} | |
function updateView() | |
{ | |
refresh(); | |
} | |
function toggleConstrains(constrains) | |
{ | |
var lockImage = document.getElementById('imgLock'); | |
var constrains = document.getElementById('constrain_prop'); | |
if(constrains.checked) | |
{ | |
lockImage.src = "img/locked.gif"; | |
checkConstrains('width') | |
} | |
else | |
{ | |
lockImage.src = "img/unlocked.gif"; | |
} | |
} | |
function checkConstrains(changed) | |
{ | |
//alert(document.form1.constrain_prop); | |
var constrains = document.getElementById('constrain_prop'); | |
if(constrains.checked) | |
{ | |
var obj = document.getElementById('orginal_width'); | |
var orginal_width = parseInt(obj.value); | |
var obj = document.getElementById('orginal_height'); | |
var orginal_height = parseInt(obj.value); | |
var widthObj = document.getElementById('f_width'); | |
var heightObj = document.getElementById('f_height'); | |
var width = parseInt(widthObj.value); | |
var height = parseInt(heightObj.value); | |
if(orginal_width > 0 && orginal_height > 0) | |
{ | |
if(changed == 'width' && width > 0) { | |
heightObj.value = parseInt((width/orginal_width)*orginal_height); | |
} | |
if(changed == 'height' && height > 0) { | |
widthObj.value = parseInt((height/orginal_height)*orginal_width); | |
} | |
} | |
} | |
} | |
function showMessage(newMessage) | |
{ | |
var message = document.getElementById('message'); | |
var messages = document.getElementById('messages'); | |
if(message.firstChild) | |
message.removeChild(message.firstChild); | |
message.appendChild(document.createTextNode(i18n(newMessage))); | |
messages.style.display = "block"; | |
} | |
function addEvent(obj, evType, fn) | |
{ | |
if (obj.addEventListener) { obj.addEventListener(evType, fn, true); return true; } | |
else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; } | |
else { return false; } | |
} | |
function doUpload() | |
{ | |
var uploadForm = document.getElementById('uploadForm'); | |
if(uploadForm) | |
showMessage('Uploading'); | |
} | |
function refresh() | |
{ | |
var selection = document.getElementById('dirPath'); | |
updateDir(selection); | |
} | |
function newFolder() | |
{ | |
function createFolder(folder) | |
{ | |
var selection = document.getElementById('dirPath'); | |
var dir = selection.options[selection.selectedIndex].value; | |
if(folder == thumbdir) | |
{ | |
alert(i18n('Invalid folder name, please choose another folder name.')); | |
return false; | |
} | |
if (folder && folder != '' && typeof imgManager != 'undefined') | |
{ | |
imgManager.newFolder(dir, encodeURI(folder)); | |
} | |
} | |
// IE7 has crippled the prompt() | |
if ( Xinha.ie_version > 6 ) | |
{ | |
popupPrompt(i18n('Please enter name for new folder...'), i18n('Untitled'), createFolder, i18n("New Folder")); | |
} | |
else | |
{ | |
var folder = prompt(i18n('Please enter name for new folder...'), i18n('Untitled')); | |
createFolder(folder); | |
} | |
} | |
function resize() | |
{ | |
var win = Xinha.viewportSize(window); | |
var m = document.getElementById('messages'); | |
var messagesHeight = (m && m.style.display != 'none' ) ? parseInt( document.getElementById('messages').offsetHeight, 10 ) : 0; | |
document.getElementById('imgManager').style.height = parseInt( win.y - 130 - document.getElementById('controls').offsetHeight, 10 ) - messagesHeight + 'px'; | |
return true; | |
} | |
Xinha.addOnloadHandler( init, window ); |