diff options
Diffstat (limited to 'plugins/AdminTools/template/public_controller.js')
-rw-r--r-- | plugins/AdminTools/template/public_controller.js | 319 |
1 files changed, 319 insertions, 0 deletions
diff --git a/plugins/AdminTools/template/public_controller.js b/plugins/AdminTools/template/public_controller.js new file mode 100644 index 000000000..142cded3b --- /dev/null +++ b/plugins/AdminTools/template/public_controller.js @@ -0,0 +1,319 @@ +var AdminTools = function($) { + var __this = this; + + this.urlWS; + this.urlSelf; + this.multiView; + + var $ato = $('#ato_header'), + $ato_closed = $('#ato_header_closed'), + ato_height = 28; // normal height, real height conputed on init() + + // move to whole page down or up + function moveBody(dir, anim) { + var operator = dir=='show' ? '+=' : '-='; + + if (anim) { + $('body').animate({'margin-top': operator+ato_height}); + + if ($('#the_page, [data-role="page"]').css('position')=='absolute') { + $('#the_page, [data-role="page"]').animate({'top': operator+ato_height}); + } + } + else { + $('body').css({'margin-top': operator+ato_height}); + + if ($('#the_page, [data-role="page"]').css('position')=='absolute') { + $('#the_page, [data-role="page"]').css({'top': operator+ato_height}); + } + } + } + + // fill multiview selects + // data came from AJAX request or sessionStorage + function populateMultiView() { + var $multiview = $ato.find('.multiview'); + + if ($multiview.data('init')) return; + + var render = function(data) { + var html = ''; + $.each(data.users, function(i, user) { + html+= '<option value="'+ user.id +'">'+ user.username +'</option>'; + }); + $multiview.find('select[data-type="view_as"]').html(html) + .val(__this.multiView.view_as); + + html = ''; + $.each(data.themes, function(i, theme) { + html+= '<option value="'+ theme +'">'+ theme +'</option>'; + }); + $multiview.find('select[data-type="theme"]').html(html) + .val(__this.multiView.theme); + + html = ''; + $.each(data.languages, function(i, language) { + html+= '<option value="'+ language.id +'">'+ language.name +'</option>'; + }); + $multiview.find('select[data-type="lang"]').html(html) + .val(__this.multiView.lang); + + $multiview.data('init', true); + + $multiview.find('.switcher').show(); + }; + + if ('sessionStorage' in window && window.sessionStorage.multiView != undefined) { + render(JSON.parse(window.sessionStorage.multiView)); + } + else { + $.ajax({ + method: 'POST', + url: __this.urlWS + 'multiView.getData', + dataType: 'json', + success: function(data) { + render(data.result); + if ('sessionStorage' in window) { + window.sessionStorage.multiView = JSON.stringify(data.result); + } + }, + error: function(xhr, text, error) { + alert(text + ' ' + error); + } + }); + } + } + + // delete session cache + this.deleteCache = function() { + if ('sessionStorage' in window) { + window.sessionStorage.removeItem('multiView'); + } + }; + + // move close button to smartpocket toolbar + this.initMobile = function() { + var $headerbar = $('div[data-role="header"] .title'); + if ($headerbar.length == 1) { + $ato_closed.addClass('smartpocket'); + $ato_closed.find('a').attr({ + 'data-iconpos':'notext', + 'data-role':'button' + }); + $headerbar.prepend($ato_closed); + } + }; + + // attach jquery handlers + this.init = function(open) { + $('body').prepend($ato); // ensure the bar is at the begining + + $ato.show(); + ato_height = $ato.height(); + + if ('localStorage' in window) { + if (window.localStorage.ato_panel_open == null) { + window.localStorage.ato_panel_open = open; + } + + if (window.localStorage.ato_panel_open == 1) { + moveBody('show', false); + } + else { + $ato.hide(); + $ato_closed.show(); + } + } + else { + $ato.show(); + moveBody('show', false); + } + + /* <!-- sub menus --> */ + $ato.find('.parent').on({ + 'click': function() { + if ($(this).hasClass('multiview')) { + populateMultiView(); + } + $(this).find('ul').toggle(); + }, + 'mouseleave': function(e) { + if (e.target.tagName.toLowerCase() != "select") { + $(this).find('ul').hide(); + } + } + }); + $ato.find('.parent>a').on('click', function(e) { + e.preventDefault(); + }); + $ato.find('.parent ul').on('mouseleave', function(e) { + if (e.target.tagName.toLowerCase() != "select") { + $(this).hide(); + } + }); + + /* <!-- select boxes --> */ + $ato.find('.switcher').on({ + 'change': function() { + window.location.href = __this.urlSelf + 'ato_'+ $(this).data('type') +'='+ $(this).val(); + }, + 'click': function(e) { + e.stopPropagation(); + } + }); + + /* <!-- toggle toolbar --> */ + $ato.find('.close-panel').on('click', function(e) { + $ato.slideUp(); + $ato_closed.slideDown(); + moveBody('hide', true); + + if ('localStorage' in window) window.localStorage.ato_panel_open = 0; + e.preventDefault(); + }); + + $ato_closed.on('click', function(e) { + $ato.slideDown(); + $ato_closed.slideUp(); + moveBody('show', true); + + if ('localStorage' in window) window.localStorage.ato_panel_open = 1; + e.preventDefault(); + }); + }; + + // init "set as representative" button + this.initRepresentative = function(image_id, category_id) { + $ato.find('.set-representative').on('click', function(e) { + if (!$(this).parent().hasClass('disabled')) { + $(this).parent().addClass('disabled') + + $.ajax({ + method: 'POST', + url: __this.urlWS + 'pwg.categories.setRepresentative', + dataType: 'json', + data: { + image_id: image_id, + category_id: category_id + }, + success: function() { + $ato.find('.saved').fadeIn(200).delay(1600).fadeOut(200); + }, + error: function(xhr, text, error) { + alert(text + ' ' + error); + } + }); + } + + e.preventDefault(); + }); + }; + + // init "add to caddie" button + this.initCaddie = function(image_id) { + $ato.find('.add-caddie').on('click', function(e) { + if (!$(this).parent().hasClass('disabled')) { + $(this).parent().addClass('disabled') + + $.ajax({ + method: 'POST', + url: __this.urlWS + 'pwg.caddie.add', + dataType: 'json', + data: { + image_id: image_id + }, + success: function() { + $ato.find('.saved').fadeIn(200).delay(1600).fadeOut(200); + }, + error: function(xhr, text, error) { + alert(text + ' ' + error); + } + }); + } + + e.preventDefault(); + }); + }; + + // init "quick edit" popup + this.initQuickEdit = function(is_picture, tokeninput_lang) { + var $ato_edit = $('#ato_quick_edit'); + + // try to find background color matching text color + // there is a 1s delay to wait for jQuery Mobile initialization + setTimeout(function() { + var bg_color = 'white'; + var selectors = ['#the_page #content', '[data-role="page"]', 'body']; + + for (var i=0; i<selectors.length; i++) { + var color = $(selectors[i]).css('background-color'); + if (color && color!='transparent') { + bg_color = color; + break; + } + } + + $ato_edit.css('background-color', bg_color); + }, 1000); + + $ato_edit.find('.close-edit').on('click', function(e) { + $.colorbox.close() + e.preventDefault(); + }); + + if (is_picture) { + $ato_edit.find('.datepicker').datepicker({ + dateFormat: 'yy-mm-dd' + }); + } + + $(".edit-quick").colorbox({ + inline: true, + transition: 'none', + width: 500, + maxWidth: '100%', + top: 50, + title: $ato_edit.attr('title'), + + onOpen: function() { + if (!is_picture) return; + + // fetch tags list on first open + if ($(this).data('tags-init')) return; + + $.ajax({ + method: 'POST', + url: __this.urlWS + 'pwg.tags.getList', + dataType: 'json', + success: function(data) { + var tags = []; + // convert to custom format + for (var i=0, l=data.result.tags.length; i<l; i++) { + tags.push({ + id: '~~'+ data.result.tags[i].id +'~~', + name: data.result.tags[i].name + }); + } + + $ato_edit.find('.tags').tokenInput( + tags, + $.extend({ + animateDropdown: false, + preventDuplicates: true, + allowFreeTagging: true + }, tokeninput_lang) + ); + + $.colorbox.resize(); + $(this).data('tags-init', true); + }, + error: function(xhr, text, error) { + alert(text + ' ' + error); + } + }); + } + }); + }; + + return this; +}(jQuery);
\ No newline at end of file |