Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla5/media/com_fabrik/js/ |
| [Home] [System Details] [Kill Me] |
/**
* Pages
*
* @copyright: Copyright (C) 2005-2016 Media A-Team, Inc. - All rights
reserved.
* @license: GNU/GPL http://www.gnu.org/copyleft/gpl.html
*/
var Pages = new Class({
initialize: function (container, editable) {
this.editable = editable;
document.addEvent('mousedown', function (e) {
this.clearActive(e);
}.bind(this));
Fabrik.addEvent('fabrik.page.add', function (e) {
this.makeActive(e);
}.bind(this));
this.pages = $H({});
this.activePage = null;
this.container = document.id(container);
Fabrik.addEvent('fabrik.tab.add', function (e) {
this.add(e);
}.bind(this));
Fabrik.addEvent('fabrik.tab.click', function (e) {
this.show(e);
}.bind(this));
Fabrik.addEvent('fabrik.tab.remove', function (e) {
this.remove(e);
}.bind(this));
Fabrik.addEvent('fabrik.keynav', function (e) {
this.moveItem(e);
}.bind(this));
Fabrik.addEvent('fabrik.inline.save', function (e) {
this.updateTabKey(e);
}.bind(this));
},
/* todo perhaps makeActive and clearActive should be a mixin? */
makeActive: function (c) {
this.clearActive();
c.addClass('active');
this.active = c;
var zindexes =
document.getElements('.itemPlaceHolder').getStyle('z-index').sort();
var max = zindexes.getLast().toInt() + 1;
document.getElements('.itemPlaceHolder').each(function (i) {
i.setStyle('zindex', i.getStyle('z-index').toInt() -
1);
});
c.setStyle('z-index', max);
},
clearActive: function () {
delete this.active;
document.getElements('.itemPlaceHolder').removeClass('active');
},
moveItem: function (k, shift) {
if (this.active && this.editable) {
shift = shift ? 10 : 0;
var p = this.active.getCoordinates(this.getActivePage().page);
switch (k) {
case 37: //left
this.active.setStyle('left', p.left - 2 - shift);
break;
case 38: //up
this.active.setStyle('top', p.top - 2 - shift);
break;
case 39: //right
this.active.setStyle('left', p.left + 1 + shift);
break;
case 40: //down
this.active.setStyle('top', p.top + 1 + shift);
break;
}
}
},
add: function (tabs, t) {
var page = new Page(t, this.editable);
this.container.adopt(page.page);
page.show();
this.pages[t] = page;
this.show();
},
remove: function (tabs, t) {
t = t.retrieve('ref');
//this.pages[t].remove();
delete this.pages.t;
this.pages.erase(t);
},
show: function (tab) {
this.pages.each(function (page) {
page.hide();
});
try {
this.pages[tab].show();
this.activePage = tab;
} catch (err) {
var k = this.pages.getKeys();
if (k.length > 0) {
tab = k[0];
this.pages[tab].show();
this.activePage = tab;
}
}
},
getHTMLPages: function () {
var r = [];
this.pages.each(function (p) {
r.push(p.page);
});
return r;
},
getActivePage: function () {
if (!this.activePage) {
this.activePage = 0;
}
return this.pages[this.activePage];
},
fromJSON: function (layout) {
$H(layout).each(function (items, page) {
if (this.pages[page]) {
$H(items).each(function (item, id) {
this.pages[page].insert(item.id, item.label, item.type,
item.dimensions);
}.bind(this));
}
}.bind(this));
},
toJSON: function () {
var r = {};
this.pages.each(function (p, k) {
var o = {};
p.page.getElements('.itemPlaceHolder').each(function (e) {
p.page.show(); //needed to get coords
var type = e.id.split('_')[0];
var label =
e.getElement('.handlelabel').get('text');
o[e.id] = {'dimensions': e.getCoordinates(p.page),
'label': label, 'type': type, 'id': e.id};
});
r[k.trim()] = o;
});
return r;
},
/**
* called when tab label is changed
*/
updateTabKey: function (editor) {
var origKey = editor.retrieve('origValue').trim();
var orig = this.pages[origKey];
this.pages[editor.get('text').trim()] = orig;
delete this.pages[origKey];
this.pages.erase(origKey);
}
});
Page = new Class({
initialize: function (t, editable) {
this.editable = editable;
this.page = new Element('div', {'class':
'page', 'styles': {'display':
'none'}});
if (this.editable) {
Fabrik.addEvent('fabrik.item.resized', function (e) {
this.saveCoords(e);
}.bind(this));
Fabrik.addEvent('fabrik.item.moved', function (e) {
this.saveCoords(e);
}.bind(this));
}
},
show: function () {
this.page.show();
},
hide: function () {
this.page.hide();
},
remove: function () {
this.page.destroy();
},
removeItem: function (e, id) {
e.stop();
if (confirm('Do you really want to delete')) {
document.id(id).destroy();
Fabrik.fireEvent('fabrik.page.block.delete', [id]);
}
},
insert: function (id, label, type, dimensions) {
Fabrik.fireEvent('fabrik.page.insert', [this, id, label, type,
dimensions]);
},
saveCoords: function (e) {
}
});