kiss new-firefox-project

This commit is contained in:
2023-04-19 11:29:40 -06:00
parent 76a9562aba
commit 2927bd303e

View File

@@ -41,6 +41,8 @@ class Main {
newExpressProject(args);
case "new-vscode-project":
newVscodeProject(args);
case "new-firefox-project":
newFirefoxProject(args);
case "implement":
// kiss implement [type] [fromLib]
var _pwd = args.pop();
@@ -91,11 +93,26 @@ class Main {
}
static function _makeFileForNewProject(templateDir:String, templateFile:Array<String>, workingDir:String, projectName:String, pkg:String) {
// Expand this list when making new templates with different binary extensions
var extensionsForBytes = [
"png"
];
var replaceStringTemplate = true;
var getContent:haxe.Constraints.Function = File.getContent;
var saveContent:haxe.Constraints.Function = File.saveContent;
if (extensionsForBytes.indexOf(Path.extension(templateFile[templateFile.length - 1])) != -1) {
replaceStringTemplate = false;
getContent = File.getBytes;
saveContent = File.saveBytes;
}
var fullTemplateFilePath = Path.join([templateDir, "template"].concat(templateFile));
var newFileContent = File.getContent(fullTemplateFilePath).replace("template", pkg);
var newFileContent:Dynamic = getContent(fullTemplateFilePath);
if (replaceStringTemplate)
newFileContent = StringTools.replace(newFileContent, "template", pkg);
var templateFileInNewProject = [for (part in templateFile) if (part == "template") pkg else part];
var newFilePath = Path.join([workingDir, projectName].concat(templateFileInNewProject));
File.saveContent(newFilePath, newFileContent);
saveContent(newFilePath, newFileContent);
}
static function _makeFolderForNewProject(templateDir:String, templateFolder:Array<String>, workingDir:String, projectName:String, pkg:String) {
@@ -228,6 +245,37 @@ class Main {
makeFileForNewProject(["test.sh"]);
}
static function newFirefoxProject(args:Array<String>) {
var title = promptFor("title (lower-case!)").toLowerCase();
var description = promptFor("description");
var pkg = title.replace("-", "_");
var urlPatterns = [];
while (true) {
var nextPattern = promptFor("url pattern (i.e. '*://*.mozilla.org/*') (blank to finish)", "");
if (nextPattern.length == 0)
break;
urlPatterns.push(nextPattern);
}
var kissFirefoxLibPath = new Process("haxelib", ["libpath", "kiss-firefox"]).stdout.readAll().toString().trim();
var workingDir = Sys.args().pop();
var projectDir = Path.join([workingDir, title]);
FileSystem.createDirectory(projectDir);
var makeFileForNewProject:haxe.Constraints.Function = _makeFileForNewProject.bind(kissFirefoxLibPath, _, workingDir, title, pkg);
var makeFolderForNewProject:haxe.Constraints.Function = _makeFolderForNewProject.bind(kissFirefoxLibPath, _, workingDir, title, pkg);
makeFolderForNewProject(["src"]);
makeFolderForNewProject(["icons"]);
makeFileForNewProject([".gitignore"]);
makeFileForNewProject(["build.hxml"]);
makeFileForNewProject(["manifest.json"]);
var manifestFile = Path.join([projectDir, "manifest.json"]);
var manifestJson = Json.parse(File.getContent(manifestFile));
manifestJson.name = title;
manifestJson.description = description;
manifestJson.content_scripts[0].matches = urlPatterns;
File.saveContent(manifestFile, Json.stringify(manifestJson, null, "\t"));
}
static function convert(args:Array<String>) {
// `kiss convert` converts its stdin input to Haxe expressions.
// with --all, it reads everything from stdin at once (for piping). Without --all, it acts as a repl,