source: extensions/SmartAlbums/admin/template/album.tpl @ 19722

Last change on this file since 19722 was 19722, checked in by mistic100, 11 years ago

undefined function get_tag_ids(), css tweaks

File size: 18.9 KB
Line 
1{combine_css path=$SMART_PATH|@cat:"admin/template/style.css"}
2{combine_script id='sprintf' load='footer' path=$SMART_PATH|@cat:"admin/template/sprintf.js"}
3{include file='include/datepicker.inc.tpl'}
4{combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
5{combine_css path="themes/default/js/plugins/chosen.css"}
6{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'}
7{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"}
8{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
9
10{footer_script}{literal}
11var count=0;
12var limit_count=0;
13var level_count=0;
14
15// MAIN EVENT HANDLERS
16$('#addFilter').change(function() {
17  add_filter($(this).attr('value'));
18  $(this).attr('value', '-1');
19});
20 
21$('#removeFilters').click(function() {
22  $('#filtersList li').each(function() {
23    $(this).remove();
24  });
25 
26  limit_level=0;
27  level_count=0;
28  return false;
29});
30
31$('input[name="is_smart"]').change(function() {
32  $('#SmartAlbum_options').toggle();
33  $('input[name="countImages"]').toggle();
34  $('.count_images_wrapper').toggle();
35});
36
37$('input[name="countImages"]').click(function() {
38  countImages($("#smart"));
39  return false;
40});
41
42
43// ADD FILTER FUNCTIONS
44function add_filter(type, cond, value) {
45  count++;
46 
47  content = $("#filtersRepo #filter_"+type).html().replace(/iiii/g, count);
48  $block = $(content);
49  $("#filtersList").append($block);
50 
51  if (cond) {
52    select_cond($block, type, cond);
53  }
54 
55  if (value) {
56    if (type == "tags") {
57      $block.find(".filter-value .tagSelect").html(value);
58    }
59    else if (type == "album") {
60      select_options($block, value);
61    }
62    else if (type == "level") {
63      select_options($block, value);
64    }
65    else if (type != "dimensions") {
66      $block.find(".filter-value input").val(value);
67    }
68  }
69 
70  init_jquery_handlers($block);
71 
72  if (type == "dimensions") {
73    select_dimensions($block, cond, value);
74  }
75 
76  if (type == 'limit') {
77    limit_count=1;
78    $("#addFilter option[value='limit']").attr('disabled','disabled');
79  }
80  else if (type == 'level') {
81    level_count=1;
82    $("#addFilter option[value='level']").attr('disabled','disabled');
83  }
84}
85
86function select_cond($block, type, cond) {
87  $block.find(".filter-cond option").removeAttr('selected');
88  $block.find(".filter-cond option[value='"+cond+"']").attr('selected', 'selected');
89}
90
91function select_dimensions($block, cond, value) {
92  if (!cond) cond = 'width';
93 
94  $block.find(".filter-value span:not(.filter_dimension_info)").hide();
95  $block.find(".filter-value .dimension_"+cond).show();
96 
97  if (value) {
98    values = value.split(',');
99  }
100  else {
101    values = $block.find(".filter_dimension_"+cond+"_slider").slider("values");
102  }
103  $block.find(".filter_dimension_"+cond+"_slider").slider("values", values);
104}
105
106function select_options($block, value) { 
107  values = value.split(',');
108  for (j in values) {
109    $block.find(".filter-value option[value='"+ values[j] +"']").attr('selected', 'selected');
110  }
111}
112
113
114// DECLARE JQUERY PLUGINS AND VERSATILE HANDLERS
115function init_jquery_handlers($block) {
116  // remove filter
117  $block.find(".removeFilter").click(function() {
118    type = $(this).next("input").val();
119    if (type == 'limit') {
120      limit_count=1;
121      $("#addFilter option[value='limit']").removeAttr('disabled');
122    }
123    else if (type == 'level') {
124      level_count=1;
125      $("#addFilter option[value='level']").removeAttr('disabled');
126    }
127   
128    $(this).parents('li').remove();
129    return false;
130  });
131
132  // date filter
133  if ($block.hasClass('filter_date')) {
134    $block.find("input[type='text']").each(function() {
135      $(this).datepicker({dateFormat:'yy-mm-dd', firstDay:1});
136    });
137  }
138
139  // tags filter
140  if ($block.hasClass('filter_tags')) {
141    $block.find(".tagSelect").tokenInput(
142    {/literal}
143      [{foreach from=$all_tags item=tag name=tags}{ldelim}"name":"{$tag.name|@escape:'javascript'}","id":"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}],
144      {ldelim}
145        hintText: '{'Type in a search term'|@translate}',
146        noResultsText: '{'No results'|@translate}',
147        searchingText: '{'Searching...'|@translate}',
148        animateDropdown: false,
149        preventDuplicates: true,
150        allowCreation: false
151    {literal}
152    });
153  }
154 
155  // album filter
156  if ($block.hasClass('filter_album')) {
157    $block.find(".albumSelect").chosen();
158  }
159 
160  // dimension filter
161  if ($block.hasClass('filter_dimensions')) {
162    $block.find(".filter-cond select").change(function() {
163      select_dimensions($block, $(this).attr("value"));
164    });
165    {/literal}
166   
167    $block.find(".filter_dimension_width_slider").slider({ldelim}
168      range: true,
169      min: {$dimensions.bounds.min_width},
170      max: {$dimensions.bounds.max_width},
171      values: [{$dimensions.bounds.min_width}, {$dimensions.bounds.max_width}],
172      slide: function(event, ui) {ldelim}
173        change_dimension_info($block, ui.values, "{'between %d and %d pixels'|@translate}");
174      },
175      change: function(event, ui) {ldelim}
176        change_dimension_info($block, ui.values, "{'between %d and %d pixels'|@translate}");
177      }
178    });
179   
180    $block.find(".filter_dimension_height_slider").slider({ldelim}
181      range: true,
182      min: {$dimensions.bounds.min_height},
183      max: {$dimensions.bounds.max_height},
184      values: [{$dimensions.bounds.min_height}, {$dimensions.bounds.max_height}],
185      slide: function(event, ui) {ldelim}
186        change_dimension_info($block, ui.values, "{'between %d and %d pixels'|@translate}");
187      },
188      change: function(event, ui) {ldelim}
189        change_dimension_info($block, ui.values, "{'between %d and %d pixels'|@translate}");
190      }
191    });
192   
193    $block.find(".filter_dimension_ratio_slider").slider({ldelim}
194      range: true,
195      step: 0.01,
196      min: {$dimensions.bounds.min_ratio},
197      max: {$dimensions.bounds.max_ratio},
198      values: [{$dimensions.bounds.min_ratio}, {$dimensions.bounds.max_ratio}],
199      slide: function(event, ui) {ldelim}
200        change_dimension_info($block, ui.values, "{'between %.2f and %.2f'|@translate}");
201      },
202      change: function(event, ui) {ldelim}
203        change_dimension_info($block, ui.values, "{'between %.2f and %.2f'|@translate}");
204      }
205    });
206    {literal}
207   
208    $block.find("a.dimensions-choice").click(function() {
209      $block.find(".filter_dimension_"+ $(this).data("type") +"_slider").slider("values",
210        [$(this).data("min"), $(this).data("max")]
211      );
212    });
213  }
214}
215
216
217// GENERAL FUNCTIONS
218function change_dimension_info($block, values, text) {
219  $block.find("input[name$='[value][min]']").val(values[0]);
220  $block.find("input[name$='[value][max]']").val(values[1]);
221  $block.find(".filter_dimension_info").html(sprintf(text, values[0], values[1]));
222}
223
224function countImages(form) {
225{/literal}
226  jQuery.post("{$COUNT_SCRIPT_URL}", 'cat_id={$CAT_ID}&'+form.serialize(),
227{literal}
228    function success(data) {
229      jQuery('.count_images_wrapper').html(data);
230    }
231  );
232}
233
234function doBlink(obj,start,finish) {
235  jQuery(obj).fadeOut(400).fadeIn(400);
236  if(start!=finish) {
237    doBlink(obj,start+1,finish);
238  } else {
239    jQuery(obj).fadeOut(400);
240  }
241}
242{/literal}
243
244{if isset($new_smart)}doBlink('.new_smart', 0, 3);{/if}
245{/footer_script}
246
247
248<div class="titrePage">
249  <h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> &#8250; {'Edit album'|@translate} [SmartAlbum]</h2>
250</div>
251
252<noscript>
253<div class="errors"><ul><li>JavaScript required!</li></ul></div>
254</noscript>
255
256<div id="batchManagerGlobal">
257<form action="{$F_ACTION}" method="POST" id="smart">
258  <p style="text-align:left;"><label><input type="checkbox" name="is_smart" {if isset($filters) OR isset($new_smart)}checked="checked"{/if}/> {'This album is a SmartAlbum'|@translate}</label></p>
259
260  <fieldset id="SmartAlbum_options" style="margin-top:1em;{if !isset($filters) AND !isset($new_smart)}display:none;{/if}">
261    <legend>{'Filters'|@translate}</legend>
262     
263    <ul id="filtersList">
264    {foreach from=$filters item=filter}{strip}
265      {if $filter.type == 'tags'}
266        {capture assign='value'}{foreach from=$filter.value item=tag}<option value="{$tag.id}" class="selected">{$tag.name}</option>{/foreach}{/capture}
267      {else}
268        {assign var='value' value=$filter.value}
269      {/if}
270     
271      {if $filter.type == 'limit'}
272        {footer_script}
273        limit_count=1;
274        $("#addFilter option[value='limit']").attr('disabled','disabled');
275        {/footer_script}
276      {elseif $filter.type == 'level'}
277        {footer_script}
278        level_count=1;
279        $("#addFilter option[value='level']").attr('disabled','disabled');
280        {/footer_script}
281      {/if}
282     
283      {footer_script}add_filter('{$filter.type}', '{$filter.cond}', '{$value|escape:javascript}');{/footer_script}
284    {/strip}{/foreach}
285    </ul>
286   
287    <div>
288      <b>{'Mode'|@translate} :</b>
289      <label><input type="radio" name="filters[0][value]" value="and" {if $filter_mode=='and'}checked="checked"{/if}> AND</label>
290      <label><input type="radio" name="filters[0][value]" value="or" {if $filter_mode=='or'}checked="checked"{/if}> OR</label>
291      <input type="hidden" name="filters[0][type]" value="mode">
292      <input type="hidden" name="filters[0][cond]" value="mode">
293    </div>
294   
295    <p class="actionButtons">
296      <select id="addFilter">
297        <option value="-1">{'Add a filter'|@translate}</option>
298        <option disabled="disabled">------------------</option>
299        <option value="tags">{'Tags'|@translate}</option>
300        <option value="date">{'Date'|@translate}</option>
301        <option value="name">{'Photo name'|@translate}</option>
302        <option value="album">{'Album'|@translate}</option>
303        <option value="dimensions">{'Dimensions'|@translate}</option>
304        <option value="author">{'Author'|@translate}</option>
305        <option value="hit">{'Hits'|@translate}</option>
306        <option value="rating_score">{'Rating score'|@translate}</option>
307        <option value="level">{'Privacy level'|@translate}</option>
308        <option value="limit">{'Max. number of photos'|@translate}</option>
309      </select>
310      <a id="removeFilters">{'Remove all filters'|@translate}</a>
311      {if isset($new_smart)}<span class="new_smart">{'Add filters here'|@translate}</span>{/if}
312    </p>
313  </fieldset>
314 
315  <p class="actionButtons" id="applyFilterBlock">
316    <input class="submit" type="submit" value="{'Submit'|@translate}" name="submitFilters"/>
317    <input class="submit" type="submit" value="{'Count'|@translate}" name="countImages" {if !isset($filters) AND !isset($new_smart)}style="display:none;"{/if}/>
318    <span class="count_images_wrapper" {if !isset($filters) AND !isset($new_smart)}style="display:none;"{/if}><span class="count_image">{$IMAGE_COUNT}</span></span>
319  </p>
320
321</form>
322</div>
323
324<div id="filtersRepo" style="display:none;">
325  <!-- tags -->
326  <div id="filter_tags">
327  <li id="filter_iiii" class="filter_tags">
328    <span class="filter-title">
329      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
330      <input type="hidden" name="filters[iiii][type]" value="tags"/>
331      {$options.tags.name}
332    </span>
333   
334    <span class="filter-cond">
335      <select name="filters[iiii][cond]">
336        {html_options options=$options.tags.options}
337      </select>
338    </span>
339   
340    <span class="filter-value">
341      <select name="filters[iiii][value]" class="tagSelect">
342      </select>
343    </span>
344  </li>
345  </div>
346 
347  <!-- date -->
348  <div id="filter_date">
349  <li id="filter_iiii" class="filter_date">
350    <span class="filter-title">
351      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
352      <input type="hidden" name="filters[iiii][type]" value="date"/>
353      {$options.date.name}
354    </span>
355   
356    <span class="filter-cond">
357      <select name="filters[iiii][cond]">
358        {html_options options=$options.date.options}
359      </select>
360    </span>
361   
362    <span class="filter-value">
363      <input type="text" name="filters[iiii][value]" size="30"/>
364    </span>
365  </li>
366  </div>
367 
368  <!-- name -->
369  <div id="filter_name">
370  <li id="filter_iiii" class="filter_name">
371    <span class="filter-title">
372      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
373      <input type="hidden" name="filters[iiii][type]" value="name"/>
374      {$options.name.name}
375    </span>
376   
377    <span class="filter-cond">
378      <select name="filters[iiii][cond]">
379        {html_options options=$options.name.options}
380      </select>
381    </span>
382   
383    <span class="filter-value">
384      <input type="text" name="filters[iiii][value]" size="30"/>
385    </span>
386  </li>
387  </div>
388 
389  <!-- album -->
390  <div id="filter_album">
391  <li id="filter_iiii" class="filter_album">
392    <span class="filter-title">
393      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
394      <input type="hidden" name="filters[iiii][type]" value="album"/>
395      {$options.album.name}
396    </span>
397   
398    <span class="filter-cond">
399      <select name="filters[iiii][cond]">
400        {html_options options=$options.album.options}
401      </select>
402    </span>
403   
404    <span class="filter-value">
405      <select name="filters[iiii][value][]" class="albumSelect" multiple="multiple" data-placeholder="{'Select albums...'|@translate}">
406        {html_options options=$all_albums}
407      </select>
408    </span>
409  </li>
410  </div>
411 
412  <!-- dimensions -->
413  <div id="filter_dimensions">
414  <li id="filter_iiii" class="filter_dimensions">
415    <span class="filter-title">
416      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
417      <input type="hidden" name="filters[iiii][type]" value="dimensions"/>
418      {$options.dimensions.name}
419    </span>
420
421    <span class="filter-cond">
422      <select name="filters[iiii][cond]">
423        {html_options options=$options.dimensions.options}
424      </select>
425    </span>
426
427    <span class="filter-value">
428      <span class="dimension_width">
429      <span class="filter_dimension_info"></span>
430        | <a class="dimensions-choice" data-type="width" data-min="{$dimensions.bounds.min_width}" data-max="{$dimensions.bounds.max_width}">{'Reset'|@translate}</a>
431        <div class="filter_dimension_width_slider"></div>
432      </span>
433
434      <span class="filter-value dimension_height">
435      <span class="filter_dimension_info"></span>
436        | <a class="dimensions-choice" data-type="height" data-min="{$dimensions.bounds.min_height}" data-max="{$dimensions.bounds.max_height}">{'Reset'|@translate}</a>
437        <div class="filter_dimension_height_slider"></div>
438      </span>
439
440      <span class="filter-value dimension_ratio">
441      <span class="filter_dimension_info"></span>
442{if isset($dimensions.ratio_portrait)}
443        | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_portrait.min}" data-max="{$dimensions.ratio_portrait.max}">{'Portrait'|@translate}</a>
444{/if}
445{if isset($dimensions.ratio_square)}
446        | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_square.min}" data-max="{$dimensions.ratio_square.max}">{'square'|@translate}</a>
447{/if}
448{if isset($dimensions.ratio_landscape)}
449        | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_landscape.min}" data-max="{$dimensions.ratio_landscape.max}">{'Landscape'|@translate}</a>
450{/if}
451{if isset($dimensions.ratio_panorama)}
452        | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_panorama.min}" data-max="{$dimensions.ratio_panorama.max}">{'Panorama'|@translate}</a>
453{/if}
454        | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.bounds.min_ratio}" data-max="{$dimensions.bounds.max_ratio}">{'Reset'|@translate}</a>
455        <div class="filter_dimension_ratio_slider"></div>
456      </span>
457    </span>
458
459    <input type="hidden" name="filters[iiii][value][min]" value="">
460    <input type="hidden" name="filters[iiii][value][max]" value="">
461  </li>
462  </div>
463 
464  <!-- author -->
465  <div id="filter_author">
466  <li id="filter_iiii" class="filter_author">
467    <span class="filter-title">
468      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
469      <input type="hidden" name="filters[iiii][type]" value="author"/>
470      {$options.author.name}
471    </span>
472   
473    <span class="filter-cond">
474      <select name="filters[iiii][cond]">
475        {html_options options=$options.author.options}
476      </select>
477    </span>
478   
479    <span class="filter-value">
480      <input type="text" name="filters[iiii][value]" size="30"/>
481      <i>{'For "Is (not) in", separate each author by a comma'|@translate}</i>
482    </span>
483  </li>
484  </div>
485 
486  <!-- hit -->
487  <div id="filter_hit">
488  <li id="filter_iiii" class="filter_hit">
489    <span class="filter-title">
490      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
491      <input type="hidden" name="filters[iiii][type]" value="hit"/>
492      {$options.hit.name}
493    </span>
494   
495    <span class="filter-cond">
496      <select name="filters[iiii][cond]">
497        {html_options options=$options.hit.options}
498      </select>
499    </span>
500   
501    <span class="filter-value">
502      <input type="text" name="filters[iiii][value]" size="5"/>
503    </span>
504  </li>
505  </div>
506 
507  <!-- rating_score -->
508  <div id="filter_rating_score">
509  <li id="filter_iiii" class="filter_rating_score">
510    <span class="filter-title">
511      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
512      <input type="hidden" name="filters[iiii][type]" value="rating_score"/>
513      {$options.rating_score.name}
514    </span>
515   
516    <span class="filter-cond">
517      <select name="filters[iiii][cond]">
518        {html_options options=$options.rating_score.options}
519      </select>
520    </span>
521   
522    <span class="filter-value">
523      <input type="text" name="filters[iiii][value]" size="5"/>
524    </span>
525  </li>
526  </div>
527 
528  <!-- level -->
529  <div id="filter_level">
530  <li id="filter_iiii" class="filter_level">
531    <span class="filter-title">
532      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
533      <input type="hidden" name="filters[iiii][type]" value="level"/>
534      {$options.level.name}
535    </span>
536   
537    <input type="hidden" name="filters[iiii][cond]" value="level"/>
538   
539    <span class="filter-value">
540      <select name="filters[iiii][value]">
541        {html_options options=$level_options}
542      </select>
543    </span>
544  </li>
545  </div>
546 
547  <!-- limit -->
548  <div id="filter_limit">
549  <li id="filter_iiii" class="filter_limit">
550    <span class="filter-title">
551      <a href="#" class="removeFilter" title="{'remove this filter'|@translate}"><span>[x]</span></a>
552      <input type="hidden" name="filters[iiii][type]" value="limit"/>
553      {$options.limit.name}
554    </span>
555   
556    <input type="hidden" name="filters[iiii][cond]" value="limit"/>
557   
558    <span class="filter-value">
559      <input type="text" name="filters[iiii][value]" size="5"/>
560    </span>
561  </li>
562  </div>
563</div>
Note: See TracBrowser for help on using the repository browser.