Alien-GvaScript
view release on metacpan or search on metacpan
src/form.js view on Meta::CPAN
add: function(repeat_name, count) {
var n_blocks = GvaScript.Repeat.add(repeat_name, count);
var last_block = repeat_name + "." + (n_blocks - 1);
GvaScript.Form.autofocus(last_block);
// get form owner of block
if(_block = $(last_block)) {
_form = _block.up('form');
// check if form has a GvaSCript.Form instance
// wrapped around it
if(_form) {
if(_gva_form = GvaScript.Forms.get(_form.identify())) {
_gva_form.fire('RepeatBlockAdd', [repeat_name.split('.').last(), last_block]);
_gva_form.fire('Change');
}
}
}
return n_blocks;
},
remove: function(repetition_block, live_update) {
// default behavior to live update all blocks below
// the removed block
if(typeof live_update == 'undefined') live_update = true;
// find element and repeat info
var elem = $(repetition_block);
elem.id.match(/(.*)\.(\d+)$/);
var repeat_name = RegExp.$1;
var remove_ix = RegExp.$2;
var form = elem.up('form');
var tree = {}; // form deserialized as a tree
// only relevant if live_update
// need to update the data for blocks below
// as they have been reproduced
if(live_update) {
// get form data corresponding to the repeated section (should be an array)
tree = GvaScript.Form.to_tree(form);
var parts = repeat_name.split(/\./);
for (var i = 0, len=parts.length ; i < len; i++) {
if (!tree) break;
tree = tree[parts[i]];
}
// remove rows below, and shift rows above
if (tree && tree instanceof Array) {
tree.splice(remove_ix, 1);
for (var i = 0 ; i < remove_ix; i++) {
delete tree[i];
}
}
}
// call Repeat.remove() to remove from DOM
// and if live_update, to remove and reproduce
// the blocks below with correct renumerations
GvaScript.Repeat.remove(repetition_block, live_update);
// after form tree has been updated
// and dom re-populated
if(live_update) {
// re-populate blocks below
GvaScript.Form.fill_from_tree(form, repeat_name, tree);
}
// check if form has a GvaSCript.Form instance
// wrapped around it
if(_gva_form = GvaScript.Forms.get(form.identify())) {
_gva_form.fire('RepeatBlockRemove', [repeat_name.split('.').last(), repeat_name + '.' + remove_ix]);
_gva_form.fire('Change');
}
}
});
// copy GvaScript.Form methods into GvaScript.Form.prototype
// set the first argument of methods to this.formElt
(function() {
var update = function (array, args) {
var arrayLength = array.length, length = args.length;
while (length--) array[arrayLength + length] = args[length];
return array;
}
for(var m_name in GvaScript.Form.Methods) {
var method = GvaScript.Form.Methods[m_name];
if (Object.isFunction(method)) {
GvaScript.Form.prototype[m_name] = (function() {
var __method = method;
return function() {
var a = update([this.formElt], arguments);
return __method.apply(null, a);
}
})();
}
}
})();
( run in 1.880 second using v1.01-cache-2.11-cpan-acebb50784d )