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

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

code cleanup, don't ask username anymore (prohibit importing photos from another account)

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.