source: extensions/flickr2piwigo/admin/template/import.list_photos.tpl @ 16063

Last change on this file since 16063 was 16063, checked in by mistic100, 12 years ago

initial version

File size: 13.2 KB
Line 
1{include file='include/colorbox.inc.tpl'}
2{include file='include/add_album.inc.tpl'}
3{combine_script id='jquery.ajaxmanager' load='footer' path='themes/default/js/plugins/jquery.ajaxmanager.js'}
4{combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js'}
5{combine_css path="admin/themes/default/uploadify.jGrowl.css"}
6
7{footer_script require='jquery.ajaxmanager,jquery.jgrowl'}
8/* global vars */
9var nb_thumbs_page = {$nb_thumbs_page};
10var nb_thumbs_set = {$nb_thumbs_set};
11var all_elements = [{if !empty($all_elements)}{','|@implode:$all_elements}{/if}];
12
13var errorHead   = '{'ERROR'|@translate|@escape:'javascript'}';
14var errorMsg    = '{'an error happened'|@translate|@escape:'javascript'}';
15var successHead = '{'Success'|@translate|@escape:'javascript'}';
16var selectedMessage_pattern = "{'%d of %d photos selected'|@translate}";
17var selectedMessage_none = "{'No photo selected, %d photos in current set'|@translate}";
18var selectedMessage_all = "{'All %d photos are selected'|@translate}";
19var applyOnDetails_pattern = "{'on the %d selected photos'|@translate}";
20
21var import_done = 0;
22var import_selected = 0;
23var queuedManager = jQuery.manageAjax.create('queued', {ldelim}
24  queue: true, 
25  maxRequests: 1
26});
27
28{literal}
29/* Shift-click: select all photos between the click and the shift+click */
30jQuery(document).ready(function() {
31  var last_clicked=0;
32  var last_clickedstatus=true;
33  jQuery.fn.enableShiftClick = function() {
34    var inputs = [];
35    var count=0;
36    var This=$(this);
37    this.find('input[type=checkbox]').each(function() {
38      var pos=count;
39      inputs[count++]=this;
40      $(this).bind("shclick", function (dummy,event) {
41        if (event.shiftKey) {
42          var first = last_clicked;
43          var last = pos;
44          if (first > last) {
45            first=pos;
46            last=last_clicked;
47          }
48
49          for (var i=first; i<=last;i++) {
50            input = $(inputs[i]);
51            $(input).attr('checked', last_clickedstatus);
52            if (last_clickedstatus)
53            {
54              $(input).siblings("span.wrap2").addClass("thumbSelected");
55            }
56            else
57            {
58              $(input).siblings("span.wrap2").removeClass("thumbSelected");
59            }
60          }
61        }
62        else {
63          last_clicked = pos;
64          last_clickedstatus = this.checked;
65        }
66        return true;
67      });
68      $(this).click(function(event) {console.log(event.shiftKey);$(this).triggerHandler("shclick",event)});
69    });
70  }
71});
72
73/* sprintf */
74function str_repeat(i, m) {
75    for (var o = []; m > 0; o[--m] = i);
76    return o.join('');
77}
78
79function sprintf() {
80  var i = 0, a, f = arguments[i++], o = [], m, p, c, x, s = '';
81  while (f) {
82    if (m = /^[^\x25]+/.exec(f)) {
83      o.push(m[0]);
84    }
85    else if (m = /^\x25{2}/.exec(f)) {
86      o.push('%');
87    }
88    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
89      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) {
90        throw('Too few arguments.');
91      }
92      if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) {
93        throw('Expecting number but found ' + typeof(a));
94      }
95      switch (m[7]) {
96        case 'b': a = a.toString(2); break;
97        case 'c': a = String.fromCharCode(a); break;
98        case 'd': a = parseInt(a); break;
99        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
100        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
101        case 'o': a = a.toString(8); break;
102        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
103        case 'u': a = Math.abs(a); break;
104        case 'x': a = a.toString(16); break;
105        case 'X': a = a.toString(16).toUpperCase(); break;
106      }
107      a = (/[def]/.test(m[7]) && m[2] && a >= 0 ? '+'+ a : a);
108      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
109      x = m[5] - String(a).length - s.length;
110      p = m[5] ? str_repeat(c, x) : '';
111      o.push(s + (m[4] ? a + p : p + a));
112    }
113    else {
114      throw('Huh ?!');
115    }
116    f = f.substring(m[0].length);
117  }
118  return o.join('');
119}
120
121/* update displaying */
122function checkPermitAction() {
123  var nbSelected = 0;
124  if ($("input[name=setSelected]").is(':checked')) {
125    nbSelected = nb_thumbs_set;
126  } else {
127    $(".thumbnails input[type=checkbox]").each(function() {
128      if ($(this).is(':checked')) nbSelected++;
129    });
130  }
131
132  if (nbSelected == 0) {
133    $("#beginImport").hide();
134  } else {
135    $("#beginImport").show();
136  }
137
138  $("#applyOnDetails").text(
139    sprintf(
140      applyOnDetails_pattern,
141      nbSelected
142    )
143  );
144
145  // display the number of currently selected photos in the "Selection" fieldset
146  if (nbSelected == 0) {
147    $("#selectedMessage").text(
148      sprintf(
149        selectedMessage_none,
150        nb_thumbs_set
151      )
152    );
153  } else if (nbSelected == nb_thumbs_set) {
154    $("#selectedMessage").text(
155      sprintf(
156        selectedMessage_all,
157        nb_thumbs_set
158      )
159    );
160  } else {
161    $("#selectedMessage").text(
162      sprintf(
163        selectedMessage_pattern,
164        nbSelected,
165        nb_thumbs_set
166      )
167    );
168  }
169}
170
171/* import queue */
172function performImport(photo, album, fills) {
173  queuedManager.add({
174    type: 'GET',
175    dataType: 'json',
176    url: 'ws.php',
177    data: { method: 'pwg.images.addFlickr', id: photo, category: album, fills: fills, format: 'json' },
178    success: function(data) {
179      if (data['stat'] == 'ok') {
180        jQuery.jGrowl(data['result'], { theme: 'success', header: successHead, life: 4000, sticky: false });
181        jQuery("#photo-"+photo).fadeOut(function(){ $(this).remove(); });
182      } else {
183        jQuery.jGrowl(data['result'], { theme: 'error', header: errorHead, sticky: true });
184      }
185     
186      import_done++;
187      $("#progress").html(import_done +"/"+ import_selected);
188     
189      if (import_done == import_selected) {
190        $("#import_form").append('<input type="hidden" name="done" value="' + import_done + '">');
191        $("#import_form").submit();
192      }
193    },
194    error: function(data) {
195      jQuery.jGrowl(errorMsg, { theme: 'error', header: errorHead, sticky: true });
196    }
197  });
198}
199
200
201$(document).ready(function() {
202  checkPermitAction();
203  $("a.preview-box").colorbox();
204  $('ul.thumbnails').enableShiftClick();
205
206  /* tiptip */
207  $('img.thumbnail').tipTip({
208    'delay' : 0,
209    'fadeIn' : 200,
210    'fadeOut' : 200
211  });
212
213  /* thumbnail click */
214  $(".wrap1 label").click(function (event) {
215    $("input[name=setSelected]").attr('checked', false);
216
217    var wrap2 = $(this).children(".wrap2");
218    var checkbox = $(this).children("input[type=checkbox]");
219
220    checkbox.triggerHandler("shclick",event);
221
222    if ($(checkbox).is(':checked')) {
223      $(wrap2).addClass("thumbSelected");
224    }
225    else {
226      $(wrap2).removeClass('thumbSelected');
227    }
228
229    checkPermitAction();
230  });
231
232  /* select all */
233  $("#selectAll").click(function () {
234    $("input[name=setSelected]").attr('checked', false);
235   
236    $(".thumbnails label").each(function() {
237      var wrap2 = $(this).children(".wrap2");
238      var checkbox = $(this).children("input[type=checkbox]");
239
240      $(checkbox).attr('checked', true);
241      $(wrap2).addClass("thumbSelected");
242    });
243   
244    checkPermitAction();
245    return false;
246  });
247
248  /* select none */
249  $("#selectNone").click(function () {
250    $("input[name=setSelected]").attr('checked', false);
251   
252    $(".thumbnails label").each(function() {
253      var wrap2 = $(this).children(".wrap2");
254      var checkbox = $(this).children("input[type=checkbox]");
255
256      $(checkbox).attr('checked', false);
257      $(wrap2).removeClass("thumbSelected");
258    });
259   
260    checkPermitAction();
261    return false;
262  });
263
264  /* select invert */
265  $("#selectInvert").click(function () {
266    $("input[name=setSelected]").attr('checked', false);
267   
268    $(".thumbnails label").each(function() {
269      var wrap2 = $(this).children(".wrap2");
270      var checkbox = $(this).children("input[type=checkbox]");
271
272      $(checkbox).attr('checked', !$(checkbox).is(':checked'));
273
274      if ($(checkbox).is(':checked')) {
275        $(wrap2).addClass("thumbSelected");
276      } else {
277        $(wrap2).removeClass('thumbSelected');
278      }
279    });
280   
281    checkPermitAction();
282    return false;
283  });
284 
285  /* select set */
286  $("#selectSet").click(function () {
287    $("input[name=setSelected]").attr('checked', true);
288   
289    $(".thumbnails label").each(function() {
290      var wrap2 = $(this).children(".wrap2");
291      var checkbox = $(this).children("input[type=checkbox]");
292
293      $(checkbox).attr('checked', true);
294      $(wrap2).addClass("thumbSelected");
295    });
296   
297    checkPermitAction();
298    return false;
299  });
300 
301  /* begin import */
302  jQuery('#beginImport').click(function() {
303    $("#loader_import").fadeIn();
304    var album = $("#albumSelect option:selected").val();
305   
306    var fills = '';
307    $("input[name^='fill_']:checked").each(function() {
308      fills+= $(this).attr("name") +',';
309    });
310   
311    if (jQuery('input[name="setSelected"]').attr('checked')) {
312      import_selected = all_elements.length;
313      $("#progress").html("0/"+ import_selected);
314     
315      for (var i in all_elements) {
316        performImport(all_elements[i], album, fills);
317      }
318                } else {
319      import_selected = $("input[name='selection[]']:checked").length;
320      $("#progress").html("0/"+ import_selected);
321     
322                        jQuery("input[name='selection[]']:checked").each(function() {
323        performImport(jQuery(this).attr('value'), album, fills);
324      });
325    }
326   
327    return false;
328  });
329 
330  /* pagination loader */
331  jQuery('#navigation a').click(function() {
332    $("#loader_display").fadeIn()
333  });
334});
335{/literal}
336{/footer_script}
337
338<div id="batchManagerGlobal">
339<form action="{$F_ACTION}" method="post" id="import_form">
340
341  <fieldset>
342    <legend>{'Selection'|@translate}</legend>
343
344  {if !empty($thumbnails)}
345    <p id="checkActions">
346      {'Select:'|@translate}
347    {if $nb_thumbs_set > $nb_thumbs_page}
348      <a href="#" id="selectAll">{'The whole page'|@translate}</a>,
349      <a href="#" id="selectSet">{'The whole set'|@translate}</a>,
350    {else}
351      <a href="#" id="selectAll">{'All'|@translate}</a>,
352    {/if}
353      <a href="#" id="selectNone">{'None'|@translate}</a>,
354      <a href="#" id="selectInvert">{'Invert'|@translate}</a>
355
356      <span id="selectedMessage"></span>
357      <input type="checkbox" name="setSelected" style="display:none">
358      <span id="loader_display" style="display:none;"><img src="admin/themes/default/images/ajax-loader.gif"> <i>{'Processing...'|@translate}</i></span>
359    </p>
360
361    <ul class="thumbnails">
362      {foreach from=$thumbnails item=thumbnail}
363                        <li id="photo-{$thumbnail.id}">
364                                <span class="wrap1">
365                                        <label>
366                                                <span class="wrap2">
367                                                <div class="actions"><a href="{$thumbnail.src}" class="preview-box">{'Zoom'|@translate}</a> &middot; <a href="{$thumbnail.url}" target="_blank" title="{'Open Flickr page in a new tab'|@translate}">Flickr</a></div>
368                                                        <span>
369                                                                <img src="{$thumbnail.thumb}" alt="{$thumbnail.title}" title="{$thumbnail.title|@escape:'html'}" class="thumbnail">
370                                                        </span>
371                                                </span>
372                                                <input type="checkbox" name="selection[]" value="{$thumbnail.id}">
373                                        </label>
374                                </span>
375                        </li>
376      {/foreach}
377    </ul>
378   
379   
380    <div style="clear:both;" id="navigation">
381    {if !empty($navbar) }
382      <div style="float:left">
383      {include file='navigation_bar.tpl'|@get_extent:'navbar'}
384      </div>
385    {/if}
386   
387      <div style="float:right;margin-top:10px;">{'display'|@translate}
388        <a href="{$U_DISPLAY}&amp;display=20">20</a>
389        &middot; <a href="{$U_DISPLAY}&amp;display=50">50</a>
390        &middot; <a href="{$U_DISPLAY}&amp;display=100">100</a>
391        &middot; <a href="{$U_DISPLAY}&amp;display=all">{'all'|@translate}</a>
392        {'photos per page'|@translate}
393      </div>
394    </div>
395
396  {else}
397    <div>{'No photo in the current set.'|@translate}</div>
398  {/if}
399  </fieldset>
400 
401  <fieldset>
402    <legend>{'Import options'|@translate}</legend>
403
404    <p>
405      <label for="albumSelect">{'Album'|@translate} :</label>
406      <select style="width:400px" name="associate" id="albumSelect" size="1">
407        {html_options options=$associate_options}
408      </select>
409      {'... or '|@translate}<a href="#" class="addAlbumOpen" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
410    </p>
411   
412    <p>
413      {'Fill these fields from Flickr datas'|@translate} :
414      <label><input type="checkbox" name="fill_name" checked="checked"> {'Photo name'|@translate}</label>
415      <label><input type="checkbox" name="fill_author" checked="checked"> {'Author'|@translate}</label>
416      <label><input type="checkbox" name="fill_tags" checked="checked"> {'Tags'|@translate}</label>
417      <label><input type="checkbox" name="fill_taken" checked="checked"> {'Creation date'|@translate}</label>
418      <label><input type="checkbox" name="fill_posted"> {'Post date'|@translate}</label>
419    </p>
420
421    <p>
422      <input type="hidden" name="album" value="{$album}">
423      <input type="submit" name="import_set" id="beginImport" value="{'Begin transfert'|@translate}" style="display:none;">
424      <span id="loader_import" style="display:none;"><img src="admin/themes/default/images/ajax-loader.gif"> <i>{'Processing...'|@translate}</i> <span id="progress"></span></span>
425    </p>
426  </fieldset>
427</form>
428</div>
Note: See TracBrowser for help on using the repository browser.