var page_id = 0;
var page_controller = 'core';
var current_pallette = null;
$(function() {
$('#cp-widgets-select-template select').on('change', function (){
window.location.href = $('#cp-widgets-select-template').data('current_url')+'?template_name='+$(this).val();
});
current_pallette = false;
page_id = 0;
var tree_url = $('#cp-widgets-layout').data('tree-url');
$("#datatree").dynatree({
onPostInit: function(isReloading, isError){
var path = $.cookie('icms[widgets_tree_path]');
if (!path) {path = '/core/core.0';}
$("#datatree").dynatree("getTree").loadKeyPath(path, function(node, status){
if(status == "loaded") {
node.expand();
}else if(status == "ok") {
node.activate();
node.expand();
}
});
},
onActivate: function(node){
node.expand();
$.cookie('icms[widgets_tree_path]', node.getKeyPath(), {expires: 7, path: '/'});
widgetsSelectPage(node.data.key);
},
onLazyRead: function(node){
node.appendAjax({
url: tree_url,
data: {
controller_name: node.data.key
}
});
}
});
$( "#cp-widgets-list #accordion a" ).click(function(){
if (current_pallette === $(this).attr('rel')) {return false;}
current_pallette = $(this).attr('rel');
$("#cp-widgets-list #accordion ul:visible").slideToggle().parent('div').find('a').find('span').html('→');
$('span', this).html('↓');
$(this).parent('div').find('ul').slideToggle();
});
$( "#cp-widgets-layout .position" ).sortable({
items: "li:not(.disabled)",
revert: true,
opacity: 0.9,
delay: 150,
cancel: '.actions',
connectWith: ".position",
placeholder: 'placeholder',
update: function(event, ui) {
widgetsMarkTabbed();
var pos = $(this).attr('rel');
if (ui.item.attr('rel') == 'new'){
var id = ui.item.data('id');
ui.item.attr('rel', '');
ui.item.data('widget-id', id);
ui.item.removeAttr('style');
widgetsAdd(id, pos, ui.item);
} else {
widgetsSavePositionOrderings(pos);
}
}
});
$( "#cp-widgets-list ul li" ).draggable({
connectToSortable: "#cp-widgets-layout .position",
helper: "clone",
revert: "invalid"
});
$( "ul, li" ).disableSelection();
$( "#cp-widgets-list #accordion a" ).eq(0).trigger('click');
var sb = $('#datatree').parent();
$(sb).after('<td id="slide_cell"></td>');
$('#slide_cell').on('click', function (){
if($(sb).is(':visible')){
$(sb).hide();
$(this).addClass('unslided');
} else {
$(sb).show();
$(this).removeClass('unslided');
}
});
$(window).on('resize', function(){
if(!$(sb).is(':visible')){
$('#slide_cell').addClass('unslided');
}
}).triggerHandler('resize');
});
function widgetsSelectPage(key){
key = key.split('.');
var controller = key[0];
var id = key[1];
$('.cp_toolbar .edit').hide();
$('.cp_toolbar .delete').hide();
if (!isNaN(id)&&parseInt(id)==id){
page_id = id;
page_controller = controller;
} else {
page_id = null;
page_controller = 'core';
return false;
}
if (page_controller=='custom'){
var delete_page_url = $('#cp-widgets-layout').data('delete-page-url');
$('.cp_toolbar .delete').show();
$('.cp_toolbar .delete a').attr('href', delete_page_url + '/' + page_id);
}
if (page_controller != 'core' || page_id === '0'){
var edit_page_url = $('#cp-widgets-layout').data('edit-page-url');
$('.cp_toolbar .edit').show();
$('.cp_toolbar .edit a').attr('href', edit_page_url + '/' + page_id);
}
widgetsLoad(page_id);
return true;
}
function widgetsLoad(page_id){
var load_url = $('#cp-widgets-layout').data('load-url');
var template = $('#cp-widgets-layout').data('template');
$('#cp-widgets-layout .position').html('');
$.post(load_url, {page_id: page_id, template: template}, function(result){
if (!result.is_exists){return;}
for(var pos in result.scheme){
for (var idx in result.scheme[pos]){
var widget = result.scheme[pos][idx];
var widget_dom = $(document.createElement('li')).attr('bind-id', widget.id).data('name', widget.name).html(widget.title);
if (widget.is_tab_prev){
widget_dom.addClass('is_tab_prev');
}
if (widget.device_types){
widget_dom.addClass('device_restrictions');
widget_dom.append('<span class="wd_device_types">'+widget.device_types.join(', ')+'</span>');
}
$('#cp-widgets-layout #pos-'+pos).append(widget_dom);
if (widget.is_disabled) {
widget_dom.addClass('disabled');
} else {
widgetAddActionButtons(widget_dom);
}
if (!widget.is_enabled) {
widget_dom.addClass('hide').find('.actions .hide').attr('title', LANG_SHOW);
}
widgetsMarkTabbed();
}
}
icms.events.run('admin_widgets_load', result);
}, 'json');
}
function widgetsMarkTabbed(){
$('#cp-widgets-layout .position li').removeClass('tabbed');
$('#cp-widgets-layout .position li').each(function(){
if ($(this).hasClass('is_tab_prev')){
$(this).addClass('tabbed');
$(this).prev().addClass('tabbed');
}
});
}
function widgetAddActionButtons(widget_dom){
widget_dom.append( $('#actions-template').html() );
$('.actions .edit', widget_dom).click(function(){
var widget_id = $(this).parent('span').parent('li').attr('bind-id');
return widgetEdit(widget_id);
});
$('.actions .delete', widget_dom).click(function(){
var widget_id = $(this).parent('span').parent('li').attr('bind-id');
return widgetDelete(widget_id);
});
$('.actions .hide', widget_dom).click(function(){
var widget_id = $(this).parent('span').parent('li').attr('bind-id');
return widgetToggle(widget_id);
});
}
function widgetToggle(id){
var widget_dom = $( "#cp-widgets-layout li[bind-id=" + id + ']');
var toggle_url = $('#cp-widgets-layout').data('toggle-url') + '/' + id;
$.post(toggle_url, {}, function(result){
if (result.error){ return; }
if (result.is_on){
widget_dom.removeClass('hide').find('.actions .hide').attr('title', LANG_HIDE);
} else {
widget_dom.addClass('hide').find('.actions .hide').attr('title', LANG_SHOW);
}
}, 'json');
return false;
}
function widgetsAdd(id, position, widget_dom){
var add_url = $('#cp-widgets-layout').data('add-url');
var template = $('#cp-widgets-layout').data('template');
var data = {
widget_id: id,
page_id: page_id,
position: position,
template: template
};
$.post(add_url, data, function(result){
if (result.error){
widget_dom.remove();
return;
}
widget_dom.attr('bind-id', result.id);
widget_dom.data('name', result.name);
widgetAddActionButtons(widget_dom);
widgetsSavePositionOrderings(position);
widgetEdit(result.id);
icms.events.run('admin_widgets_add', result);
}, 'json');
}
function widgetEdit(id){
var edit_url = $('#cp-widgets-layout').data('edit-url');
var widget_dom = $( "#cp-widgets-layout li[bind-id=" + id + ']');
icms.modal.openAjax(edit_url + '/' + id, undefined, function (){
icms.modal.setCallback('close', function(){
icms.forms.form_changed = false;
});
var h = 0, m = false;
$('.modal_form .form-tabs .tab').each(function(indx, element){
var th = +$(this).height();
if (th > h){ if(indx){ h = th; m = true; } }
});
if(m){
$('.modal_form .form-tabs .tab').first().css({height: h+'px'});
setTimeout(function(){ icms.modal.resize(); }, 10);
}
}, widget_dom.data('name'));
return false;
}
function widgetUpdated(widget, result){
var widget_dom = $( "#cp-widgets-layout li[bind-id=" + result.widget.id + ']');
widget_dom.html(result.widget.title);
if (result.widget.device_types){
widget_dom.append('<span class="wd_device_types">'+result.widget.device_types.join(', ')+'</span>');
}
widgetAddActionButtons(widget_dom);
if (widget.is_tab_prev){
widget_dom.addClass('is_tab_prev');
} else {
widget_dom.removeClass('is_tab_prev');
}
if (result.widget.device_types){
widget_dom.addClass('device_restrictions');
} else {
widget_dom.removeClass('device_restrictions');
}
widgetsMarkTabbed();
icms.modal.close();
}
function widgetDelete(id){
if (!confirm(LANG_CP_WIDGET_DELETE_CONFIRM)){return false;}
var widget_dom = $( "#cp-widgets-layout li[bind-id=" + id + ']');
var delete_url = $('#cp-widgets-layout').data('delete-url') + '/' + id;
widget_dom.fadeOut(300, function(){
widget_dom.remove();
widgetsMarkTabbed();
});
$.post(delete_url, {}, function(){});
return false;
}
function widgetsSavePositionOrderings(position){
var list = $('#pos-' + position);
var id_list = new Array();
if ($('li:not(.disabled)', list).length==0) {return false;}
$('li:not(.disabled)', list).each(function(){
var id = $(this).attr('bind-id');
id_list.push(id);
});
var reorder_url = $('#cp-widgets-layout').data('reorder-url');
$.post(reorder_url, {position: position, items: id_list, page_id: page_id}, function(){
});
return true;
}
function widgetGetListItems(list_id, url){
console.log('#'+list_id);
console.log(url);
}