mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 15:58:39 +09:00
Revert "Remove WebIDE devtools component."
This reverts commit 8c1500707f.
# Conflicts:
# application/basilisk/components/customizableui/CustomizableUI.jsm
This commit is contained in:
parent
4ea7de218b
commit
df89b48e30
163 changed files with 13812 additions and 0 deletions
175
devtools/client/webide/content/newapp.js
Normal file
175
devtools/client/webide/content/newapp.js
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
var Cc = Components.classes;
|
||||
var Cu = Components.utils;
|
||||
var Ci = Components.interfaces;
|
||||
|
||||
const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
const {XPCOMUtils} = require("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const Services = require("Services");
|
||||
const {FileUtils} = require("resource://gre/modules/FileUtils.jsm");
|
||||
const {AppProjects} = require("devtools/client/webide/modules/app-projects");
|
||||
const {AppManager} = require("devtools/client/webide/modules/app-manager");
|
||||
const {getJSON} = require("devtools/client/shared/getjson");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "ZipUtils", "resource://gre/modules/ZipUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Downloads", "resource://gre/modules/Downloads.jsm");
|
||||
|
||||
const TEMPLATES_URL = "devtools.webide.templatesURL";
|
||||
|
||||
var gTemplateList = null;
|
||||
|
||||
// See bug 989619
|
||||
console.log = console.log.bind(console);
|
||||
console.warn = console.warn.bind(console);
|
||||
console.error = console.error.bind(console);
|
||||
|
||||
window.addEventListener("load", function onLoad() {
|
||||
window.removeEventListener("load", onLoad);
|
||||
let projectNameNode = document.querySelector("#project-name");
|
||||
projectNameNode.addEventListener("input", canValidate, true);
|
||||
getTemplatesJSON();
|
||||
}, true);
|
||||
|
||||
function getTemplatesJSON() {
|
||||
getJSON(TEMPLATES_URL).then(list => {
|
||||
if (!Array.isArray(list)) {
|
||||
throw new Error("JSON response not an array");
|
||||
}
|
||||
if (list.length == 0) {
|
||||
throw new Error("JSON response is an empty array");
|
||||
}
|
||||
gTemplateList = list;
|
||||
let templatelistNode = document.querySelector("#templatelist");
|
||||
templatelistNode.innerHTML = "";
|
||||
for (let template of list) {
|
||||
let richlistitemNode = document.createElement("richlistitem");
|
||||
let imageNode = document.createElement("image");
|
||||
imageNode.setAttribute("src", template.icon);
|
||||
let labelNode = document.createElement("label");
|
||||
labelNode.setAttribute("value", template.name);
|
||||
let descriptionNode = document.createElement("description");
|
||||
descriptionNode.textContent = template.description;
|
||||
let vboxNode = document.createElement("vbox");
|
||||
vboxNode.setAttribute("flex", "1");
|
||||
richlistitemNode.appendChild(imageNode);
|
||||
vboxNode.appendChild(labelNode);
|
||||
vboxNode.appendChild(descriptionNode);
|
||||
richlistitemNode.appendChild(vboxNode);
|
||||
templatelistNode.appendChild(richlistitemNode);
|
||||
}
|
||||
templatelistNode.selectedIndex = 0;
|
||||
|
||||
/* Chrome mochitest support */
|
||||
let testOptions = window.arguments[0].testOptions;
|
||||
if (testOptions) {
|
||||
templatelistNode.selectedIndex = testOptions.index;
|
||||
document.querySelector("#project-name").value = testOptions.name;
|
||||
doOK();
|
||||
}
|
||||
}, (e) => {
|
||||
failAndBail("Can't download app templates: " + e);
|
||||
});
|
||||
}
|
||||
|
||||
function failAndBail(msg) {
|
||||
let promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService);
|
||||
promptService.alert(window, "error", msg);
|
||||
window.close();
|
||||
}
|
||||
|
||||
function canValidate() {
|
||||
let projectNameNode = document.querySelector("#project-name");
|
||||
let dialogNode = document.querySelector("dialog");
|
||||
if (projectNameNode.value.length > 0) {
|
||||
dialogNode.removeAttribute("buttondisabledaccept");
|
||||
} else {
|
||||
dialogNode.setAttribute("buttondisabledaccept", "true");
|
||||
}
|
||||
}
|
||||
|
||||
function doOK() {
|
||||
let projectName = document.querySelector("#project-name").value;
|
||||
|
||||
if (!projectName) {
|
||||
console.error("No project name");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!gTemplateList) {
|
||||
console.error("No template index");
|
||||
return false;
|
||||
}
|
||||
|
||||
let templatelistNode = document.querySelector("#templatelist");
|
||||
if (templatelistNode.selectedIndex < 0) {
|
||||
console.error("No template selected");
|
||||
return false;
|
||||
}
|
||||
|
||||
let folder;
|
||||
|
||||
/* Chrome mochitest support */
|
||||
let testOptions = window.arguments[0].testOptions;
|
||||
if (testOptions) {
|
||||
folder = testOptions.folder;
|
||||
} else {
|
||||
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
|
||||
fp.init(window, "Select directory where to create app directory", Ci.nsIFilePicker.modeGetFolder);
|
||||
let res = fp.show();
|
||||
if (res == Ci.nsIFilePicker.returnCancel) {
|
||||
console.error("No directory selected");
|
||||
return false;
|
||||
}
|
||||
folder = fp.file;
|
||||
}
|
||||
|
||||
// Create subfolder with fs-friendly name of project
|
||||
let subfolder = projectName.replace(/[\\/:*?"<>|]/g, "").toLowerCase();
|
||||
let win = Services.wm.getMostRecentWindow("devtools:webide");
|
||||
folder.append(subfolder);
|
||||
|
||||
try {
|
||||
folder.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
|
||||
} catch (e) {
|
||||
win.UI.reportError("error_folderCreationFailed");
|
||||
window.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Download boilerplate zip
|
||||
let template = gTemplateList[templatelistNode.selectedIndex];
|
||||
let source = template.file;
|
||||
let target = folder.clone();
|
||||
target.append(subfolder + ".zip");
|
||||
|
||||
let bail = (e) => {
|
||||
console.error(e);
|
||||
window.close();
|
||||
};
|
||||
|
||||
Downloads.fetch(source, target).then(() => {
|
||||
ZipUtils.extractFiles(target, folder);
|
||||
target.remove(false);
|
||||
AppProjects.addPackaged(folder).then((project) => {
|
||||
window.arguments[0].location = project.location;
|
||||
AppManager.validateAndUpdateProject(project).then(() => {
|
||||
if (project.manifest) {
|
||||
project.manifest.name = projectName;
|
||||
AppManager.writeManifest(project).then(() => {
|
||||
AppManager.validateAndUpdateProject(project).then(
|
||||
() => {window.close();}, bail);
|
||||
}, bail);
|
||||
} else {
|
||||
bail("Manifest not found");
|
||||
}
|
||||
}, bail);
|
||||
}, bail);
|
||||
}, bail);
|
||||
|
||||
return false;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue