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

Last change on this file since 28063 was 28063, checked in by mistic100, 10 years ago

add recursive option for album filter
fix choosen display

File size: 11.7 KB
Line 
1{combine_css path=$SMART_PATH|cat:'admin/template/style.css'}
2{include file='include/datepicker.inc.tpl'}
3{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'}
4
5{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
6{combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
7
8{combine_css path='themes/default/js/plugins/chosen.css'}
9{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'}
10
11{combine_css path='themes/default/js/ui/theme/jquery.ui.slider.css'}
12{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'}
13
14
15{footer_script require='jquery'}
16var addFilter = (function($){
17  var count=0,
18      limit_count=0,
19      level_count=0;
20
21  // MAIN EVENT HANDLERS
22  $('#addFilter').change(function() {
23    if ($(this).val() != -1) {
24      add_filter($(this).val());
25      $(this).val(-1);
26    }
27  });
28
29  $('#removeFilters').click(function() {
30    $('#filtersList li:not(.empty)').remove();
31    $('#filtersList li.empty').show();
32
33    $("#addFilter option[value='limit']").removeAttr('disabled');
34    $("#addFilter option[value='level']").removeAttr('disabled');
35
36    limit_level=0;
37    level_count=0;
38
39    return false;
40  });
41
42  $('input[name="is_smart"]').change(function() {
43    $('#SmartAlbum_options').toggle();
44    $('input[name="countImages"]').toggle();
45    $('.count_images_wrapper').toggle();
46  });
47
48  $('input[name="countImages"]').click(function() {
49    countImages($("#smart"));
50    return false;
51  });
52
53
54  // ADD FILTER FUNCTIONS
55  function add_filter(type, cond, value) {
56    count++;
57
58    $('#filtersList li.empty').hide();
59
60    var content = $("#filtersRepo #filter_"+type).html().replace(/iiii/g, count),
61        $block = $($.parseHTML(content)).appendTo("#filtersList");
62
63    if (cond) {
64      select_cond($block, type, cond);
65    }
66
67    if (value) {
68      if (type == "tags") {
69        $block.find(".filter-value .tagSelect").html(value);
70      }
71      else if (type == "album") {
72        var values = value.split(','),
73            recursive = values.splice(0, 1)[0];
74        value = values.join(',');
75
76        select_options($block, value);
77        $block.find('.filter-value input[type="checkbox"]').prop('checked', recursive=="true");
78      }
79      else if (type == "level") {
80        select_options($block, value);
81      }
82      else if (type != "dimensions") {
83        $block.find(".filter-value input").val(value);
84      }
85    }
86
87    init_jquery_handlers($block);
88
89    if (type == "dimensions") {
90      select_dimensions($block, cond, value);
91    }
92
93    if (type == 'limit') {
94      limit_count=1;
95      $("#addFilter option[value='limit']").attr('disabled','disabled');
96    }
97    else if (type == 'level') {
98      level_count=1;
99      $("#addFilter option[value='level']").attr('disabled','disabled');
100    }
101  }
102
103  function select_cond($block, type, cond) {
104    $block.find(".filter-cond option").removeAttr('selected');
105    $block.find(".filter-cond option[value='"+cond+"']").attr('selected', 'selected');
106  }
107
108  function select_dimensions($block, cond, value) {
109    cond = cond || 'width';
110    var values;
111
112    $block.find(">.filter-value>span").hide();
113    $block.find(".dimension_"+cond).show();
114
115    if (value) {
116      values = value.split(',');
117    }
118    else {
119      values = $block.find(".filter_dimension_"+cond+"_slider").slider("values");
120    }
121    $block.find(".filter_dimension_"+cond+"_slider").slider("values", values);
122  }
123
124  function select_options($block, value) {
125    var values = value.split(',');
126    for (var j in values) {
127      $block.find(".filter-value option[value='"+ values[j] +"']").attr('selected', 'selected');
128    }
129  }
130
131
132  // DECLARE JQUERY PLUGINS AND VERSATILE HANDLERS
133  function init_jquery_handlers($block) {
134    // remove filter
135    $block.find(".removeFilter").click(function() {
136      var type = $(this).next("input").val();
137
138      if (type == 'limit') {
139        limit_count=1;
140        $("#addFilter option[value='limit']").removeAttr('disabled');
141      }
142      else if (type == 'level') {
143        level_count=1;
144        $("#addFilter option[value='level']").removeAttr('disabled');
145      }
146
147      $(this).parents('li').remove();
148      return false;
149    });
150
151    // date filter
152    if ($block.hasClass('filter_date')) {
153      $block.find("input[type='text']").each(function() {
154        $(this).datepicker({
155          dateFormat:'yy-mm-dd',
156          firstDay:1
157        });
158      });
159    }
160
161    // tags filter
162    if ($block.hasClass('filter_tags')) {
163      $block.find(".tagSelect").tokenInput(
164        [{foreach from=$all_tags item=tag name=tags}{ name:"{$tag.name|escape:javascript}", id:"{$tag.id}" }{if !$smarty.foreach.tags.last},{/if}{/foreach}],
165        {
166          hintText: '{'Type in a search term'|translate}',
167          noResultsText: '{'No results'|translate}',
168          searchingText: '{'Searching...'|translate}',
169          animateDropdown: false,
170          preventDuplicates: true,
171          allowFreeTagging: false
172        }
173      );
174    }
175
176    // album filter
177    if ($block.hasClass('filter_album')) {
178      $block.find(".albumSelect").chosen();
179    }
180
181    // dimension filter
182    if ($block.hasClass('filter_dimensions')) {
183      $block.find(".filter-cond select").change(function() {
184        select_dimensions($block, $(this).val());
185      });
186
187      $block.find(".filter_dimension_width_slider").slider({
188        range: true,
189        min: {$dimensions.bounds.min_width},
190        max: {$dimensions.bounds.max_width},
191        values: [{$dimensions.bounds.min_width}, {$dimensions.bounds.max_width}],
192        slide: function(event, ui) {
193          change_dimension_info($block, ui.values, "{'between %d and %d pixels'|translate}");
194        },
195        change: function(event, ui) {
196          change_dimension_info($block, ui.values, "{'between %d and %d pixels'|translate}");
197        }
198      });
199
200      $block.find(".filter_dimension_height_slider").slider({
201        range: true,
202        min: {$dimensions.bounds.min_height},
203        max: {$dimensions.bounds.max_height},
204        values: [{$dimensions.bounds.min_height}, {$dimensions.bounds.max_height}],
205        slide: function(event, ui) {
206          change_dimension_info($block, ui.values, "{'between %d and %d pixels'|translate}");
207        },
208        change: function(event, ui) {
209          change_dimension_info($block, ui.values, "{'between %d and %d pixels'|translate}");
210        }
211      });
212
213      $block.find(".filter_dimension_ratio_slider").slider({
214        range: true,
215        step: 0.01,
216        min: {$dimensions.bounds.min_ratio},
217        max: {$dimensions.bounds.max_ratio},
218        values: [{$dimensions.bounds.min_ratio}, {$dimensions.bounds.max_ratio}],
219        slide: function(event, ui) {
220          change_dimension_info($block, ui.values, "{'between %.2f and %.2f'|translate}");
221        },
222        change: function(event, ui) {
223          change_dimension_info($block, ui.values, "{'between %.2f and %.2f'|translate}");
224        }
225      });
226
227      $block.find("a.dimensions-choice").click(function() {
228        $block.find(".filter_dimension_"+ $(this).data("type") +"_slider").slider("values",
229          [$(this).data("min"), $(this).data("max")]
230        );
231      });
232    }
233  }
234
235
236  // GENERAL FUNCTIONS
237  function change_dimension_info($block, values, text) {
238    $block.find("input[name$='[value][min]']").val(values[0]);
239    $block.find("input[name$='[value][max]']").val(values[1]);
240    $block.find(".filter_dimension_info").html(sprintf(text, values[0], values[1]));
241  }
242
243  function countImages(form) {
244    jQuery.post("{$COUNT_SCRIPT_URL}", 'cat_id={$CAT_ID}&'+form.serialize(),
245      function success(data) {
246        jQuery('.count_images_wrapper').html(data);
247      }
248    );
249  }
250
251  return add_filter; // expose add_filter method
252}(jQuery));
253
254{if isset($new_smart)}
255function doBlink(obj, start, finish) {
256  jQuery(obj).fadeOut(400).fadeIn(400);
257
258  if (start != finish) {
259    doBlink(obj,start+1,finish);
260  }
261  else {
262    jQuery(obj).fadeOut(400);
263  }
264}
265
266doBlink('.new_smart', 0, 3);
267{/if}
268{/footer_script}
269
270
271<div class="titrePage">
272  <h2><span style="letter-spacing:0">{$CATEGORIES_NAV}</span> &#8250; {'Edit album'|translate} [SmartAlbum]</h2>
273</div>
274
275<noscript>
276  <div class="errors"><ul><li>JavaScript required!</li></ul></div>
277</noscript>
278
279<div id="batchManagerGlobal">
280<form action="{$F_ACTION}" method="POST" id="smart">
281  <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>
282
283  <fieldset id="SmartAlbum_options" style="margin-top:1em;{if !isset($filters) AND !isset($new_smart)}display:none;{/if}">
284    <legend>{'Filters'|translate}</legend>
285   
286    <div>
287      <label><input type="radio" name="filters[0][value]" value="and" {if $filter_mode=='and'}checked="checked"{/if}> {'Photos must match all filters'|translate}</label>
288      <label><input type="radio" name="filters[0][value]" value="or" {if $filter_mode=='or'}checked="checked"{/if}> {'Photos must match at least one filter'|translate}</label>
289      <input type="hidden" name="filters[0][type]" value="mode">
290      <input type="hidden" name="filters[0][cond]" value="mode">
291    </div>
292
293    <fieldset>
294    <ul id="filtersList">
295      <li class="empty">{'No filter'|translate}</li>
296    {foreach from=$filters item=filter}{strip}
297      {if $filter.type == 'tags'}
298        {capture assign='value'}{foreach from=$filter.value item=tag}<option value="{$tag.id}" class="selected">{$tag.name}</option>{/foreach}{/capture}
299      {else}
300        {assign var='value' value=$filter.value}
301      {/if}
302
303      {if $filter.type == 'limit'}
304        {footer_script}
305        limit_count=1;
306        $("#addFilter option[value='limit']").attr('disabled','disabled');
307        {/footer_script}
308      {elseif $filter.type == 'level'}
309        {footer_script}
310        level_count=1;
311        $("#addFilter option[value='level']").attr('disabled','disabled');
312        {/footer_script}
313      {/if}
314
315      {footer_script}addFilter('{$filter.type}', '{$filter.cond}', '{$value|escape:javascript}');{/footer_script}
316    {/strip}{/foreach}
317    </ul>
318    </fieldset>
319
320    <p class="actionButtons">
321      <select id="addFilter">
322        <option value="-1">{'Add a filter'|translate}</option>
323        <option disabled="disabled">------------------</option>
324        <option value="tags">{'Tags'|translate}</option>
325        <option value="date">{'Date'|translate}</option>
326        <option value="name">{'Photo name'|translate}</option>
327        <option value="album">{'Album'|translate}</option>
328        <option value="dimensions">{'Dimensions'|translate}</option>
329        <option value="author">{'Author'|translate}</option>
330        <option value="hit">{'Hits'|translate}</option>
331        <option value="rating_score">{'Rating score'|translate}</option>
332        <option value="level">{'Privacy level'|translate}</option>
333        <option value="limit">{'Max. number of photos'|translate}</option>
334      </select>
335      <a id="removeFilters">{'Remove all filters'|translate}</a>
336      {if isset($new_smart)}<span class="new_smart">{'Add filters here'|translate}</span>{/if}
337    </p>
338  </fieldset>
339
340  <p class="actionButtons" id="applyFilterBlock">
341    <input class="submit" type="submit" value="{'Save'|translate}" name="submitFilters"/>
342    <input class="submit" type="submit" value="{'Count'|translate}" name="countImages" {if !isset($filters) AND !isset($new_smart)}style="display:none;"{/if}/>
343    <span class="count_images_wrapper" {if !isset($filters) AND !isset($new_smart)}style="display:none;"{/if}><span class="count_image">{$IMAGE_COUNT}</span></span>
344  </p>
345
346</form>
347</div>
348
349<div id="filtersRepo" style="display:none;">
350  {include file=$SMART_ABS_PATH|cat:'admin/template/filters.inc.tpl'}
351</div>
Note: See TracBrowser for help on using the repository browser.