/**
* @description
* 简单上传:点击按钮,直接选择文件上传
* @author Jinqn
* @date 2014-03-31
*/
UE.plugin.register("simpleupload", function() {
var me = this,
isLoaded = false,
containerBtn;
function initUploadBtn() {
var w = containerBtn.offsetWidth || 20,
h = containerBtn.offsetHeight || 20,
btnIframe = document.createElement("iframe"),
btnStyle =
"display:block;width:" +
w +
"px;height:" +
h +
"px;overflow:hidden;border:0;margin:0;padding:0;position:absolute;top:0;left:0;filter:alpha(opacity=0);-moz-opacity:0;-khtml-opacity: 0;opacity: 0;cursor:pointer;";
domUtils.on(btnIframe, "load", function() {
var timestrap = (+new Date()).toString(36),
wrapper,
btnIframeDoc,
btnIframeBody;
btnIframeDoc =
btnIframe.contentDocument || btnIframe.contentWindow.document;
btnIframeBody = btnIframeDoc.body;
wrapper = btnIframeDoc.createElement("div");
wrapper.innerHTML =
'
" +
'';
wrapper.className = "edui-" + me.options.theme;
wrapper.id = me.ui.id + "_iframeupload";
btnIframeBody.style.cssText = btnStyle;
btnIframeBody.style.width = w + "px";
btnIframeBody.style.height = h + "px";
btnIframeBody.appendChild(wrapper);
if (btnIframeBody.parentNode) {
btnIframeBody.parentNode.style.width = w + "px";
btnIframeBody.parentNode.style.height = w + "px";
}
var form = btnIframeDoc.getElementById("edui_form_" + timestrap);
var input = btnIframeDoc.getElementById("edui_input_" + timestrap);
var iframe = btnIframeDoc.getElementById("edui_iframe_" + timestrap);
domUtils.on(input, "change", function() {
if (!input.value) return;
var loadingId = "loading_" + (+new Date()).toString(36);
var params =
utils.serializeParam(me.queryCommandValue("serverparam")) || "";
var imageActionUrl = me.getActionUrl(me.getOpt("imageActionName"));
var allowFiles = me.getOpt("imageAllowFiles");
me.focus();
me.execCommand(
"inserthtml",
'
'
);
function callback() {
try {
var link,
json,
loader,
body = (iframe.contentDocument || iframe.contentWindow.document)
.body,
result = body.innerText || body.textContent || "";
json = new Function("return " + result)();
link = me.options.imageUrlPrefix + json.url;
if (json.state == "SUCCESS" && json.url) {
loader = me.document.getElementById(loadingId);
domUtils.removeClasses(loader, "loadingclass");
loader.setAttribute("src", link);
loader.setAttribute("_src", link);
loader.setAttribute("alt", json.original || "");
loader.removeAttribute("id");
me.fireEvent("contentchange");
} else {
showErrorLoader && showErrorLoader(json.state);
}
} catch (er) {
showErrorLoader &&
showErrorLoader(me.getLang("simpleupload.loadError"));
}
form.reset();
domUtils.un(iframe, "load", callback);
}
function showErrorLoader(title) {
if (loadingId) {
var loader = me.document.getElementById(loadingId);
loader && domUtils.remove(loader);
me.fireEvent("showmessage", {
id: loadingId,
content: title,
type: "error",
timeout: 4000
});
}
}
/* 判断后端配置是否没有加载成功 */
if (!me.getOpt("imageActionName")) {
errorHandler(me.getLang("autoupload.errorLoadConfig"));
return;
}
// 判断文件格式是否错误
var filename = input.value,
fileext = filename ? filename.substr(filename.lastIndexOf(".")) : "";
if (
!fileext ||
(allowFiles &&
(allowFiles.join("") + ".").indexOf(fileext.toLowerCase() + ".") ==
-1)
) {
showErrorLoader(me.getLang("simpleupload.exceedTypeError"));
return;
}
domUtils.on(iframe, "load", callback);
form.action = utils.formatUrl(
imageActionUrl +
(imageActionUrl.indexOf("?") == -1 ? "?" : "&") +
params
);
form.submit();
});
var stateTimer;
me.addListener("selectionchange", function() {
clearTimeout(stateTimer);
stateTimer = setTimeout(function() {
var state = me.queryCommandState("simpleupload");
if (state == -1) {
input.disabled = "disabled";
} else {
input.disabled = false;
}
}, 400);
});
isLoaded = true;
});
btnIframe.style.cssText = btnStyle;
containerBtn.appendChild(btnIframe);
}
return {
bindEvents: {
ready: function() {
//设置loading的样式
utils.cssRule(
"loading",
".loadingclass{display:inline-block;cursor:default;background: url('" +
this.options.themePath +
this.options.theme +
"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n" +
".loaderrorclass{display:inline-block;cursor:default;background: url('" +
this.options.themePath +
this.options.theme +
"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;" +
"}",
this.document
);
},
/* 初始化简单上传按钮 */
simpleuploadbtnready: function(type, container) {
containerBtn = container;
me.afterConfigReady(initUploadBtn);
}
},
outputRule: function(root) {
utils.each(root.getNodesByTagName("img"), function(n) {
if (/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr("class"))) {
n.parentNode.removeChild(n);
}
});
},
commands: {
simpleupload: {
queryCommandState: function() {
return isLoaded ? 0 : -1;
}
}
}
};
});