c9-core/plugins/c9.ide.download/download.js

136 wiersze
4.3 KiB
JavaScript

define(function(require, exports, module) {
"use strict";
main.consumes = [
"Plugin", "c9", "ui", "menus", "tree", "info", "vfs", "preferences", "settings"
];
main.provides = ["download"];
return main;
function main(options, imports, register) {
var Plugin = imports.Plugin;
var ui = imports.ui;
var c9 = imports.c9;
var menus = imports.menus;
var tree = imports.tree;
var vfs = imports.vfs;
var info = imports.info;
var prefs = imports.preferences;
var settings = imports.settings;
var SETTING_NAME = "downloadFilesAs";
var SETTING_PATH = "user/general/@" + SETTING_NAME;
/***** Initialization *****/
var plugin = new Plugin("Ajax.org", main.consumes);
var loaded = false;
function load(){
if (loaded) return false;
loaded = true;
menus.addItemByPath("File/Download Project", new ui.item({
onclick: downloadProject
}), 1300, plugin);
// Context Menu
tree.getElement("mnuCtxTree", function(mnuCtxTree) {
menus.addItemToMenu(mnuCtxTree, new ui.item({
match: "folder|project",
isAvailable: function(){
return tree.selectedNode;
},
caption: "Download",
onclick: download
}), 140, plugin);
});
// Preferences
prefs.add({
"General" : {
"Tree & Navigate" : {
"Download Files As" : {
type: "dropdown",
path: SETTING_PATH,
items: [
{ caption : "auto", value : "auto" },
{ caption : "tar.gz", value : "tar.gz" },
{ caption : "zip", value : "zip" }
],
position: 5000
}
}
}
}, plugin);
settings.on("read", function() {
settings.setDefaults("user/general", [[SETTING_NAME, "auto"]]);
}, plugin);
}
function download() {
if (!c9.has(c9.STORAGE))
return;
var node = tree.selectedNode;
if (!node) return;
var paths = tree.selectedNodes.map(function(node) {
return node.path;
});
if (node.isFolder && node.path == "/")
downloadProject();
else if (paths.length > 1)
downloadPaths(paths);
else if (node.isFolder)
downloadFolder(node.path);
else
downloadFile(node.path);
}
function downloadProject() {
vfs.download("/", info.getWorkspace().name + getArchiveFileExtension());
}
function downloadPaths(paths) {
vfs.download(paths, info.getWorkspace().name + getArchiveFileExtension());
}
function downloadFolder(path) {
var withTrailingSlash = path.replace(/\/*$/, "/");
var parts = withTrailingSlash.split("/");
var lastPart = parts[parts.length - 2];
vfs.download(withTrailingSlash, lastPart + getArchiveFileExtension());
}
function downloadFile(path) {
vfs.download(path.replace(/\/*$/, ""), null, true);
}
function getArchiveFileExtension() {
var downloadFilesAs = settings.get(SETTING_PATH);
if (downloadFilesAs === 'auto' || !downloadFilesAs) {
downloadFilesAs = /Win/.test(navigator.platform) ? 'zip' : 'tar.gz';
}
return '.' + downloadFilesAs;
}
/***** Lifecycle *****/
plugin.on("load", function(){
load();
});
/***** Register and define API *****/
plugin.freezePublicAPI({
});
register(null, {
download: plugin
});
}
});