Plato on Github
Report Home
space/explorer/_popup.js
Maintainability
58.59
Lines of code
450
Difficulty
38.13
Estimated Errors
5.24
Function weight
By Complexity
By SLOC
/*global Y, window, document, YUI */ YUI.add("space/explorer/_popup", function (Y) { var _lang = {}, _handlePreventEnterSubmit, api, node, createPanel, html, dirArray, srcPath, dstPath, foldername, validate, copied = 0, failed, messageHtml, fullfilenames, POPUP_LIMIT_OF_NAME = 16, message = { "title" : "", "content" : "", "icon" : "", "bodyHtml" : "", "button" : "" }, closePopup, noItemSelected, createFolderHandler, createFolder, createPath, alertHandler, deleteFilesHandler, deleteSuccessHandler, deleteFailedHandler, movetoSuccessHandler, movetoFailedHandler, movetoProcessHandler, copytoCanNotFolder, copytoSuccessHandler, copytoFailedHandler, copytoProcessHandler, copytoFinishHandler, uploadingTerminationHandler, readonlyHandler, renameFailedHandler, messageHandler, init, onviewload; closePopup = function () { if (Y.one(".input-rename")) { Y.one(".input-rename").focus(); } }; noItemSelected = function () { api.alert({ title : _lang.oops, content : _lang.noItemSelected }); }; createFolderHandler = function (msgName, id, popupData) { createPanel = api.createPopup(node.get("innerHTML"), {width: 410}); var contentBoxNode = createPanel.get("contentBox"); contentBoxNode.one(".bd .storage").set("innerHTML", popupData.label + "
(" + popupData.freesize + " Free)
"); if (popupData.freeBytes < 1048576) { contentBoxNode.one("#folder-name").set("disabled", "disabled"); contentBoxNode.one(".yui3-button").setAttribute("disabled"); } else { contentBoxNode.one("#folder-name").set("disabled", "").focus(); contentBoxNode.one(".yui3-button").removeAttribute("disabled"); } createPath = popupData.path; contentBoxNode.one(".btn-create").on("click", createFolder); contentBoxNode.one("#folder-name").on("keypress", _handlePreventEnterSubmit); }; createFolder = function (e) { var validateMsg, contentBoxNode; validateMsg = { nameBegins : _lang.nameBegins, nameEmpty : _lang.nameEmpty, nameIllegal : _lang.nameIllegal, nameTooLong : _lang.nameTooLong }; contentBoxNode = createPanel.get("contentBox"); foldername = contentBoxNode.one("#folder-name").get("value"); validate = Y.Init.toolkit.filenameValidate(foldername, validateMsg); if (validate.isCorrect) { contentBoxNode.one(".yui3-button-close").simulate("click"); api.broadcast("create-submit", { path : createPath, name : foldername }); } else { contentBoxNode.one(".error").set("innerHTML", validate.message); contentBoxNode.one(".error").setStyle("display", "block"); } }; deleteFilesHandler = function (msgName, id, popupData) { message = ""; if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.confirm({ title : _lang.confirmDeleteTitle, content : _lang.confirmDeleteDesc.replace("{files}", message) }, function (result) { if (result) { message = ""; if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.alert({ title : _lang.deletingTitle, content : _lang.deletingDesc.replace("{files}", message) }); api.broadcast("delete-confirm", popupData); } else { api.broadcast("delete-cancel", false); // TODO - The original 2nd param is e. } }); }; deleteSuccessHandler = function (msgName, id, popupData) { message = ""; if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.alert({ title : _lang.deleteCompleteTitle, content : _lang.deleteCompleteDesc.replace("{files}", message) }); api.broadcast("refesh", popupData.parentPath); }; deleteFailedHandler = function (msgName, id, popupData) { api.alert({ title : _lang.oops, content : _lang.deleteFailedDesc }); }; movetoProcessHandler = function (msgName, id, popupData) { message = ""; if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.inform({ title : _lang.movingTitle, content : [ '
', '
' + _lang.movingDesc.replace("{files}", message) + '
' ].join("") }); }; movetoSuccessHandler = function (msgName, id, popupData) { api.broadcast("refesh", popupData.data.srcPath); message = ""; if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.alert({ title : _lang.moveCompleteTitle, content : _lang.moveCompleteDesc.replace("{files}", message) }, function () { api.broadcast("reload"); }); }; movetoFailedHandler = function (msgName, id, popupData) { messageHtml = ""; message = ""; if (!Y.Lang.isUndefined(_lang.deviceMessage[popupData.respone.errno])) { messageHtml = _lang.deviceMessage[popupData.respone.errno] + " "; } else { messageHtml = _lang.deviceMessage["5001"] + " "; } if (popupData.count > 1) { if (popupData.isMultiFolder && popupData.isMultiFile) { message = _lang.folderAndFile; } else if (popupData.isMultiFolder) { message = _lang.folders; } else if (popupData.isMultiFile) { message = _lang.files; } } else { if (popupData.hasFolder) { message = _lang.folder; } else { message = _lang.file; } } api.alert({ title : _lang.oops, content : messageHtml + _lang.moveFailedDesc.replace("{files}", message) }); }; copytoCanNotFolder = function () { api.alert({ title: _lang.oops, content: _lang.cannotCopyFolder }); }; copytoProcessHandler = function (msgName, id, d) { var node, // The contentBox of current dialog. time; // The well-formatted time. time = Y.Init.toolkit.formatFileName(d.data.currentFile, POPUP_LIMIT_OF_NAME); node = api.getDefaultPopup().get("contentBox"); node.one(".status .number").setContent(" " + copied + " "); node.one(".now .file").setContent(time); copied += 1; }; copytoFinishHandler = function (msgName, id, d) { var type, i, html = "", messageHtml = ""; copied = 0; if (d.count > 1) { type = _lang.files; } else { type = _lang.file; } if (d.data.failed.number > 0) { if ((d.count - d.data.failed.number) > 0) { copied = d.count - d.data.failed.number; } for (i = 0; i < d.data.failed.number; i += 1) { messageHtml += "
" + d.data.failed.messages[i].filename + "
"; messageHtml += "
" + d.data.failed.messages[i].errmsg + "
"; } html = "
" + _lang.copyFailedDesc. replace("{copiedNum}", "
" + copied + "
"). replace("{total}", "
" + d.data.srcFilenames.length + "
"). replace("{files}", type) + "
" + "
" + "
" + _lang.copyFailedList.replace("{num}", d.data.failed.number) + "
" + "
" + messageHtml + "
"; } else { html = _lang.copySuccessDesc.replace("{files}", type); } api.alert({ title : _lang.copyCompleteTitle, content : html }, function () { api.broadcast("reload"); }); }; _handlePreventEnterSubmit = function (e) { if (e.keyCode === 13) { e.preventDefault(); } }; readonlyHandler = function () { api.alert({ title : _lang.oops, content : _lang.deviceMessage["5010"] }); }; renameFailedHandler = function (msgName, id, popupData) { api.alert({ title : _lang.oops, content : popupData.errmsg + "
" + _lang.renameFailedDesc }); }; messageHandler = function (msgName, id, messageData) { if (node.one(".error") && typeof node.one(".error") !== "undefined") { node.one(".error").setContent(messageData); } api.alert({ title : _lang.oops, content : messageData + _lang.createFailedDesc }); }; /* Module initialization * @method init * @param api {Y.Sandbox} Module API * @public * @return void */ init = function (sandbox) { Y.log("init()", "info", "#popup"); api = sandbox; api.listen("#folder:create", createFolderHandler); api.listen("#folder:error", messageHandler); api.listen("#folder:create-success", closePopup); api.listen("#listview:no-item-selected", noItemSelected); api.listen("#listview:delete", deleteFilesHandler); api.listen("#listview:delete-success", deleteSuccessHandler); api.listen("#listview:delete-failed", deleteFailedHandler); api.listen("moveto-process", movetoProcessHandler); api.listen("moveto-success", movetoSuccessHandler); api.listen("moveto-failed", movetoFailedHandler); api.listen("copyto-can-not-folder", copytoCanNotFolder); api.listen("copyto-process", copytoProcessHandler); api.listen("copyto-finish", copytoFinishHandler); api.listen("#listview:rename-failed", renameFailedHandler); api.listen("allfiles-readonly", readonlyHandler); }; /* Module content ready event * @method onviewload * @public * @return void */ onviewload = function () { Y.log("onviewload()", "info", "#popup"); node = api.getViewNode(); _lang = { cancel : api.getTrans("cancel", "Cancel"), cannotCopyFolder : api.getTrans("can_not_copy_folder", "Sorry. System can't support to copy folder(s)."), confirmDeleteDesc : api.getTrans("confirm_delete_desc", "Are you sure you want to delete the {files}?"), confirmDeleteTitle : api.getTrans("confirm_delete_title", "Confirm delete?"), copyCompleteTitle : api.getTrans("copy_complete", "Copy Complete"), copyFailedDesc : api.getTrans("copy_failed_desc", "{copiedNum} of {total} {files} been copied to the place you selected!"), copyFailedList : api.getTrans("copy_failed_list", "{num} file(s) failed."), copySuccessDesc : api.getTrans("copy_success_desc", "The {files} have been copied to the place you selected!"), createFailedDesc : api.getTrans("create_failed_desc", "Please choose another name."), createFailedTitle : api.getTrans("create_failed", "Create Failed"), deleteCompleteDesc : api.getTrans("delete_complete_desc", "The {files} have been deleted."), deleteCompleteTitle : api.getTrans("delete_complete", "Delete Complete"), deleteFailedDesc : api.getTrans("delete_failed_desc", "Delete failed, please try again."), deleteFailedTitle : api.getTrans("delete_failed_title", "Delete Failed"), deletingDesc : api.getTrans("deleting_message", "Deleting {files}, please wait..."), deletingTitle : api.getTrans("deleting", "Deleting"), file : api.getTrans("file", "file"), files : api.getTrans("files", "files"), folder : api.getTrans("folder", "folder"), folderAndFile : api.getTrans("folder_and_file", "folder/file"), folders : api.getTrans("folders", "folders"), moveCompleteDesc : api.getTrans("move_complete_desc", "The {files} have been moved to the place you selected."), moveCompleteTitle : api.getTrans("move_complete", "Move Complete"), moveFailedDesc : api.getTrans("move_failed_desc", "Failed to move {files} to target directory."), moveFailedTitle : api.getTrans("move_failed", "Move Failed"), movingDesc : api.getTrans("moving_desc", "Moving {files}, please wait..."), movingTitle : api.getTrans("moving", "Moving"), nameBegins : api.getTrans("name_begins_with_dot", "The name can not begin with the character: \".\""), nameEmpty : api.getTrans("name_empty", "Please enter the file/folder name."), nameIllegal : api.getTrans("name_illegal", "These characters cannot be used: \\/:*?\"<>|"), nameTooLong : api.getTrans("name_too_long", "The name is too long, only 215 characters can be entered."), noItemSelected : api.getTrans("no_item_selected", "You didn't select any file."), ok : api.getTrans("ok", "Ok"), oops : api.getTrans("oops", "Oops"), renameFailedDesc : api.getTrans("rename_failed_desc", "Please choose another name."), renameFailedTitle : api.getTrans("rename_failed", "Rename Failed") }; api.broadcast("get-device-message", { callback : function (msg) { _lang.deviceMessage = msg; } }); }; api = new Y.Module({ selector: "#popup", init: init, langModule: "space", on: { viewload: onviewload } }); }, "0.0.1", { "group" : "space", "js" : "space/explorer/_popup.js", "css" : "space/explorer/_popup.css", "requires": [ "module", "module-intl", "module-popup", "space/explorer/init", "node-style", "node-event-simulate" ] });