kopia lustrzana https://github.com/c9/core
336 wiersze
9.8 KiB
JavaScript
336 wiersze
9.8 KiB
JavaScript
define(function(require, module, exports) {
|
|
main.consumes = ["Plugin", "ui", "Dialog", "apf"];
|
|
main.provides = ["Wizard", "WizardPage"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var Plugin = imports.Plugin;
|
|
var Dialog = imports.Dialog;
|
|
var apf = imports.apf;
|
|
var ui = imports.ui;
|
|
|
|
/***** Initialization *****/
|
|
|
|
function Wizard(developer, deps, options) {
|
|
var plugin = new Dialog(developer, deps.concat(main.consumes), {
|
|
name: "dialog.wizard",
|
|
allowClose: options.allowClose || false,
|
|
class: "wizard " + (options.class || ""),
|
|
height: options.height,
|
|
width: options.width,
|
|
resizable: options.resizable,
|
|
title: options.title,
|
|
modal: options.modal === undefined ? true : options.modal,
|
|
custom: true,
|
|
elements: [
|
|
{ type: "button", id: "cancel", caption: "Cancel", visible: false, onclick: cancel },
|
|
{ type: "filler" },
|
|
{ type: "button", id: "previous", caption: "Previous", visible: false, onclick: previous },
|
|
{ type: "button", id: "next", caption: "Next", color: "green", "default": true, onclick: next },
|
|
{ type: "button", id: "finish", caption: "Finish", visible: false, onclick: finish }
|
|
]
|
|
});
|
|
|
|
var emit = plugin.getEmitter();
|
|
|
|
var path = [];
|
|
var current = -1;
|
|
var body, startPage, lastPage;
|
|
|
|
var drawn = false;
|
|
function draw(options) {
|
|
if (drawn) return;
|
|
drawn = true;
|
|
|
|
var aml = new ui.bar();
|
|
options.aml.parentNode.insertBefore(aml, options.aml);
|
|
options.aml.removeNode();
|
|
body = { html: aml.$ext, aml: aml };
|
|
}
|
|
|
|
/***** Methods *****/
|
|
|
|
function cancel() {
|
|
emit("cancel", { activePage: lastPage });
|
|
}
|
|
|
|
function previous() {
|
|
current--;
|
|
activate(path[current]);
|
|
emit("previous", {
|
|
activePage: path[current]
|
|
});
|
|
}
|
|
|
|
function next() {
|
|
path.splice(current + 1);
|
|
|
|
plugin.update([
|
|
{ id: "previous", visible: true },
|
|
{ id: "next", visible: true }
|
|
]);
|
|
|
|
var page = emit("next", {
|
|
activePage: path[path.length - 1]
|
|
});
|
|
current = path.push(page) - 1;
|
|
|
|
activate(page, true);
|
|
}
|
|
|
|
function gotoPage(page) {
|
|
current = path.push(page) - 1;
|
|
activate(page, true);
|
|
}
|
|
|
|
function finish() {
|
|
plugin.hide();
|
|
emit("finish", { activePage: lastPage });
|
|
}
|
|
|
|
function activate(page, noButtons) {
|
|
var idx = path.indexOf(page);
|
|
if (idx == -1) throw new Error();
|
|
|
|
if (!noButtons) {
|
|
plugin.update([
|
|
{ id: "previous", visible: idx > 0 },
|
|
{ id: "next", visible: true }
|
|
]);
|
|
}
|
|
|
|
if (lastPage)
|
|
lastPage.hide();
|
|
page.show(body);
|
|
|
|
lastPage = page;
|
|
}
|
|
|
|
function show(reset) {
|
|
return plugin.queue(function() {
|
|
if (reset || current == -1) {
|
|
path = [startPage];
|
|
current = 0;
|
|
activate(startPage);
|
|
}
|
|
|
|
}, true);
|
|
}
|
|
|
|
/***** Lifecycle *****/
|
|
|
|
plugin.on("draw", function(options) {
|
|
draw(options);
|
|
});
|
|
|
|
/***** Register and define API *****/
|
|
|
|
plugin.freezePublicAPI.baseclass();
|
|
|
|
/**
|
|
*
|
|
*/
|
|
plugin.freezePublicAPI({
|
|
/**
|
|
*
|
|
*/
|
|
get activePage() { return path[current]; },
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get startPage() { return startPage; },
|
|
set startPage(v) { startPage = v; },
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get showPrevious() {
|
|
return plugin.getElement("previous").visible;
|
|
},
|
|
set showPrevious(value) {
|
|
plugin.update([
|
|
{ id: "previous", visible: value }
|
|
]);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get showNext() {
|
|
return plugin.getElement("next").visible;
|
|
},
|
|
set showNext(value) {
|
|
plugin.update([
|
|
{ id: "next", visible: value }
|
|
]);
|
|
},
|
|
/**
|
|
*
|
|
*/
|
|
get showCancel() {
|
|
return plugin.getElement("cancel").visible;
|
|
},
|
|
set showCancel(value) {
|
|
plugin.update([
|
|
{ id: "cancel", visible: value }
|
|
]);
|
|
},
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get showFinish() {
|
|
return plugin.getElement("finish").visible;
|
|
},
|
|
set showFinish(value) {
|
|
plugin.update([
|
|
{ id: "finish", visible: value }
|
|
]);
|
|
},
|
|
|
|
_events: [
|
|
/**
|
|
* @event cancel
|
|
*/
|
|
"cancel",
|
|
/**
|
|
* @event previous
|
|
*/
|
|
"previous",
|
|
/**
|
|
* @event next
|
|
*/
|
|
"next",
|
|
/**
|
|
* @event finish
|
|
*/
|
|
"finish"
|
|
],
|
|
|
|
/**
|
|
*
|
|
*/
|
|
show: show,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
cancel: cancel,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
previous: previous,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
next: next,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
finish: finish,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
gotoPage: gotoPage
|
|
});
|
|
|
|
return plugin;
|
|
}
|
|
|
|
function WizardPage(options, forPlugin) {
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
var emit = plugin.getEmitter();
|
|
|
|
var name = options.name;
|
|
var aml;
|
|
|
|
if (forPlugin)
|
|
forPlugin.addOther(function() { plugin.unload(); });
|
|
|
|
var drawn;
|
|
function draw() {
|
|
if (drawn) return;
|
|
drawn = true;
|
|
|
|
aml = new ui.bar();
|
|
plugin.addOther(function() {
|
|
aml.removeNode();
|
|
});
|
|
apf.document.documentElement.appendChild(aml);
|
|
aml.removeNode();
|
|
|
|
emit.sticky("draw", { html: aml.$ext, aml: aml });
|
|
}
|
|
|
|
/***** Methods *****/
|
|
|
|
function hide() {
|
|
aml.parentNode.removeChild(aml);
|
|
emit("hide");
|
|
}
|
|
|
|
function show(options) {
|
|
draw();
|
|
options && options.aml.appendChild(aml);
|
|
emit("show");
|
|
}
|
|
|
|
/***** Register and define API *****/
|
|
|
|
plugin.freezePublicAPI.baseclass();
|
|
|
|
/**
|
|
*
|
|
*/
|
|
plugin.freezePublicAPI({
|
|
/**
|
|
*
|
|
*/
|
|
get name() { return name; },
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get aml() { return aml; },
|
|
|
|
/**
|
|
*
|
|
*/
|
|
get container() { return aml && aml.$ext; },
|
|
|
|
_events: [
|
|
/**
|
|
* @event hide
|
|
*/
|
|
"hide",
|
|
/**
|
|
* @event show
|
|
*/
|
|
"show"
|
|
],
|
|
|
|
/**
|
|
*
|
|
*/
|
|
show: show,
|
|
|
|
/**
|
|
*
|
|
*/
|
|
hide: hide
|
|
});
|
|
|
|
return plugin;
|
|
}
|
|
|
|
register("", {
|
|
"Wizard": Wizard,
|
|
"WizardPage": WizardPage,
|
|
});
|
|
}
|
|
}); |