Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
318 lines (274 sloc) 10.4 KB
<?xml version="1.0" encoding="UTF-8"?>
<!-- Komodo Project File - DO NOT EDIT -->
<project id="82bf6d68-81d1-7944-a22d-9034e1a24c59" kpf_version="4" name="drupal.kpf">
<macro async="0" icon="chrome://famfamfamsilk/skin/icons/arrow_switch.png" id="10bc5f10-cb89-fc49-a427-b746647f6eb0" idref="32322733-9b9e-8d44-bd6a-804d3cc56bfd" keyboard_shortcut="" language="JavaScript" name="chrome-switcher" rank="100" trigger="trigger_postopen" trigger_enabled="0">
// foo
var os = Components.classes['@activestate.com/koOs;1'].
getService(Components.interfaces.koIOs);
var shutil = Components.classes["@activestate.com/koShUtil;1"]
.getService(Components.interfaces.koIShUtil);
var project = ko.projects.manager.currentProject;
var project_dir = project.liveDirectory;
var chrome_path = os.path.join(project_dir, 'chrome.manifest');
var dev = 'dev.chrome.manifest';
var dist = 'dist.chrome.manifest';
var arr = [
{'id': 1, 'text': 'Dev Chrome'},
{'id': 2, 'text': 'Build Chrome'},
];
var answer = ko.dialogs.selectFromList('Title','Pick a mode:',arr,'one',null);
if (answer) {
answer = answer[0];
if (answer.id === 1) {
source = dev;
}
else {
source = dist;
}
shutil.copyfile(os.path.join(project_dir, source), chrome_path);
ko.statusBar.AddMessage('Swtiched to ' + answer.text, 'project', 4000, true);
}
else {
ko.statusBar.AddMessage('Switch cancelled by user.', 'project', 4000, true);
}</macro>
<macro async="0" icon="chrome://famfamfamsilk/skin/icons/lightning_go.png" id="3c6dee38-263c-714b-b140-544307b616a1" idref="32322733-9b9e-8d44-bd6a-804d3cc56bfd" keyboard_shortcut="" language="JavaScript" name="Build" rank="100" trigger="trigger_postopen" trigger_enabled="0">
/**
* Script to build an xpi, running koext build in the current project root.
*/
var project = ko.macros.current.project;
var os = Components.classes['@activestate.com/koOs;1'].
getService(Components.interfaces.koIOs);
var koSysUtils = Components.classes["@activestate.com/koSysUtils;1"].
getService(Components.interfaces.koISysUtils);
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].
getService(Components.interfaces.nsIXULRuntime);
var koDirs = Components.classes['@activestate.com/koDirs;1'].
getService(Components.interfaces.koIDirs);
var pythonExe = koDirs.pythonExe;
var projectDir = ko.interpolate.interpolateStrings('%p');
var scriptName = 'koext';
if (appInfo.OS == 'WINNT') {
scriptName += ".py";
}
var arr = [koDirs.sdkDir, 'bin', scriptName]
var app = os.path.joinlist(arr.length, arr);
var cmd = '"'+pythonExe+'" "'+app+'" build -d "'+projectDir+'"';
if (appInfo.OS == 'WINNT') {
cmd = '"' + cmd + '"';
}
var cwd = koDirs.mozBinDir;
cmd += " {'cwd': u'"+cwd+"'}";
ko.run.runEncodedCommand(window, cmd, function() {
ko.statusBar.AddMessage('Build complete', 'projects', 5000, true);
ko.projects.manager.saveProject(project);
});
</macro>
<macro async="0" icon="chrome://famfamfamsilk/skin/icons/wrench.png" id="4e5db9be-6e48-cf4b-9d6f-266c4ebdea23" idref="32322733-9b9e-8d44-bd6a-804d3cc56bfd" keyboard_shortcut="" language="JavaScript" name="Configure" rank="100" trigger="trigger_postopen" trigger_enabled="0">
try {
var libPart = ko.projects.findPart('macro', 'extension_lib', 'container');
eval(libPart.value);
var koExt = new extensionLib();
var project = ko.macros.current.project;
var setupWin = project.getChildByAttributeValue('name','setup.xul', 1);
var rdf = project.getChildByAttributeValue('name','install.rdf', 1);
var data = {};
var prefset = project.prefset;
if(prefset.hasPrefHere('configured')) {
var rdf_xml = koExt.readFile(rdf.getFile().URI);
data = {
'valid': false,
'configured': true,
'vars': koExt.getRdfVars(rdf_xml)
};
data.vars['ext_name'] = koExt.getNiceName(data.vars.name);
} else { // init data
data = {
'valid': false,
'configured': false,
'vars': {
'id': '',
'name': 'My Extension',
'creator': 'Me',
'version': '0.1',
'description': '',
'homepageURL': '',
'ext_name': ''
}
};
}
window.openDialog(
setupWin.getFile().URI,
"_blank",
"centerscreen,chrome,resizable,scrollbars,dialog=no,close,modal=yes",
data
);
if(data.valid) {
if(koExt.updateProject(data.vars)) {
prefset.setBooleanPref('configured', true);
var part = project.getChildByAttributeValue('name', 'oncreate',1);
if(part) { part.name = 'Configure'; }
var msg = 'Extension Project '+data.vars.name+' configured!';
ko.statusBar.AddMessage(msg, 'project', 3000, true);
ko.projects.manager.saveProject(project);
} else {
alert('Error encountered: '+koExt.error+"\nConfiguration aborted.");
}
}
} catch(e) {
alert(e);
}
</macro>
<macro async="0" icon="chrome://famfamfamsilk/skin/icons/brick.png" id="f8765a95-d4d8-9d45-94d9-a281c32ca624" idref="32322733-9b9e-8d44-bd6a-804d3cc56bfd" keyboard_shortcut="" language="JavaScript" name="extension_lib" rank="100" trigger="trigger_postopen" trigger_enabled="0">
try {
var extensionLib = function() {
this.os = Components.classes['@activestate.com/koOs;1'].
getService(Components.interfaces.koIOs);
this.error = false;
}
extensionLib.prototype.getPath = function(relative) {
try {
var prj_path = ko.interpolate.interpolateStrings('%p');
path = this.os.path.join(prj_path, relative);
return path;
} catch(e) {
alert(e+"\narg name: "+name);
}
}
extensionLib.prototype.readFile = function(filename) {
// read the template file
try {
var fileEx = Components.classes["@activestate.com/koFileEx;1"]
.createInstance(Components.interfaces.koIFileEx);
fileEx.URI = filename;
fileEx.open('rb');
var content = fileEx.readfile();
fileEx.close();
return content;
} catch(e) {
alert(e+"\narg filename: "+filename);
}
}
extensionLib.prototype.writeFile = function(filename, content) {
try {
var fileEx = Components.classes["@activestate.com/koFileEx;1"]
.createInstance(Components.interfaces.koIFileEx);
fileEx.URI = filename;
fileEx.open('wb+');
fileEx.puts(content);
fileEx.close();
} catch(e) {
alert(e+"\narg filename: "+filename);
}
}
extensionLib.prototype.getRdfVars = function(txt) {
try {
var Rx = /\&lt;em\:([\w]+)[\ \S]*\&gt;([\S\ ]+?)\&lt;\//g;
var ext_vars = {};
while(results = Rx.exec(txt)) {
var idRx = /type|min|max|\{/;
if(!idRx.test(results[0])) { // filter out stuff we don't want
ext_vars[results[1]] = results[2];
}
}
return ext_vars;
} catch(e) {
alert(e+"\narg rdf_path: "+rdf_path);
}
}
extensionLib.prototype.getManifestVars = function(txt) {
try {
var rx1 = /content ([\S]+?) jar\:([\S]+?)\.jar/g;
var res1 = rx1.exec(txt);
var rx2 = /chrome:\/\/([\S]+?)\/content\/overlay\.xul/g;
var res2 = rx2.exec(txt);
return new Array(res1[1], res1[2], res2[1]);
} catch(e) {
alert(e+"\narg path: "+path);
}
}
extensionLib.prototype.getOverlayVars = function(txt) {
try {
var rx1 = /&lt;overlay id="([\S]+?)"/g;
var res1 = rx1.exec(txt);
var rx2 = /&lt;menuitem id="([\S]+?)"[\s]+?label="([\S\ ]+?)"/g;
var res2 = rx2.exec(txt);
return [res1[1], res2[1], res2[2]];
} catch(e) {
alert(e+"\narg path: "+path);
}
}
extensionLib.prototype.updateProject = function(vars) {
try {
var overlayPath = this.getPath('content/overlay.xul');
if(this.os.path.exists(overlayPath)) {
var ovl_str = this.readFile(overlayPath);
var ov_vars = this.getOverlayVars(ovl_str);
var ovl_new = [vars.ext_name+'Overlay', 'menu_'+vars.ext_name, vars.name];
this.writeFile(overlayPath, this.replaceAll(ov_vars, ovl_new, ovl_str));
} else { this.error = "Doesn't exist: "+overlayPath; return false; }
var manifestPath = this.getPath('chrome.manifest');
if(this.os.path.exists(manifestPath)) {
var man_str = this.readFile(manifestPath);
var man_vars = this.getManifestVars(man_str);
var man_new = [vars.ext_name, vars.ext_name, vars.ext_name];
this.writeFile(manifestPath, this.replaceAll(man_vars, man_new, man_str));
} else { this.error = "Doesn't exist: "+overlayPath; return false; }
var rdf_path = this.getPath('install.rdf');
if(this.os.path.exists(rdf_path)) {
var rdf_str = this.readFile(rdf_path);
var rdf_vars = this.getRdfVars(rdf_str);
this.writeFile(rdf_path, this.replaceAll(rdf_vars, vars, rdf_str));
} else { this.error = "Doesn't exist: "+overlayPath; return false; }
} catch(e) {
this.error = e;
return false;
}
return true;
}
extensionLib.prototype.replaceAll = function(orig_vars, new_vars, str) {
try {
var out = str;
for(v in orig_vars) {
out = out.replace(orig_vars[v], new_vars[v]);
}
return out;
} catch(e) {
alert(e);
}
}
extensionLib.prototype.getNiceName = function(name) {
return this.trim(name).replace(/[\W]/g,'').toLowerCase();
}
extensionLib.prototype.trim = function(str) {
return str.replace(/^\s*/, '').replace(/\s*$/, '');
}
extensionLib.prototype.clone = function(obj) {
var newobj = {}; for(i in obj) {
newobj[i] = obj[i];
} return newobj;
}
extensionLib.prototype._dump = function(obj) {
var str = ''; for(i in obj) {
str += i+': '+obj[i]+'\n';
} return(str);
}
extensionLib.prototype._keys = function(obj) {
var out = new Array(); for(i in obj) {
out.push(i);
} return out;
}
} catch(e) {
allert(e);
}
</macro>
<folder id="32322733-9b9e-8d44-bd6a-804d3cc56bfd" idref="82bf6d68-81d1-7944-a22d-9034e1a24c59" name="Project">
</folder>
<preference-set idref="82bf6d68-81d1-7944-a22d-9034e1a24c59">
<boolean id="configured">1</boolean>
<string id="import_exclude_matches">*.*~;*.bak;*.tmp;CVS;.#*;*.pyo;*.pyc;.svn;*%*;tmp*.html;.DS_Store;_prj_internal_</string>
<string id="import_include_matches"></string>
<boolean id="import_live">1</boolean>
<boolean id="import_recursive">1</boolean>
<string id="import_type">useFolders</string>
</preference-set>
</project>