aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/AdminTools/template/public_controller.js
diff options
context:
space:
mode:
authormistic100 <mistic@piwigo.org>2014-06-13 19:53:56 +0000
committermistic100 <mistic@piwigo.org>2014-06-13 19:53:56 +0000
commit0018bcd9f5ed3e86edfa83b389a8f2e42cf4101e (patch)
treefdf2b5d26b0db04856c4ed590f9954b2ddcd2b55 /plugins/AdminTools/template/public_controller.js
parent715f13b123c799eb5dae73147278a6e67fb1d8ea (diff)
add AdminTools to trunk
git-svn-id: http://piwigo.org/svn/trunk@28694 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'plugins/AdminTools/template/public_controller.js')
-rw-r--r--plugins/AdminTools/template/public_controller.js319
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