%PDF- %PDF-
| Direktori : /home/lightco1/www/torremato.com.au/plugins/system/t3/admin/layout/js/ |
| Current File : /home/lightco1/www/torremato.com.au/plugins/system/t3/admin/layout/js/layout.js |
/**
*------------------------------------------------------------------------------
* @package T3 Framework for Joomla!
*------------------------------------------------------------------------------
* @copyright Copyright (C) 2004-2013 JoomlArt.com. All Rights Reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
* @authors JoomlArt, JoomlaBamboo, (contribute to this project at github
* & Google group to become co-author)
* @Google group: https://groups.google.com/forum/#!forum/t3fw
* @Link: http://t3-framework.org
*------------------------------------------------------------------------------
*/
T3AdminLayout = window.T3AdminLayout || {};
!function ($) {
$.extend(T3AdminLayout, {
layout: {
maxcol: {
'default': 6,
'normal': 6,
'wide': 6,
'xtablet': 4,
'tablet': 3,
'mobile': 2
},
minspan: {
'default': 2,
'normal': 2,
'wide': 2,
'xtablet': 3,
'tablet': 4,
'mobile': 6
},
unitspan: {
'default': 1,
'normal': 1,
'wide': 1,
'xtablet': 1,
'tablet': 1,
'mobile': 6
},
clayout: 'default',
nlayout: 'default',
maxgrid: 12,
maxcols: 6,
mode: 0,
spancls: /(\s*)span(\d+)(\s*)/g,
spanptrn: 'span{width}',
span: 'span',
rspace: /\s+/,
rclass: /[\t\r\n]/g
},
initPreSubmit: function(){
var form = document.adminForm;
if(!form){
return false;
}
var onsubmit = form.onsubmit;
form.onsubmit = function(e){
(form.task.value && form.task.value.indexOf('.cancel') != -1) ?
($.isFunction(onsubmit) ? onsubmit() : false) : T3AdminLayout.t3savelayout(onsubmit);
};
},
initPrepareLayout: function(){
var jlayout = $('#t3-admin-layout').appendTo($('#jform_params_mainlayout').closest('.controls')),
jelms = $('#t3-admin-layout-container'),
jdevices = jlayout.find('.t3-admin-layout-devices'),
jresetdevice = jlayout.find('.t3-admin-layout-reset-device'),
jresetposition = jlayout.find('.t3-admin-layout-reset-position'),
jresetall = jlayout.find('.t3-admin-layout-reset-all'),
jfullscreen = jlayout.find('.t3-admin-tog-fullscreen'),
jselect = $('#t3-admin-layout-tpl-positions');
jlayout
.find('.t3-admin-layout-modes')
.on('click', 'li', function(){
if($(this).hasClass('t3-admin-layout-mode-layout')){
jelms.removeClass('t3-admin-layout-mode-m').addClass('t3-admin-layout-mode-r');
T3AdminLayout.layout.mode = 1;
jdevices.removeClass('hide');
jresetdevice.removeClass('hide');
jresetposition.addClass('hide');
jselect.hide();
jelms.find('.t3-admin-layout-vis').each(T3AdminLayout.t3updatevisible);
jdevices.find('[data-device]:first').removeClass('active').trigger('click');
} else {
jelms.removeClass('t3-admin-layout-mode-r').addClass('t3-admin-layout-mode-m');
T3AdminLayout.layout.mode = 0;
jdevices.addClass('hide');
jresetdevice.addClass('hide');
jresetposition.removeClass('hide');
jelms.removeClass(T3AdminLayout.layout.clayout).addClass(T3AdminLayout.layout.dlayout);
T3AdminLayout.t3updatedevice(T3AdminLayout.layout.dlayout);
}
$(this).addClass('active').siblings().removeClass('active');
return false;
});
jdevices.on('click', '.btn', function(e){
if(!$(this).hasClass('active')){
var nlayout = $(this).attr('data-device');
$(this).addClass('active').siblings('.active').removeClass('active');
jelms.removeClass(T3AdminLayout.layout.clayout);
jelms.addClass(nlayout);
T3AdminLayout.t3updatedevice(nlayout);
}
return false;
});
T3AdminLayout.jresetall = jresetall.on('click', T3AdminLayout.t3resetall);
T3AdminLayout.jfullscreen = jfullscreen.on('click', T3AdminLayout.t3fullscreen);
T3AdminLayout.jresetposition = jresetposition.on('click', T3AdminLayout.t3resetposition);
T3AdminLayout.jresetdevice = jresetdevice.on('click', T3AdminLayout.t3resetdevice);
T3AdminLayout.jselect = jselect.appendTo(document.body).on('click', function(e){ return false; });
T3AdminLayout.jallpos = jselect.find('select');
T3AdminLayout.jallpos.on('change', function(){
var curspan = T3AdminLayout.curspan;
if(curspan){
$(curspan).parent().removeClass('pos-off pos-active').find('h3').html(this.value || T3Admin.langs.emptyLayoutPosition);
$(this).closest('.popover').hide();
var jspl = $(curspan).parent().parent().parent();
if(jspl.attr('data-spotlight')){
var spanidx = $(curspan).closest('.t3-admin-layout-unit').index();
jspl.nextAll('.t3-admin-layout-hiddenpos').children().eq(spanidx).html((this.value || T3Admin.langs.emptyLayoutPosition) + '<i class="icon-eye-close">');
} else {
$(curspan).parent().next('.t3-admin-layout-hiddenpos').children().html((this.value || T3Admin.langs.emptyLayoutPosition) + '<i class="icon-eye-close">');
}
if(!this.value){
$(curspan).parent().addClass('pos-off');
}
$(this)
.next('.t3-admin-layout-rmvbtn').toggleClass('disabled', !this.value)
.next('.t3-admin-layout-defbtn').toggleClass('disabled', this.value == $(curspan).closest('[data-original]').attr('data-original'));
}
return false;
}).on('mousedown', 'optgroup', function(e){
if(e.target && e.target.tagName.toLowerCase() == 'optgroup'){
return false;
}
});
jselect.find('.t3-admin-layout-rmvbtn, .t3-admin-layout-defbtn')
.on('click', function(){
var curspan = T3AdminLayout.curspan;
if(curspan && !$(this).hasClass('disabled')){
var vdef = $(this).hasClass('t3-admin-layout-defbtn') ? $(curspan).closest('[data-original]').attr('data-original') : '';
T3AdminLayout.jallpos.val(vdef).trigger('change');
}
return false;
});
$(document).off('click.t3layout').on('click.t3layout', function(){
var curspan = T3AdminLayout.curspan;
if(curspan){
$(curspan).parent().removeClass('pos-active');
}
jselect.hide();
});
$(window).load(function(){
setTimeout(function(){
$('#jform_params_mainlayout').trigger('change.less');
}, 500);
});
},
initMarkChange: function(){
clearTimeout(T3AdminLayout.chsid);
var jgroup = $('#t3-admin-layout').closest('.control-group'),
jpane = jgroup.closest('.tab-pane'),
jtab = $('.t3-admin-nav .nav li').eq(jpane.index()),
check = function(){
if(!jgroup.data('chretain')){
var eq = JSON.stringify(T3AdminLayout.t3getlayoutdata()) == T3AdminLayout.curconfig;
jgroup.toggleClass('t3-changed', !eq);
jtab.toggleClass('t3-changed', !!(!eq || jpane.find('.t3-changed').length));
}
T3AdminLayout.chsid = setTimeout(check, 1500);
};
T3AdminLayout.curconfig = JSON.stringify(T3AdminLayout.t3getlayoutdata());
T3AdminLayout.chsid = setTimeout(check, 1500);
},
initChosen: function(){
//remove chosen on position list
var jtplpos = $('#tpl-positions-list');
if(jtplpos.hasClass('chzn-done')){
var chosen = jtplpos.data('chosen');
if(chosen && chosen.destroy) {
chosen.destroy();
} else {
jtplpos
.removeClass('chzn-done').show()
.next().remove();
}
}
},
initLayoutClone: function(){
$('#t3-admin-layout-clone-dlg')
.on('show', function(){
$('#t3-admin-layout-cloned-name').val($('#jform_params_mainlayout').val() + '-copy');
})
.on('shown', function(){
$('#t3-admin-layout-cloned-name').focus();
});
$('#t3-admin-layout-clone-btns')
.insertAfter('#jform_params_mainlayout');
$('#t3-admin-layout-clone-copy').on('click', function(){
T3AdminLayout.prompt(T3Admin.langs.askCloneLayout, T3AdminLayout.t3clonelayout);
return false;
});
$('#t3-admin-layout-clone-delete').on('click', function(){
T3AdminLayout.confirm(T3Admin.langs.askDeleteLayout, T3Admin.langs.askDeleteLayoutDesc, T3AdminLayout.t3deletelayout);
return false;
});
$('#t3-admin-layout-clone-purge').on('click', function(){
T3AdminLayout.confirm(T3Admin.langs.askPurgeLayout, T3Admin.langs.askPurgeLayoutDesc, T3AdminLayout.t3purgelayout);
return false;
});
},
initModalDialog: function(){
$('#t3-admin-layout-clone-dlg')
.appendTo(document.body)
.prop('hide', false) //remove mootool hide function
.on('click', '.modal-footer button', function(e){
if($.isFunction(T3AdminLayout.modalCallback)){
T3AdminLayout.modalCallback($(this).hasClass('yes'));
} else if($(this).hasClass('yes')){
$('#t3-admin-layout-clone-dlg').modal('hide');
}
return false;
})
.find('.form-horizontal').on('submit', function(){
$('#t3-admin-layout-clone-dlg .modal-footer .yes').trigger('click');
return false;
});
},
alert: function(msg, type, title, placeholder){
//remove
$('#t3-admin-layout-alert').remove();
//add new
$([
'<div id="t3-admin-layout-alert" class="alert alert-', (type || 'info'), '">',
'<button type="button" class="close" data-dismiss="alert">×</button>',
(title ? '<h4 class="alert-heading">' + title + '</h4>' : ''),
'<p>', msg, '</p>',
'</div>'].join(''))
.appendTo(placeholder || $('#system-message').show())
.alert();
},
confirm: function(title, msg, callback){
T3AdminLayout.modalCallback = callback;
var jdialog = $('#t3-admin-layout-clone-dlg');
jdialog.find('h3').html(title);
jdialog.find('.prompt-block').hide();
jdialog.find('.message-block').show().html(msg);
jdialog.find('.btn-danger').show();
jdialog.find('.btn-success').hide();
jdialog.removeClass('modal-prompt modal-alert')
.addClass('modal-confirm')
.modal('show');
},
prompt: function(msg, callback){
T3AdminLayout.modalCallback = callback;
var jdialog = $('#t3-admin-layout-clone-dlg');
jdialog.find('h3').html(msg);
jdialog.find('.message-block').hide();
jdialog.find('.prompt-block').show();
jdialog.find('.btn-success').show();
jdialog.find('.btn-danger').hide();
jdialog.removeClass('modal-alert modal-confirm')
.addClass('modal-prompt')
.modal('show');
},
t3reset: function(){
var jlayout = $('#t3-admin-layout'),
jelms = $('#t3-admin-layout-container');
jelms.removeClass('t3-admin-layout-mode-r').addClass('t3-admin-layout-mode-m');
jelms.removeClass(T3AdminLayout.layout.clayout).addClass(T3AdminLayout.layout.dlayout);
T3AdminLayout.layout.mode = 0;
T3AdminLayout.layout.clayout = T3AdminLayout.layout.dlayout;
jlayout.find('.t3-admin-layout-mode-structure').addClass('active').siblings().removeClass('active');
jlayout.find('.t3-admin-layout-devices').addClass('hide');
jlayout.find('.t3-admin-layout-reset-device').addClass('hide');
jlayout.find('.t3-admin-layout-reset-position').removeClass('hide');
},
t3clonelayout: function(ok){
if(ok != undefined && !ok){
return false;
}
var nname = $('#t3-admin-layout-cloned-name').val();
if(nname){
nname = nname.replace(/[^0-9a-zA-Z_-]/g, '').replace(/ /, '').toLowerCase();
}
if(nname == ''){
T3AdminLayout.alert(T3Admin.langs.correctLayoutName, 'warning', '', $('#t3-admin-layout-cloned-name').parent());
return false;
}
T3AdminLayout.submit({
t3action: 'layout',
t3task: 'copy',
template: T3Admin.template,
original: $('#jform_params_mainlayout').val(),
layout: nname
}, T3AdminLayout.t3getlayoutdata(), function(json){
if(typeof json == 'object'){
if(json && (json.error || json.successful)){
T3Admin.systemMessage(json.error || json.successful);
}
if(json.successful){
var mainlayout = document.getElementById('jform_params_mainlayout');
mainlayout.options[mainlayout.options.length] = new Option(json.layout, json.layout);
mainlayout.options[mainlayout.options.length - 1].selected = true;
$(mainlayout).trigger('change.less').trigger('liszt:updated');
}
}
});
},
t3deletelayout: function(ok){
if(ok != undefined && !ok){
return false;
}
var nname = $('#jform_params_mainlayout').val();
if(nname == ''){
return false;
}
T3AdminLayout.submit({
t3action: 'layout',
t3task: 'delete',
template: T3Admin.template,
layout: nname
}, function(json){
if(typeof json == 'object'){
if(json.successful && json.layout){
var mainlayout = document.getElementById('jform_params_mainlayout'),
options = mainlayout.options;
for(var j = 0, jl = options.length; j < jl; j++){
if(options[j].value == json.layout){
mainlayout.remove(j);
break;
}
}
options[0].selected = true;
$(mainlayout).trigger('change.less').trigger('liszt:updated');
}
}
});
},
t3purgelayout: function(ok){
if(ok != undefined && !ok){
return false;
}
var nname = $('#jform_params_mainlayout').val();
if(nname == ''){
return false;
}
T3AdminLayout.submit({
t3action: 'layout',
t3task: 'purge',
template: T3Admin.template,
layout: nname
}, function(json){
if(typeof json == 'object'){
if(json.successful && json.layout){
var mainlayout = document.getElementById('jform_params_mainlayout'),
options = mainlayout.options;
for(var j = 0, jl = options.length; j < jl; j++){
if(options[j].value == json.layout){
mainlayout.remove(j);
break;
}
}
options[0].selected = true;
$(mainlayout).trigger('change.less').trigger('liszt:updated');
}
}
});
},
t3savelayout: function(callback){
$.ajax({
async: false,
url: T3AdminLayout.mergeurl(
$.param({
t3action: 'layout',
t3task: 'save',
template: T3Admin.template,
layout: $('#jform_params_mainlayout').val()
})
),
type: 'post',
data: T3AdminLayout.t3getlayoutdata(),
complete: function(){
if($.isFunction(callback)){
callback();
}
}
});
return false;
},
t3getlayoutdata: function(){
var json = {},
jcontainer = $(document.adminForm).find('.t3-admin-layout-container'),
jblocks = jcontainer.find('.t3-admin-layout-pos'),
jspls = jcontainer.find('[data-spotlight]'),
jsplblocks = jspls.find('.t3-admin-layout-pos');
jblocks.not(jspls).not(jsplblocks).not('.t3-admin-layout-uneditable').each(function(){
var name = $(this).attr('data-original'),
val = $(this).find('.t3-admin-layout-posname').html(),
vis = $(this).closest('[data-vis]').data('data-vis'),
others = $(this).closest('[data-others]').data('data-others'),
info = T3AdminLayout.t3emptydv();
info.position = val ? val : '';
if(vis){
vis = T3AdminLayout.t3visible(0, vis.vals);
T3AdminLayout.t3formatvisible(info, vis);
T3AdminLayout.t3formatothers(info, others);
}
//optimize
T3AdminLayout.t3opimizeparam(info);
json[name] = info;
});
jspls.each(function(){
var name = $(this).attr('data-spotlight'),
vis = $(this).data('data-vis'),
widths = $(this).data('data-widths'),
firsts = $(this).data('data-firsts'),
others = $(this).data('data-others');
$(this).children().each(function(idx){
var jpos = $(this),
//pname = jpos.find('.t3-admin-layout-pos').attr('data-original'),
val = jpos.find('.t3-admin-layout-posname').html(),
info = T3AdminLayout.t3emptydv(),
width = T3AdminLayout.t3getwidth(idx, widths),
visible = T3AdminLayout.t3visible(idx, vis.vals),
first = T3AdminLayout.t3first(idx, firsts),
other = T3AdminLayout.t3others(idx, others);
info.position = val ? val : '';
T3AdminLayout.t3formatwidth(info, width);
T3AdminLayout.t3formatvisible(info, visible);
T3AdminLayout.t3formatfirst(info, first);
T3AdminLayout.t3formatothers(info, other);
//optimize
T3AdminLayout.t3opimizeparam(info);
json['block' + (idx + 1) + '@' + name] = info;
});
});
return json;
},
submit: function(params, data, callback){
if(!callback){
callback = data;
data = null;
}
$.ajax({
async: false,
url: T3AdminLayout.mergeurl($.param(params)),
type: data ? 'post' : 'get',
data: data,
success: function(rsp){
rsp = $.trim(rsp);
if(rsp){
var json = rsp;
if(rsp.charAt(0) != '[' && rsp.charAt(0) != '{'){
json = rsp.match(/{.*?}/);
if(json && json[0]){
json = json[0];
}
}
if(json && typeof json == 'string'){
json = $.parseJSON(json);
if(json && (json.error || json.successful)){
T3Admin.systemMessage(json.error || json.successful);
}
}
}
if($.isFunction(callback)){
callback(json || rsp);
}
},
complete: function(){
$('#t3-admin-layout-clone-dlg').modal('hide');
}
});
},
mergeurl: function(query, base){
base = base || window.location.href;
var urlparts = base.split('#');
if(urlparts[0].indexOf('?') == -1){
urlparts[0] += '?' + query;
} else {
urlparts[0] += '&' + query;
}
return urlparts.join('#');
},
t3fullscreen: function(){
if ($(this).hasClass('t3-fullscreen-full')) {
$('.subhead-collapse').removeClass ('subhead-fixed');
$('#t3-admin-layout').closest('.controls').removeClass ('t3-admin-control-fixed');
$(this).removeClass ('t3-fullscreen-full').find('i').removeClass().addClass('icon-resize-full');
} else {
$('.subhead-collapse').addClass ('subhead-fixed');
$('#t3-admin-layout').closest('.controls').addClass ('t3-admin-control-fixed');
$(this).addClass ('t3-fullscreen-full').find('i').removeClass().addClass('icon-resize-small');
}
return false;
},
//this is not a general function, just use for t3 only - better performance
t3copy: function(dst, src, valueonly){
for(var p in src){
if(src.hasOwnProperty(p)){
if(!dst[p]){
dst[p] = [];
}
for(var i = 0, s = src[p], il = s.length; i < il; i++){
if(!valueonly || valueonly && s[i]){
dst[p][i] = s[i];
}
}
}
}
return dst;
},
t3equalheight: function(){
// Store the tallest element's height
$(T3AdminLayout.jelms.find('.row, .row-fluid').not('.t3-spotlight').get().reverse()).each(function(){
var jrow = $(this),
jchilds = jrow.children(),
//offset = jrow.offset().top,
height = 0,
maxHeight = 0;
jchilds.each(function () {
height = $(this).css('height', '').css('min-height', '').height();
maxHeight = (height > maxHeight) ? height : maxHeight;
});
if(T3AdminLayout.layout.clayout != 'mobile'){
jchilds.css('min-height', maxHeight);
}
});
},
t3removeclass: function(clslist, clsremove){
var removes = ( clsremove || '' ).split( T3AdminLayout.layout.rspace ),
lookup = (' '+ clslist + ' ').replace( T3AdminLayout.layout.rclass, ' '),
result = [];
// loop over each item in the removal list
for ( var c = 0, cl = removes.length; c < cl; c++ ) {
// Remove until there is nothing to remove,
if ( lookup.indexOf(' '+ removes[ c ] + ' ') == -1 ) {
result.push(removes[c]);
}
}
return result.join(' ');
},
//we will do this only for not responsive class (old bootstrap spanX style)
t3opimizeparam: function(pos){
if(!T3AdminLayout.layout.responcls){
//optimize
var defdv = T3AdminLayout.layout.dlayout,
defcls = pos[defdv];
for(var p in pos){
if(pos.hasOwnProperty(p) && pos[p] === defcls && p != defdv){
pos[p] = T3AdminLayout.t3removeclass(defcls, pos[p]);
}
}
//remove span100, should we do this?
if(pos.mobile){
pos.mobile = T3AdminLayout.t3removeclass('span100 ' + T3AdminLayout.t3firstclass('mobile'), pos.mobile);
}
}
//remove empty property
for(var p in pos){
if(pos[p] === ''){
delete pos[p];
} else {
pos[p] = $.trim(pos[p]);
}
}
},
t3formatwidth: function(result, info){
for(var p in info){
if(info.hasOwnProperty(p)){
//width always be first - no need for a space
result[p] += this.t3widthclass(p, T3AdminLayout.t3widthconvert(info[p], p));
}
}
},
t3formatvisible: function(result, info){
for(var p in info){
if(info.hasOwnProperty(p) && info[p] == 1){
result[p] += ' ' + T3AdminLayout.t3hiddenclass(p);
}
}
},
t3formatfirst: function(result, info){
for(var p in info){
if(info.hasOwnProperty(p) && info[p] == 1){
result[p] += ' ' + T3AdminLayout.t3firstclass(p);
}
}
},
t3formatothers: function(result, info){
for(var p in info){
if(info.hasOwnProperty(p) && info[p] != ''){
result[p] += ' ' + info[p];
}
}
},
//generate auto calculate width
t3widthoptimize: function(numpos){
var result = [],
avg = Math.floor(T3AdminLayout.layout.maxgrid / numpos),
sum = 0;
for(var i = 0; i < numpos - 1; i++){
result.push(avg);
sum += avg;
}
result.push(T3AdminLayout.layout.maxgrid - sum);
return result;
},
t3genwidth: function(layout, numpos){
var cminspan = T3AdminLayout.layout.minspan[layout],
total = cminspan * numpos;
if(total <= T3AdminLayout.layout.maxgrid) {
return T3AdminLayout.t3widthoptimize(numpos);
} else {
var result = [],
rows = Math.ceil(total / T3AdminLayout.layout.maxgrid),
cols = Math.ceil(numpos / rows);
for(var i = 0; i < rows - 1; i++){
result = result.concat(T3AdminLayout.t3widthoptimize(cols));
numpos -= cols;
}
result = result.concat(T3AdminLayout.t3widthoptimize(numpos));
}
return result;
},
t3widthbyvisible: function(widths, visibles, numpos){
var i, dv, nvisible,
width, visible, visibleIdxs = [];
for(dv in widths){
if(widths.hasOwnProperty(dv)){
visible = visibles[dv],
visibleIdxs.length = 0,
nvisible = 0;
for(i = 0; i < numpos; i++){
if(visible[i] == 0 || visible[i] == undefined){
visibleIdxs.push(i);
}
}
width = T3AdminLayout.t3genwidth(dv, visibleIdxs.length);
for(i = 0; i < visibleIdxs.length; i++){
widths[dv][visibleIdxs[i]] = width[i];
}
}
}
},
t3getwidth: function(pidx, widths){
var result = this.t3emptydv(0),
dv;
for(dv in widths){
if(widths.hasOwnProperty(dv)){
result[dv] = widths[dv][pidx];
}
}
return result;
},
t3widthconvert: function(span, layout){
return ((layout || T3AdminLayout.layout.clayout) == 'mobile') ? Math.floor(span / T3AdminLayout.layout.maxgrid * 100) : span;
},
t3visible: function(pidx, visible){
var result = this.t3emptydv(0),
dv;
for(dv in visible){
if(visible.hasOwnProperty(dv)){
result[dv] = visible[dv][pidx] || 0;
}
}
return result;
},
t3first: function(pidx, firsts){
var result = this.t3emptydv(0),
dv;
for(dv in firsts){
if(firsts.hasOwnProperty(dv)){
result[dv] = firsts[dv][pidx] || 0;
}
}
return result;
},
t3others: function(pidx, others){
var result = this.t3emptydv(),
dv;
for(dv in others){
if(others.hasOwnProperty(dv)){
result[dv] = others[dv][pidx] || '';
}
}
return result;
},
// change the grid limit
t3updategrid: function (spl) {
//update grid and limit for resizable
var jspl = $(spl),
layout = T3AdminLayout.layout.clayout,
cmaxcol = T3AdminLayout.layout.maxcol[layout],
junitspan = $('<div class="' + T3AdminLayout.t3widthclass(layout, T3AdminLayout.t3widthconvert(T3AdminLayout.layout.unitspan[layout], layout)) + '"></div>').appendTo(jspl),
jminspan = $('<div class="' + T3AdminLayout.t3widthclass(layout, T3AdminLayout.t3widthconvert(T3AdminLayout.layout.minspan[layout], layout)) + '"></div>').appendTo(jspl),
gridgap = parseInt(junitspan.css('marginLeft')),
absgap = Math.abs(gridgap),
gridsize = Math.floor(junitspan.outerWidth())
minsize = Math.floor(jminspan.outerWidth()),
widths = jspl.data('data-widths'),
firsts = jspl.data('data-firsts'),
visible = jspl.data('data-vis').vals[layout],
width = widths[layout],
first = firsts[layout],
needfirst = visible[0] == 1,
sum = 0;
junitspan.remove();
jminspan.remove();
jspl.data('rzdata', {
grid: gridsize + absgap,
gap: absgap,
minwidth: gridsize,
maxwidth: (gridsize + absgap) * (T3AdminLayout.layout.maxgrid / T3AdminLayout.layout.unitspan[layout]) - absgap + 6
});
jspl.find('.t3-admin-layout-unit').each(function(idx){
if(visible[idx] == 0 || visible[idx] == undefined){ //ignore all hidden spans
if(needfirst || (sum + parseInt(width[idx]) > T3AdminLayout.layout.maxgrid)){
$(this).addClass(T3AdminLayout.t3firstclass(layout));
sum = parseInt(width[idx]);
first[idx] = 1;
needfirst = false;
} else {
$(this).removeClass(T3AdminLayout.t3firstclass(layout));
sum += parseInt(width[idx]);
first[idx] = 0;
}
}
});
jspl.find('.t3-admin-layout-rzhandle').css('right', Math.min(T3AdminLayout.layout.responcls ? -3 : -7, -3.5 - absgap / 2));
},
// apply the visibility value for current device - trigger when change device
t3updatevisible: function(index, item){
var jvis = $(item),
jpos = jvis.parent(),
jdata = jvis.closest('[data-vis]'),
visible = jdata.data('data-vis').vals[T3AdminLayout.layout.clayout],
state, idx = 0,
spotlight = jdata.attr('data-spotlight');
//if spotlight -> get the index
if(spotlight){
idx = jvis.closest('.t3-admin-layout-unit').index();
}
state = visible[idx] || 0;
if(spotlight){
jvis.closest('.t3-admin-layout-unit').toggle(state == 0);
var jhiddenpos = jdata.nextAll('.t3-admin-layout-hiddenpos');
jhiddenpos.children().eq(idx).toggleClass('hide', state == 0);
jhiddenpos.toggleClass('has-pos', !!(jhiddenpos.children().not('.hide, .t3-hide').length));
} else {
var jhiddenpos = jpos.next('.t3-admin-layout-hiddenpos');
if(jhiddenpos.length){
jhiddenpos.toggleClass('has-pos', state != 0);
jpos.toggleClass('hide', state != 0);
}
}
jvis.parent().toggleClass('pos-hidden', state == 1 && T3AdminLayout.layout.mode);
jvis.children().removeClass('icon-eye-close icon-eye-open').addClass(state == 1 ? 'icon-eye-close' : 'icon-eye-open');
},
// apply the change (width, columns) of spotlight block when change device
t3updatespl: function(si, spl){
var jspl = $(spl),
layout = T3AdminLayout.layout.clayout,
width = jspl.data('data-widths')[layout];
jspl.children().each(function(idx){
//remove all class and reset style width
this.className = this.className.replace(T3AdminLayout.layout.spancls, ' ');
$(this).css('width', '').addClass(T3AdminLayout.t3widthclass(layout, T3AdminLayout.t3widthconvert(width[idx]))).find('.t3-admin-layout-poswidth').html(width[idx]);
});
T3AdminLayout.t3updategrid(spl);
},
//apply responsive class - maybe we do not need this
t3updatedevice: function(nlayout){
var clayout = T3AdminLayout.layout.clayout;
T3AdminLayout.jrlems.each(function(){
var jelm = $(this);
// no override for all devices
if (!jelm.data('default')){
return;
}
// keep default
if (!jelm.data(nlayout) && (!clayout || !jelm.data(clayout))){
return;
}
// remove current
if (jelm.data(clayout)){
jelm.removeClass(jelm.data(clayout));
} else {
jelm.removeClass (jelm.data('default'));
}
// add new
if (jelm.data(nlayout)){
jelm.addClass (jelm.data(nlayout));
} else{
jelm.addClass (jelm.data('default'));
}
});
T3AdminLayout.layout.clayout = nlayout;
//apply width from previous settings
T3AdminLayout.jspls.each(T3AdminLayout.t3updatespl);
T3AdminLayout.jelms.find('.t3-admin-layout-vis').each(T3AdminLayout.t3updatevisible);
T3AdminLayout.t3equalheight();
},
t3resetdevice: function(){
var layout = T3AdminLayout.layout.clayout,
jcontainer = T3AdminLayout.jelms,
jblocks = jcontainer.find('.t3-admin-layout-pos'),
jspls = jcontainer.find('[data-spotlight]'),
jsplblocks = jspls.find('.t3-admin-layout-pos');
jblocks.not(jspls).not(jsplblocks).not('.t3-admin-layout-uneditable').each(function(){
var name = $(this).attr('data-original'),
vis = $(this).closest('[data-vis]').data('data-vis');
if(layout && vis){
$.extend(true, vis.vals[layout], vis.deft[layout]);
}
});
jspls.each(function(){
var name = $(this).attr('data-spotlight'),
vis = $(this).data('data-vis'),
widths = $(this).data('data-widths'),
owidths = $(this).data('data-owidths'),
firsts = $(this).data('data-firsts'),
ofirsts = $(this).data('data-ofirsts');
$.extend(true, vis.vals[layout], vis.deft[layout]);
$.extend(true, widths[layout], widths[layout].length == owidths[layout].length ? owidths[layout] : T3AdminLayout.t3genwidth(layout, widths[layout].length));
$.extend(true, firsts[layout], ofirsts[layout]);
for(var i = vis.deft[layout].length; i < T3AdminLayout.layout.maxcols; i++){
vis.vals[layout][i] = 0;
}
for(var i = firsts[layout].length; i < T3AdminLayout.layout.maxcols; i++){
firsts[layout][i] = '';
}
});
jspls.each(T3AdminLayout.t3updatespl);
jcontainer.find('.t3-admin-layout-vis').each(T3AdminLayout.t3updatevisible);
return false;
},
t3resetall: function(){
var layout = T3AdminLayout.layout.clayout,
jcontainer = T3AdminLayout.jelms,
jblocks = jcontainer.find('.t3-admin-layout-pos'),
jspls = jcontainer.find('[data-spotlight]'),
jsplblocks = jspls.find('.t3-admin-layout-pos');
jblocks.not(jspls).not(jsplblocks).not('.t3-admin-layout-uneditable').each(function(){
if($(this).find('[data-original]').length){
return;
}
var name = $(this).attr('data-original'),
vis = $(this).closest('[data-vis]').data('data-vis');
//change the name
$(this).find('.t3-admin-layout-posname').html(name);
if(vis){
$.extend(true, vis.vals, vis.deft);
}
});
jspls.each(function(){
var jspl = $(this),
jhides = jspl.nextAll('.t3-admin-layout-hiddenpos').children(),
vis = jspl.data('data-vis'),
widths = jspl.data('data-widths'),
original = jspl.attr('data-original').split(','),
owidths = jspl.data('data-owidths'),
numcols = owidths[T3AdminLayout.layout.dlayout].length,
html = [];
for(var i = 0; i < numcols; i++){
html = html.concat([
'<div class="t3-admin-layout-unit ', T3AdminLayout.t3widthclass(T3AdminLayout.layout.clayout, owidths[T3AdminLayout.layout.dlayout][i]), '">', //we do not need convert width here
'<div class="t3-admin-layout-pos block-', original[i], (original[i] == T3Admin.langs.emptyLayoutPosition ? ' pos-off' : ''), '" data-original="', (original[i] || ''), '">',
'<span class="t3-admin-layout-edit"><i class="icon-cog"></i></span>',
'<span class="t3-admin-layout-poswidth" title="', T3Admin.langs.layoutPosWidth, '">', owidths[T3AdminLayout.layout.dlayout][i], '</span>',
'<h3 class="t3-admin-layout-posname" title="', T3Admin.langs.layoutPosName, '">', original[i], '</h3>',
'<span class="t3-admin-layout-vis" title="', T3Admin.langs.layoutHidePosition, '"><i class="icon-eye-open"></i></span>',
'</div>',
'<div class="t3-admin-layout-rzhandle" title="', T3Admin.langs.layoutDragResize, '"></div>',
'</div>']);
jhides.eq(i).html(original[i] + '<i class="icon-eye-close">').removeClass('t3-hide');
}
for(var i = numcols; i < T3AdminLayout.layout.maxcols; i++){
jhides.eq(i).addClass('t3-hide');
}
//reset value
$(this)
.empty()
.html(html.join(''));
$.extend(true, vis.vals, vis.deft);
$.extend(true, widths, owidths);
$(this).nextAll('.t3-admin-layout-ncolumns').children().eq(owidths[T3AdminLayout.layout.dlayout].length - 1).trigger('click');
});
//change to default view
jcontainer.prev().find('.t3-admin-layout-mode-structure').trigger('click');
return false;
},
t3resetposition: function(){
var layout = T3AdminLayout.layout.clayout,
jcontainer = T3AdminLayout.jelms,
jblocks = jcontainer.find('.t3-admin-layout-pos'),
jspls = jcontainer.find('[data-spotlight]'),
jsplblocks = jspls.find('.t3-admin-layout-pos');
jblocks.not(jspls).not(jsplblocks).not('.t3-admin-layout-uneditable').each(function(){
//reset position
$(this).find('.t3-admin-layout-posname')
.html(
$(this).attr('data-original')
)
.parent()
.removeClass('pos-off pos-active');
});
jspls.each(function(){
var original = $(this).attr('data-original').split(','),
jhides = $(this).nextAll('.t3-admin-layout-hiddenpos').children();
$(this).find('.t3-admin-layout-pos').each(function(idx){
if(original[idx] != undefined){
$(this).toggleClass('pos-off', original[idx] == T3Admin.langs.emptyLayoutPosition)
.find('.t3-admin-layout-posname')
.html(original[idx]);
jhides.eq(idx).html(original[idx] + '<i class="icon-eye-close">');
} else {
$(this).addClass('pos-off').find('.t3-admin-layout-posname').html(T3Admin.langs.emptyLayoutPosition);
}
});
});
return false;
},
t3onvisible: function(){
var jvis = $(this),
jpos = jvis.parent(),
jdata = jvis.closest('[data-vis]'),
junits = null,
layout = T3AdminLayout.layout.clayout,
state = jpos.hasClass('pos-hidden'),
visible = jdata.data('data-vis').vals[layout],
spotlight = jdata.attr('data-spotlight'),
idx = 0;
//if spotlight -> the name is based on block, else use the name property
if(spotlight){
idx = jvis.closest('.t3-admin-layout-unit').index();
junits = jdata.children();
}
//toggle state
state = 1 - state;
if(spotlight){
jvis.closest('.t3-admin-layout-unit')[state == 0 ? 'show' : 'hide']();
var jhiddenpos = jdata.nextAll('.t3-admin-layout-hiddenpos');
jhiddenpos.children().eq(idx).toggleClass('hide', state == 0);
jhiddenpos.toggleClass('has-pos', !!(jhiddenpos.children().not('.hide, .t3-hide').length));
var visibleIdxs = [];
for(var i = 0, il = junits.length; i < il; i++){
if(junits[i].style.display != 'none'){
visibleIdxs.push(i);
}
}
if(visibleIdxs.length){
var widths = jdata.data('data-widths')[layout],
width = T3AdminLayout.t3genwidth(layout, visibleIdxs.length),
vi = 0;
for(var i = 0, il = visibleIdxs.length; i < il; i++){
vi = visibleIdxs[i];
widths[vi] = width[i];
junits[vi].className = junits[vi].className.replace(T3AdminLayout.layout.spancls, ' ');
junits.eq(vi).addClass(T3AdminLayout.t3widthclass(layout, T3AdminLayout.t3widthconvert(width[i]))).find('.t3-admin-layout-poswidth').html(width[i]);
}
}
} else {
var jhiddenpos = jpos.next('.t3-admin-layout-hiddenpos');
if(jhiddenpos.length){
jhiddenpos.toggleClass('has-pos', state != 0);
jpos.toggleClass('hide', state != 0);
}
}
jpos.toggleClass('pos-hidden', state == 1);
jvis.children().removeClass('icon-eye-close icon-eye-open').addClass(state == 1 ? 'icon-eye-close' : 'icon-eye-open');
visible[idx] = state;
if(spotlight){
T3AdminLayout.t3updategrid(jdata);
}
return false;
},
t3emptydv: function(val){
var result = {},
devices = T3AdminLayout.layout.devices;
val = typeof val != 'undefined' ? val : '';
for(var i = 0; i < devices.length; i++){
result[devices[i]] = val;
}
return result;
},
t3widthclass: function(device, width){
return T3AdminLayout.layout.spanptrn.replace('{device}', device).replace('{width}', width);
},
t3hiddenclass: function(device){
return T3AdminLayout.layout.hiddenptrn.replace('{device}', device);
},
t3firstclass: function(device){
return T3AdminLayout.layout.firstptrn.replace('{device}', device);
},
t3layout: function(form, ctrlelm, ctrl, rsp){
if(rsp){
var bdhtml = rsp.match(/<body[^>]*>([\w|\W]*)<\/body>/im),
vname = ctrlelm.name.replace(/[\[\]]/g, ''),
jcontrol = $(ctrlelm).closest('.control-group');
//stripScripts
if(bdhtml){
bdhtml = bdhtml[1].replace(new RegExp('<script[^>]*>([\\S\\s]*?)<\/script\\s*>', 'img'), '');
}
if(bdhtml){
//clean those bootstrap fixed class
bdhtml = bdhtml.replace(/navbar-fixed-(top|bottom)/gi, '');
var jtabpane = jcontrol.closest('.tab-pane'),
active = jtabpane.hasClass('active');
if(!active){ //if not active, then we show it
jtabpane.addClass('active');
}
var curspan = T3AdminLayout.curspan = null,
jelms = T3AdminLayout.jelms = $('#t3-admin-layout-container').empty().html(bdhtml),
jrlems = T3AdminLayout.jrlems = jelms.find('[class*="span"]').each(function(){
var jelm = $(this);
jelm.data();
jelm.removeAttr('data-default data-wide data-normal data-xtablet data-tablet data-mobile');
if (!jelm.data('default')){
jelm.data('default', jelm.attr('class'));
}
}),
jselect = T3AdminLayout.jselect,
jallpos = T3AdminLayout.jallpos,
jspls = T3AdminLayout.jspls = jelms.find('[data-spotlight]');
//reset
T3AdminLayout.t3reset();
jelms
.find('.logo h1:first')
.html(T3Admin.langs.logoPresent);
jelms
.find('.t3-admin-layout-pos')
.not('.t3-admin-layout-uneditable')
.prepend('<span class="t3-admin-layout-edit" title="' + T3Admin.langs.layoutEditPosition + '"><i class="icon-cog"></i></span>');
jelms
.find('[data-vis]')
.not('[data-spotlight]')
.each(function(){
$(this)
.data('data-vis', $.parseJSON($(this).attr('data-vis')))
.data('data-others', $.parseJSON($(this).attr('data-others')))
.attr('data-vis', '')
.attr('data-others', '')
})
.find('.t3-admin-layout-pos')
.each(function(){
var jpos = $(this);
jpos
.append('<span class="t3-admin-layout-vis" title="' + T3Admin.langs.layoutHidePosition + '"><i class="icon-eye-open"></i></span>')
.after(['<div class="t3-admin-layout-hiddenpos" title="', T3Admin.langs.layoutHiddenposDesc, '">',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', jpos.find('h3').html() ,'<i class="icon-eye-close"></i></span>',
'</div>'].join(''))
.next()
.find('.pos-hidden')
.on('click', function(){
T3AdminLayout.t3onvisible.call(jpos.find('.t3-admin-layout-vis'));
return false;
});
});
jelms
.find('.t3-admin-layout-pos')
.find('h3, h1')
.addClass('t3-admin-layout-posname')
.attr('title', T3Admin.langs.layoutPosName)
.each(function(){
var jparent = $(this).parentsUntil('.row-fluid, .row').last(),
span = parseInt(jparent.prop('className').replace(/(.*?)span(\d+)(.*)/, "$2"));
if(isNaN(span)){
span = T3Admin.langs.layoutUnknownWidth;
}
$(this).before('<span class="t3-admin-layout-poswidth" title="' + T3Admin.langs.layoutPosWidth + '">' + span + '</span>');
});
jelms
.off('click.t3lvis').off('click.t3ledit')
.on('click.t3lvis', '.t3-admin-layout-vis', T3AdminLayout.t3onvisible)
.on('click.t3ledit', '.t3-admin-layout-edit', function(e){
if(curspan){
$(curspan).parent().removeClass('pos-active');
}
curspan = T3AdminLayout.curspan = this;
var jspan = $(this),
offs = $(this).offset();
jspan.parent().addClass('pos-active');
jselect.removeClass('top').addClass('right');
var top = offs.top + (jspan.height() - jselect.height()) / 2,
left = offs.left + jspan.width();
if(left + jselect.outerWidth(true) > $(window).width()){
jselect.removeClass('right').addClass('top');
top = offs.top - jselect.outerHeight(true);
left = offs.left + (jspan.width() - jselect.width()) / 2;
}
jselect.css({
top: top,
left: left
}).show()
.find('select')
.val(jspan.siblings('h3').html())
.next('.t3-admin-layout-rmvbtn').toggleClass('disabled', !jallpos.val())
.next('.t3-admin-layout-defbtn').toggleClass('disabled', jspan.siblings('h3').html() == jspan.closest('[data-original]').attr('data-original'));
jallpos.scrollTop(Math.min(jallpos.prop('scrollHeight') - jallpos.height(), jallpos.prop('selectedIndex') * (jallpos.prop('scrollHeight') / jallpos[0].options.length)));
return false;
});
jspls.each(function(){
var jncols = $([
'<div class="btn-group t3-admin-layout-ncolumns">',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">1</span>',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">2</span>',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">3</span>',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">4</span>',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">5</span>',
'<span class="btn" title="', T3Admin.langs.layoutChangeNumpos, '">6</span>',
'</div>'].join('')).appendTo(this.parentNode),
jcols = $(this).children(),
numpos = jcols.length,
spotlight = this,
positions = [],
defpos = $(this).attr('data-original').replace(/\s+/g, '').split(','),
visibles = $.parseJSON($(this).attr('data-vis')),
twidths = $.parseJSON($(this).attr('data-widths')),
widths = {},
owidths = $.parseJSON($(this).attr('data-owidths')),
ofirsts = $.parseJSON($(this).attr('data-ofirsts')),
firsts = $.parseJSON($(this).attr('data-firsts'));
$(spotlight)
.data('data-widths', widths).removeAttr('data-widths', '') //store and clean the data
.data('data-owidths', owidths).removeAttr('data-owidths', '') //store and clean the data
.data('data-vis', visibles).attr('data-vis', '') //store and clean the data - keep the marker for selector
.data('data-ofirsts', ofirsts).removeAttr('data-ofirsts', '') //store and clean the data
.data('data-firsts', firsts).removeAttr('data-firsts', '') //store and clean the data
.data('data-others', $.parseJSON($(this).attr('data-others'))).removeAttr('data-others', '') //store and clean the data
.parent().addClass('t3-admin-layout-splgroup');
jcols.each(function(idx){
positions[idx] = $(this).find('h3').html();
$(this)
.addClass('t3-admin-layout-unit')
.find('.t3-admin-layout-pos')
.attr('data-original', defpos[idx])
.append('<span class="t3-admin-layout-vis" title="' + T3Admin.langs.layoutHidePosition + '"><i class="icon-eye-open"></i></span>');
});
for(var i = numpos; i < 6; i++){
positions[i] = defpos[i] || T3Admin.langs.emptyLayoutPosition;
}
var jhides = $([
'<div class="t3-admin-layout-hiddenpos" title="', T3Admin.langs.layoutHiddenposDesc, '">',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[0], '<i class="icon-eye-close"></i></span>',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[1], '<i class="icon-eye-close"></i></span>',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[2], '<i class="icon-eye-close"></i></span>',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[3], '<i class="icon-eye-close"></i></span>',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[4], '<i class="icon-eye-close"></i></span>',
'<span class="pos-hidden" title="', T3Admin.langs.layoutShowPosition, '">', positions[5], '<i class="icon-eye-close"></i></span>',
'</div>'].join('')).appendTo(this.parentNode),
jhcols = jhides.children();
for(var i = 0; i < T3AdminLayout.layout.maxcols; i++){
jhcols.eq(i).toggleClass('t3-hide', i >= numpos);
}
//temporary calculate the widths for each devices size
T3AdminLayout.t3copy(widths, twidths); //first - clone the current object
T3AdminLayout.t3widthbyvisible(widths, visibles.vals, numpos); //then extend it with autogenerate width
T3AdminLayout.t3copy(widths, twidths); // if widths has value, it should be priority
$(spotlight).xresize({
grid: false,
gap: 0,
selector: '.t3-admin-layout-unit'
});
jncols.on('click', '.btn', function(e){
if(!e.isTrigger){
numpos = $(this).index() + 1;
for(var i = 0; i < numpos; i++){
if(!positions[i] || positions[i] == T3Admin.langs.emptyLayoutPosition){
positions[i] = defpos[i] || T3Admin.langs.emptyLayoutPosition;
}
jhcols.eq(i).html(positions[i] + '<i class="icon-eye-close">').removeClass('t3-hide');
}
for(var i = numpos; i < T3AdminLayout.layout.maxcols; i++){
jhcols.eq(i).addClass('t3-hide');
}
//automatic re-calculate the widths for each devices size
T3AdminLayout.t3widthbyvisible(widths, visibles.vals, numpos);
var html = [];
for(i = 0; i < numpos; i++){
html = html.concat([
'<div class="t3-admin-layout-unit ', T3AdminLayout.t3widthclass(T3AdminLayout.layout.clayout, widths[T3AdminLayout.layout.dlayout][i]), '">',
'<div class="t3-admin-layout-pos block-', positions[i], (positions[i] == T3Admin.langs.emptyLayoutPosition ? ' pos-off' : ''), '" data-original="', (defpos[i] || ''), '">',
'<span class="t3-admin-layout-edit"><i class="icon-cog"></i></span>',
'<span class="t3-admin-layout-poswidth" title="', T3Admin.langs.layoutPosWidth, '">', widths[T3AdminLayout.layout.dlayout][i], '</span>',
'<h3 class="t3-admin-layout-posname" title="', T3Admin.langs.layoutPosName, '">', positions[i], '</h3>',
'<span class="t3-admin-layout-vis" title="', T3Admin.langs.layoutHidePosition, '"><i class="icon-eye-open"></i></span>',
'</div>',
'<div class="t3-admin-layout-rzhandle" title="', T3Admin.langs.layoutDragResize, '"></div>',
'</div>']);
}
//reset value
$(spotlight)
.empty()
.html(html.join(''));
}
//change gridsize for resize
T3AdminLayout.t3updategrid(spotlight);
$(this).addClass('active').siblings().removeClass('active');
}).children().removeClass('active').eq(numpos -1).addClass('active').trigger('click');
jhides.on('click', 'span', function(){
T3AdminLayout.t3onvisible.call($(spotlight).children().eq($(this).index()).find('.t3-admin-layout-vis'));
return false;
});
});
T3AdminLayout.t3equalheight();
if(!active){ //restore current status
jtabpane.removeClass('active');
}
$('#t3-admin-layout').removeClass('hide');
T3AdminLayout.initMarkChange();
} else {
jcontrol.find('.controls').html('<p class="t3-admin-layout-error">' + T3Admin.langs.layoutCanNotLoad + '</p>');
}
}
}
});
$(document).ready(function(){
T3AdminLayout.initPrepareLayout();
T3AdminLayout.initLayoutClone();
T3AdminLayout.initModalDialog();
T3AdminLayout.initPreSubmit();
});
$(window).load(function(){
T3AdminLayout.initChosen();
});
}(jQuery);
!function($){
var isdown = false,
curelm = null,
opts, memwidth, memfirst, memvisible, owidth,
rzleft, rzwidth, rzlayout, rzindex, rzminspan,
snapoffset = function(grid, size) {
var limit = grid / 2;
if ((size % grid) > limit) {
return grid-(size % grid);
} else {
return -size % grid;
}
},
spanfirst = function(rwidth){
var sum = 0,
needfirst = (memvisible[0] == 1);
$(curelm).parent().children().each(function(idx){
if(memvisible[idx] == 0 || memvisible[idx] == undefined){
if(needfirst || ((sum + parseInt(memwidth[idx]) > T3AdminLayout.layout.maxgrid) || (rzindex + 1 == idx && sum + parseInt(memwidth[idx]) == T3AdminLayout.layout.maxgrid && (rwidth > owidth)))){
$(this).addClass(T3AdminLayout.t3firstclass(rzlayout));
memfirst[idx] = 1;
sum = parseInt(memwidth[idx]);
needfirst = false;
} else {
$(this).removeClass(T3AdminLayout.t3firstclass(rzlayout));
memfirst[idx] = 0;
sum += parseInt(memwidth[idx]);
}
}
});
},
updatesize = function(e, togrid) {
var mx = e.pageX,
width = rwidth = (mx - rzleft + rzwidth);
if(opts.grid){
width = width + snapoffset(opts.grid, width) - opts.gap;
}
if(rwidth < opts.minwidth){
rwidth = opts.minwidth;
} else if (rwidth > opts.maxwidth){
rwidth = opts.maxwidth;
}
if(width < opts.minwidth){
width = opts.minwidth;
} else if (width > opts.maxwidth){
width = opts.maxwidth;
}
if(owidth != width){
memwidth[rzindex] = rzminspan * ((width + opts.gap) / opts.grid) >> 0;
owidth = width;
$(curelm).find('.t3-admin-layout-poswidth').html(memwidth[rzindex]);
}
curelm.style['width'] = (togrid ? width : rwidth) + 'px';
spanfirst(rwidth);
},
updatecls = function(e){
var mx = e.pageX,
width = (mx - rzleft + rzwidth);
if(opts.grid){
width = width + snapoffset(opts.grid, width) - opts.gap;
}
if(width < opts.minwidth){
width = opts.minwidth;
} else if (width > opts.maxwidth){
width = opts.maxwidth;
}
curelm.className = curelm.className.replace(T3AdminLayout.layout.spancls, ' ');
$(curelm).css('width', '').addClass(T3AdminLayout.t3widthclass(rzlayout, T3AdminLayout.t3widthconvert((rzminspan * ((width + opts.gap) / opts.grid) >> 0))));
spanfirst(width);
},
mousedown = function (e) {
curelm = this.parentNode;
isdown = true;
rzleft = e.pageX;
owidth = rzwidth = $(curelm).outerWidth();
var jdata = $(this).closest('.t3-admin-layout-xresize');
opts = jdata.data('rzdata');
rzlayout = T3AdminLayout.layout.clayout;
rzminspan = T3AdminLayout.layout.unitspan[rzlayout];
rzindex = $(this).parent().index();
memwidth = jdata.data('data-widths')[rzlayout];
memfirst = jdata.data('data-firsts')[rzlayout];
memvisible = jdata.data('data-vis').vals[rzlayout];
updatesize(e);
$(document)
.on('mousemove.xresize', mousemove)
.on('mouseup.xresize', mouseup);
return false;
},
mousemove = function (e) {
if(isdown) {
updatesize(e);
return false;
}
},
mouseup = function (e) {
isdown = false;
updatecls(e);
$(document).unbind('.xresize');
};
$.fn.xresize = function(opts) {
return this.each(function () {
$(opts.selector ? $(this).find(opts.selector) : this).append('<div class="t3-admin-layout-rzhandle" title="' + T3Admin.langs.layoutDragResize + '"></div>');
$(this)
.addClass('t3-admin-layout-xresize')
.data('rzdata', $.extend({
selector: '',
minwidth: 0,
maxwidth: 100000,
minheight: 0,
maxheight: 100000,
grid: 0,
gap: 0
}, opts))
.on('mousedown.wresize', '.t3-admin-layout-rzhandle', mousedown);
});
};
}(jQuery);