UNPKG

graviton-plugin-sdk

Version:

Gravtion plugin Dev Kit

223 lines (218 loc) 9.28 kB
/* ######################################## MIT License Copyright (c) 2019 Marc Espin Sanz License > https://github.com/Graviton-Code-Editor/Graviton-App/blob/master/LICENSE.md ######################################### */ "use strict"; module.exports = { Explorer: { load: (dir, app_id, f_t, callback, object = { animation: true }) => { const class_anim = object.animation !== true ? "" : "moving"; const first_time = f_t == (true || "true") ? true : f_t == "reload" ? false : f_t; if (!fs.existsSync(dir)) { graviton.throwError(getTranslation("DirectoryDoesntExist")); return; } const appender_id = app_id.replace(/\\/g, ""); if (appender_id == "g_directories") { EXPLORER_PANEL.panelObject.innerHTML = ` <gv-panel id="g_directories" dir="${dir}" myPadding="-10" global=true> <gv-paneltitle>f</gv-paneltitle> </gv-panel> `; } let working_folder; FirstFolder = dir; const appender = document.getElementById(appender_id); elasticContainer.append( document.getElementById(EXPLORER_PANEL.panelObject.id) ); if (f_t == "reload") { appender.setAttribute("opened", "true"); appender.children[0].children[0].setAttribute( "src", directories.getCustomIcon(path.basename(FirstFolder), "close") ); appender.children[1].innerHTML = ""; const click = document.getElementById(appender_id).children[0]; click.children[0].setAttribute( "src", directories.getCustomIcon(path.basename(FirstFolder), "open") ); } else { if (appender.getAttribute("opened") == "true") { appender.setAttribute("opened", "false"); appender.children[0].children[0].setAttribute( "src", directories.getCustomIcon(path.basename(FirstFolder), "close") ); appender.children[1].innerHTML = ""; return; } else { document.getElementById(appender_id).setAttribute("opened", "true"); if (first_time == false) { const click = document.getElementById(appender_id).children[0]; click.children[0].setAttribute( "src", directories.getCustomIcon(path.basename(FirstFolder), "open") ); } } } const load_explorer = new CustomEvent("load_explorer", { detail: {} }); document.dispatchEvent(load_explorer); if (first_time) { if (graviton.getCurrentDirectory() !== dir) { dir_path = dir; const opened_project = new CustomEvent("loaded_project", { detail: { path: FirstFolder } }); document.dispatchEvent(opened_project); } workspaces[0] = FirstFolder; graviton.setTitle(FirstFolder); registerNewProject(dir); working_folder = document.createElement("div"); for ( i = 0; i < document.getElementById(appender_id).children.length; i++ ) { document.getElementById(appender_id).children[i].remove(); } document.getElementById(appender_id).setAttribute("opened", "false"); working_folder.setAttribute("id", "g_directory"); working_folder.innerHTML = ` <div> <gv-paneltitle global=true id=directory_${path.basename( dir )} parent=g_directories elementType=directory dir="${FirstFolder}">${path.basename( dir )}</gv-paneltitle> </div>`; document.getElementById(appender_id).appendChild(working_folder); } else { working_folder = document.getElementById(appender_id).children[1]; } const paddingListDir = Number(document.getElementById(appender_id).getAttribute("myPadding")) + 10; // Add padding fs.readdir(dir, (err, paths) => { if (paths == undefined || err) { graviton.throwError( "Cannot read files on the directory :" + FirstFolder + ". Check the permissions." ); return; } for (i = 0; i < paths.length; i++) { let _long_path = path.join(dir, paths[i]); if (graviton.currentOS().codename == "win32") { _long_path = _long_path.replace(/\\/g, "\\\\"); } const stats = fs.statSync(_long_path); if (stats.isDirectory()) { const directory_temp = document.createElement("div"); directory_temp.style = ""; const parent_id = _long_path.replace(/[\\\s]/g, "") + "_div"; directory_temp.innerHTML += ` <div title="${path.join( dir, paths[i] )}" global=reload dir="${_long_path}" opened="false" ID="${parent_id}" name="${ paths[i] }" style="padding-left:${paddingListDir}px; vertical-align:middle; position:relative;"> <div parent=${parent_id} ID="${parent_id + "_div"}" elementType=directory global=reload dir="${_long_path}" class="directory ${class_anim}" onclick="Explorer.load('${_long_path}','${parent_id}',false)"> <img draggable=false file=${ paths[i] } class="explorer_file_icon" parent=${parent_id} ID="${parent_id + "_img"}" elementType=directory global=reload dir="${_long_path}" style="float:left; padding-right:3px; height:22px; width:24px; " src="${directories.getCustomIcon( paths[i], "close" )}"> <p parent=${parent_id} ID="${parent_id + "_p"}" elementType=directory global=reload dir="${_long_path}"> ${paths[i]} </p> </div> <div myPadding="${paddingListDir}" style="padding-top:25px;" dir="${_long_path}"></div> </div>`; working_folder.appendChild(directory_temp); } } for (i = 0; i < paths.length; i++) { let _long_path = path.join(dir, paths[i]); if (graviton.currentOS().codename == "win32") { _long_path = _long_path.replace(/\\/g, "\\\\"); } const stats = fs.statSync(_long_path); if (stats.isFile()) { const file_temp = document.createElement("div"); file_temp.style = "padding-bottom:24px; padding-top:1px;"; const parent_id = _long_path.replace(/[\\\s]/g, "") + "_div"; file_temp.innerHTML += ` <div title="${path.join( dir, paths[i] )}" parent="${parent_id}" elementType="file" onclick="new Tab({ id:'${parent_id + "B"}', path:'${_long_path}', name:'${paths[i]}', type:'file' })" myPadding="${paddingListDir}" dir="${_long_path}" class="directory ${class_anim}" ID="${parent_id}" name="${ paths[i] }" style=" margin-left:${paddingListDir}px; vertical-align:middle;"> <img draggable=false file=${ paths[i] } class="explorer_file_icon" parent="${parent_id}" ID="${parent_id + "_img"}" dir="${_long_path}" elementType="file" style="float:left; padding-right:3px; height:24px; width:24px;" src="${(function() { if ( themeObject.icons == undefined || (themeObject.icons[getFormat(paths[i]).lang] == undefined && getFormat(paths[i]).trust == true) ) { return `src/icons/files/${getFormat(paths[i]).lang}.svg`; } else { if ( themeObject.icons[getFormat(paths[i]).lang] == undefined && themeObject.icons[getFormat(paths[i]).format] == undefined ) { return `src/icons/files/${getFormat(paths[i]).lang}.svg `; } if (getFormat(paths[i]).trust == true) { return path.join( plugins_folder, themeObject.name, themeObject.icons[getFormat(paths[i]).lang] ); } else { return path.join( plugins_folder, themeObject.name, themeObject.icons[getFormat(paths[i]).format] ); } } })()}"> <p parent="${parent_id}" ID="${parent_id + "_p"}" dir="${_long_path}" elementType="file"> ${paths[i]} </p> </div>`; working_folder.appendChild(file_temp); } } callback != undefined ? callback() : ""; }); } } };