| Current Path : /home/poneycluc/www/modules/mod_ja_acm/admin/assets/ |
| Current File : /home/poneycluc/www/modules/mod_ja_acm/admin/assets/jalist.js |
/**
* ------------------------------------------------------------------------
* JA ACM Module
* ------------------------------------------------------------------------
* Copyright (C) 2004-2018 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
* @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
* Author: J.O.O.M Solutions Co., Ltd
* Websites: http://www.joomlart.com - http://www.joomlancers.com
* ------------------------------------------------------------------------
*/
(function ($){
var JAList = function (element) {
var $element = this.$element = $(element);
// bind click event for button
$element.bindActions ('.action', this);
// make textarea auto height
$element.elasticTextarea('delete_row clone_row updated');
// make all field as ignore save
$element.find ('input, textarea, select').not('.acm-object').data('ignoresave', 1);
// reset index
$element.data('index', 0);
// build Form
this.bindData();
// store
$element.find ('.acm-object').data('acm-object', this);
// trigger updated event for element after built
setTimeout(function(){$element.trigger('updated')}, 100);
};
JAList.prototype.getData = function () {
// get first row
var $element = this.$element,
$items = $element.find('table.jalist > tbody > tr:first').find ('input, textarea, select'),
result = {};
$items.each (function () {
var $this = $(this),
name = $this.data('name');
result[name] = jaTools.getVal (this, $element);
});
result['rows'] = $element.find('table.jalist > tbody > tr').length;
result['cols'] = $element.find('table.jalist > tbody > tr:first > td').length;
result['type'] = 'list';
return result;
};
JAList.prototype.bindData = function (fieldname, alldata) {
// delete added cols/rows
var jalist = this;
this.$element.find('table.jalist > tbody .btn-delete').slice(1).each (function() {
jalist.delete_row (this);
});
if (!alldata) return ;
var rows = 1,
names = [],
$items = this.$element.find('table.jalist > tbody > tr:first > td').slice(0, -1);
$items.each (function (i, cell) {
var $cell = $(cell),
$field = $cell.find ('input, textarea, select'),
name = $field.data('name');
if (!name) return;
names[i] = name;
});
var data = alldata[fieldname] ? alldata[fieldname] : {};
// compatible with old version
// try to detect old data - compatible with old version
if ($.isEmptyObject(data)) {
var group = fieldname.replace(/^[^\[]*\[/, '[');
names.each (function (name, row) {
var fname = name.replace (group, '');
if (alldata[fname]) data[name] = alldata[fname];
});
}
// end compatible
// find number cols/rows
names.each (function (name, row) {
if (data[name] && data[name].length > rows) rows = data[name].length;
});
// blank data, just quit
if ($.isEmptyObject(data)) return ;
// add rows
var btn = this.$element.find('table.jalist > tbody .btn-clone')[0];
for (var i=0; i<rows-1; i++) {
this.clone_row (btn);
}
var $rows = this.$element.find('table.jalist > tbody > tr');
names.each (function (name, col) {
if (data[name] && data[name].length) {
data[name].each (function (val, row){
var $cell = $rows.eq(row).children().eq(col);
$cell.find('input').attr('data-alt-value', val); // fix for joomla 3.7 calendar
jaTools.setVal($cell.find('input, textarea, select'), val);
var calname = $cell.find('input, textarea, select').attr('id');
if (/__position/.test(calname)) {
if($cell.find('a.modal').length){
jaselectionpos = $cell.find('a.modal').attr('href').replace('jSelectPosition','JAjSelectPosition');
$cell.find('a.modal').attr('href', jaselectionpos);
$cell.find('a.modal').click(function(){
hidden_position=$(this).prev().attr('id');
});
}
}
});
}
});
};
JAList.prototype.getJSon = function (str) {
var result = {};
try {
result = JSON.parse(str.trim());
} catch (e) {
return {};
}
return $.isPlainObject(result) ? result : {};
};
JAList.prototype.decodeHtml = function (str) {
return String(str)
.replace(/\(\(/g, '<')
.replace(/\)\)/g, '>');
};
// Actions
JAList.prototype.delete_row = function (btn) {
var $btn = $(btn),
$row = $btn.parents('tr').first();
if (!$row.hasClass('first')) {
$row.remove();
}
};
JAList.prototype.clone_row = function (btn) {
var $configs = this.getJSon(this.decodeHtml($('#jatools-config').val()));
var $type = ($configs[':type'] == undefined) ? '' : $configs[':type'].split(':')[1];
var $rows = 0;
var $btn = $(btn),
$row = $btn.parents('tr').first(),
idx = this.$element.data('index');
this.$element.data('index', ++idx);
jaTools.fixCloneObject($row.jaclone(idx).removeClass('first')
.removeAttr('class').addClass('index-'+idx) // add this to fix media field joomla 3.7
.insertAfter ($row), true);
};
function Plugin() {
return new JAList(this);
}
$.fn.jalist = Plugin;
$.fn.jalist.Constructor = JAList;
})(jQuery);