/*
 * DEXTUploadX5 - Application
 * http://www.dextsolution.com
 *
 * Copyright ⓒ DEXTSolution Inc.
 */
function api_setColumnVisible(key, visible) { if (!key) { errorOut("ESVG-00086", gRB.get("ESVG-00086", "_사용자 정의 열 키 값이 없습니다.")); } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, key)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setColumnVisible", "key", "String (no empty)"]); } else if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setColumnVisible", "visible", "Boolean"]); } else {
gui.toggleColumnVisible(key, visible === true); } } function api_createColumn(format) { if (!format) { errorOut("ESVG-00085", gRB.get("ESVG-00085", "_사용자 정의 열을 만들기 위한 정보가 없습니다.")); } else if (!format.key) { errorOut("ESVG-00086", gRB.get("ESVG-00086", "_사용자 정의 열을 만들기 위한 키 값이 없습니다.")); } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, format.key)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_createColumn", "format.key", "String (no empty)"]); } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(format.key)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다."));
} else if (["name", "size", "op"].indexOf(format.key.toLowerCase()) >= 0) { errorOut("ESVG-00090", gRB.get("ESVG-00090", "_'name', 'size', 'op' 이름을 키 값으로 사용할 수 없습니다.")); } else if (isDefined(format.type) && ["text", "list"].indexOf(format.type.toLowerCase()) < 0) { errorOut("ESVG-00087", gRB.get("ESVG-00087", "_사용자 정의 열의 형식은 'text', 'list' 중 하나여야 합니다.")); } else if (isDefined(format.headerAlign) && ["left", "center", "right"].indexOf(format.headerAlign.toLowerCase()) < 0) { errorOut("ESVG-00088", gRB.get("ESVG-00088", "_사용자 정의 열의 헤더 정렬은 'left', 'center', 'right' 중 하나입니다.")); } else if (isDefined(format.itemAlign) && ["left", "center", "right"].indexOf(format.itemAlign.toLowerCase()) < 0) {
errorOut("ESVG-00089", gRB.get("ESVG-00089", "_사용자 정의 열의 항목 정렬은 'left', 'center', 'right' 중 하나입니다.")); } else if (isDefined(format.width) && !checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, format.width)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_createColumn", "format.width", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (isDefined(format.position) && !checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, format.position)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_createColumn", "format.position", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else {
                          gui.createCustomColumn(format); } } function api_deleteColumn(key) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, key)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_deleteColumn", "key", "String"]); } else if (["name", "size", "op"].indexOf(key.toLowerCase()) >= 0) { errorOut("ESVG-00090", gRB.get("ESVG-00090", "_'name', 'size', 'op' 이름을 키 값으로 사용할 수 없습니다.")); } else { gui.deleteCustomColumn(key); } } function api_show() {  
  setTimeout(function () { try {   console.log("DX5: Call created event."); dispatchDEXTX5Event("created", createDEXTX5Event("created", { id: gvector.elementId })); } finally {   svgh.getAsUnit("UIC-BLIND").hide(); } }, 100); } function api_isWheelEnabled() { return gvector.wheelEnabled; } function api_setWheelEnabled(enable) { gvector.wheelEnabled = (enable === true); } function api_setDownObjects(objs) { gfileEngine.downObjects = objs; } function api_getResourceBundle() { return gRB; } function api_getVersion() { return gvector.version; } function api_getSplitString() {
return gfileEngine.splitString; } function api_setSplitString(str) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, str)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setSplitString", "str", "String"]); } else { gfileEngine.splitString = str; } } function api_getEmptyString() { return gfileEngine.emptyString; } function api_setEmptyString(str) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, str)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setEmptyString", "str", "String"]); } else {
gfileEngine.emptyString = str; } } function api_getAuthkey() { return gfileEngine.licenseKey; } function api_setAuthkey(key) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, key)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setAuthkey", "key", "String"]); } else { gfileEngine.licenseKey = key; } } function api_getUploadURL() { return gfileEngine.uploadUrl; } function api_setUploadURL(url) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, url)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setUploadURL", "url", "String"]); } else if (url.length == 0 || (url.toLowerCase().indexOf("http://") != 0 && url.toLowerCase().indexOf("https://") != 0)) {
errorOut("ESVG-00026", gRB.get("ESVG-00026", "_경로가 올바르지 않습니다.\n파일 업로드 주소는 http 또는 https로 시작하는 전체 경로를 지정해야 합니다.")); } else { gfileEngine.uploadUrl = url; } } function api_getCompressURL() { return gfileEngine.compressURL; } function api_setCompressURL(url) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, url)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setCompressURL", "url", "String"]); } else if (url.length == 0 || (url.toLowerCase().indexOf("http://") != 0 && url.toLowerCase().indexOf("https://") != 0)) { errorOut("ESVG-00080", gRB.get("ESVG-00080", "_경로가 올바르지 않습니다.\n압축 요청 주소는 http 또는 https로 시작하는 전체 경로를 지정해야 합니다."));
} else { gfileEngine.compressURL = url; } } function api_setDownloadLimitSize(limit) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_MINUSONE, tsize)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setDownloadLimitSize", "tsize", gRB.get("TSVG-00016", "_-1 이상인 정수")]); } else { gvector.downloadLimitSize = limit; } } function api_setUploadMode(mode) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, mode)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setUploadMode", "mode", "String"]); } else if (["ORAF", "OROF", "EXNJ"].indexOf(mode.toUpperCase()) == -1) {
errorOut("ESVG-00028", gRB.get("ESVG-00028", "_파일 업로드 방법은 ORAF, OROF, EXNJ 중 하나를 선택해야 합니다.")); } else { gfileEngine.uploadMode = mode.toUpperCase(); } } function api_getUploadMode() { return gfileEngine.uploadMode; } function api_enableResumingUpload(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_enableResumingUpload", "enable", "Boolean"]); } else { gfileEngine.resuming = enable; } } function api_setUploadBlockSize(size) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, size)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setUploadBlockSize", "size", gRB.get("TSVG-00018", "_정수")]); } else if (size < (1024 * 1024) || size > (1024 * 1024 * 1024)) { errorOut("ESVG-00012", gRB.get("ESVG-00012", "_대용량 파일을 나누는 블록의 크기는 1MB ~ 1GB 범위어야 합니다.")); } else { gfileEngine.chunkedBlock = size; } } function api_openFileDialog() { svgh.get("XHTML-INPUT-FILES").click(); } function api_openFolderDialog() { if (gbrowser.isChrome) { svgh.get("XHTML-INPUT-FOLDER").click(); } else {
errorOut("ESVG-00071", gRB.get("ESVG-00071", "_폴더를 추가하려면 크롬 브라우저를 사용하세요.")); } } function api_addFileList(list) { if (!list) {     } else if (!isFileList(list)) { errorOut("ESVG-00016", gRB.get("ESVG-00016", "_대상은 FileList 객체가 아닙니다.")); } else if (list.length == 0) {     } else { var success = registerLocalFiles(list); if (!success) { resetHtmlFiles(); } } } function api_addEntriesForChrome(dataTransferItemList) { var cnt = 0, list = []; function traverseTreeForChrome(item, path) {   if (item.isFile) { item.file(function (f) {
  if (path.indexOf("/") == 0) f.dx5RelativePath = path.substring(1) + "/" + f.name; else if (path) f.dx5RelativePath = path + "/" + f.name; else f.dx5RelativePath = ""; list.push(f); cnt--; if (cnt == 0) { var success = registerLocalFiles(list); if (!success) { resetHtmlFiles(); } } }); } else if (item.isDirectory) {   path = item.fullPath; item.createReader().readEntries(function (entries) { cnt += entries.length; for (var i = 0, len = entries.length; i < len; i++) { traverseTreeForChrome(entries[i], path); }
cnt--; if (cnt == 0) { var success = registerLocalFiles(list); if (!success) { resetHtmlFiles(); } } }); } } cnt = dataTransferItemList.length; for (var i = 0, len = dataTransferItemList.length, item = null; i < len; i++) {     item = dataTransferItemList[i].webkitGetAsEntry(); if (item) { traverseTreeForChrome(item, ""); } } } function api_addVirtualFile(vf) { if (gvector.uitype == "SINGLE") { errorOut("ESVG-00013", gRB.get("ESVG-00013", "_단일형(single) UI에서는 가상 파일을 등록할 수 없습니다.")); } else if (!vf) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [gRB.get("TSVG-00019", "_가상 파일")]);
} else { registerVirtualFiles([vf]); } } function api_addVirtualFileList(vfs) { if (gvector.uitype == "SINGLE") { errorOut("ESVG-00013", gRB.get("ESVG-00013", "_단일형(single) UI에서는 가상 파일을 등록할 수 없습니다.")); } else if (!vfs) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [gRB.get("TSVG-00020", "_가상 파일 배열 객체")]); } else if (!Array.isArray(vfs)) { errorOut("ESVG-00002", gRB.get("ESVG-00002", "_대상은 배열이 아닙니다.")); } else if (vfs.length == 0) { errorOut("ESVG-00003", gRB.get("ESVG-00003", "_콜렉션 또는 배열의 길이가 0입니다.")); } else {
registerVirtualFiles(vfs); } } function api_getMaxFileCount() { return gvector.maxFileCount; } function api_setMaxFileCount(count, withVF) { if (gvector.uitype == "SINGLE") { errorOut("ESVG-00014", gRB.get("ESVG-00014", "_단일형(single) UI에서는 허용 가능한 파일의 개수를 변경할 수 없습니다.")); } else if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_MINUSONE, count)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMaxFileCount", "count", gRB.get("TSVG-00016", "_-1 이상인 정수")]); } else {
gvector.maxFileCount = count; gvector.maxFileCountWithVF = withVF === true ? true : false; gui.updateFilterInfo(); } } function api_getMaxFileSize() { return gvector.maxFileSize; } function api_setMaxFileSize(size) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_MINUSONE, size)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMaxFileSize", "size", gRB.get("TSVG-00016", "_-1 이상인 정수")]); } else { gvector.maxFileSize = size; gui.updateFilterInfo(); }
} function api_getMinFileSize() { return gvector.minFileSize; } function api_setMinFileSize(size) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_MINUSONE, size)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMinFileSize", "size", gRB.get("TSVG-00016", "_-1 이상인 정수")]); } else { gvector.minFileSize = size; gui.updateFilterInfo(); } } function api_getMaxTotalSize() { return gvector.maxTotalSize; } function api_setMaxTotalSize(tsize, withVF) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_MINUSONE, tsize)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMaxTotalSize", "tsize", gRB.get("TSVG-00016", "_-1 이상인 정수")]);
} else { gvector.maxTotalSize = tsize; gvector.maxTotalSizeWithVF = withVF === true ? true : false; gui.updateFilterInfo(); } } function api_setFilterSilence(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setFilterSilence", "enable", "Boolean"]); } else { gvector.filterSilence = enable; } } function api_getExtentionFilter(reverse) { var exts = (reverse === true ? gvector.reversedFilters : gvector.filters); var str = "";
exts.forEach(function (v, i) { str += "*" + v + (i + 1 < exts.length ? "," : ""); }); return str; } function api_setExtentionFilter(filterString, reverse) { if (!checkStrongDataType(USER_DATA_TYPE.STRING_WITH_EMPTY, filterString)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setExtentionFilter", "filterString", "String(with empty)"]); return; } var nfilters = [], tokens = filterString.split(";"); for (var i = 0, len = tokens.length, c = "", dotIndex = 0; i < len; i++) { c = trim(tokens[i].replace(/\*+/, '')).toLowerCase();
dotIndex = c.lastIndexOf("."); if (dotIndex >= 0) c = c.substring(dotIndex + 1);     if (c && c.length > 0) nfilters.push("." + c); }   var compareTarget = reverse === true ? gvector.filters : gvector.reversedFilters; var duplicateds = SETOPS.intersect(compareTarget, nfilters); if (duplicateds.length > 0) { errorOut("ESVG-00056", gRB.get("ESVG-00056", "_필터링할 확장자({0})가 이미 등록되어 있으므로 필터 설정 작업을 취소합니다."), [reverse === true ? gRB.get("TSVG-00007", "_순필터") : gRB.get("TSVG-00008", "_역필터")]); return; } if (reverse === true) { gvector.reversedFilters = nfilters;
} else { gvector.filters = nfilters;         gsvgHelper.get("XHTML-INPUT-FILES").accept = ""; gsvgHelper.get("XHTML-INPUT-FILES").accept = nfilters.join(","); }   gui.updateFilterInfo(); } function api_isAllowNoExtension() { return gvector.allowedNoExtension; } function api_setAllowNoExtension(allow) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, allow)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setAllowNoExtension", "allow", "Boolean"]); } else { gvector.allowedNoExtension = allow;
gui.updateFilterInfo(); } } function api_clearItems(flag) { if (typeof (flag) === "undefined") flag = "ALL"; else if (!checkStrongDataType(USER_DATA_TYPE.STRING, flag)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_clearItems", "flag", "String"]); return; } else if (["FILE", "VIRTUAL", "DVIRTUAL", "ALL"].indexOf(flag.toUpperCase()) == -1) { errorOut("ESVG-00029", gRB.get("ESVG-00029", "_파일을 초기화하는 옵션은 FILE, VIRTUAL, DVIRTUAL, ALL 중 하나를 선택해야 합니다.")); return; } else {
flag = flag.toUpperCase(); } switch (flag) { case "FILE": removeItems(queryItems("ID", { type: "FILE" }), true, false); break; case "VIRTUAL":       removeItems(queryItems("ID", { type: "VIRTUAL" }), true, false); break; case "DVIRTUAL": gfileEngine.xfiles = new DX5FileList(); break; default: gfileEngine.xfiles = new DX5FileList(); removeItems(queryItems("ID", {}), true, false); break; } } function api_getTotalItemCount(onlyLocal) { return gfileEngine.ufiles.getLength(onlyLocal === true ? true : false); }
function api_getTotalFileSize(onlyLocal) { return gfileEngine.ufiles.getTotalSize(onlyLocal === true ? true : false); } function api_getItems(onlyLocal, isOrigin) { var arr = []; var ids = (onlyLocal === true ? queryItems("ID", { type: "FILE" }) : queryItems("ID", {})); for (var i = 0, len = ids.length, t = null; i < len; i++) { t = gfileEngine.ufiles.getItem(ids[i]); arr.push(isOrigin === true ? t : clonejson(t)); } return arr; } function api_addItems(items) { if (!items) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [gRB.get("TSVG-00022", "_파일 항목 배열 객체")]); } else {
for (var i = 0, len = items.length, t = null; i < len; i++) { t = items[i]; if (t.toString() != "[object DX5FileItem]") { errorOut("ESVG-00054", gRB.get("ESVG-00054", "_파일 항목 객체가 아닙니다.")); return; } else if (t.type != "FILE") { errorOut("ESVG-00055", gRB.get("ESVG-00055", "_로컬 파일 항목만 등록할 수 있습니다.")); return; } gfileEngine.ufiles.push(t); gsortedList.push(t.id); } } } function api_getSelectedItems(onlyLocal) { var arr = []; var ids = api_getSelectedItemIds(); for (var i = 0, t = null; i < ids.length; i++) { t = gfileEngine.ufiles.getItem(ids[i]);
if (onlyLocal === true) { if (t.type == "FILE") arr.push(clonejson(t)); } else { arr.push(clonejson(t)); } } return arr; } function api_getItemIds(onlyLocal) { var arr = []; if (onlyLocal === true) { arr = queryItems("ID", { type: "FILE" }); } else { arr = queryItems("ID", {}); } return arr; } function api_getSelectedItemIds(onlyLocal) { var arr = []; for (var i = 0, len = gselectedList.length, t = null; i < len; i++) { if (onlyLocal === true) { t = gfileEngine.ufiles.getItem(gselectedList[i]); if (t.type == "FILE") arr.push(t.id); } else {
arr.push(gselectedList[i]); } } return arr; } function api_getSelectedIndices(onlyLocal) { var arr = [];     gsortedList.forEach(function (v, i) {   if (gselectedList.indexOf(v) >= 0) { if (onlyLocal === true) { t = gfileEngine.ufiles.getItem(v); if (t.type == "FILE") arr.push(i); } else { arr.push(i); } } }); return arr; } function api_getItemById(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getItemById", "id", "String"]); return null;
} if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return null; } var t = gfileEngine.ufiles.getItem(id); return t ? clonejson(t) : null; } function api_getItemByIndex(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getItemByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return null; } if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]);
return null; } var id = gsortedList[index]; var t = gfileEngine.ufiles.getItem(id); return t ? clonejson(t) : null; } function api_getCheckedItems(onlyLocal) { var arr = []; var items = (onlyLocal === true) ? queryItems("ITEM", { checked: true, type: "FILE" }) : queryItems("ITEM", { checked: true }); for (var i = 0, len = items.length; i < len; i++) { arr.push(clonejson(items[i])); } return arr; } function api_getCheckedIds(onlyLocal) { return (onlyLocal === true) ? queryItems("ID", { checked: true, type: "FILE" }) : queryItems("ITEM", { checked: true }); }
function api_getItemId(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getItemId", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return null; } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return null; } else return gsortedList[index]; } function api_getItemIndex(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getItemIndex", "id", "String"]); return undefined; } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return undefined; } else return gsortedList.indexOf(id); } function api_lockById(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_lockById", "id", "String"]); return false;
} else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false; } else { var item = gfileEngine.ufiles.getItem(id); if (item.type != "VIRTUAL") { errorOut("ESVG-00064", gRB.get("ESVG-00064", "_가상 파일만 잠금 혹은 잠금 해제할 수 있습니다.")); return false; } else { item.lock = true; item.update(); return true; } } } function api_lockByIndex(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_lockByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return false;
} else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return false; } else { var item = gfileEngine.ufiles.getItem(gsortedList[index]); if (item.type != "VIRTUAL") { errorOut("ESVG-00064", gRB.get("ESVG-00064", "_가상 파일만 잠금 혹은 잠금 해제할 수 있습니다.")); return false; } else { item.lock = true; item.update(); return true; } } } function api_unlockById(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_unlockById", "id", "String"]);
return false; } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false; } else { var item = gfileEngine.ufiles.getItem(id); if (item.type != "VIRTUAL") { errorOut("ESVG-00064", gRB.get("ESVG-00064", "_가상 파일만 잠금 혹은 잠금 해제할 수 있습니다.")); return false; } else { item.lock = false; item.update(); return true; } } } function api_unlockByIndex(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_unlockByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return false;
} else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return false; } else { var item = gfileEngine.ufiles.getItem(gsortedList[index]); if (item.type != "VIRTUAL") { errorOut("ESVG-00064", gRB.get("ESVG-00064", "_가상 파일만 잠금 혹은 잠금 해제할 수 있습니다.")); return false; } else { item.lock = false; item.update(); return true; } } } function api_getTotalRemovedFileCount() { return gfileEngine.xfiles.getLength(); } function api_getTotalRemovedFileSize() { return gfileEngine.xfiles.getTotalSize(); }
function api_getRemovedFileIds() { var arr = []; for (var i = 0, len = gfileEngine.xfiles.getLength() ; i < len; i++) { arr.push(gfileEngine.xfiles[i].id); } return arr; } function api_getRemovedFiles() { var arr = []; var ids = api_getRemovedFileIds(); for (var i = 0, len = ids.length, t = null; i < len; i++) { t = gfileEngine.xfiles.getItem(ids[i]); arr.push(clonejson(t)); } return arr; } function api_getRemovedFileById(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getRemovedFileById", "id", "String"]); return null;
} var t = gfileEngine.xfiles.getItem(id); if (!t) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return null; } else return clonejson(t); } function api_removeById(id, perma, fireEvent) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_removeById", "id", "String"]); return false; } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false;
} else { var item = gfileEngine.ufiles.getItem(id); if (item.lock === true) { errorOut("ESVG-00051", gRB.get("ESVG-00051", "_대상은 잠겨있습니다.")); return false; } else { return removeItems([id], perma === true, fireEvent === true); } } } function api_removeByIndex(index, perma, fireEvent) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_removeByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return false;
} else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return false; } else { var id = gsortedList[index]; var item = gfileEngine.ufiles.getItem(id); if (item.lock === true) { errorOut("ESVG-00051", gRB.get("ESVG-00051", "_대상은 잠겨있습니다.")); return false; } else { return removeItems([id], perma === true, fireEvent === true); } } } function api_removeSelected(perma, fireEvent) { var locked = queryItems("ID", { lock: true }); var intersection = SETOPS.intersect(gselectedList, locked);
if (intersection.length > 0) { errorOut("ESVG-00052", gRB.get("ESVG-00052", "_잠겨 있는 항목이 존재하므로 삭제할 수 없습니다.")); return false; } else if (gselectedList.length == 0) { errorOut("ESVG-00038", gRB.get("ESVG-00038", "_삭제할 대상이 없습니다.")); return false; } else { var sels = cloneArray(gselectedList); return removeItems(sels, perma === true, fireEvent === true); } } function api_removeAll(perma, fireEvent) { var locked = queryItems("ID", { lock: true }); if (locked.length > 0) { errorOut("ESVG-00052", gRB.get("ESVG-00052", "_잠겨 있는 항목이 존재하므로 삭제할 수 없습니다.")); return false;
} else if (gsortedList.length == 0) { errorOut("ESVG-00038", gRB.get("ESVG-00038", "_삭제할 대상이 없습니다.")); return false; } else { var sels = cloneArray(gsortedList); return removeItems(sels, perma === true, fireEvent === true); } } function api_removeChecked(perma, fireEvent) { var locked = queryItems("ID", { lock: true }); var checkedList = queryItems("ID", { checked: true }); var intersection = SETOPS.intersect(checkedList, locked); if (intersection.length > 0) { errorOut("ESVG-00052", gRB.get("ESVG-00052", "_잠겨 있는 항목이 존재하므로 삭제할 수 없습니다.")); return false;
} else if (checkedList.length == 0) { errorOut("ESVG-00038", gRB.get("ESVG-00038", "_삭제할 대상이 없습니다.")); return false; } else { return removeItems(checkedList, perma === true, fireEvent === true); } } function api_purgeRemovedVirtual(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_purgeRemovedVirtual", "id", "String"]); } else { var item = gfileEngine.xfiles.getItem(id); if (!item) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); } else {
gfileEngine.xfiles.removeById(id); } } } function api_revokeVirtualFile(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_revokeVirtualFile", "id", "String"]); return false; } else { var item = gfileEngine.xfiles.getItem(id); if (!item) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false; } else { if (gvector.duplicable === false) {   if (isFileDuplication(item) === true) { errorOut("ESVG-00034", gRB.get("ESVG-00034", "_복구하려는 대상과 중복인 파일이 이미 존재합니다.\n{0}"), [item.name]);
return false; } } var area = svgh.get("UIC-FILE-AREA"), uitem = null; item.type = "VIRTUAL"; gfileEngine.ufiles.push(item); gfileEngine.xfiles.removeByObject(item); uitem = gui.createUIItem(item); area.appendChild(uitem); gsortedList.push(item.id); if (gvector.uitype == "TILE") { if (!item.thumbnail) { var oThumb = svgh.get(item.id + "-THUMB"); svgh.attr(oThumb, "xlink:href", "../assets/icons/" + getIconFilename(item.name, true)); } } if (svgh.get("UIC-HEADER-CHECKER") && gfileEngine.ufiles.length > 0) { var count = 0, len = gfileEngine.ufiles.length;
for (var i = 0, item = null; i < len; i++) { item = gfileEngine.ufiles[i]; count += (item.checked ? 1 : 0); } svgh.get("UIC-HEADER-CHECKER-NOT").style.display = count == len ? "none" : "block"; svgh.get("UIC-HEADER-CHECKER-CHK").style.display = count == len ? "block" : "none"; } gui.updateCurrentFilesInfo();   if (gvector.autoSortingType > 0) { sortItems("name", "S", gvector.autoSortingType == 1 ? "asc" : "desc"); } gui.updateUI(); return true; } } } function api_revokeAllVirtualFiles() { if (gfileEngine.xfiles.length == 0) { errorOut("ESVG-00050", gRB.get("ESVG-00050", "_삭제된 가상 파일이 없습니다."));
return false; } else { var arr = []; gfileEngine.xfiles.forEach(function (v, i) { arr.push(v); }); if (gvector.duplicable === false) {   var rs = checkDuplication(arr); if (rs.not.length > 0) { errorOut("ESVG-00034", gRB.get("ESVG-00034", "_복구하려는 대상과 중복인 파일이 이미 존재합니다.\n{0}"), [rs.getNotAllowedNames("\n")]); return false; } } var area = svgh.get("UIC-FILE-AREA"), uitem = null; arr.forEach(function (v, i) { v.type = "VIRTUAL"; gfileEngine.ufiles.push(v); gfileEngine.xfiles.removeByObject(v); uitem = gui.createUIItem(v); area.appendChild(uitem);
gsortedList.push(v.id); if (gvector.uitype == "TILE") { if (!v.thumbnail) { var oThumb = svgh.get(v.id + "-THUMB"); svgh.attr(oThumb, "xlink:href", "../assets/icons/" + getIconFilename(v.name, true)); } } }); if (svgh.get("UIC-HEADER-CHECKER") && gfileEngine.ufiles.length > 0) { var count = 0, len = gfileEngine.ufiles.length; for (var i = 0, item = null; i < len; i++) { item = gfileEngine.ufiles[i]; count += (item.checked ? 1 : 0); } svgh.get("UIC-HEADER-CHECKER-NOT").style.display = count == len ? "none" : "block"; svgh.get("UIC-HEADER-CHECKER-CHK").style.display = count == len ? "block" : "none";
} gui.updateCurrentFilesInfo();   if (gvector.autoSortingType > 0) { sortItems("name", "S", gvector.autoSortingType == 1 ? "asc" : "desc"); } gui.updateUI(); return true; } } function api_checkAll(allOrNot) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, allOrNot)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkAll", "allOrNot", "Boolean"]); } else if (gfileEngine.ufiles.length > 0) { var checker = svgh.get("UIC-HEADER-CHECKER"); if (checker) { svgh.get("UIC-HEADER-CHECKER-NOT").style.display = allOrNot ? "none" : "block";
svgh.get("UIC-HEADER-CHECKER-CHK").style.display = allOrNot ? "block" : "none"; } for (var i = 0, len = gfileEngine.ufiles.length, item = null, oUse = null; i < len; i++) { item = gfileEngine.ufiles[i]; item.checked = allOrNot; checkItem(item); } } } function api_checkById(id, checked) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkById", "id", "String"]); } else if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, checked)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkById", "checked", "Boolean"]);
} else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); } else { var item = gfileEngine.ufiles.getItem(id); item.checked = checked; checkItem(item); if (svgh.get("UIC-HEADER-CHECKER") && gfileEngine.ufiles.length > 0) { var count = 0, len = gfileEngine.ufiles.length; for (var i = 0, item = null; i < len; i++) { item = gfileEngine.ufiles[i]; count += (item.checked ? 1 : 0); } svgh.get("UIC-HEADER-CHECKER-NOT").style.display = count == len ? "none" : "block"; svgh.get("UIC-HEADER-CHECKER-CHK").style.display = count == len ? "block" : "none";
} } } function api_checkByIndex(index, checked) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkByIndex", "id", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, checked)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkByIndex", "checked", "Boolean"]); } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]);
} else { var item = gfileEngine.ufiles.getItem(gsortedList[index]); item.checked = checked; checkItem(item); if (svgh.get("UIC-HEADER-CHECKER") && gfileEngine.ufiles.length > 0) { var count = 0, len = gfileEngine.ufiles.length; for (var i = 0, item = null; i < len; i++) { item = gfileEngine.ufiles[i]; count += (item.checked ? 1 : 0); } svgh.get("UIC-HEADER-CHECKER-NOT").style.display = count == len ? "none" : "block"; svgh.get("UIC-HEADER-CHECKER-CHK").style.display = count == len ? "block" : "none"; }
} } function api_changeToVirtualFile(id, openUrl, downUrl) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_changeToVirtualType", "id", "String"]); } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); } else { var item = gfileEngine.ufiles.getItem(id); if (item.type !== "FILE") { errorOut("ESVG-00030", gRB.get("ESVG-00030", "_로컬 파일만 가상 파일로 형식 변환이 가능합니다.")); } else {
item.toVirtual(openUrl, downUrl); } } } function api_changeStatus(id, to) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_changeStatus", "id", "String"]); } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, to)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_changeStatus", "to", "String"]); } else if (["WAIT", "DONE"].indexOf(to.toUpperCase()) == -1) { errorOut("ESVG-00032", gRB.get("ESVG-00032", "_파일의 상태 값은 WAIT, DONE 중 하나를 선택해야 합니다.")); } else if (gsortedList.indexOf(id) < 0) {
errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); } else { var item = gfileEngine.ufiles.getItem(id); item.status = to; gui.updateUIItem(item); } } function api_checkDuplication(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_checkDuplication", "enable", "Boolean"]); } else {   gvector.duplicable = !enable; } } function api_getMetaDataByIndex(index, name) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getMetaDataByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return undefined; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getMetaDataByIndex", "name", "String (no empty)"]); return undefined; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return undefined;
} else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return undefined; } else { var id = gsortedList[index]; var item = gfileEngine.ufiles.getItem(id); if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, item.meta[name])) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [name]); return undefined; } else { return item.meta[name]; } } } function api_getMetaDataById(id, name) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getMetaDataById", "id", "String (no empty)"]); return undefined; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getMetaDataById", "name", "String (no empty)"]); return undefined; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return undefined;
} else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return undefined; } else { var item = gfileEngine.ufiles.getItem(id); if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, item.meta[name])) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [name]); return undefined; } else { return item.meta[name]; } } } function api_setMetaDataByIndex(index, name, value) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMetaDataByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]);
return false; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMetaDataByIndex", "name", "String (no empty)"]); return false; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return false; } else if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, value)) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), ["value"]);
return false; } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return false; } else { var id = gsortedList[index]; var item = gfileEngine.ufiles.getItem(id);   item.meta[name] = value.toString(); item.update(); return true; } } function api_setMetaDataById(id, name, value) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMetaDataById", "id", "String (no empty)"]); return false;
} else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setMetaDataById", "name", "String (no empty)"]); return false; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return false; } else if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, value)) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), ["value"]); return false;
} else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false; } else { var item = gfileEngine.ufiles.getItem(id);   item.meta[name] = value.toString(); item.update(); return true; } } function api_deleteMetaDataByIndex(index, name) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_deleteMetaDataByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return false;
} else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_deleteMetaDataByIndex", "name", "String (no empty)"]); return false; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return false; } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); return false;
} else { var id = gsortedList[index]; var item = gfileEngine.ufiles.getItem(id); if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, item.meta[name])) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [name]); return false; } else { var ret = delete item.meta[name];  item.update(); return ret; } } } function api_deleteMetaDataById(id, name) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_deleteMetaDataById", "id", "String (no empty)"]); return false;
} else if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_deleteMetaDataByIndex", "name", "String (no empty)"]); return false; } else if (!new RegExp("^[a-z]+[a-z0-9_-]*$", "gi").test(name)) { errorOut("ESVG-00062", gRB.get("ESVG-00062", "_메타데이터 이름의 첫 문자는 반드시 영문자이어야 하며, 영문자와 숫자, '-', '_' 외에 다른 문자를 사용할 수 없습니다.")); return false; } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); return false;
} else { var item = gfileEngine.ufiles.getItem(id); if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, item.meta[name])) { errorOut("ESVG-00001", gRB.get("ESVG-00001", "_{0}이(가) 정의되지 않았습니다."), [name]); return false; } else { var ret = delete item.meta[name]; item.update(); return ret; } } } function api_getResponse(index) { if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, index)) {   return cloneArray(gfileEngine.response); } else if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) {  
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getResponse", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return null; } else if (index >= gfileEngine.response.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, "응답 개수"]); return null; } return gfileEngine.response[index]; } function api_getUploadStatus() { return clonejson(guploadStatus); } function api_getDownloadStatus() { return clonejson(gdownloadStatus); } function api_stopUploading() { gfileEngine.stopUploading(); }
function api_stopDownloading() { gfileEngine.stopDownloading(); } function api_stopCompressWaiting() { gfileEngine.stopCompressWaiting(); } function api_hasUploadableItems() { var arr = queryItems("ID", { type: "FILE", status: "WAIT" }); return (arr.length > 0); } function api_upload(flag) { if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, flag)) { flag = "AUTO"; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, flag)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_upload", "flag", "String"]); return;
} else if (["AUTO", "CHECKED", "SELECTED"].indexOf(flag.toUpperCase()) == -1) { errorOut("ESVG-00042", gRB.get("ESVG-00042", "_파일 업로드 플래그 값은 AUTO, CHECKED, SELECTED 중 하나를 선택해야 합니다.")); return; } else { flag = flag.toUpperCase(); } var targetIds = []; var lessThanIE11 = (gbrowser.isIE === true && navigator.userAgent.indexOf(" MSIE ") >= 0); var caughtEmtpyFile = false; gfileEngine.ufiles.forEach(function (v, i) {   if (v.status != "WAIT" || v.type != "FILE") return; if (flag == "CHECKED" && v.checked === true) { if (v.ofile.size == 0 && lessThanIE11) caughtEmtpyFile = true;
else targetIds.push(v.id); } else if (flag == "SELECTED" && gselectedList.indexOf(v.id) >= 0) { if (v.ofile.size == 0 && lessThanIE11) caughtEmtpyFile = true; else targetIds.push(v.id); } else if (flag == "AUTO") { if (v.ofile.size == 0 && lessThanIE11) caughtEmtpyFile = true; else targetIds.push(v.id); } }); if (caughtEmtpyFile) { errorOut("ESVG-00057", gRB.get("ESVG-00057", "_Internet Explorer 브라우저는 11 버전 이상에서만 0 바이트 파일을 업로드할 수 있습니다.")); } else if (targetIds.length > 0) { gfileEngine.upload(targetIds); } else {
errorOut("ESVG-00043", gRB.get("ESVG-00043", "_업로드할 대상이 없습니다.")); } } function api_downloadById(id) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, id)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_downloadById", "id", "String (no empty)"]); } else if (gsortedList.indexOf(id) < 0) { errorOut("ESVG-00005", gRB.get("ESVG-00005", "_{0}는 존재하지 않는 파일의 고유 아이디입니다."), [id]); } else { var item = gfileEngine.ufiles.getItem(id); if (item.type != "VIRTUAL") { errorOut("ESVG-00031", gRB.get("ESVG-00031", "_가상 파일만 다운로드할 수 있습니다.")); } else if (!item.downUrl) {
errorOut("ESVG-00040", gRB.get("ESVG-00040", "_경로(다운로드, 열기)가 정의되지 않았습니다.")); } else if (genvironment.supportedOSForSingleDownload === false) { errorOut("ESVG-00084", gRB.get("ESVG-00084", "_대상 환경은 파일 다운로드를 지원하지 않습니다.")); return; } else { gfileEngine.download([id], false); } } } function api_download(flag, useMD) { if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, flag)) { flag = "AUTO"; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, flag)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_download", "flag", "String"]); return;
} else if (["AUTO", "CHECKED", "SELECTED"].indexOf(flag.toUpperCase()) == -1) { errorOut("ESVG-00063", gRB.get("ESVG-00063", "_파일 다운로드 플래그 값은 AUTO, CHECKED, SELECTED 중 하나를 선택해야 합니다.")); return; } else if (genvironment.supportedOSForSingleDownload === false && !(useMD === true)) { errorOut("ESVG-00084", gRB.get("ESVG-00084", "_대상 환경은 파일 다운로드를 지원하지 않습니다.")); return; } else if (genvironment.supportedOSForMultiDownload === false && useMD === true) { errorOut("ESVG-00084", gRB.get("ESVG-00084", "_대상 환경은 파일 다운로드를 지원하지 않습니다.")); return;
} else if (gbrowser.isSafari && useMD && parseInt(gbrowser.version) < 10) {   errorOut("ESVG-00067", gRB.get("ESVG-00067", "_대상 브라우저는 다중 파일 다운로드를 지원하지 않습니다.")); return; } else { flag = flag.toUpperCase(); } var arr = []; for (var i = 0, len = gsortedList.length, t = null; i < len; i++) {   if (arr.length > 0 && !useMD) break; t = gfileEngine.ufiles.getItem(gsortedList[i]); if (t.type != "VIRTUAL") continue; if (!t.downUrl) continue; if (flag == "CHECKED" && t.checked === true) { arr.push(t.id); } else if (flag == "SELECTED" && gselectedList.indexOf(t.id) >= 0) { arr.push(t.id);
} else if (flag == "AUTO") { arr.push(t.id); } } if (arr.length == 0) { errorOut("ESVG-00022", gRB.get("ESVG-00022", "_다운로드할 대상 파일이 없습니다.")); } else { gfileEngine.download(arr, useMD); } } function api_downloadCompressed(flag) { if (checkStrongDataType(USER_DATA_TYPE.UNDEFINED, flag)) { flag = "AUTO"; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, flag)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_downloadCompressed", "flag", "String"]); return; } else if (["AUTO", "CHECKED", "SELECTED"].indexOf(flag.toUpperCase()) == -1) {
errorOut("ESVG-00063", gRB.get("ESVG-00063", "_파일 다운로드 플래그 값은 AUTO, CHECKED, SELECTED 중 하나를 선택해야 합니다.")); return; } else if (genvironment.supportedOSForSingleDownload === false) { errorOut("ESVG-00084", gRB.get("ESVG-00084", "_대상 환경은 파일 다운로드를 지원하지 않습니다.")); return; } else { flag = flag.toUpperCase(); } var arr = []; for (var i = 0, len = gsortedList.length, t = null; i < len; i++) { t = gfileEngine.ufiles.getItem(gsortedList[i]); if (t.type != "VIRTUAL") continue; if (flag == "CHECKED" && t.checked === true) { arr.push(t.id);
} else if (flag == "SELECTED" && gselectedList.indexOf(t.id) >= 0) { arr.push(t.id); } else if (flag == "AUTO") { arr.push(t.id); } } if (arr.length == 0) { errorOut("ESVG-00022", gRB.get("ESVG-00022", "_다운로드할 대상 파일이 없습니다.")); } else { gfileEngine.downloadCompressed(arr); } } function api_executeItem(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_removeByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (index >= gsortedList.length || index < 0) {
errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00023", "_파일 개수")]); } else { var id = gsortedList[index]; var item = gfileEngine.ufiles.getItem(id); if (item.type != "VIRTUAL") { errorOut("ESVG-00049", gRB.get("ESVG-00049", "_가상 파일만 열기를 허용합니다.")); } else { gfileEngine.run(item.id); } } } function api_dispatchSVGResize() { onResizeHandler(null); } function api_selectAll() { selectAllFileItems(true); } function api_unselectAll() { unselectAllFileItems(true); } function api_selectByIndex(index) {
if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_selectByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00024", "_항목")]); } else { selectFileItem(gsortedList[index], true); } } function api_unselectByIndex(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_selectByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]);
} else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00024", "_항목")]); } else { unselectFileItem(gsortedList[index], true); } } function api_isSelectedByIndex(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_selectByIndex", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); return undefined; } else if (index >= gsortedList.length || index < 0) {
errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00024", "_항목")]); return undefined; } else { return gselectedList.indexOf(gsortedList[index]) >= 0; } } function api_setHeaderVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderVisible", "visible", "Boolean"]); } else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return;
} else {   if (visible) { gvector.headerHeight = gvector.savedHeaderHeight; gvector.headerTextBaseline = Math.floor(gvector.savedHeaderHeight / 2) + 5; } else { gvector.savedHeaderHeight = gvector.headerHeight; gvector.headerHeight = 0; } gui.updateUI(); } } function api_setHeaderHeight(height) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, height)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderHeight", "height", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (height < gMIN_HEADER_HEIGHT || height > gMAX_HEADER_HEIGHT) {
errorOut("ESVG-00044", gRB.get("ESVG-00044", "_주어진 값[{0}]은 {1} 적합하지 않습니다."), [height, "" + gMIN_HEADER_HEIGHT + "~" + gMAX_HEADER_HEIGHT + ""]); } else if (gvector.headerHeight == 0) { errorOut("ESVG-00045", gRB.get("ESVG-00045", "_헤더 숨김 상태에서는 높이를 조절할 수 없습니다.")); } else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return; } else { gvector.headerHeight = height; gvector.headerTextBaseline = Math.floor(height / 2) + 5; gui.updateUI(); } } function api_setStatusBarVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setStatusBarVisible", "visible", "Boolean"]); } else if (gvector.uitype === "SINGLE") { return; } else {   if (visible) { gvector.footerHeight = gDEF_FOOTER_HEIGHT; gvector.footerTextBaseline = Math.floor(gDEF_FOOTER_HEIGHT / 2) + 5; } else { gvector.footerHeight = 0; } gui.updateUI(); } } function api_setCheckerVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setCheckerVisible", "visible", "Boolean"]); } else if (gvector.uitype === "SINGLE") {
return; } else {   gvector.checkerWidth = visible ? gDEF_CHECKER_WIDTH : 0; var checkers = svgh.queryAll(".css-item-checker"); for (var i = 0, len = checkers.length, t = null; i < len; i++) { t = checkers[i]; if (gvector.checkerWidth === 0) svgh.attr(t, "class", "hide", true); else svgh.removeAttr(t, "class", "hide"); } gui.updateUI(); } } function api_setBorderVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setBorderVisible", "visible", "Boolean"]); } else {
  var ui = svgh.get("UIC-OUTMOST-BORDER"); if (!ui) return; ui.style.display = visible ? "block" : "none"; } } function api_setHeaderSolidColor(hexrgb) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, hexrgb)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderSolidColor", "hexrgb", "String"]); } else if (isHexaColor(hexrgb) == false) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); } else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return;
} else { var header = svgh.get("UIC-HEADER"); if (!header) return; svgh.attr(header, "fill", hexrgb); } } function api_setStatusBarSolidColor(hexrgb) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, hexrgb)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setStatusBarSolidColor", "hexrgb", "String"]); } else if (isHexaColor(hexrgb) == false) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); } else if (gvector.uitype === "SINGLE") { return;
} else { var statusbar = svgh.get("UIC-FOOTER"); if (!statusbar) return; svgh.attr(statusbar, "fill", hexrgb); } } function api_setHeaderGradient(direction, shexrgb, ehexrgb) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, direction)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderGradient", "direction", "String"]); } else if (["VERTICAL", "HORIZONTAL"].indexOf(direction.toUpperCase()) == -1) { errorOut("ESVG-00047", gRB.get("ESVG-00047", "_그레디언트 방향은 VERTICAL, HORIZONTAL 중 하나를 선택해야 합니다.")); } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, shexrgb)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderGradient", "shexrgb", "String"]); } else if (isHexaColor(shexrgb) == false) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [shexrgb]); } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, ehexrgb)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setHeaderGradient", "ehexrgb", "String"]); } else if (isHexaColor(ehexrgb) == false) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [ehexrgb]);
} else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return; } else { var header = svgh.get("UIC-HEADER"); var gradient = svgh.get("UIS-HEADER-BK-GRAD"); var color1 = svgh.get("UIS-HEADER-BK-GRAD-COLOR1"); var color2 = svgh.get("UIS-HEADER-BK-GRAD-COLOR2"); if (!header) return; svgh.attr(gradient, "x2", direction == "VERTICAL" ? "0%" : "100%"); svgh.attr(gradient, "y2", direction == "VERTICAL" ? "100%" : "0%"); svgh.attr(color1, "stop-color", shexrgb); svgh.attr(color2, "stop-color", ehexrgb); svgh.attr(header, "fill", "url(#UIS-HEADER-BK-GRAD)");
} } function api_setBackgroundColor(hexrgb) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, hexrgb)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setBackgroundColor", "hexrgb", "String"]); } else if (isHexaColor(hexrgb) == false) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); } else { var background = svgh.get("UIC-BACKGROUND"); if (!background) return; svgh.attr(background, "fill", hexrgb); } } function api_setBackgroundImage(url, w, h) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, url)) {
errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setBackgroundImage", "url", "String"]); } if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, w)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setBackgroundImage", "w", gRB.get("TSVG-00017", "_0 이상인 정수")]); } if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, h)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setBackgroundImage", "h", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (gvector.uitype === "SINGLE") {
return; } else { var img = svgh.get("UIC-BACKGROUND-IMG"); if (!img) return; svgh.attr(img, "width", w); svgh.attr(img, "height", h); svgh.attr(img, "layout-dx5", "x:50%-" + (w / 2) + "px; y:50%-" + (h / 2) + "px"); svgh.attr(img, "xlink:href", url); gui.updateUI(); } } function api_setItemHeight(height) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, height)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setItemHeight", "height", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (height < gMIN_LSTITEM_HEIGHT || height > gMAX_LSTITEM_HEIGHT) {
errorOut("ESVG-00044", gRB.get("ESVG-00044", "_주어진 값[{0}]은 {1} 적합하지 않습니다."), [height, "" + gMIN_LSTITEM_HEIGHT + "~" + gMAX_LSTITEM_HEIGHT + ""]); } else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return; } else { gvector.fileItemHeight = height; gvector.itemTextBaseline = Math.floor(height / 2) + 6;   var uitems = uitems = svgh.queryAll("#UIC-FILE-AREA .css-item"); for (var i = 0, len = uitems.length, top = 0; i < len; i++) { top = i; svgh.attr(uitems[i], "y", top * gvector.fileItemHeight); }
gui.updateUI(); } } function api_setHeaderFontName(font) { if (gvector.uitype != "LIST") return; var style = document.getElementById("UIS-HEADER-FONT-STYLE-NAME"); if (!style) return; style.textContent = ".css-header-font-name { font-family: " + font + "; }"; } function api_setHeaderFontColor(hexrgb) { if (gvector.uitype != "LIST") return; var style = document.getElementById("UIS-HEADER-FONT-STYLE-COLOR"); if (!style) return; if (!hexrgb) hexrgb = "#666666"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return;
} style.textContent = ".css-header-font-color { fill: " + hexrgb + "; }"; } function api_setItemFontName(font) { var style = document.getElementById("UIS-ITEM-FONT-STYLE-NAME"); if (!style) return; style.textContent = ".css-item-font-name { font-family: " + font + "; }"; } function api_setItemFontColor(hexrgb) { var style = document.getElementById("UIS-ITEM-FONT-STYLE-COLOR"); if (!style) return; if (!hexrgb) hexrgb = "#595959"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return;
} style.textContent = ".css-item-font-color { fill: " + hexrgb + "; color: " + hexrgb + "; }"; } function api_setStatusBarFontName(font) { if (gvector.uitype === "SINGLE") return; var style = document.getElementById("UIS-FOOTER-FONT-STYLE-NAME"); if (!style) return; style.textContent = ".css-footer-font-name { font-family: " + font + "; }"; } function api_setStatusBarFontColor(hexrgb) { if (gvector.uitype === "SINGLE") return; var style = document.getElementById("UIS-FOOTER-FONT-STYLE-COLOR"); if (!hexrgb) hexrgb = "#666666"; else if (!isHexaColor(hexrgb)) {
errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return; } style.textContent = ".css-footer-font-color { fill: " + hexrgb + "; }"; } function api_setTileColumnCount(count) { if (gvector.uitype != "TILE") return; else if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ONE, count)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setTileColumnCount", "count", gRB.get("TSVG-00025", "_1 이상인 정수")]); return; } else { gvector.tileColumnCount = count; gui.updateUI();
} } function api_setDownloadButtonVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setDownloadButtonVisible", "visible", "Boolean"]); } else if (gvector.uitype === "SINGLE") { return; } else { if (gvector.downloadButtonVisible === visible) return; gvector.downloadButtonVisible = (visible === true); var ops = svgh.queryAll(".css-item-op-down"); if (!ops || ops.length == 0) return; for (var i = 0, len = ops.length, ui = null, item = null; i < len; i++) {
ui = ops[i]; item = ui.dataItem; if (item) { ui.style.display = (item.type == "VIRTUAL" && item.downUrl && gvector.downloadButtonVisible) ? "block" : "none"; } } } } function api_setOpenButtonVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setOpenButtonVisible", "visible", "Boolean"]); } else if (gvector.uitype === "SINGLE") { return; } else { if (gvector.openButtonVisible === visible) return; gvector.openButtonVisible = (visible === true);
var ops = svgh.queryAll(".css-item-op-run"); if (!ops || ops.length == 0) return; for (var i = 0, len = ops.length, ui = null, item = null; i < len; i++) { ui = ops[i]; item = ui.dataItem; if (item) { ui.style.display = (item.type == "VIRTUAL" && item.openUrl && gvector.openButtonVisible) ? "block" : "none"; } } } } function api_setItemBackColor(hexrgb) { var style = document.getElementById("UIS-ITEM-BACK-NORMAL-COLOR"); if (!style) return; if (!hexrgb) hexrgb = "#fff"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]);
return; } style.textContent = ".css-item .css-item-back { fill: " + hexrgb + "; }"; style = document.getElementById("UIS-ITEM-CHECKER-COLOR"); if (!style) return; style.textContent = ".css-item .css-item-checker { fill: " + hexrgb + "; }"; } function api_setGridLineColor(hexrgb) { var style = document.getElementById("UIS-ITEM-GRID-COLOR"); if (!style) return; if (!hexrgb) hexrgb = "#d8d8d8"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return;
} style.textContent = ".css-item .css-item-grid-color { stroke: " + hexrgb + "; }"; } function api_setGridLineVisible(visible) { var style = document.getElementById("UIS-ITEM-GRID"); if (!style) return; style.textContent = ".css-item .css-item-grid { visibility: " + (visible === false ? "hidden" : "visible") + "; }"; } function api_setFilterVisible(visible) { if (gvector.uitype === "SINGLE") { var style = document.getElementById("UIC-FILTER-TXT"); if (!style) return; style.style.visibility = (visible === false ? "hidden" : "visible"); } else {
var style = document.getElementById("UIC-FILTER-GROUP"); if (!style) return; style.style.visibility = (visible === false ? "hidden" : "visible"); } } function api_setBorderColor(hexrgb) { if (!hexrgb) hexrgb = "#d8d8d8"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return; } var target = svgh.get("UIC-OUTMOST-BORDER"); if (!target) return; svgh.attr(target, "stroke", hexrgb); } function api_setHeaderLineColor(hexrgb) { if (!hexrgb) hexrgb = "#d8d8d8"; else if (!isHexaColor(hexrgb)) {
errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return; } var target = svgh.get("UIC-HEADER-LN-BOTTOM"); if (!target) return; svgh.attr(target, "stroke", hexrgb); } function api_setColumnLineColor(hexrgb) { if (!hexrgb) hexrgb = "#d8d8d8"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return; } var target = svgh.get("UIC-HEADER-LN-SIZE"); if (!target) return; svgh.attr(target, "stroke", hexrgb); target = svgh.get("UIC-HEADER-LN-OP");
if (!target) return; svgh.attr(target, "stroke", hexrgb); } function api_setStatusBarLineColor(hexrgb) { if (!hexrgb) hexrgb = "#d8d8d8"; else if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); return; } var target = svgh.get("UIC-FOOTER-LN-TOP"); if (!target) return; svgh.attr(target, "stroke", hexrgb); } function api_useProgressDialog(enable) { gvector.useProgressDialog = (enable === true); } function api_isUsingProgressDialog() { return gvector.useProgressDialog;
} function api_getSupportPHP() { return gfileEngine.isPHP; } function api_setSupportPHP(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setSupportPHP", "enable", "Boolean"]); } else { gfileEngine.isPHP = (enable === true); } } function api_setLimitMultiDownloadSize(size) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, size)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setLimitDownloadSize", "size", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else {
gfileEngine.limitMDSize = size; } } function api_getEnableColumnSorting() { return gvector.enableColumnSorting; } function api_setEnableColumnSorting(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setEnableColumnSorting", "enable", "Boolean"]); } else if (gvector.uitype === "TILE" || gvector.uitype === "SINGLE") { return; } else { var val = (enable === true); if (gvector.enableColumnSorting === val) return; gvector.enableColumnSorting = val;
  if (!gvector.enableColumnSorting) svgh.queryAll(".css-header-sort-button").forEach(function (v) { v.style.display = "none"; }); gui.updateUI(); } } function api_setSortPriorityVirtualFile(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setSortPriorityVirtualFile", "enable", "Boolean"]); } else { gvector.sortPriorityVF = (enable === true); } } function api_getAutoSortingType() { return gvector.autoSortingType; }
function api_setAutoSortingType(stype) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, stype)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setAutoSortingType", "stype", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if ([0, 1, 2].indexOf(stype) < 0) { errorOut("ESVG-00070", gRB.get("ESVG-00070", "_자동 정렬 방식은 0, 1, 2 중 하나이어야 합니다.")); } else { gvector.autoSortingType = stype; if (stype === 0) return; var btnObj = svgh.getAsUnit("UIC-HEADER-NAME"); if (btnObj) btnObj.atto("data-sort-asc", stype === 1);
} } function api_sortItems(colIndex, asc) {     if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, colIndex)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_sortItems", "colIndex", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else { if (gvector.uitype == "LIST" && colIndex == 1) sortByName(asc); else if (gvector.uitype == "LIST" && colIndex == 2) sortBySize(asc); else if (gvector.uitype == "TILE") sortByName(asc); else if (gvector.uitype == "GRID" && colIndex == 1) sortByName(asc);  
else if (gvector.uitype == "GRID" && colIndex - 2 < gui.sortedColumnKeys.length) {  sortByColumn(gui.columns[gui.sortedColumnKeys[colIndex - 2]], asc); } else return; } } function api_moveItemUp(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_moveItemUp", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00024", "_항목")]); } else {
moveUpAndDown(index, true); } } function api_moveItemDown(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_moveItemDown", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, gRB.get("TSVG-00024", "_항목")]); } else { moveUpAndDown(index, false); } }
function api_isPreviewEnable() { return gvector.enablePreview; } function api_setPreviewEnable(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setPreviewEnable", "enable", "boolean"]); } else { gvector.enablePreview = (enable === true); } } function api_getPreviewMethod() { return gvector.previewMethod; } function api_setPreviewMethod(method) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ONE, method)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setPreviewMethod", "method", gRB.get("TSVG-00025", "_1 이상인 정수")]);
} else if ([1, 2].indexOf(method) < 0) { errorOut("ESVG-00072", gRB.get("ESVG-00072", "_미리보기 방식은 1, 2번 중 하나를 선택해야 합니다.")); } else { gvector.previewMethod = method; } } function api_preview(index) { if (!checkStrongDataType(USER_DATA_TYPE.INTEGER_WITH_ZERO, index)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_preview", "index", gRB.get("TSVG-00017", "_0 이상인 정수")]); } else if (index >= gsortedList.length || index < 0) { errorOut("ESVG-00006", gRB.get("ESVG-00006", "_주어진 순서[{0}]는 {1} 범위를 벗어났습니다."), [index, "item"]); } else if (gvector.enablePreview) {
preview(index, gvector.previewMethod); } } function api_getPreviewBackgroundColor() { return gvector.previewBgColor; } function api_setPreviewBackgroundColor(hexrgb) { if (!isHexaColor(hexrgb)) { errorOut("ESVG-00046", gRB.get("ESVG-00046", "_{0}(은)는 올바르지 않은 색상 표현입니다."), [hexrgb]); } else { gvector.previewBgColor = hexrgb; } } function api_updateUI() { gui.updateUI(); } function api_getEnableDnd() { return gvector.enableDnd; } function api_setEnableDnd(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setEnableDnd", "enable", "Boolean"]);
} else { gvector.enableDnd = (enable === true); } } function api_isUsingHDWhenSingle() { return gvector.useHDWhenSingle; } function api_setUsingHDWhenSingle(enable) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, enable)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setUsingHDWhenSingle", "enable", "Boolean"]); } else { gvector.useHDWhenSingle = (enable === true); } } function api_getCustomHeader(name) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getCustomHeader", "name", "String"]);
return null; } else if (!name) { errorOut("ESVG-00082", gRB.get("ESVG-00082", "헤더 이름은 빈 문자열이거나 NULL일 수 없습니다.")); return null; } else {     if (gfileEngine.customHeaders.hasOwnProperty(name)) return gfileEngine.customHeaders[name]; else return null; } } function api_setCustomHeader(name, value) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setCustomHeader", "name", "String"]); } else if (!name) { errorOut("ESVG-00082", gRB.get("ESVG-00082", "헤더 이름은 빈 문자열이거나 NULL일 수 없습니다."));
} else if (!checkStrongDataType(USER_DATA_TYPE.STRING, value)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setCustomHeader", "value", "String"]); } else if (value == null || typeof value == "undefined") { errorOut("ESVG-00083", gRB.get("ESVG-00083", "헤더 값은 NULL일 수 없습니다.")); } else { gfileEngine.customHeaders[name] = value; } } function api_removeCustomHeader(name) { if (!checkStrongDataType(USER_DATA_TYPE.STRING, name)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_removeCustomHeader", "name", "String"]); } else if (!name) {
errorOut("ESVG-00082", gRB.get("ESVG-00082", "헤더 이름은 빈 문자열이거나 NULL일 수 없습니다.")); } else { if (gfileEngine.customHeaders.hasOwnProperty(name)) { delete gfileEngine.customHeaders[name]; } } } function api_getTotalCustomHeaders(separator) { if (typeof separator == "undefined") { separator = "\n"; } else if (!checkStrongDataType(USER_DATA_TYPE.STRING, separator)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_getTotalCustomHeaders", "separator", "String"]); return null;
} var arr = []; for (var name in gfileEngine.customHeaders) { arr.push("" + name + ":" + gfileEngine.customHeaders[name]); } return arr.join(separator); } function api_getWithCredentials() { return gfileEngine.credential; } function api_setWithCredentials(isWith) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, isWith)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setWithCredentials", "isWith", "Boolean"]); } else { gfileEngine.credential = (isWith === true); }
} function api_setSizeColumnVisible(visible) { if (!checkStrongDataType(USER_DATA_TYPE.BOOLEAN, visible)) { errorOut("ESVG-00004", gRB.get("ESVG-00004", "_{0} 함수의 {1} 파라미터는 {2} 형식이어야 합니다."), ["api_setSizeColumnVisible", "visible", "Boolean"]); } else { gui.toggleColumnVisible("size", visible === true); } } 