Page MenuHomeIn-Portal Phabricator

modern-store
No OneTemporary

File Metadata

Created
Wed, Jun 25, 11:39 AM

modern-store

Index: branches/1.0.x/inc/js/list_manager.js
===================================================================
--- branches/1.0.x/inc/js/list_manager.js (nonexistent)
+++ branches/1.0.x/inc/js/list_manager.js (revision 14890)
@@ -0,0 +1,187 @@
+function ListManager() {}
+
+ListManager.containerSelector = ''; // selector id of container
+ListManager.url = ''; // url to template with list contents
+ListManager.urlParams = {layout: 'list'};
+ListManager.filters = {};
+ListManager.xhrRequests = [];
+ListManager.reloadTimer = null;
+ListManager.reloadTimeout = 1000;
+
+ListManager.getUrl = function () {
+ var $url = this.url;
+}
+
+ListManager.cancelXHRRequests = function () {
+ while ( this.xhrRequests.length > 0 ) {
+ this.xhrRequests.shift().abort();
+ }
+}
+
+ListManager.reload = function ($now) {
+ this.cancelXHRRequests();
+
+ if ( $now === undefined || $now === false ) {
+ this.updateAnchor();
+
+ return;
+ }
+
+ var $container = $(this.containerSelector);
+
+ $container.fadeTo('fast', 0.7);
+
+ var $request = $.post(
+ this.url,
+ this.urlParams,
+ function ($data) {
+ $container.html($data).fadeTo('fast', 1.0);
+ }
+ );
+
+ this.xhrRequests.push($request);
+}
+
+ListManager.scheduleReload = function () {
+ var $me = this;
+
+ clearTimeout(this.reloadTimer);
+
+ this.reloadTimer = setTimeout(function() { $me.reload(); }, this.reloadTimeout);
+}
+
+ListManager.setParam = function ($name, $value, $reload) {
+ if ( $value === undefined || $value === '' ) {
+ // don't pass empty parameters
+ delete this.urlParams[$name];
+ }
+ else {
+ this.urlParams[$name] = $value;
+ }
+
+ if ( $reload === true ) {
+ this.reload();
+ }
+}
+
+ListManager.updateAnchor = function () {
+ var $query_string = [],
+ $url_params = sort_object(this.urlParams);
+
+ for (var $param_name in $url_params) {
+ $query_string.push( $param_name + '=' + encodeURIComponent(this.urlParams[$param_name]) );
+ }
+
+ window.location.hash = '#' + $query_string.join('&');
+}
+
+ListManager.parseAnchor = function ($anchor) {
+ var $query_string = {};
+
+ $anchor.replace(
+ new RegExp('([^?=&]+)(=([^&]*))?', 'g'),
+ function($0, $1, $2, $3) {
+ $query_string[$1] = decodeURIComponent($3);
+ }
+ );
+
+ this.urlParams = $query_string;
+ this.reload(true);
+}
+
+ListManager.replaceFilter = function ($form_id, $form_html) {
+ $('#' + $form_id).replaceWith($form_html);
+}
+
+ListManager.registerFilter = function ($form_id) {
+ var $manager = this,
+ $form = $('#' + $form_id),
+ $field = $form.attr('filter_field');
+
+ $manager.filters[$field] = {'type': $form.attr('filter_type')};
+
+ $('h2:first a', $form).click(
+ function ($e) {
+ var $header = $(this).parent(),
+ $active = $header.hasClass('active');
+
+ $header.toggleClass('active', !$active);
+ $header.next().toggleClass('noactive', $active);
+
+ return false;
+ }
+ );
+
+ switch( $manager.filters[$field].type ) {
+ case 'radio':
+ $("input[type='radio']", $form).click(
+ function ($e) {
+ $manager.updateFilterParams();
+ }
+ );
+ break;
+
+ case 'checkbox':
+ $("input[type='checkbox']", $form).click(
+ function ($e) {
+ var $checkbox = $(this),
+ $hidden_id = $checkbox.attr('id').replace(/_([\d\w-=]|)+$/, ''),
+ $regexp = new RegExp(jq($hidden_id) + '_([\\d\\w-=]+)');
+
+ if ( $checkbox.val() == '' ) {
+ // "All" checkbox
+ $("input[type='checkbox']", $form).not($checkbox).attr('checked', false);
+ }
+ else if ( $checkbox.is(':checked') ) {
+ $("input[type='checkbox'][value='']", $form).attr('checked', false);
+ }
+
+ update_checkbox_options($regexp, $hidden_id, $form);
+
+ $manager.updateFilterParams();
+ }
+ );
+ break;
+ }
+}
+
+ListManager.syncChecked = function ($checkboxes) {
+ $checkboxes.each(
+ function () {
+ var $me = $(this),
+ $checked = $me.is(':checked'),
+ $dt = $me.parent(),
+ $dd = $dt.next();
+
+ $dt.toggleClass('active', $checked);
+ $dd.toggleClass('active', $checked);
+ }
+ );
+}
+
+ListManager.updateFilterParams = function () {
+ var $form_fields;
+
+ for (var $field in this.filters) {
+ $form_fields = $('#filter-form-' + $field).serializeArray();
+
+ for (var $i = 0; $i < $form_fields.length; $i++) {
+ this.setParam($form_fields[$i].name, $form_fields[$i].value);
+ }
+
+ this.syncChecked( $("input[type=checkbox], input[type=radio]", '#filter-form-' + $field) );
+ }
+
+ this.scheduleReload();
+}
+
+ListManager.init = function () {
+ var $manager = this;
+
+ $('body').bind(
+ 'anchorchanged',
+ function ($e, $anchor) {
+ $manager.parseAnchor($anchor);
+ }
+ );
+}
\ No newline at end of file
Index: branches/1.0.x/inc/js/jquery.scripts.js
===================================================================
--- branches/1.0.x/inc/js/jquery.scripts.js (revision 14889)
+++ branches/1.0.x/inc/js/jquery.scripts.js (revision 14890)
@@ -1,195 +1,233 @@
/* === General usage functions === */
-function jq($selector) {
- return $selector.replace(/(\[|\]|\.)/g, '\\$1');
+function jq($selector, $delimiter) {
+ return ($selector + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + ($delimiter || '') + '-]', 'g'), '\\$&');
}
function in_array(needle, haystack)
{
return array_search(needle, haystack) != -1;
}
function array_search(needle, haystack)
{
for (var i=0; i<haystack.length; i++)
{
if (haystack[i] == needle) return i;
}
return -1;
}
Array.prototype.diff = function(a) {
return this.filter(
function (i) {
return a.indexOf(i) == -1;
}
);
};
function get_control($mask, $field, $append, $prepend) {
$append = $append !== undefined ? '_' + $append : '';
$prepend = $prepend !== undefined ? $prepend + '_' : '';
return document.getElementById( $prepend + $mask.replace('#FIELD_NAME#', $field) + $append );
}
-function update_checkbox_options($cb_mask, $hidden_id, $form_id)
+function update_checkbox_options($cb_mask, $hidden_id, $form_selector)
{
var $tmp = '',
- $kf = document.getElementById($form_id !== undefined ? $form_id : $form_name);
+ $kf = $($form_selector !== undefined ? $form_selector : '#' + $form_name).get(0);
for (var i = 0; i < $kf.elements.length; i++) {
if ( $kf.elements[i].id.match($cb_mask) ) {
if ($kf.elements[i].checked) {
$tmp += '|'+$kf.elements[i].value;
}
}
}
if ($tmp.length > 0) {
$tmp += '|';
}
document.getElementById($hidden_id).value = $tmp.replace(/,$/, '');
}
+function watch_anchor () {
+ var $last_anchor = '';
+
+ setInterval(
+ function () {
+ if (window.location.hash != $last_anchor) {
+ $last_anchor = window.location.hash;
+ var $new_anchor = $last_anchor ? $last_anchor.substring(1) : '';
+
+ $('body').trigger('anchorchanged', [$new_anchor]);
+ }
+ }, 100
+ );
+}
+
+function sort_object($object) {
+ // Setup Arrays
+ var $sorted_keys = [], $sorted_object = {};
+
+ for (var $property_name in $object) {
+ $sorted_keys.push($property_name);
+ }
+
+ $sorted_keys.sort();
+
+ $($sorted_keys).each(
+ function () {
+ $sorted_object[this] = $object[this];
+ }
+ );
+
+ return $sorted_object;
+}
+
/* === DBlocks class === */
function DBlocks() {
var $me = this;
this.selectors = ['#lang', '#currency', '#login', /*'#login-alt',*/ '#profile'];
$(document).ready(
function () {
$me.init();
}
);
}
DBlocks.prototype.init = function () {
var $manager = this;
$( this.selectors.join(', ') ).unbind('click').click(
function($e, $now) {
var $me = $(this),
$parent = $me.parent();
if ( $parent.is('.plashka-sel') ) {
$parent.removeClass('plashka-sel');
if ( $now === undefined || $now === false ) {
$('#' + $me.attr('id') + '-sel').fadeOut();
}
else {
$('#' + $me.attr('id') + '-sel').hide();
}
}
else {
$manager.hideOthers($me);
$parent.addClass('plashka-sel');
$('#' + $me.attr('id') + '-sel').fadeIn();
}
return false;
}
);
$('.icon-close').click(
function() {
$('#login').parent().removeClass('plashka-sel'); // ,#login-alt
$('#login-sel').fadeOut(); // , #login-alt-sel
return false;
}
);
}
DBlocks.prototype.hideOthers = function ($current) {
$( this.selectors.join(', ') ).not($current).each(
function () {
var $me = $(this),
$parent = $me.parent();
if ( $parent.is('.plashka-sel') ) {
$me.trigger('click', [true]);
}
}
);
}
/* === RatingManager class === */
function RatingManager ($url) {
this.Url = $url;
}
RatingManager.prototype.makeVote = function ($vote, $prefix, $id, $size) {
var $url = this.Url.replace('#PREFIX#', $prefix).replace('#VOTE#', $vote).replace('#ID#', $id).replace('#SIZE#', $size);
$.get(
$url,
function ($response) {
if ($response.substring(0, 5) == '@err:') {
alert( $response.substring(5) );
return ;
}
document.getElementById('page_rating_' + $id).innerHTML = $response;
}
)
}
-$(document).ready(function()
-{
- $('#change-password').click(
- function($e) {
- $('#password-show').hide();
- $('#password-block').fadeIn();
+/* === Startup === */
+$(document).ready(
+ function() {
+ watch_anchor();
+
+ $('#change-password').click(
+ function($e) {
+ $('#password-show').hide();
+ $('#password-block').fadeIn();
- return false;
- }
- );
+ return false;
+ }
+ );
- $('.addtocart, .button-addtocart').click(
- function () {
- var $me = $(this),
- $qty = $me.attr('qty_id') !== undefined ? parseInt($('#' + $me.attr('qty_id')).val()) : 1;
+ $('.addtocart, .button-addtocart').click(
+ function () {
+ var $me = $(this),
+ $qty = $me.attr('qty_id') !== undefined ? parseInt($('#' + $me.attr('qty_id')).val()) : 1;
- if ( $me.hasClass('addedtocart') ) {
- // disabled button
- return false;
- }
+ if ( $me.hasClass('addedtocart') ) {
+ // disabled button
+ return false;
+ }
- if ( isNaN($qty) ) {
- $qty = 1;
- }
+ if ( isNaN($qty) ) {
+ $qty = 1;
+ }
- var $bubble = $('.basketStatus'),
- $timer_id = $bubble.data('hide_timer');
+ var $bubble = $('.basketStatus'),
+ $timer_id = $bubble.data('hide_timer');
- clearTimeout($timer_id);
+ clearTimeout($timer_id);
- $.get(
- $me.attr('href') + '&qty=' + $qty,
- function ($bubble_content) {
- $('.basketContent', $bubble).html( $bubble_content.replace(/#QTY#/g, $qty) );
- $bubble
- .stop(true, true)
- .fadeIn(
- 'slow',
- function () {
- var $timer = setTimeout(function(){ $bubble.fadeOut('slow'); }, 2000);
- $bubble.data('hide_timer', $timer);
- }
- );
+ $.get(
+ $me.attr('href') + '&qty=' + $qty,
+ function ($bubble_content) {
+ $('.basketContent', $bubble).html( $bubble_content.replace(/#QTY#/g, $qty) );
+ $bubble
+ .stop(true, true)
+ .fadeIn(
+ 'slow',
+ function () {
+ var $timer = setTimeout(function(){ $bubble.fadeOut('slow'); }, 2000);
+ $bubble.data('hide_timer', $timer);
+ }
+ );
- if ( $me.hasClass('addtocart') ) {
- $me.removeClass('addtocart').addClass('addedtocart').html('Added to Cart');
+ if ( $me.hasClass('addtocart') ) {
+ $me.removeClass('addtocart').addClass('addedtocart').html('Added to Cart');
+ }
}
- }
- );
+ );
- return false;
- }
- );
-});
\ No newline at end of file
+ return false;
+ }
+ );
+ }
+);
\ No newline at end of file
Index: branches/1.0.x/designs/section.tpl
===================================================================
--- branches/1.0.x/designs/section.tpl (revision 14889)
+++ branches/1.0.x/designs/section.tpl (revision 14890)
@@ -1,91 +1,73 @@
<!--##
<NAME>Products - Section Template</NAME>
<DESC>Product Category</DESC>
<SECTION></SECTION>
##-->
<!--## required, when filters are used ##-->
<inp2:p_InitList list_name="products_in_category" main_list="1"/>
<inp2:m_DefineElement name="page_title">
<inp2:m_include template="elements/title_bar.elm"/>
</inp2:m_DefineElement>
<inp2:m_DefineElement name="sidebar">
<inp2:m_Include template="elements/side_boxes/categories.elm" data_exists="1"/>
- <inp2:m_Include template="elements/side_boxes/filter_range.elm"/>
- <inp2:m_Include template="elements/side_boxes/filter_dropdown.elm"/>
- <inp2:m_Include template="elements/side_boxes/filter_checkboxes.elm"/>
+
+ <inp2:m_include template="elements/filters.elm"/>
+ <inp2:item-filter_PrintList render_as="filter_element" prefix="p" list_name="products_in_category" is_list="1"/>
+
+ <!--<inp2:m_RenderElement name="filter_element" prefix="p" list_name="products_in_category" filter_field="ManufacturerId" filter_type="checkbox"/>
+ <inp2:m_RenderElement name="filter_element" prefix="p" list_name="products_in_category" filter_field="EditorsPick" filter_type="radio"/>
+ <inp2:m_RenderElement name="filter_element" prefix="p" list_name="products_in_category" filter_field="Price" filter_type="range"/>-->
+
<inp2:m_Include template="elements/side_boxes/subscribe.elm"/>
</inp2:m_DefineElement>
<!--## MAIN CONTENT ##-->
<inp2:m_DefineElement name="content">
<div class="block no-border-bottom" style="margin-bottom: 0;">
<inp2:m_Include template="elements/navigation_bar.elm"/>
<inp2:m_Include template="elements/content_boxes/categories.elm" data_exists="1" />
</div>
<div id="products">
<inp2:m_Include template="elements/content_boxes/products.elm" list_name="products_in_category" prefix="p" data_exists="1" />
</div>
</inp2:m_DefineElement>
<!--## /MAIN CONTENT ##-->
<inp2:m_DefineElement name="add_to_head">
+ <script src="<inp2:m_TemplatesBase/>inc/js/list_manager.js" type="text/javascript"></script>
+
<script type="text/javascript">
+ ListManager.containerSelector = '#products';
+ ListManager.url = '<inp2:m_Link render_template="elements/content_boxes/products.elm" list_name="products_in_category" list_prefix="p" js_escape="1" no_amp="1"/>';
+
$(document).ready(
function() {
// js that works for "Shop All" menu and "Categories sidebox": begin
var icons = {header: 'ui-icon-circle-arrow-e', headerSelected: 'ui-icon-circle-arrow-s'},
level2icons = {header: 'ui-icon-circle-arrow-l2e', headerSelected: 'ui-icon-circle-arrow-l2s'},
level3icons = {header: 'ui-icon-circle-arrow-l3e', headerSelected: 'ui-icon-circle-arrow-l3s'};
$('#accordion-menu').accordion({icons: icons});
$('#level2-menu').accordion({icons: level2icons});
$('.level3-menu').accordion({
icons: level3icons,
header: 'h4',
autoHeight: false,
event: 'mouseover'
});
- }
- );
-
- function ListManager() {}
-
- ListManager.containerSelector = '#products';
- ListManager.url = '<inp2:m_Link render_template="elements/content_boxes/products.elm" list_name="products_in_category" list_prefix="p" js_escape="1" no_amp="1"/>';
- ListManager.urlParams = {layout: 'list'};
-
- ListManager.getUrl = function () {
- var $url = this.url;
- }
-
- ListManager.reload = function () {
- $(this.containerSelector)
- .fadeTo('fast', 0.7)
- .load(
- this.url,
- this.urlParams,
- function () {
- $(this).fadeTo('fast', 1.0);
- }
- );
- }
- ListManager.setParam = function ($name, $value, $reload) {
- this.urlParams[$name] = $value;
-
- if ( $reload === true ) {
- this.reload();
+ ListManager.init();
}
- }
+ );
</script>
</inp2:m_DefineElement>
<!--## DESIGN TEMPLATE ##-->
<inp2:m_include template="designs/default_design.des" pass_params="1" left_column="sidebar"/>
<!--## /DESIGN TEMPLATE ##-->
\ No newline at end of file
Index: branches/1.0.x/elements/filters.elm.tpl
===================================================================
--- branches/1.0.x/elements/filters.elm.tpl (nonexistent)
+++ branches/1.0.x/elements/filters.elm.tpl (revision 14890)
@@ -0,0 +1,115 @@
+<inp2:m_DefineElement name="filter_text_block" PrefixSpecial="item-filter" filter_type="text" is_list="0">
+ <input type="text" name="<inp2:FilterInputName/>" id="<inp2:FilterInputName/>" value="<inp2:FilterField/>"/>
+</inp2:m_DefineElement>
+
+
+<inp2:m_DefineElement name="filter_select_block" PrefixSpecial="item-filter" filter_type="select" is_list="0">
+ <select name="<inp2:FilterInputName/>" id="<inp2:FilterInputName/>">
+
+ </select>
+</inp2:m_DefineElement>
+
+
+<inp2:m_DefineElement name="filter_radio_element">
+ <dt<inp2:m_if check="m_Param" name="selected"> class="active"</inp2:m_if>>
+ <input type="radio"<inp2:m_if check="m_Param" name="selected"> checked</inp2:m_if> name="<inp2:FilterInputName/>" id="<inp2:FilterInputName/>_<inp2:m_param name='key'/>" value="<inp2:m_param name='key'/>"/>&nbsp;<label for="<inp2:FilterInputName/>_<inp2:m_param name='key'/>"><inp2:m_Param name="title"/></label>
+ </dt>
+ <dd<inp2:m_if check="m_Param" name="selected"> class="active"</inp2:m_if>>(<inp2:m_Param name="count"/>)</dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_radio_block" PrefixSpecial="item-filter" filter_type="radio" is_list="0">
+ <dl class="manufacturer">
+ <inp2:ListFilterOptions render_as="filter_radio_element" pass_params="1"/>
+ </dl>
+ <div class="clear"></div>
+</inp2:m_DefineElement>
+
+
+<inp2:m_DefineElement name="filter_checkbox_element" form_id="">
+ <dt<inp2:m_if check="m_Param" name="selected"> class="active"</inp2:m_if>>
+ <input type="checkbox"<inp2:m_if check="m_Param" name="selected"> checked</inp2:m_if> id="<inp2:FilterInputName/>_<inp2:m_param name='key'/>" value="<inp2:m_param name='key'/>"/>&nbsp;<label for="<inp2:FilterInputName/>_<inp2:m_param name='key'/>"><inp2:m_Param name="title"/></label>
+ </dt>
+ <dd<inp2:m_if check="m_Param" name="selected"> class="active"</inp2:m_if>>(<inp2:m_Param name="count"/>)</dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_checkbox_block" PrefixSpecial="item-filter" filter_type="checkbox" is_list="0">
+ <dl class="manufacturer">
+ <inp2:ListFilterOptions render_as="filter_checkbox_element" form_id="filter-form-{$filter_field}" pass_params="1"/>
+ </dl>
+ <div class="clear"></div>
+
+ <input type="hidden" name="<inp2:FilterInputName/>" id="<inp2:FilterInputName/>" value="<inp2:FilterField/>"/>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_range_value_element">
+ <li>
+ <!--##<inp2:m_param name='key'/>; ##--><inp2:m_Param name="title"/>
+ </li>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_range_count_element">
+ <li>(<inp2:m_Param name="count"/>)</li>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_range_block" PrefixSpecial="item-filter" filter_type="range" is_list="0">
+ <div class="range-block">
+ <ul class="range">
+ <inp2:ListFilterOptions render_as="filter_range_value_element" pass_params="1"/>
+ </ul>
+ <div id="slider-vertical" style="height:260px;"></div>
+ <ul class="range2">
+ <inp2:ListFilterOptions render_as="filter_range_count_element" pass_params="1"/>
+ </ul>
+ <div class="clear"></div>
+ </div>
+
+ <script type="text/javascript">
+ $(document).ready(
+ function() {
+ $( '#slider-vertical' ).slider({
+ orientation: 'vertical',
+ range: true,
+ min: <inp2:m_Get name="min_range_value"/>,
+ max: <inp2:m_Get name="max_range_value"/>,
+ step: <inp2:m_Get name="range_step"/>,
+ values: [<inp2:m_Get name="min_range_value"/>, <inp2:m_Get name="max_range_value"/>],
+ change: function(event, ui) {
+ $('#' + jq('<inp2:FilterInputName/>')).val(ui.values[0] + '-' + ui.values[1]);
+
+ ListManager.scheduleReload();
+ }
+ });
+ }
+ );
+ </script>
+
+ <input type="hidden" name="<inp2:FilterInputName/>" id="<inp2:FilterInputName/>" value="<inp2:FilterField/>"/>
+</inp2:m_DefineElement>
+
+
+<inp2:m_DefineElement name="filter_element" PrefixSpecial="item-filter" prefix="" filter_field="" filter_type="" is_list="0">
+ <inp2:m_ifnot check="m_Param" name="is_list">
+ <inp2:ReloadItem prefix="$prefix" field="$filter_field"/>
+ </inp2:m_ifnot>
+
+ <form action="<inp2:m_FormAction/>" id="filter-form-<inp2:m_Param name='filter_field'/>" method="post" class="filter-form" filter_field="<inp2:m_Param name='filter_field'/>" filter_type="<inp2:m_Param name='filter_type'/>">
+ <div class="block alt-block">
+ <h2 class="active"><a href="#">Filter by <inp2:m_Phrase name="lu_fld_{$filter_field}"/></a></h2>
+ <div class="block-content">
+ <inp2:m_RenderElement name="filter_{$filter_type}_block" pass_params="1"/>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ $(document).ready(
+ function () {
+ ListManager.registerFilter('filter-form-<inp2:m_Param name="filter_field"/>');
+ }
+ );
+ </script>
+ </form>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="used_filter_element">
+ ListManager.replaceFilter('filter-form-<inp2:m_Param name="filter_field"/>', '<inp2:m_RenderElement name="filter_element" pass_params="1" js_escape="1"/>');
+</inp2:m_DefineElement>
\ No newline at end of file
Index: branches/1.0.x/elements/side_boxes/filter_range.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/filter_range.elm.tpl (revision 14889)
+++ branches/1.0.x/elements/side_boxes/filter_range.elm.tpl (revision 14890)
@@ -1,34 +1,49 @@
<div class="block alt-block">
<h2 class="active"><a href="#">Filter by Price</a></h2>
<div class="block-content">
<div class="range-block">
<ul class="range">
<li>$0</li>
<li>$100</li>
<li>$200</li>
<li>$300</li>
<li>$400</li>
<li>$500</li>
<li>$600</li>
<li>$700</li>
<li>$800</li>
<li>$900</li>
<li>> $900</li>
</ul>
<div id="slider-vertical" style="height:260px;"></div>
<ul class="range2">
<li>(123)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
<li>(34)</li>
</ul>
<div class="clear"></div>
</div>
</div>
-</div>
\ No newline at end of file
+</div>
+
+<script type="text/javascript">
+ $(document).ready(
+ function() {
+ $( '#slider-vertical' ).slider({
+ orientation: 'vertical',
+ range: true,
+ min: 0,
+ max: 1000,
+ step: 100,
+ values: [ 0, 400 ]
+ });
+ }
+ );
+</script>
\ No newline at end of file
Index: branches/1.0.x/elements/sorting.elm.tpl
===================================================================
--- branches/1.0.x/elements/sorting.elm.tpl (revision 14889)
+++ branches/1.0.x/elements/sorting.elm.tpl (revision 14890)
@@ -1,134 +1,135 @@
<inp2:m_DefaultParam prefix="" list_name="" layout="list" ajax="0"/>
<div class="filter-block">
-
- <inp2:m_if check="{$prefix}_GridInfo" type="needs_pagination" list_name="$list_name">
- <div class="paginate">
- <a href="#prev" class="prev"><img src="<inp2:m_TemplatesBase/>img/arrow-left.png" width="7" height="13" alt="" /></a>&nbsp;
- Products
- <select id="paginate">
- <inp2:m_DefineElement name="option_page_current">
- <option value="<inp2:m_param name='page'/>" selected><inp2:m_param name="from_record"/> - <inp2:m_param name="to_record"/></a>
- </inp2:m_DefineElement>
-
- <inp2:m_DefineElement name="option_page_link">
- <option value="<inp2:m_param name='page'/>"><inp2:m_param name="from_record"/> - <inp2:m_param name="to_record"/></a>
- </inp2:m_DefineElement>
-
- <inp2:$prefix_PaginationBar list_name="$list_name" current_render_as="option_page_current" link_render_as="option_page_link"/>
- </select>
- out of <inp2:p_TotalRecords/>&nbsp;
- <a href="#next" class="next"><img src="<inp2:m_TemplatesBase/>img/arrow-right.png" width="7" height="13" alt="" /></a>
- </div>
- </inp2:m_if>
+ <div class="paginate">
+ <a href="#prev" class="prev"><img src="<inp2:m_TemplatesBase/>img/arrow-left.png" width="7" height="13" alt="" /></a>&nbsp;
+ Products
+ <select id="paginate">
+ <inp2:m_DefineElement name="option_page_current">
+ <option value="<inp2:m_param name='page'/>" selected><inp2:m_param name="from_record"/> - <inp2:m_param name="to_record"/></a>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="option_page_link">
+ <option value="<inp2:m_param name='page'/>"><inp2:m_param name="from_record"/> - <inp2:m_param name="to_record"/></a>
+ </inp2:m_DefineElement>
+
+ <inp2:$prefix_PaginationBar list_name="$list_name" current_render_as="option_page_current" link_render_as="option_page_link"/>
+ </select>
+ out of <inp2:p_TotalRecords/>&nbsp;
+ <a href="#next" class="next"><img src="<inp2:m_TemplatesBase/>img/arrow-right.png" width="7" height="13" alt="" /></a>
+ </div>
<div class="sortby">
<form method="post" action="<inp2:m_FormAction/>">
Sort by:
<select name="<inp2:p_CombinedSortingDropDownName/>" id="sorting">
<option value="Name|asc" <inp2:p_SortingSelected sorting="l1_Name|asc" selected='selected="selected"'/>>Name</option>
<option value="Price|asc" <inp2:p_SortingSelected sorting="Price|asc" selected='selected="selected"'/>>Price Low</option>
<option value="Price|desc" <inp2:p_SortingSelected sorting="Price|desc" selected='selected="selected"'/>>Price High</option>
<option value="CachedRating|asc" <inp2:p_SortingSelected sorting="CachedRating|asc" selected='selected="selected"'/>>Rating</option>
</select>&nbsp;&nbsp;
Per Page:
<select name="<inp2:{$prefix}_VarName type='PerPage'/>" id="per-page">
<option value="10" <inp2:$prefix_PerPageSelected per_page="10" selected='selected="selected"'/>>10</option>
<option value="20" <inp2:$prefix_PerPageSelected per_page="20" selected='selected="selected"'/>>20</option>
<option value="50" <inp2:$prefix_PerPageSelected per_page="50" selected='selected="selected"'/>>50</option>
<option value="-1" <inp2:$prefix_PerPageSelected per_page="-1" selected='selected="selected"'/>>All</option>
</select>&nbsp;&nbsp;
</form>
<a href="#" id="per-page-all">Show All</a>
</div>
<div class="display_switch">
<a href="#" class="switch_thumb" layout="<inp2:m_Param name='layout'/>"></a>
</div>
<script type="text/javascript">
$(document).ready(
function() {
$('a.switch_thumb').click(
function ($e) {
var $me = $(this);
if ( $me.attr('layout') == 'list' ) {
$me.addClass('swap');
$('ul.display').fadeOut(
'fast',
function() {
$me.attr('layout', 'grid');
ListManager.setParam('layout', 'grid');
$('div.items').removeClass('border-radius').addClass('items-alt');
$(this).fadeIn('fast').addClass('thumb_view');
}
);
}
else {
$me.removeClass('swap');
$('ul.display').fadeOut(
'fast',
function() {
$me.attr('layout', 'list');
ListManager.setParam('layout', 'list');
$('div.items').addClass('border-radius').removeClass('items-alt');
$(this).fadeIn('fast').removeClass('thumb_view');
}
);
}
return false;
}
);
- <inp2:m_if check="{$prefix}_GridInfo" type="needs_pagination" list_name="$list_name">
- $('#paginate').change(
- function () {
- ListManager.setParam('page', $(this).val(), true);
- }
- );
-
- $('.prev, .next', '.paginate').click(
- function ($e) {
- var $option = $('option:selected', '#paginate')[ $(this).attr('class') ]();
+ $('#paginate').change(
+ function () {
+ ListManager.setParam('page', $(this).val(), true);
+ }
+ );
- if ( $option.length ) {
- $('#paginate').val( $option.attr('value') ).change();
- }
+ $('.prev, .next', '.paginate').click(
+ function ($e) {
+ var $option = $('option:selected', '#paginate')[ $(this).attr('class') ]();
- return false;
+ if ( $option.length ) {
+ $('#paginate').val( $option.attr('value') ).change();
}
- );
- </inp2:m_if>
+
+ return false;
+ }
+ );
$('#sorting').change(
function ($e) {
ListManager.setParam('sort_by', $(this).val().replace('|', ','), true);
}
);
$('#per-page').change(
function ($e) {
- ListManager.setParam('per_page', $(this).val(), true);
+ var $per_page = $(this).val();
+
+ if ( $per_page == -1 ) {
+ ListManager.setParam('page', '');
+ }
+
+ ListManager.setParam('per_page', $per_page, true);
}
);
$('#per-page-all').click(
function () {
$('#per-page').val(-1).change();
return false;
}
);
}
);
</script>
</div>
<div class="clear"></div>
\ No newline at end of file
Index: branches/1.0.x/elements/content_boxes/products.elm.tpl
===================================================================
--- branches/1.0.x/elements/content_boxes/products.elm.tpl (revision 14889)
+++ branches/1.0.x/elements/content_boxes/products.elm.tpl (revision 14890)
@@ -1,22 +1,36 @@
<inp2:m_DefaultParam prefix="" list_name="" layout="list"/>
<inp2:m_if check="m_Get" name="ajax" equals_to="yes">
+ <inp2:m_NoDebug/>
<inp2:m_Get name="list_prefix" result_to_var="prefix"/>
<inp2:m_Get name="list_name" result_to_var="list_name"/>
<inp2:m_Get name="layout" result_to_var="layout"/>
</inp2:m_if>
<inp2:$prefix_InitList list_name="$list_name" main_list="1"/>
<inp2:m_Include template="elements/content_boxes.elm" strip_nl="2"/>
<inp2:m_Include template="elements/product_elements.elm" strip_nl="2"/>
-<inp2:m_Include template="elements/sorting.elm" list_name="$list_name" prefix="$prefix" layout="$layout" ajax="1"/>
-<div class="items <inp2:m_if check='m_Param' name='layout' equals_to='list'>border-radius<inp2:m_else/>items-alt</inp2:m_if>">
- <ul class="display<inp2:m_if check='m_Param' name='layout' equals_to='grid'> thumb_view</inp2:m_if>">
- <inp2:$prefix_ListProducts list_name="$list_name" render_as="product_list_element"/>
- </ul>
- <div class="clear"></div>
+<inp2:m_if check="{$prefix}_TotalRecords" list_name="$list_name">
+ <inp2:m_Include template="elements/sorting.elm" list_name="$list_name" prefix="$prefix" layout="$layout" ajax="1"/>
- <inp2:m_Include template="elements/pagination.elm" list_name="$list_name" prefix="$prefix" ajax="1"/>
-</div>
\ No newline at end of file
+ <div class="items <inp2:m_if check='m_Param' name='layout' equals_to='list'>border-radius<inp2:m_else/>items-alt</inp2:m_if>">
+ <ul class="display<inp2:m_if check='m_Param' name='layout' equals_to='grid'> thumb_view</inp2:m_if>">
+ <inp2:$prefix_ListProducts list_name="$list_name" render_as="product_list_element"/>
+ </ul>
+ <div class="clear"></div>
+
+ <inp2:m_Include template="elements/pagination.elm" list_name="$list_name" prefix="$prefix" ajax="1"/>
+ </div>
+<inp2:m_else/>
+ No Products
+</inp2:m_if>
+
+<inp2:m_if check="m_Get" name="filters">
+ <inp2:m_include template="elements/filters.elm"/>
+
+ <script type="text/javascript">
+ <inp2:item-filter.used_PrintList render_as="used_filter_element" list_name="$list_name" prefix="$prefix" is_list="1"/>
+ </script>
+</inp2:m_if>
\ No newline at end of file

Event Timeline