diff options
author | Paul Duncan <pabs@pablotron.org> | 2016-08-20 14:22:44 -0400 |
---|---|---|
committer | Paul Duncan <pabs@pablotron.org> | 2016-08-20 14:22:44 -0400 |
commit | 4e065e6279e6e65344a2c5c0e9de5cd9d7ecfa13 (patch) | |
tree | 0cb32cf502546e6b9ab31b97e21a4916a87d5069 /data/assets/js/admin/tabs/home.js | |
parent | 743624c5c265d38df76deef2abdcbf8aef38336f (diff) | |
download | guff-master.tar.bz2 guff-master.zip |
Diffstat (limited to 'data/assets/js/admin/tabs/home.js')
-rw-r--r-- | data/assets/js/admin/tabs/home.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/data/assets/js/admin/tabs/home.js b/data/assets/js/admin/tabs/home.js new file mode 100644 index 0000000..b0f6eaf --- /dev/null +++ b/data/assets/js/admin/tabs/home.js @@ -0,0 +1,143 @@ +jQuery(function($) { + "use strict"; + + var TEMPLATES = new LuigiTemplate.Cache({ + panel: [DATA.panel_template], + }); + + function set_panel_editing(editing) { + // update panel headers + $('#home .home-editing').toggleClass('hidden', !editing); + $('#home .home-not-editing').toggleClass('hidden', editing); + + // flag panels as draggable + $('#home .panel').attr('draggable', editing); + } + + $('#admin-tab-home').on('show.bs.tab', function() { + // console.log('asdf'); + }); + + $('#home-edit-toggle').click(function() { + $(this).toggleClass('btn-default btn-primary'); + var editing = $(this).hasClass('btn-primary'), + panel = $(this).parents('.panel-heading'); + + // update buttons + panel.find('.btn-group.home-editing').toggleClass('hidden', !editing); + panel.find('.btn-group.home-not-editing').toggleClass('hidden', editing); + + set_panel_editing(editing); + + // stop event + return false; + }); + + $('#home-add').on('click', 'a', function() { + var data = $(this).data(); + + // hide dropdown + $('body').trigger('click'); + + // prepend new panel to first column + $('#home .home-col:first').prepend(TEMPLATES.run('panel', { + id: $.now(), + panel_class: 'panel-default', + config: '{}', + type: 'test', + name: data.name, + body: '<p>Sample body.</p>', + })); + + // flag panels as editable + set_panel_editing(true); + + // stop event + return false; + }); + + // cache column classes + var COL_CLASSES = $.map($('#home-cols a'), function(el) { + return $(el).data('col'); + }).join(' '); + + $('#home-cols').on('click', 'a', function() { + var data = $(this).data(), + ul = $(this).parents('.dropdown-menu'); + + // hide dropdown + $('body').trigger('click'); + + // update ui + ul.find('.active').removeClass('active'); + $(this).parent('li').addClass('active'); + ul.prev('a').find('span').text(data.name); + + var src_cols = $('#home .row .home-col'), + dst_num_cols = +data.id, + update_css = false; + + if (dst_num_cols > src_cols.length) { + for (var i = 0, l = dst_num_cols - src_cols.length; i < l; i++) + $('#home .row').append("<div class='home-col'></div>"); + + update_css = true; + } else if (dst_num_cols < src_cols.length) { + for (var i = 0, l = src_cols.length - dst_num_cols; i < l; i++) { + // append panels from deleted columns to last valid column + $.each($(src_cols[dst_num_cols + i]).find('.panel'), function(i, el) { + $(src_cols[dst_num_cols - 1]).append(el); + }); + + // remove old columns + $(src_cols.slice(dst_num_cols, src_cols.length)).remove(); + } + + update_css = true; + } else { + // do nothing, column count is fine + update_css = false; + } + + // update column classes, if necessary + if (update_css) + $('#home .row .home-col').removeClass(COL_CLASSES).addClass(data.col); + + // stop event + return false; + }); + + $('#home').on('dragstart', '.panel[draggable="true"]', function(ev) { + var oe = ev.originalEvent; + oe.dataTransfer.setData('text', oe.target.id); + + $('#home').addClass('dragging'); + }).on('dragend', '.panel[draggable="true"]', function(ev) { + $('#home').removeClass('dragging'); + }).on('dragover', '.home-col', function(ev) { + ev.preventDefault(); + }).on('drop', '.home-col', function(ev) { + ev.preventDefault(); + + var id = ev.originalEvent.dataTransfer.getData('text'); + $(this).append(document.getElementById(id)); + }).on('click', '.home-panel-edit a', function() { + var id = $(this).data('id'); + + // hide dropdown + $('body').trigger('click'); + + if (id == 'remove') { + if (confirm("Remove this panel?")) { + $($(this).parents('.panel')[0]).remove(); + } + } else if (id == 'edit') { + alert('TODO: ' + id + ' panel'); + } else { + // ignore unknown menu type + } + + // stop event + return false; + }); +}); |