Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/externals/javelin/lib/Workflow.js
Show All 19 Lines | if (__DEV__) { | ||||
'new JX.Workflow(<?>, ...): '+ | 'new JX.Workflow(<?>, ...): '+ | ||||
'bogus URI provided when creating workflow.'); | 'bogus URI provided when creating workflow.'); | ||||
} | } | ||||
} | } | ||||
this.setURI(uri); | this.setURI(uri); | ||||
this.setData(data || {}); | this.setData(data || {}); | ||||
}, | }, | ||||
events : ['error', 'finally', 'submit'], | events : ['error', 'finally', 'submit', 'start'], | ||||
statics : { | statics : { | ||||
_stack : [], | _stack : [], | ||||
newFromForm : function(form, data, keep_enabled) { | newFromForm : function(form, data, keep_enabled) { | ||||
var pairs = JX.DOM.convertFormToListOfPairs(form); | var pairs = JX.DOM.convertFormToListOfPairs(form); | ||||
for (var k in data) { | for (var k in data) { | ||||
pairs.push([k, data[k]]); | pairs.push([k, data[k]]); | ||||
} | } | ||||
Show All 12 Lines | newFromForm : function(form, data, keep_enabled) { | ||||
delete inputs[ii]; | delete inputs[ii]; | ||||
} else { | } else { | ||||
inputs[ii].disabled = true; | inputs[ii].disabled = true; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
var workflow = new JX.Workflow(form.getAttribute('action'), {}); | var workflow = new JX.Workflow(form.getAttribute('action'), {}); | ||||
workflow._form = form; | |||||
workflow.setDataWithListOfPairs(pairs); | workflow.setDataWithListOfPairs(pairs); | ||||
workflow.setMethod(form.getAttribute('method')); | workflow.setMethod(form.getAttribute('method')); | ||||
workflow.listen('finally', function() { | workflow.listen('finally', function() { | ||||
// Re-enable form elements | // Re-enable form elements | ||||
for (var ii = 0; ii < inputs.length; ii++) { | for (var ii = 0; ii < inputs.length; ii++) { | ||||
inputs[ii] && (inputs[ii].disabled = false); | inputs[ii] && (inputs[ii].disabled = false); | ||||
} | } | ||||
}); | }); | ||||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Lines | _dosubmit : function(form, button) { | ||||
if (dom_event.getPrevented()) { | if (dom_event.getPrevented()) { | ||||
return; | return; | ||||
} | } | ||||
var data = JX.DOM.convertFormToListOfPairs(form); | var data = JX.DOM.convertFormToListOfPairs(form); | ||||
data.push([button.name, button.value || true]); | data.push([button.name, button.value || true]); | ||||
var active = JX.Workflow._getActiveWorkflow(); | var active = JX.Workflow._getActiveWorkflow(); | ||||
active._form = form; | |||||
var e = active.invoke('submit', {form: form, data: data}); | var e = active.invoke('submit', {form: form, data: data}); | ||||
if (!e.getStopped()) { | if (!e.getStopped()) { | ||||
active._destroy(); | // NOTE: Don't remove the current dialog yet because additional | ||||
// handlers may still want to access the nodes. | |||||
active | active | ||||
.setURI(form.getAttribute('action') || active.getURI()) | .setURI(form.getAttribute('action') || active.getURI()) | ||||
.setDataWithListOfPairs(data) | .setDataWithListOfPairs(data) | ||||
.start(); | .start(); | ||||
} | } | ||||
}, | }, | ||||
_getActiveWorkflow : function() { | _getActiveWorkflow : function() { | ||||
var stack = JX.Workflow._stack; | var stack = JX.Workflow._stack; | ||||
return stack[stack.length - 1]; | return stack[stack.length - 1]; | ||||
} | } | ||||
}, | }, | ||||
members : { | members : { | ||||
_root : null, | _root : null, | ||||
_pushed : false, | _pushed : false, | ||||
_data : null, | _data : null, | ||||
_form: null, | |||||
_paused: 0, | |||||
_nextCallback: null, | |||||
getSourceForm: function() { | |||||
return this._form; | |||||
}, | |||||
pause: function() { | |||||
this._paused++; | |||||
return this; | |||||
}, | |||||
resume: function() { | |||||
if (!this._paused) { | |||||
JX.$E('Resuming a workflow which is not paused!'); | |||||
} | |||||
this._paused--; | |||||
if (!this._paused) { | |||||
var next = this._nextCallback; | |||||
this._nextCallback = null; | |||||
if (next) { | |||||
next(); | |||||
} | |||||
} | |||||
return this; | |||||
}, | |||||
_onload : function(r) { | _onload : function(r) { | ||||
this._destroy(); | |||||
// It is permissible to send back a falsey redirect to force a page | // It is permissible to send back a falsey redirect to force a page | ||||
// reload, so we need to take this branch if the key is present. | // reload, so we need to take this branch if the key is present. | ||||
if (r && (typeof r.redirect != 'undefined')) { | if (r && (typeof r.redirect != 'undefined')) { | ||||
JX.$U(r.redirect).go(); | JX.$U(r.redirect).go(); | ||||
} else if (r && r.dialog) { | } else if (r && r.dialog) { | ||||
this._push(); | this._push(); | ||||
this._root = JX.$N( | this._root = JX.$N( | ||||
'div', | 'div', | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | _pop : function() { | ||||
} | } | ||||
}, | }, | ||||
_destroy : function() { | _destroy : function() { | ||||
if (this._root) { | if (this._root) { | ||||
JX.DOM.remove(this._root); | JX.DOM.remove(this._root); | ||||
this._root = null; | this._root = null; | ||||
} | } | ||||
}, | }, | ||||
start : function() { | start : function() { | ||||
var next = JX.bind(this, this._send); | |||||
this.pause(); | |||||
this._nextCallback = next; | |||||
this.invoke('start', this); | |||||
this.resume(); | |||||
}, | |||||
_send: function() { | |||||
var uri = this.getURI(); | var uri = this.getURI(); | ||||
var method = this.getMethod(); | var method = this.getMethod(); | ||||
var r = new JX.Request(uri, JX.bind(this, this._onload)); | var r = new JX.Request(uri, JX.bind(this, this._onload)); | ||||
var list_of_pairs = this._data; | var list_of_pairs = this._data; | ||||
list_of_pairs.push(['__wflow__', true]); | list_of_pairs.push(['__wflow__', true]); | ||||
r.setDataWithListOfPairs(list_of_pairs); | r.setDataWithListOfPairs(list_of_pairs); | ||||
r.setDataSerializer(this.getDataSerializer()); | r.setDataSerializer(this.getDataSerializer()); | ||||
if (method) { | if (method) { | ||||
Show All 27 Lines | members : { | ||||
setData : function(dictionary) { | setData : function(dictionary) { | ||||
this._data = []; | this._data = []; | ||||
for (var k in dictionary) { | for (var k in dictionary) { | ||||
this._data.push([k, dictionary[k]]); | this._data.push([k, dictionary[k]]); | ||||
} | } | ||||
return this; | return this; | ||||
}, | }, | ||||
addData: function(key, value) { | |||||
this._data.push([key, value]); | |||||
return this; | |||||
}, | |||||
setDataWithListOfPairs : function(list_of_pairs) { | setDataWithListOfPairs : function(list_of_pairs) { | ||||
this._data = list_of_pairs; | this._data = list_of_pairs; | ||||
return this; | return this; | ||||
} | } | ||||
}, | }, | ||||
properties : { | properties : { | ||||
handler : null, | handler : null, | ||||
▲ Show 20 Lines • Show All 58 Lines • Show Last 20 Lines |