"use strict"; /* global define, app, socket */ define('admin/extend/widgets', function() { var Widgets = {}; Widgets.init = function() { $('#widgets .nav-pills a').on('click', function(ev) { var $this = $(this); $('#widgets .nav-pills li').removeClass('active'); $this.parent().addClass('active'); $('#widgets .tab-pane').removeClass('active'); $('#widgets .tab-pane[data-template="' + $this.attr('data-template') + '"]').addClass('active'); ev.preventDefault(); return false; }); $('#widget-selector').on('change', function() { $('.available-widgets [data-widget]').addClass('hide'); $('.available-widgets [data-widget="' + $(this).val() + '"]').removeClass('hide'); }); loadWidgetData(); }; function prepareWidgets() { $('[data-location="drafts"]').insertAfter($('[data-location="drafts"]').closest('.tab-content')); $('#widgets .available-widgets .widget-panel').draggable({ helper: function(e) { return $(e.target).parents('.widget-panel').clone().addClass('block').width($(e.target.parentNode).width()); }, distance: 10, connectToSortable: ".widget-area" }); $('#widgets .available-containers .containers > [data-container-html]') .draggable({ helper: function(e) { var target = $(e.target); target = target.attr('data-container-html') ? target : target.parents('[data-container-html]'); return target.clone().addClass('block').width(target.width()).css('opacity', '0.5'); }, distance: 10 }) .each(function() { $(this).attr('data-container-html', $(this).attr('data-container-html').replace(/\\\{([\s\S]*?)\\\}/g, '{$1}')); }); $('#widgets .widget-area').sortable({ update: function (event, ui) { appendToggle(ui.item); }, connectWith: "div" }).on('click', '.delete-widget', function() { var panel = $(this).parents('.widget-panel'); bootbox.confirm('Are you sure you wish to delete this widget?', function(confirm) { if (confirm) { panel.remove(); } }); }).on('mouseup', '> .panel > .panel-heading', function(evt) { if ( !( $(this).parent().is('.ui-sortable-helper') || $(evt.target).closest('.delete-widget').length ) ) { $(this).parent().children('.panel-body').toggleClass('hidden'); } }); $('#widgets .save').on('click', saveWidgets); function saveWidgets() { var total = $('#widgets [data-template][data-location]').length; $('#widgets [data-template][data-location]').each(function(i, el) { el = $(el); var template = el.attr('data-template'), location = el.attr('data-location'), area = el.children('.widget-area'), widgets = []; area.find('.widget-panel[data-widget]').each(function() { var widgetData = {}, data = $(this).find('form').serializeArray(); for (var d in data) { if (data.hasOwnProperty(d)) { if (data[d].name) { if (widgetData[data[d].name]) { if(!Array.isArray(widgetData[data[d].name])) { widgetData[data[d].name] = [ widgetData[data[d].name] ]; } widgetData[data[d].name].push(data[d].value); }else{ widgetData[data[d].name] = data[d].value; } } } } widgets.push({ widget: $(this).attr('data-widget'), data: widgetData }); }); socket.emit('admin.widgets.set', { template: template, location: location, widgets: widgets }, function(err) { total--; if (err) { app.alertError(err.message); } if (total === 0) { app.alert({ alert_id: 'admin:widgets', type: 'success', title: 'Widgets Updated', message: 'Successfully updated widgets', timeout: 2500 }); } }); }); } $('.color-selector').on('click', '.btn', function() { var btn = $(this), selector = btn.parents('.color-selector'), container = selector.parents('[data-container-html]'), classList = []; selector.children().each(function() { classList.push($(this).attr('data-class')); }); container .removeClass(classList.join(' ')) .addClass(btn.attr('data-class')); container.attr('data-container-html', container.attr('data-container-html') .replace(/class="[a-zA-Z0-9-\s]+"/, 'class="' + container[0].className.replace(' pointer ui-draggable', '') + '"') ); }); } function appendToggle(el) { if (!el.hasClass('block')) { el.addClass('block') .droppable({ accept: '[data-container-html]', drop: function(event, ui) { var el = $(this); el.find('.panel-body .container-html').val(ui.draggable.attr('data-container-html')); el.find('.panel-body').removeClass('hidden'); }, hoverClass: "panel-info" }) .children('.panel-heading') .append('
 
') .children('small').html(''); } } function loadWidgetData() { function populateWidget(widget, data) { if (data.title) { var title = widget.find('.panel-heading strong'); title.text(title.text() + ' - ' + data.title); } widget.find('input, textarea, select').each(function() { var input = $(this), value = data[input.attr('name')]; if (input.attr('type') === 'checkbox') { input.prop('checked', !!value).trigger('change'); } else { input.val(value); } }); return widget; } $.get(RELATIVE_PATH + '/api/admin/extend/widgets', function(data) { var areas = data.areas; for(var i=0; i