Page MenuHomeIn-Portal Phabricator

modern-store
No OneTemporary

File Metadata

Created
Tue, Apr 29, 5:10 PM

modern-store

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: branches/1.0.x/maintenance.tpl
===================================================================
--- branches/1.0.x/maintenance.tpl (revision 15168)
+++ branches/1.0.x/maintenance.tpl (revision 15169)
@@ -1,165 +1,165 @@
-<!--##
-<NAME>Maintenance Mode</NAME>
-<DESC></DESC>
-<SECTION>Pages</SECTION>
-##-->
-<inp2:m_NoDebug/>
-
-<inp2:m_DefineElement name="add_to_head">
- <meta name="robots" content="noindex, nofollow">
- <meta http-equiv="refresh" content="120; url=<inp2:m_if check='m_Get' name='next_template'><inp2:m_Get name='next_template'/><inp2:m_else/><inp2:m_Link template='index' m_cat_id='0'/></inp2:m_if>">
-
- <script type="text/javascript">
- var a_parent = window.parent,
- to_close = new Array (),
- $modal_windows = <inp2:m_if check="adm_UsePopups" mode="modal">true<inp2:m_else/>false</inp2:m_if>;
-
- function getFrame($name) {
- var $main_window = window;
-
- // 1. cycle through popups to get main window
- try {
- // will be error, when other site is opened in parent window
- var $i = 0;
- var $opener;
-
- do {
- if ( $i == 10 ) {
- break;
- }
-
- // get popup opener
- $opener = $main_window.opener;
-
- if ( !$opener ) {
- // when no opener found, then try parent window
- $opener = $main_window.parent;
- }
-
- if ( $opener ) {
- $main_window = $opener;
- }
-
- $i++;
- } while ($opener);
- }
- catch (err) {
- // catch Access/Permission Denied error
- return window;
- }
-
- var $frameset = $main_window.parent.frames;
- for ($i = 0; $i < $frameset.length; $i++) {
- if ( $frameset[$i].name == $name ) {
- return $frameset[$i];
- }
- }
-
- return $main_window.parent;
- }
-
- function getWindowOpener($window) {
- // use this instead of "window.opener"
- if ( !$modal_windows ) {
- return $window.opener;
- }
-
- if ( $window.name == 'main' || $window.name == 'main_frame' ) {
- return null;
- }
-
- return getFrame('main').TB.findWindow($window.name, -1);
- }
-
- function redirect() {
- var $main_frame = getFrame('main');
- a_parent = window;
-
- try {
- var i = 0;
- while (i < 10) {
- i++;
- var $opener = $main_frame.getWindowOpener(a_parent);
-
- if ( $opener ) {
- to_close.push(a_parent);
- a_parent = $opener;
- continue;
- }
-
- if ( a_parent.name == 'main_frame' ) {
- break;
- }
-
- if ( a_parent.parent && a_parent.parent.name != a_parent.name ) {
- a_parent = a_parent.parent;
- continue;
- }
- }
- }
- catch (err) {
- // another website is opened in parent window
- alert('Error while trying to access window opener: [' + err.message + ']');
- i = 10;
- }
-
- if ( i < 10 ) {
- setTimeout(close_windows, 100);
- }
- }
-
- function window_close($close_callback) {
- // use this instead of "window.close();"
- if ( !$modal_windows ) {
- if ( $.isFunction($close_callback) ) {
- // use close callback, because iframe will be removed later in this method
- $close_callback();
- }
-
- window.close();
- return;
- }
-
- if ( window.name == 'main' ) {
- return;
- }
-
- if ( $close_callback !== undefined ) {
- return getFrame('main').TB.remove(null, $close_callback);
- }
-
- return getFrame('main').TB.remove();
- }
-
- function close_windows() {
- page = '<inp2:m_Link template="login" js_escape="1" no_amp="1" index_file="admin/index.php" __NO_REWRITE__="1" m_cat_id="0" m_wid=""/>';
- a_parent.location.href = page;
-
- for (var c = (to_close.length - 1); c >= 0; c--) {
- window_close(to_close[c]);
- }
- }
-
- if ( window.top.frames.length > 0 ) {
- redirect();
- }
- </script>
-</inp2:m_DefineElement>
-
-<!--## MAIN CONTENT ##-->
-<inp2:m_DefineElement name="content">
-
- <inp2:m_RenderElement design="content_box">
- <inp2:m_Capture to_var="header">
- <inp2:st_PageInfo type="title"/>
- </inp2:m_Capture>
-
- <inp2:m_GetConfig name="MaintenanceMessageFront"/>
- </inp2:m_RenderElement>
-
-</inp2:m_DefineElement>
-<!--## /MAIN CONTENT ##-->
-
-<!--## DESIGN TEMPLATE ##-->
-<inp2:m_include template="designs/default_design.des" pass_params="1"/>
+<!--##
+<NAME>Maintenance Mode</NAME>
+<DESC></DESC>
+<SECTION>Pages</SECTION>
+##-->
+<inp2:m_NoDebug/>
+
+<inp2:m_DefineElement name="add_to_head">
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="refresh" content="120; url=<inp2:m_if check='m_Get' name='next_template'><inp2:m_Get name='next_template'/><inp2:m_else/><inp2:m_Link template='index' m_cat_id='0'/></inp2:m_if>">
+
+ <script type="text/javascript">
+ var a_parent = window.parent,
+ to_close = new Array (),
+ $modal_windows = <inp2:m_if check="adm_UsePopups" mode="modal">true<inp2:m_else/>false</inp2:m_if>;
+
+ function getFrame($name) {
+ var $main_window = window;
+
+ // 1. cycle through popups to get main window
+ try {
+ // will be error, when other site is opened in parent window
+ var $i = 0;
+ var $opener;
+
+ do {
+ if ( $i == 10 ) {
+ break;
+ }
+
+ // get popup opener
+ $opener = $main_window.opener;
+
+ if ( !$opener ) {
+ // when no opener found, then try parent window
+ $opener = $main_window.parent;
+ }
+
+ if ( $opener ) {
+ $main_window = $opener;
+ }
+
+ $i++;
+ } while ($opener);
+ }
+ catch (err) {
+ // catch Access/Permission Denied error
+ return window;
+ }
+
+ var $frameset = $main_window.parent.frames;
+ for ($i = 0; $i < $frameset.length; $i++) {
+ if ( $frameset[$i].name == $name ) {
+ return $frameset[$i];
+ }
+ }
+
+ return $main_window.parent;
+ }
+
+ function getWindowOpener($window) {
+ // use this instead of "window.opener"
+ if ( !$modal_windows ) {
+ return $window.opener;
+ }
+
+ if ( $window.name == 'main' || $window.name == 'main_frame' ) {
+ return null;
+ }
+
+ return getFrame('main').TB.findWindow($window.name, -1);
+ }
+
+ function redirect() {
+ var $main_frame = getFrame('main');
+ a_parent = window;
+
+ try {
+ var i = 0;
+ while (i < 10) {
+ i++;
+ var $opener = $main_frame.getWindowOpener(a_parent);
+
+ if ( $opener ) {
+ to_close.push(a_parent);
+ a_parent = $opener;
+ continue;
+ }
+
+ if ( a_parent.name == 'main_frame' ) {
+ break;
+ }
+
+ if ( a_parent.parent && a_parent.parent.name != a_parent.name ) {
+ a_parent = a_parent.parent;
+ continue;
+ }
+ }
+ }
+ catch (err) {
+ // another website is opened in parent window
+ alert('Error while trying to access window opener: [' + err.message + ']');
+ i = 10;
+ }
+
+ if ( i < 10 ) {
+ setTimeout(close_windows, 100);
+ }
+ }
+
+ function window_close($close_callback) {
+ // use this instead of "window.close();"
+ if ( !$modal_windows ) {
+ if ( $.isFunction($close_callback) ) {
+ // use close callback, because iframe will be removed later in this method
+ $close_callback();
+ }
+
+ window.close();
+ return;
+ }
+
+ if ( window.name == 'main' ) {
+ return;
+ }
+
+ if ( $close_callback !== undefined ) {
+ return getFrame('main').TB.remove(null, $close_callback);
+ }
+
+ return getFrame('main').TB.remove();
+ }
+
+ function close_windows() {
+ page = '<inp2:m_Link template="login" js_escape="1" no_amp="1" index_file="admin/index.php" __NO_REWRITE__="1" m_cat_id="0" m_wid=""/>';
+ a_parent.location.href = page;
+
+ for (var c = (to_close.length - 1); c >= 0; c--) {
+ window_close(to_close[c]);
+ }
+ }
+
+ if ( window.top.frames.length > 0 ) {
+ redirect();
+ }
+ </script>
+</inp2:m_DefineElement>
+
+<!--## MAIN CONTENT ##-->
+<inp2:m_DefineElement name="content">
+
+ <inp2:m_RenderElement design="content_box">
+ <inp2:m_Capture to_var="header">
+ <inp2:st_PageInfo type="title"/>
+ </inp2:m_Capture>
+
+ <inp2:m_GetConfig name="MaintenanceMessageFront"/>
+ </inp2:m_RenderElement>
+
+</inp2:m_DefineElement>
+<!--## /MAIN CONTENT ##-->
+
+<!--## DESIGN TEMPLATE ##-->
+<inp2:m_include template="designs/default_design.des" pass_params="1"/>
<!--## /DESIGN TEMPLATE ##-->
\ No newline at end of file
Property changes on: branches/1.0.x/maintenance.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/no_permission.tpl
===================================================================
--- branches/1.0.x/no_permission.tpl (revision 15168)
+++ branches/1.0.x/no_permission.tpl (revision 15169)
@@ -1,23 +1,23 @@
-<!--##
-<NAME>No Permissions</NAME>
-<DESC>No permissions to perform this operation.</DESC>
-<SECTION>Pages</SECTION>
-##-->
-
-<!--## MAIN CONTENT ##-->
-<inp2:m_DefineElement name="content">
-
- <inp2:m_RenderElement design="content_box">
- <inp2:m_Capture to_var="header">
- <inp2:st_PageInfo type="title"/>
- </inp2:m_Capture>
-
- <inp2:st_Field name="Description"/>
- </inp2:m_RenderElement>
-
-</inp2:m_DefineElement>
-<!--## /MAIN CONTENT ##-->
-
-<!--## DESIGN TEMPLATE ##-->
-<inp2:m_include template="designs/default_design.des" pass_params="1"/>
+<!--##
+<NAME>No Permissions</NAME>
+<DESC>No permissions to perform this operation.</DESC>
+<SECTION>Pages</SECTION>
+##-->
+
+<!--## MAIN CONTENT ##-->
+<inp2:m_DefineElement name="content">
+
+ <inp2:m_RenderElement design="content_box">
+ <inp2:m_Capture to_var="header">
+ <inp2:st_PageInfo type="title"/>
+ </inp2:m_Capture>
+
+ <inp2:st_Field name="Description"/>
+ </inp2:m_RenderElement>
+
+</inp2:m_DefineElement>
+<!--## /MAIN CONTENT ##-->
+
+<!--## DESIGN TEMPLATE ##-->
+<inp2:m_include template="designs/default_design.des" pass_params="1"/>
<!--## /DESIGN TEMPLATE ##-->
\ No newline at end of file
Property changes on: branches/1.0.x/no_permission.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/.smsignore
===================================================================
--- branches/1.0.x/.smsignore (revision 15168)
+++ branches/1.0.x/.smsignore (revision 15169)
@@ -1,3 +1,3 @@
-cart\.tpl
-checkout\.tpl
+cart\.tpl
+checkout\.tpl
receipt\.tpl
\ No newline at end of file
Property changes on: branches/1.0.x/.smsignore
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/cart.tpl
===================================================================
--- branches/1.0.x/cart.tpl (revision 15168)
+++ branches/1.0.x/cart.tpl (revision 15169)
@@ -1,306 +1,306 @@
-<!--##
-<NAME>Shopping Cart</NAME>
-<DESC></DESC>
-<SECTION>Pages||Checkout</SECTION>
-##-->
-
-<inp2:m_DefineElement name="page_title">Shopping Cart</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="add_to_head">
- <script src="<inp2:m_TemplatesBase />inc/js/cart_manager.js" type="text/javascript"></script>
-</inp2:m_DefineElement>
-
-<!--## MAIN CONTENT ##-->
-<inp2:m_DefineElement name="content">
- <inp2:m_Include template="elements/options.elm" strip_nl="2"/>
-
- <ul class="steps">
- <li class="step1 active"><a href="<inp2:m_Link pass='m,all'/>"><i></i>Shopping Cart</a></li>
- <li class="step2"><span><i></i>One-step Checkout</span></li>
- <li class="step3"><span><i></i>Receipt</span></li>
- </ul>
-
- <div class="clear"></div>
-
- <form method="post" id="shopping-cart-form" action="<inp2:m_FormAction />">
- <div class="cart-detail receipt shoppingcart">
- <!--<div style="border: 1px dashed blue; padding: 3px; margin-bottom: 5px; font-size: 14px; font-family: 'Courier New', monospace;">
- <inp2:ord_CheckoutErrorNew/>
- </div>-->
-
- <inp2:m_DefineElement name="cart_header_element">
- <h1>Shopping Cart</h1>
-
- <div class="buttons-right">
- <a href="<inp2:ord_ContinueShoppingLink template='__default__'/>" class="continue-button"><span>Continue Shopping</span></a>
- <a href="<inp2:m_Link template='checkout'/>" class="checkout-button"><span>Checkout</span></a>
- </div>
- <div class="clear"></div>
-
- <table class="items">
- <thead>
- <tr>
- <th colspan="2" style="text-align: left;">Items in your order (<span id="item-count"><inp2:ord_ItemsInCart/></span>)</th>
- <th>Qty.</th>
- <th>Price</th>
- <th>Total</th>
- <th></th>
- </tr>
- </thead>
- <tbody id="shop-cart-table">
- </inp2:m_DefineElement>
-
- <inp2:m_DefineElement name="cart_item_element">
- <tr class="shop-cart-row" row_index="<inp2:RowIndex/>" order_item_id="<inp2:Field name='OrderItemId'/>">
- <td class="item-img"<inp2:m_if check="HasOptions"> rowspan="2"</inp2:m_if>>
- <inp2:p_Image render_as="image_element" Primary="1" MaxWidth="58" DefaultWidth="58" DefaultImage="img/product_no_picture.png"/>
- </td>
- <td class="item-title">
- <div style="font-size: 14px; font-family: 'Courier New', monospace;">
- [ProductId: <strong><inp2:Field name="ProductId"/></strong>; OptionsSalt: <strong><inp2:Field name="OptionsSalt"/></strong>; BackOrderFlag: <strong><inp2:Field name="BackOrderFlag"/></strong>]
- </div>
-
- <inp2:m_if check="Field" field="Virtual" equals_to="0" db="db">
- <a href="<inp2:ProductLink template='__default__'/>"><inp2:Field name="Name" /></a>
- <inp2:m_if check="FreePromoShippingAvailable">
- &nbsp;<sup><inp2:m_phrase label="lu_cart_FreeShippingAvailable" /></sup>
- </inp2:m_if>
- <inp2:m_else/>
- <inp2:Field name="Name" />
- </inp2:m_if>
-
- <inp2:m_if check="ord_BackorderFlag">
- <span class="error"><inp2:m_phrase label="lu_cart_BackorderFlag" /></span>
- </inp2:m_if>
-
- <inp2:m_if check="p_Field" name="cust_Availability" db="db">
- <br />
- <inp2:p_CustomField name="Availability"/>
- </inp2:m_if>
-
- <div class="product-discount"<inp2:m_ifnot check="HasDiscount"> style="display: none;"</inp2:m_ifnot>>
- <inp2:m_Phrase label="lu_comm_RegularPrice" />: <span class="item-price"><inp2:Field name="FlatPrice" currency="selected"/></span><br />
- <inp2:m_Phrase label="lu_comm_Discount" />: <span class="item-discount"><inp2:Field name="ItemDiscount" currency="selected" negative="1" /></span>
- </div>
- </td>
- <td>
- <div class="item-quantity">
- <inp2:m_if check="IsTangible">
- <input value="<inp2:Field field='Quantity'/>" class="field product-qty" name="<inp2:InputName field='Quantity'/>" id="<inp2:InputName field='Quantity'/>" />
- <inp2:m_else />
- <span class="product-qty read-only"><inp2:Field field="Quantity"/></span>
- </inp2:m_if>
- </div>
- </td>
-
- <td class="price-cell">
- <inp2:Field name="Price" currency="selected" decimal_tag="span"/>
- </td>
-
- <td class="item-total extended-price-cell">
- <inp2:Field name="ExtendedPrice" currency="selected" decimal_tag="span"/>
- </td>
-
- <td>
- <a href="<inp2:LinkRemoveFromCart/>" class="delete-cart-link"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" width="13" height="13" alt="Delete" /></a>
- </td>
- </tr>
-
- <inp2:m_if check="HasOptions">
- <tr>
- <td class="options-td" colspan="5">
- <inp2:m_if check="DisplayOptionsPricing">
- <inp2:PrintOptions render_as="ro_option_element" currency="selected"/>
- <inp2:m_else/>
- <inp2:PrintOptions render_as="ro_option_element_no_price" currency="selected"/>
- </inp2:m_if>
-
- <inp2:m_if check="FieldEquals" field="OptionsSelectionMode" value="0">
- <a href="<inp2:p_ProductLink template='__default__' pass='m,p,orditems'/>">Edit Options</a>
- </inp2:m_if>
-
- <!--<div class="sel-options">
- <label><strong>Select Size:</strong>
- <select name="select">
- <option value="" selected="selected">22"</option>
- <option value="">23"</option>
- </select>
- </label>
- </div>
- <div class="sel-options">
- <label><strong>Select Color:</strong>
- <select name="select">
- <option value="" selected="selected">Gray Metallic</option>
- <option value="">White Metallic</option>
- <option value="">Black Metallic</option>
- </select>
- </label>
- </div>-->
- </td>
- </tr>
- </inp2:m_if>
- </inp2:m_DefineElement>
-
- <inp2:m_DefineElement name="cart_footer_element">
- </tbody>
- </table>
-
- <div class="discount-block">
- <p><strong>Discounts & Promotional Offers</strong></p>
-
- <div id="coupon-row">
- <div class="used"<inp2:m_ifnot check="ord_Field" name="CouponId" db="db"> style="display: none;"</inp2:m_ifnot>>
- <inp2:m_Phrase label="lu_comm_CouponHasBeenApplied" />:&nbsp;
-
- <div class="num-discount">
- <span class="coupon-name"><inp2:ord_Field field="CouponName" /></span>&nbsp;&nbsp;
- <a id="remove-coupon" href="<inp2:ord_RemoveCouponLink type='coupon'/>"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" title="<inp2:m_Phrase label='lu_comm_RemoveCoupon' no_editing='1'/>" alt="<inp2:m_Phrase label='lu_comm_RemoveCoupon' no_editing='1'/>" width="13" height="13" border="0" /></a>
- </div>
- </div>
-
- <div class="not-used"<inp2:m_if check="ord_Field" name="CouponId" db="db"> style="display: none;"</inp2:m_if>>
- <p>If you have a discount or promotional offer code please enter it and click Apply button.</p>
- <div class="num-discount form">
- <input class="field coupon-code" name="coupon_code" value=""/>
- <input type="button" class="grey-button" id="apply-coupon" value="Apply"/>
- </div>
- </div>
- </div>
-
- <!-- hide gift certificate row by design, but it's fully functional -->
- <div id="gift-certificate-row" style="display: none;">
- <div class="used"<inp2:m_ifnot check="ord_Field" name="GiftCertificateId" db="db"> style="display: none;"</inp2:m_ifnot>>
- <inp2:m_Phrase label="lu_comm_GiftCertificateHasBeenApplied" />:&nbsp;
-
- <div class="num-discount">
- <span class="gift-certificate-discount"><inp2:ord_Field field="GiftCertificateDiscount" currency="selected" /></span>&nbsp;&nbsp;
- <a id="remove-gift-certificate" href="<inp2:ord_RemoveCouponLink type='gift_certificate'/>"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" title="<inp2:m_Phrase label="lu_comm_RemoveGiftCertificate" no_editing="1"/>" alt="<inp2:m_Phrase label="lu_comm_RemoveGiftCertificate" no_editing="1"/>" width="13" height="13" border="0" /></a>
- </div>
- </div>
-
- <div class="not-used"<inp2:m_if check="ord_Field" name="GiftCertificateId" db="db"> style="display: none;"</inp2:m_if>>
- <p>If you have a gift certificate code please enter it and click Apply button.</p>
- <div class="num-discount form">
- <input class="field gift-certificate-code" name="giftcert_code" />
- <input type="button" class="grey-button" id="apply-gift-certificate" value="Apply"/>
- </div>
- </div>
- </div>
- </div>
-
- <div class="buttons-right">
- <dl class="total">
- <div id="discount-row"<inp2:m_ifnot check="ord_HasDiscount"> style="display: none;"</inp2:m_ifnot>>
- <dt class="discount">Discount:</dt>
- <dd class="price2">- <inp2:ord_Field name="DiscountTotal" currency="selected" decimal_tag="span"/></dd>
- </div>
-
- <div>
- <dt>Total</dt>
- <dd class="price1" id="sub-total"><inp2:ord_Field field="SubTotal" currency="selected" decimal_tag="span"/></dd>
- </div>
- </dl>
- <p>(before shipping & taxes)</p>
- <a href="<inp2:m_Link template='checkout'/>" class="checkout-grey-button"><span>Checkout</span></a>
- </div>
- <div class="clear"></div>
-
- <script type="text/javascript">
- var $aShopCartManager = new ShopCartManager(
- {
- updateUrl: '<inp2:m_Link ord_event="OnUpdateCartJSON" currency="selected" pass="m,ord" js_escape="1" no_amp="1"/>',
- constants: {
- 'OrderCheckoutErrorType::PRODUCT': <inp2:m_GetConst name="OrderCheckoutErrorType::PRODUCT"/>,
- 'OrderCheckoutError::FIELD_UPDATE_SUCCESS': <inp2:m_GetConst name="OrderCheckoutError::FIELD_UPDATE_SUCCESS"/>,
- 'OrderCheckoutError::FIELD_UPDATE_ERROR': <inp2:m_GetConst name="OrderCheckoutError::FIELD_UPDATE_ERROR"/>,
- 'OrderCheckoutError::QTY_UNAVAILABLE': <inp2:m_GetConst name="OrderCheckoutError::QTY_UNAVAILABLE"/>,
- 'OrderCheckoutError::QTY_OUT_OF_STOCK': <inp2:m_GetConst name="OrderCheckoutError::QTY_OUT_OF_STOCK"/>,
- 'OrderCheckoutError::QTY_CHANGED_TO_MINIMAL': <inp2:m_GetConst name="OrderCheckoutError::QTY_CHANGED_TO_MINIMAL"/>,
-
- 'OrderCheckoutErrorType::COUPON': <inp2:m_GetConst name="OrderCheckoutErrorType::COUPON"/>,
- 'OrderCheckoutError::COUPON_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_APPLIED"/>,
- 'OrderCheckoutError::COUPON_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_REMOVED"/>,
- 'OrderCheckoutError::COUPON_REMOVED_AUTOMATICALLY': <inp2:m_GetConst name="OrderCheckoutError::COUPON_REMOVED_AUTOMATICALLY"/>,
- 'OrderCheckoutError::COUPON_CODE_INVALID': <inp2:m_GetConst name="OrderCheckoutError::COUPON_CODE_INVALID"/>,
- 'OrderCheckoutError::COUPON_CODE_EXPIRED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_CODE_EXPIRED"/>,
-
-
- 'OrderCheckoutErrorType::GIFT_CERTIFICATE': <inp2:m_GetConst name="OrderCheckoutErrorType::GIFT_CERTIFICATE"/>,
- 'OrderCheckoutError::GC_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::GC_APPLIED"/>,
- 'OrderCheckoutError::GC_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::GC_REMOVED"/>,
- 'OrderCheckoutError::GC_REMOVED_AUTOMATICALLY': <inp2:m_GetConst name="OrderCheckoutError::GC_REMOVED_AUTOMATICALLY"/>,
- 'OrderCheckoutError::GC_CODE_INVALID': <inp2:m_GetConst name="OrderCheckoutError::GC_CODE_INVALID"/>,
- 'OrderCheckoutError::GC_CODE_EXPIRED': <inp2:m_GetConst name="OrderCheckoutError::GC_CODE_EXPIRED"/>,
-
- 'OrderCheckoutErrorType::DISCOUNT': <inp2:m_GetConst name="OrderCheckoutErrorType::DISCOUNT"/>,
- 'OrderCheckoutError::DISCOUNT_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::DISCOUNT_APPLIED"/>,
- 'OrderCheckoutError::DISCOUNT_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::DISCOUNT_REMOVED"/>,
-
- 'PRODUCT_TYPE_TANGIBLE': <inp2:m_GetConst name="PRODUCT_TYPE_TANGIBLE"/>
- },
-// debugMode: true,
- currencyMask: '<inp2:ord_CurrencyMask currency="selected" js_escape="1"/>',
- orderInfo: <inp2:ord_PrintOrderInfo currency="selected"/>
- }
- );
- </script>
- </inp2:m_DefineElement>
-
- <inp2:m_DefineElement name="cart_empty_element">
- <h1>Shopping Cart</h1>
- <div class="clear"></div>
-
- <strong><inp2:m_Phrase label="lu_comm_YourCartIsEmpty"/></strong>
- </inp2:m_DefineElement>
-
- <inp2:ord_PrintCart item_render_as="cart_item_element" header_render_as="cart_header_element" footer_render_as="cart_footer_element" empty_cart_render_as="cart_empty_element" per_page="-1"/>
- </div>
- </form>
-
- <textarea id="product-row-mask" style="display: none;">
- <tr class="shop-cart-row" row_index="{ROW_INDEX}" order_item_id="{field:OrderItemId}">
- <td class="item-img">
- <img src="{field:PrimaryImage}" alt=""/>
- </td>
- <td class="item-title">
- <span class="product-with-link" style="display: none;">
- <a href="#"></a>
- </span>
-
- <span class="product-without-link" style="display: none;"></span>
-
- <span class="free-shipping">
- &nbsp;<sup><inp2:m_phrase label="lu_cart_FreeShippingAvailable" /></sup>
- </span>
-
- <span class="back-order-mark error"><inp2:m_phrase label="lu_cart_BackorderFlag" /></span>
-
- <span class="product-availability" style="display: none;"></span>
-
- <div class="product-discount" style="display: none;">
- <inp2:m_Phrase label="lu_comm_RegularPrice" />: <span class="item-price"></span><br />
- <inp2:m_Phrase label="lu_comm_Discount" />: <span class="item-discount"></span>
- </div>
- </td>
- <td>
- <div class="item-quantity">
- <input value="{field:Quantity}" style="width:20px" class="field product-qty" name="<inp2:orditems_InputName field='Quantity' force_id="{field:OrderItemId}"/>" id="<inp2:orditems_InputName field='Quantity' force_id="{field:OrderItemId}"/>" />
- <span class="product-qty read-only">{field:Quantity}</span>
- </div>
- </td>
-
- <td class="price-cell"></td>
-
- <td class="item-total extended-price-cell"></td>
-
- <td>
- <a href="#" class="delete-cart-link"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" width="13" height="13" alt="Delete" /></a>
- </td>
- </tr>
- </textarea>
-</inp2:m_DefineElement>
-<!--## /MAIN CONTENT ##-->
-
-<!--## DESIGN TEMPLATE ##-->
-<inp2:m_include template="designs/default_design.des" pass_params="1"/>
+<!--##
+<NAME>Shopping Cart</NAME>
+<DESC></DESC>
+<SECTION>Pages||Checkout</SECTION>
+##-->
+
+<inp2:m_DefineElement name="page_title">Shopping Cart</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="add_to_head">
+ <script src="<inp2:m_TemplatesBase />inc/js/cart_manager.js" type="text/javascript"></script>
+</inp2:m_DefineElement>
+
+<!--## MAIN CONTENT ##-->
+<inp2:m_DefineElement name="content">
+ <inp2:m_Include template="elements/options.elm" strip_nl="2"/>
+
+ <ul class="steps">
+ <li class="step1 active"><a href="<inp2:m_Link pass='m,all'/>"><i></i>Shopping Cart</a></li>
+ <li class="step2"><span><i></i>One-step Checkout</span></li>
+ <li class="step3"><span><i></i>Receipt</span></li>
+ </ul>
+
+ <div class="clear"></div>
+
+ <form method="post" id="shopping-cart-form" action="<inp2:m_FormAction />">
+ <div class="cart-detail receipt shoppingcart">
+ <!--<div style="border: 1px dashed blue; padding: 3px; margin-bottom: 5px; font-size: 14px; font-family: 'Courier New', monospace;">
+ <inp2:ord_CheckoutErrorNew/>
+ </div>-->
+
+ <inp2:m_DefineElement name="cart_header_element">
+ <h1>Shopping Cart</h1>
+
+ <div class="buttons-right">
+ <a href="<inp2:ord_ContinueShoppingLink template='__default__'/>" class="continue-button"><span>Continue Shopping</span></a>
+ <a href="<inp2:m_Link template='checkout'/>" class="checkout-button"><span>Checkout</span></a>
+ </div>
+ <div class="clear"></div>
+
+ <table class="items">
+ <thead>
+ <tr>
+ <th colspan="2" style="text-align: left;">Items in your order (<span id="item-count"><inp2:ord_ItemsInCart/></span>)</th>
+ <th>Qty.</th>
+ <th>Price</th>
+ <th>Total</th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody id="shop-cart-table">
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="cart_item_element">
+ <tr class="shop-cart-row" row_index="<inp2:RowIndex/>" order_item_id="<inp2:Field name='OrderItemId'/>">
+ <td class="item-img"<inp2:m_if check="HasOptions"> rowspan="2"</inp2:m_if>>
+ <inp2:p_Image render_as="image_element" Primary="1" MaxWidth="58" DefaultWidth="58" DefaultImage="img/product_no_picture.png"/>
+ </td>
+ <td class="item-title">
+ <div style="font-size: 14px; font-family: 'Courier New', monospace;">
+ [ProductId: <strong><inp2:Field name="ProductId"/></strong>; OptionsSalt: <strong><inp2:Field name="OptionsSalt"/></strong>; BackOrderFlag: <strong><inp2:Field name="BackOrderFlag"/></strong>]
+ </div>
+
+ <inp2:m_if check="Field" field="Virtual" equals_to="0" db="db">
+ <a href="<inp2:ProductLink template='__default__'/>"><inp2:Field name="Name" /></a>
+ <inp2:m_if check="FreePromoShippingAvailable">
+ &nbsp;<sup><inp2:m_phrase label="lu_cart_FreeShippingAvailable" /></sup>
+ </inp2:m_if>
+ <inp2:m_else/>
+ <inp2:Field name="Name" />
+ </inp2:m_if>
+
+ <inp2:m_if check="ord_BackorderFlag">
+ <span class="error"><inp2:m_phrase label="lu_cart_BackorderFlag" /></span>
+ </inp2:m_if>
+
+ <inp2:m_if check="p_Field" name="cust_Availability" db="db">
+ <br />
+ <inp2:p_CustomField name="Availability"/>
+ </inp2:m_if>
+
+ <div class="product-discount"<inp2:m_ifnot check="HasDiscount"> style="display: none;"</inp2:m_ifnot>>
+ <inp2:m_Phrase label="lu_comm_RegularPrice" />: <span class="item-price"><inp2:Field name="FlatPrice" currency="selected"/></span><br />
+ <inp2:m_Phrase label="lu_comm_Discount" />: <span class="item-discount"><inp2:Field name="ItemDiscount" currency="selected" negative="1" /></span>
+ </div>
+ </td>
+ <td>
+ <div class="item-quantity">
+ <inp2:m_if check="IsTangible">
+ <input value="<inp2:Field field='Quantity'/>" class="field product-qty" name="<inp2:InputName field='Quantity'/>" id="<inp2:InputName field='Quantity'/>" />
+ <inp2:m_else />
+ <span class="product-qty read-only"><inp2:Field field="Quantity"/></span>
+ </inp2:m_if>
+ </div>
+ </td>
+
+ <td class="price-cell">
+ <inp2:Field name="Price" currency="selected" decimal_tag="span"/>
+ </td>
+
+ <td class="item-total extended-price-cell">
+ <inp2:Field name="ExtendedPrice" currency="selected" decimal_tag="span"/>
+ </td>
+
+ <td>
+ <a href="<inp2:LinkRemoveFromCart/>" class="delete-cart-link"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" width="13" height="13" alt="Delete" /></a>
+ </td>
+ </tr>
+
+ <inp2:m_if check="HasOptions">
+ <tr>
+ <td class="options-td" colspan="5">
+ <inp2:m_if check="DisplayOptionsPricing">
+ <inp2:PrintOptions render_as="ro_option_element" currency="selected"/>
+ <inp2:m_else/>
+ <inp2:PrintOptions render_as="ro_option_element_no_price" currency="selected"/>
+ </inp2:m_if>
+
+ <inp2:m_if check="FieldEquals" field="OptionsSelectionMode" value="0">
+ <a href="<inp2:p_ProductLink template='__default__' pass='m,p,orditems'/>">Edit Options</a>
+ </inp2:m_if>
+
+ <!--<div class="sel-options">
+ <label><strong>Select Size:</strong>
+ <select name="select">
+ <option value="" selected="selected">22"</option>
+ <option value="">23"</option>
+ </select>
+ </label>
+ </div>
+ <div class="sel-options">
+ <label><strong>Select Color:</strong>
+ <select name="select">
+ <option value="" selected="selected">Gray Metallic</option>
+ <option value="">White Metallic</option>
+ <option value="">Black Metallic</option>
+ </select>
+ </label>
+ </div>-->
+ </td>
+ </tr>
+ </inp2:m_if>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="cart_footer_element">
+ </tbody>
+ </table>
+
+ <div class="discount-block">
+ <p><strong>Discounts & Promotional Offers</strong></p>
+
+ <div id="coupon-row">
+ <div class="used"<inp2:m_ifnot check="ord_Field" name="CouponId" db="db"> style="display: none;"</inp2:m_ifnot>>
+ <inp2:m_Phrase label="lu_comm_CouponHasBeenApplied" />:&nbsp;
+
+ <div class="num-discount">
+ <span class="coupon-name"><inp2:ord_Field field="CouponName" /></span>&nbsp;&nbsp;
+ <a id="remove-coupon" href="<inp2:ord_RemoveCouponLink type='coupon'/>"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" title="<inp2:m_Phrase label='lu_comm_RemoveCoupon' no_editing='1'/>" alt="<inp2:m_Phrase label='lu_comm_RemoveCoupon' no_editing='1'/>" width="13" height="13" border="0" /></a>
+ </div>
+ </div>
+
+ <div class="not-used"<inp2:m_if check="ord_Field" name="CouponId" db="db"> style="display: none;"</inp2:m_if>>
+ <p>If you have a discount or promotional offer code please enter it and click Apply button.</p>
+ <div class="num-discount form">
+ <input class="field coupon-code" name="coupon_code" value=""/>
+ <input type="button" class="grey-button" id="apply-coupon" value="Apply"/>
+ </div>
+ </div>
+ </div>
+
+ <!-- hide gift certificate row by design, but it's fully functional -->
+ <div id="gift-certificate-row" style="display: none;">
+ <div class="used"<inp2:m_ifnot check="ord_Field" name="GiftCertificateId" db="db"> style="display: none;"</inp2:m_ifnot>>
+ <inp2:m_Phrase label="lu_comm_GiftCertificateHasBeenApplied" />:&nbsp;
+
+ <div class="num-discount">
+ <span class="gift-certificate-discount"><inp2:ord_Field field="GiftCertificateDiscount" currency="selected" /></span>&nbsp;&nbsp;
+ <a id="remove-gift-certificate" href="<inp2:ord_RemoveCouponLink type='gift_certificate'/>"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" title="<inp2:m_Phrase label="lu_comm_RemoveGiftCertificate" no_editing="1"/>" alt="<inp2:m_Phrase label="lu_comm_RemoveGiftCertificate" no_editing="1"/>" width="13" height="13" border="0" /></a>
+ </div>
+ </div>
+
+ <div class="not-used"<inp2:m_if check="ord_Field" name="GiftCertificateId" db="db"> style="display: none;"</inp2:m_if>>
+ <p>If you have a gift certificate code please enter it and click Apply button.</p>
+ <div class="num-discount form">
+ <input class="field gift-certificate-code" name="giftcert_code" />
+ <input type="button" class="grey-button" id="apply-gift-certificate" value="Apply"/>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="buttons-right">
+ <dl class="total">
+ <div id="discount-row"<inp2:m_ifnot check="ord_HasDiscount"> style="display: none;"</inp2:m_ifnot>>
+ <dt class="discount">Discount:</dt>
+ <dd class="price2">- <inp2:ord_Field name="DiscountTotal" currency="selected" decimal_tag="span"/></dd>
+ </div>
+
+ <div>
+ <dt>Total</dt>
+ <dd class="price1" id="sub-total"><inp2:ord_Field field="SubTotal" currency="selected" decimal_tag="span"/></dd>
+ </div>
+ </dl>
+ <p>(before shipping & taxes)</p>
+ <a href="<inp2:m_Link template='checkout'/>" class="checkout-grey-button"><span>Checkout</span></a>
+ </div>
+ <div class="clear"></div>
+
+ <script type="text/javascript">
+ var $aShopCartManager = new ShopCartManager(
+ {
+ updateUrl: '<inp2:m_Link ord_event="OnUpdateCartJSON" currency="selected" pass="m,ord" js_escape="1" no_amp="1"/>',
+ constants: {
+ 'OrderCheckoutErrorType::PRODUCT': <inp2:m_GetConst name="OrderCheckoutErrorType::PRODUCT"/>,
+ 'OrderCheckoutError::FIELD_UPDATE_SUCCESS': <inp2:m_GetConst name="OrderCheckoutError::FIELD_UPDATE_SUCCESS"/>,
+ 'OrderCheckoutError::FIELD_UPDATE_ERROR': <inp2:m_GetConst name="OrderCheckoutError::FIELD_UPDATE_ERROR"/>,
+ 'OrderCheckoutError::QTY_UNAVAILABLE': <inp2:m_GetConst name="OrderCheckoutError::QTY_UNAVAILABLE"/>,
+ 'OrderCheckoutError::QTY_OUT_OF_STOCK': <inp2:m_GetConst name="OrderCheckoutError::QTY_OUT_OF_STOCK"/>,
+ 'OrderCheckoutError::QTY_CHANGED_TO_MINIMAL': <inp2:m_GetConst name="OrderCheckoutError::QTY_CHANGED_TO_MINIMAL"/>,
+
+ 'OrderCheckoutErrorType::COUPON': <inp2:m_GetConst name="OrderCheckoutErrorType::COUPON"/>,
+ 'OrderCheckoutError::COUPON_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_APPLIED"/>,
+ 'OrderCheckoutError::COUPON_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_REMOVED"/>,
+ 'OrderCheckoutError::COUPON_REMOVED_AUTOMATICALLY': <inp2:m_GetConst name="OrderCheckoutError::COUPON_REMOVED_AUTOMATICALLY"/>,
+ 'OrderCheckoutError::COUPON_CODE_INVALID': <inp2:m_GetConst name="OrderCheckoutError::COUPON_CODE_INVALID"/>,
+ 'OrderCheckoutError::COUPON_CODE_EXPIRED': <inp2:m_GetConst name="OrderCheckoutError::COUPON_CODE_EXPIRED"/>,
+
+
+ 'OrderCheckoutErrorType::GIFT_CERTIFICATE': <inp2:m_GetConst name="OrderCheckoutErrorType::GIFT_CERTIFICATE"/>,
+ 'OrderCheckoutError::GC_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::GC_APPLIED"/>,
+ 'OrderCheckoutError::GC_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::GC_REMOVED"/>,
+ 'OrderCheckoutError::GC_REMOVED_AUTOMATICALLY': <inp2:m_GetConst name="OrderCheckoutError::GC_REMOVED_AUTOMATICALLY"/>,
+ 'OrderCheckoutError::GC_CODE_INVALID': <inp2:m_GetConst name="OrderCheckoutError::GC_CODE_INVALID"/>,
+ 'OrderCheckoutError::GC_CODE_EXPIRED': <inp2:m_GetConst name="OrderCheckoutError::GC_CODE_EXPIRED"/>,
+
+ 'OrderCheckoutErrorType::DISCOUNT': <inp2:m_GetConst name="OrderCheckoutErrorType::DISCOUNT"/>,
+ 'OrderCheckoutError::DISCOUNT_APPLIED': <inp2:m_GetConst name="OrderCheckoutError::DISCOUNT_APPLIED"/>,
+ 'OrderCheckoutError::DISCOUNT_REMOVED': <inp2:m_GetConst name="OrderCheckoutError::DISCOUNT_REMOVED"/>,
+
+ 'PRODUCT_TYPE_TANGIBLE': <inp2:m_GetConst name="PRODUCT_TYPE_TANGIBLE"/>
+ },
+// debugMode: true,
+ currencyMask: '<inp2:ord_CurrencyMask currency="selected" js_escape="1"/>',
+ orderInfo: <inp2:ord_PrintOrderInfo currency="selected"/>
+ }
+ );
+ </script>
+ </inp2:m_DefineElement>
+
+ <inp2:m_DefineElement name="cart_empty_element">
+ <h1>Shopping Cart</h1>
+ <div class="clear"></div>
+
+ <strong><inp2:m_Phrase label="lu_comm_YourCartIsEmpty"/></strong>
+ </inp2:m_DefineElement>
+
+ <inp2:ord_PrintCart item_render_as="cart_item_element" header_render_as="cart_header_element" footer_render_as="cart_footer_element" empty_cart_render_as="cart_empty_element" per_page="-1"/>
+ </div>
+ </form>
+
+ <textarea id="product-row-mask" style="display: none;">
+ <tr class="shop-cart-row" row_index="{ROW_INDEX}" order_item_id="{field:OrderItemId}">
+ <td class="item-img">
+ <img src="{field:PrimaryImage}" alt=""/>
+ </td>
+ <td class="item-title">
+ <span class="product-with-link" style="display: none;">
+ <a href="#"></a>
+ </span>
+
+ <span class="product-without-link" style="display: none;"></span>
+
+ <span class="free-shipping">
+ &nbsp;<sup><inp2:m_phrase label="lu_cart_FreeShippingAvailable" /></sup>
+ </span>
+
+ <span class="back-order-mark error"><inp2:m_phrase label="lu_cart_BackorderFlag" /></span>
+
+ <span class="product-availability" style="display: none;"></span>
+
+ <div class="product-discount" style="display: none;">
+ <inp2:m_Phrase label="lu_comm_RegularPrice" />: <span class="item-price"></span><br />
+ <inp2:m_Phrase label="lu_comm_Discount" />: <span class="item-discount"></span>
+ </div>
+ </td>
+ <td>
+ <div class="item-quantity">
+ <input value="{field:Quantity}" style="width:20px" class="field product-qty" name="<inp2:orditems_InputName field='Quantity' force_id="{field:OrderItemId}"/>" id="<inp2:orditems_InputName field='Quantity' force_id="{field:OrderItemId}"/>" />
+ <span class="product-qty read-only">{field:Quantity}</span>
+ </div>
+ </td>
+
+ <td class="price-cell"></td>
+
+ <td class="item-total extended-price-cell"></td>
+
+ <td>
+ <a href="#" class="delete-cart-link"><img src="<inp2:m_TemplatesBase/>img/icon-delete.png" width="13" height="13" alt="Delete" /></a>
+ </td>
+ </tr>
+ </textarea>
+</inp2:m_DefineElement>
+<!--## /MAIN CONTENT ##-->
+
+<!--## DESIGN TEMPLATE ##-->
+<inp2:m_include template="designs/default_design.des" pass_params="1"/>
<!--## /DESIGN TEMPLATE ##-->
\ No newline at end of file
Property changes on: branches/1.0.x/cart.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/designs/form.tpl
===================================================================
--- branches/1.0.x/designs/form.tpl (revision 15168)
+++ branches/1.0.x/designs/form.tpl (revision 15169)
Property changes on: branches/1.0.x/designs/form.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/designs/section.tpl
===================================================================
--- branches/1.0.x/designs/section.tpl (revision 15168)
+++ branches/1.0.x/designs/section.tpl (revision 15169)
Property changes on: branches/1.0.x/designs/section.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/designs/.smsignore
===================================================================
--- branches/1.0.x/designs/.smsignore (revision 15168)
+++ branches/1.0.x/designs/.smsignore (revision 15169)
Property changes on: branches/1.0.x/designs/.smsignore
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/designs/default_design.des.tpl
===================================================================
--- branches/1.0.x/designs/default_design.des.tpl (revision 15168)
+++ branches/1.0.x/designs/default_design.des.tpl (revision 15169)
Property changes on: branches/1.0.x/designs/default_design.des.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/designs/general.tpl
===================================================================
--- branches/1.0.x/designs/general.tpl (revision 15168)
+++ branches/1.0.x/designs/general.tpl (revision 15169)
Property changes on: branches/1.0.x/designs/general.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/error_notfound.tpl
===================================================================
--- branches/1.0.x/error_notfound.tpl (revision 15168)
+++ branches/1.0.x/error_notfound.tpl (revision 15169)
@@ -1,23 +1,23 @@
-<!--##
-<NAME>Page Not Found</NAME>
-<DESC>404. Page not found on the server.</DESC>
-<SECTION>Pages</SECTION>
-##-->
-
-<!--## MAIN CONTENT ##-->
-<inp2:m_DefineElement name="content">
-
- <inp2:m_RenderElement design="content_box">
- <inp2:m_Capture to_var="header">
- <inp2:st_PageInfo type="title"/>
- </inp2:m_Capture>
-
- <inp2:st_Field name="Description"/>
- </inp2:m_RenderElement>
-
-</inp2:m_DefineElement>
-<!--## /MAIN CONTENT ##-->
-
-<!--## DESIGN TEMPLATE ##-->
-<inp2:m_include template="designs/default_design.des" pass_params="1"/>
+<!--##
+<NAME>Page Not Found</NAME>
+<DESC>404. Page not found on the server.</DESC>
+<SECTION>Pages</SECTION>
+##-->
+
+<!--## MAIN CONTENT ##-->
+<inp2:m_DefineElement name="content">
+
+ <inp2:m_RenderElement design="content_box">
+ <inp2:m_Capture to_var="header">
+ <inp2:st_PageInfo type="title"/>
+ </inp2:m_Capture>
+
+ <inp2:st_Field name="Description"/>
+ </inp2:m_RenderElement>
+
+</inp2:m_DefineElement>
+<!--## /MAIN CONTENT ##-->
+
+<!--## DESIGN TEMPLATE ##-->
+<inp2:m_include template="designs/default_design.des" pass_params="1"/>
<!--## /DESIGN TEMPLATE ##-->
\ No newline at end of file
Property changes on: branches/1.0.x/error_notfound.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/products/review.tpl
===================================================================
--- branches/1.0.x/products/review.tpl (revision 15168)
+++ branches/1.0.x/products/review.tpl (revision 15169)
Property changes on: branches/1.0.x/products/review.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/products/details.tpl
===================================================================
--- branches/1.0.x/products/details.tpl (revision 15168)
+++ branches/1.0.x/products/details.tpl (revision 15169)
Property changes on: branches/1.0.x/products/details.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/products/.smsignore
===================================================================
--- branches/1.0.x/products/.smsignore (revision 15168)
+++ branches/1.0.x/products/.smsignore (revision 15169)
Property changes on: branches/1.0.x/products/.smsignore
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/products/compare.tpl
===================================================================
--- branches/1.0.x/products/compare.tpl (revision 15168)
+++ branches/1.0.x/products/compare.tpl (revision 15169)
Property changes on: branches/1.0.x/products/compare.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/products/search_results.tpl
===================================================================
--- branches/1.0.x/products/search_results.tpl (revision 15168)
+++ branches/1.0.x/products/search_results.tpl (revision 15169)
Property changes on: branches/1.0.x/products/search_results.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/_install/theme.xml
===================================================================
--- branches/1.0.x/_install/theme.xml (revision 15168)
+++ branches/1.0.x/_install/theme.xml (revision 15169)
Property changes on: branches/1.0.x/_install/theme.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/_install/english.lang
===================================================================
--- branches/1.0.x/_install/english.lang (revision 15168)
+++ branches/1.0.x/_install/english.lang (revision 15169)
Property changes on: branches/1.0.x/_install/english.lang
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/_install/install_data.sql
===================================================================
--- branches/1.0.x/_install/install_data.sql (revision 15168)
+++ branches/1.0.x/_install/install_data.sql (revision 15169)
Property changes on: branches/1.0.x/_install/install_data.sql
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/cart.css
===================================================================
--- branches/1.0.x/inc/cart.css (revision 15168)
+++ branches/1.0.x/inc/cart.css (revision 15169)
@@ -1,458 +1,458 @@
-@charset "UTF-8";
-
-/* Cart Blocks
-*******************************************************************************/
-.steps {
- margin: 0 auto;
- width: 535px;
-}
-.steps li {
- background: url(@templates_base@/img/icon-step.png) no-repeat 100% 40%;
- color: #bdbdbd;
- float: left;
- font-size: 9pt;
- font-weight: bold;
- padding: 0 85px 0 38px;
- text-transform: uppercase;
-}
-.steps li:first-child {
- padding-left: 0;
-}
-.steps li:last-child {
- background: none;
- padding-right: 0;
-}
-.steps li i {
- display: block;
- height: 36px;
- margin: 0 auto 5px;
- width: 40px;
-}
-.steps li.step1 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 0; }
-.steps li.step2 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 -36px; }
-.steps li.step3 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 -72px; }
-.steps li a {
- color: #bdbdbd;
- text-decoration: none;
-}
-.steps li.step1.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px 0; }
-.steps li.step2.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px -36px; }
-.steps li.step3.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px -72px; }
-.steps li.active a { color: #878787; }
-
-
-.cart-detail {
- background-color: #fff;
- border: 1px solid #d0d0d0;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- margin-top: 10px;
- padding: 15px 30px 50px 30px;
- width: 100%;
-}
-.cart-detail h1 {
- color: #525252;
- font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
- padding: 0 0 20px 0;
-}
-.cart-detail .halfcol {
- border-right: 1px dotted #aeaeae;
- float: left;
- margin: 0 14px 0 0;
- padding: 0 14px 0 0;
- width: 465px;
-}
-.cart-detail .halfcol-last {
- border-right: none;
- margin: 0;
- padding: 0;
- position: relative;
-}
-.cart-detail .halfcol-last .badge-optional {
- background: url(@templates_base@/img/badge-optional.png) no-repeat 0 0;
- height: 40px;
- position: absolute;
- top: -44px; left: -20px;
- width: 102px;
-}
-.cart-detail .fieldset {
- background: url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
- color: #000;
- font-weight: bold;
- height: 26px;
- line-height: 26px;
- padding: 0 0 10px 50px;
- position: relative;
-}
-.cart-detail.receipt .fieldset { padding-left: 16px; }
-.cart-detail .fieldset .link {
- font-weight: normal;
- position: absolute;
- right: 15px;
-}
-
-fieldset { padding: 0 0 15px; }
-
-.firstline { min-height: 140px; padding: 20px 0 0; position: relative; }
-.firstline .login-alt {
- color: #66c133;
- font-size: 1.154em;
- font-weight: bold;
- padding: 5px 0 20px 50px;
-}
-.firstline .login-alt .plashka {
- right: 194px;
-}
-.firstline .login-alt .plashka-sel {
- margin: -6px 0 0 5px;
-}
-
-.checkout-form label {
- display: block;
- font-weight: bold;
- padding-bottom: 3px;
-}
-.checkout-form p {
- clear: both !important;
- float: left;
- padding: 5px 0 5px 50px;
-}
-.checkout-form p.alt1 {
- clear: none !important;
- padding: 5px 10px 5px 50px;
- width: 170px;
-}
-.checkout-form p.alt2 {
- clear: none !important;
- padding: 5px 0;
- width: 120px;
-}
-.checkout-form .field { width: 300px; }
-.checkout-form select.field { width: 311px; }
-.field.statusSuccess {
- background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
- border: 1px solid #80d04d;
-}
-.field.statusError {
- background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
- border: 1px solid #d80000;
-}
-
-.checkout-form p.alt1 .field,
-.checkout-form p.alt2 .field,
-.checkout-form p.pasfield1 .field,
-.checkout-form p.pasfield2 .field {
- width: 100%;
-}
-
-.checkout-form .creditcard .field { width: 250px; }
-.checkout-form .creditcard p.alt1.expdate .field { width: 78px; }
-.checkout-form .creditcard p.alt2 .field { width: 70px; }
-
-.creditcards { padding: 0 0 0 50px; }
-.creditcards span {
- display: inline-block;
- height: 45px;
-}
-.creditcards span.paypal {
- border-left: 1px solid #d3d3d3;
- margin-left: 10px;
- padding-left: 15px;
-}
-
-.password-block {
- border: 1px solid #e3e3e3;
- float: right;
- padding: 12px 20px;
- width: 390px;
-}
-.password-block p {
- clear: none !important;
- padding: 0 30px 0 0;
-}
-.password-block p.pasfield1 {
- width: 150px;
-}
-
-.colorbar {
- display: inline-block;
- height: 8px;
- width: 29px;
-}
-
-.password-strength { display: none; font-weight: bold; }
-.password-strength .meterDefault { color: #aaa; }
-.password-strength .meterFail { color: #daa; }
-.password-strength .meterWarn { color: #fd6; }
-.password-strength .meterGood { color: #ada; }
-.password-strength .meterExcel { color: #66c133; }
-.password-strength .colorbar.meterDefault { background-color: #ddd; }
-.password-strength .colorbar.meterFail { background-color: #fdd; }
-.password-strength .colorbar.meterWarn { background-color: #feb; }
-.password-strength .colorbar.meterGood { background-color: #dfd; }
-.password-strength .colorbar.meterExcel { background-color: #66c133; }
-
-.checkout-form .safe-shop {
- background: url(@templates_base@/img/safe-shop.jpg) no-repeat 0 40px;
- min-height: 335px;
- margin: 115px 0 0 50px;
-}
-.checkout-form .safe-shop .title {
- color: #389901;
- font: bold 1.462em Verdana,Arial,Tahoma,Sans-Serif;
- padding-left: 18px;
-}
-.checkout-form .safe-shop ul.list {
- float: left;
- padding: 10px 0 0 130px;
-}
-.checkout-form .safe-shop ul.list li {
- background: url(@templates_base@/img/icon-galka.png) no-repeat 0 50%;
- color: #313030;
- font-weight: bold;
- padding: 6px 0 6px 25px;
-}
-
-dl.total { padding: 20px 0 0; width: 240px; }
-dl.total dt,
-dl.total dd {
- float: left;
- font-weight: bold;
- padding: 0 0 10px;
- text-align: right;
- width: 120px;
-}
-dl.total dt.discount { color: #bf0000; }
-dl.total dd { font-size: 1.385em; }
-dl.total dd span { font-size: 15px; }
-dl.total dd.price1 { color: #333; font-size: 1.538em; }
-dl.total dd.price2 { color: #bf0000; }
-dl.total dd.price3 { font-weight: normal; }
-dl.total dd.price4 { color: #3f911f; font-size: 1.538em; }
-
-.product-discount .item-price span, .product-discount .item-discount span,
-.shop-cart-row .price-cell span, .shop-cart-row .extended-price-cell span {
- font-size: 12px;
-}
-
-.cart-detail .terms {
- text-align: right;
- width: 240px;
-}
-
-.place-button,
-.place-grey-button,
-.checkout-button,
-.checkout-grey-button {
- background: url(@templates_base@/img/order-left.jpg) no-repeat 0 0;
- color: #faffed;
- display: inline-block;
- font-size: 1.385em;
- font-weight: bold;
- text-shadow: #000 0px 1px 1px;
- text-decoration: none;
-}
-.place-grey-button,
-.checkout-grey-button {
- color: #000;
- text-shadow: none;
-}
-.place-button span,
-.place-grey-button span,
-.checkout-button span,
-.checkout-grey-button span {
- background: url(@templates_base@/img/order-right.jpg) no-repeat 100% 0;
- display: inline-block;
- height: 37px;
- line-height: 37px;
- padding: 0 50px 0 30px;
-}
-.place-button:hover,
-.place-grey-button:hover,
-.checkout-button:hover,
-.checkout-grey-button:hover { color: #faffed; }
-
-.checkout-button span {
- background: url(@templates_base@/img/checkout-right.jpg) no-repeat 100% 0;
- padding: 0 30px 0 20px;
-}
-.place-grey-button {
- background: url(@templates_base@/img/checkout-grey-left.jpg) no-repeat 0 0;
-}
-.place-grey-button span {
- background: url(@templates_base@/img/order-grey-right.jpg) no-repeat 100% 0;
-}
-.checkout-grey-button {
- background: url(@templates_base@/img/checkout-grey-left.jpg) no-repeat 0 0;
- margin-top: 20px;
-}
-.checkout-grey-button span {
- background: url(@templates_base@/img/checkout-grey-right.jpg) no-repeat 100% 0;
- padding: 0 30px 0 20px;
-}
-
-.continue-button {
- background: url(@templates_base@/img/bg-button-continue-right.jpg) no-repeat 100% 0;
- color: #3c3c3c;
- display: inline-block;
- font-weight: bold;
- margin-right: 20px;
- text-decoration: none;
-}
-.continue-button span {
- background: url(@templates_base@/img/bg-button-continue-left.jpg) no-repeat 0 0;
- display: inline-block;
- height: 26px;
- line-height: 26px;
- padding: 0 20px 0 25px;
-}
-.continue-button:hover {
- color: #3c3c3c;
-}
-
-.cart-detail.receipt .success-order {
- background: url(@templates_base@/img/success.png) no-repeat 30px 30px;
- border-bottom: 1px solid #d0d0d0;
- margin-bottom: 25px;
- padding: 0 0 25px 130px;
-}
-.cart-detail.receipt .success-order .links {
- float: right;
- padding: 0;
-}
-.cart-detail.receipt .success-order .links a.link-print {
- background: url(@templates_base@/img/icon-print.jpg) no-repeat 0 0;
- display: inline-block;
- font-weight: bold;
- height: 32px;
- line-height: 32px;
- padding: 0 20px 0 40px;
-}
-.cart-detail.receipt .success-order .links a.link-download {
- background: url(@templates_base@/img/icon-download.jpg) no-repeat 0 0;
- display: inline-block;
- font-weight: bold;
- height: 32px;
- line-height: 32px;
- padding: 0 0 0 40px;
-}
-.cart-detail.receipt .success-order .green {
- color: #009f00;
- font: 1.538em Tahoma,Verdana,Arial,Sans-Serif;
-}
-.cart-detail.receipt .success-order p {
- padding: 5px 0;
-}
-
-.cart-detail.receipt p { padding-left: 16px; }
-.cart-detail.receipt dl.info {
- padding-left: 16px;
-}
-.cart-detail.receipt dl.info dt {
- clear: both !important;
- float: left;
- font-weight: bold;
- padding: 5px 15px 5px 0;
- width: 90px;
-}
-.cart-detail.receipt dl.info dd {
- float: left;
- padding: 5px 15px 5px 0;
-}
-
-.cart-detail.receipt .items {
- border-bottom: 1px solid #d1d1d1;
- margin-top: 30px;
- width: 100%;
-}
-.cart-detail.shoppingcart .items {
- margin-top: 0;
-}
-.cart-detail.receipt .items thead {
- background: url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
- border: 1px solid #adadad;
-}
-.cart-detail.receipt .items th {
- color: #000;
- font-weight: bold;
- padding: 5px 10px;
-}
-.cart-detail.receipt .items td {
- border-top: 1px solid #d1d1d1;
- color: #000;
- padding: 10px;
- text-align: center;
- vertical-align: middle;
-}
-.cart-detail.receipt .items tr:first-child td {
- border-top: none;
-}
-.cart-detail.receipt .items td.options-td {
- background-color: #f7f7f7;
- border-top: none;
- color: #686767;
- text-align: left;
-}
-.cart-detail.receipt .items td.options-td .sel-options { float: left; padding: 0 20px 0 0; }
-.cart-detail.receipt .items .item-img { width: 70px; }
-.cart-detail.receipt .items .item-total { font-weight: bold; }
-.cart-detail.receipt .items .item-title {
- color: #333;
- font-weight: bold;
- text-align: left;
-}
-.cart-detail.receipt .items .item-quantity { position: relative; }
-.cart-detail.receipt .items .item-quantity .field { text-align: center; width: 30px; }
-.formStatus {
- position: absolute;
- top: 37px;
- left: 15px;
- display: block;
- z-index: 5000;
- cursor: pointer;
-}
-.formStatus .formContent {
- width: 100%;
- position:relative;
- z-index:5001;
- color: #fff;
- white-space: nowrap;
- font-family: Arial;
- font-size: 12px;
- box-shadow: 0 0 3px #444;
- -moz-box-shadow: 0 0 3px #444;
- -webkit-box-shadow: 0 0 3px #444;
- padding: 4px 10px 4px 10px;
- border-radius: 3px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-.formStatus .formArrow {
- height: 11px;
- margin: -34px 0 0 22px;
- position: relative;
- width: 21px;
- z-index: 5006;
-}
-.formStatus.formSuccess .formContent { background: #398d1d url(@templates_base@/img/validate/con-success.png) repeat-x 0 0; }
-.formStatus.formSuccess .formArrow { background: url(@templates_base@/img/validate/con-success-arrow.png) no-repeat 0 0; }
-.formStatus.formError .formContent { background: #990000 url(@templates_base@/img/validate/con-error.png) repeat-x 0 0; }
-.formStatus.formError .formArrow { background: url(@templates_base@/img/validate/con-error-arrow.png) no-repeat 0 0; }
-
-.cart-detail.receipt dl.total { float: right; padding-right: 30px; }
-
-.cart-detail.receipt .discount-block {
- float: left;
- padding: 20px 0 0;
- width: 300px;
-}
-.cart-detail.receipt .discount-block p { padding: 5px 0; }
-.cart-detail.receipt .discount-block .field { width: 170px; }
-.cart-detail.receipt .discount-block .num-discount { position: relative; }
-.cart-detail.receipt .discount-block .formStatus { left: -15px; }
-
-.cart-detail.shoppingcart h1 { float: left; }
-
-.cart-detail.shoppingcart .buttons-right { float: right; text-align: right; }
-.cart-detail.shoppingcart .buttons-right dl.total { float: none; padding-right: 0; }
+@charset "UTF-8";
+
+/* Cart Blocks
+*******************************************************************************/
+.steps {
+ margin: 0 auto;
+ width: 535px;
+}
+.steps li {
+ background: url(@templates_base@/img/icon-step.png) no-repeat 100% 40%;
+ color: #bdbdbd;
+ float: left;
+ font-size: 9pt;
+ font-weight: bold;
+ padding: 0 85px 0 38px;
+ text-transform: uppercase;
+}
+.steps li:first-child {
+ padding-left: 0;
+}
+.steps li:last-child {
+ background: none;
+ padding-right: 0;
+}
+.steps li i {
+ display: block;
+ height: 36px;
+ margin: 0 auto 5px;
+ width: 40px;
+}
+.steps li.step1 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 0; }
+.steps li.step2 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 -36px; }
+.steps li.step3 i { background: url(@templates_base@/img/cart-steps.png) no-repeat 0 -72px; }
+.steps li a {
+ color: #bdbdbd;
+ text-decoration: none;
+}
+.steps li.step1.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px 0; }
+.steps li.step2.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px -36px; }
+.steps li.step3.active i { background: url(@templates_base@/img/cart-steps.png) no-repeat -40px -72px; }
+.steps li.active a { color: #878787; }
+
+
+.cart-detail {
+ background-color: #fff;
+ border: 1px solid #d0d0d0;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ margin-top: 10px;
+ padding: 15px 30px 50px 30px;
+ width: 100%;
+}
+.cart-detail h1 {
+ color: #525252;
+ font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
+ padding: 0 0 20px 0;
+}
+.cart-detail .halfcol {
+ border-right: 1px dotted #aeaeae;
+ float: left;
+ margin: 0 14px 0 0;
+ padding: 0 14px 0 0;
+ width: 465px;
+}
+.cart-detail .halfcol-last {
+ border-right: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.cart-detail .halfcol-last .badge-optional {
+ background: url(@templates_base@/img/badge-optional.png) no-repeat 0 0;
+ height: 40px;
+ position: absolute;
+ top: -44px; left: -20px;
+ width: 102px;
+}
+.cart-detail .fieldset {
+ background: url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
+ color: #000;
+ font-weight: bold;
+ height: 26px;
+ line-height: 26px;
+ padding: 0 0 10px 50px;
+ position: relative;
+}
+.cart-detail.receipt .fieldset { padding-left: 16px; }
+.cart-detail .fieldset .link {
+ font-weight: normal;
+ position: absolute;
+ right: 15px;
+}
+
+fieldset { padding: 0 0 15px; }
+
+.firstline { min-height: 140px; padding: 20px 0 0; position: relative; }
+.firstline .login-alt {
+ color: #66c133;
+ font-size: 1.154em;
+ font-weight: bold;
+ padding: 5px 0 20px 50px;
+}
+.firstline .login-alt .plashka {
+ right: 194px;
+}
+.firstline .login-alt .plashka-sel {
+ margin: -6px 0 0 5px;
+}
+
+.checkout-form label {
+ display: block;
+ font-weight: bold;
+ padding-bottom: 3px;
+}
+.checkout-form p {
+ clear: both !important;
+ float: left;
+ padding: 5px 0 5px 50px;
+}
+.checkout-form p.alt1 {
+ clear: none !important;
+ padding: 5px 10px 5px 50px;
+ width: 170px;
+}
+.checkout-form p.alt2 {
+ clear: none !important;
+ padding: 5px 0;
+ width: 120px;
+}
+.checkout-form .field { width: 300px; }
+.checkout-form select.field { width: 311px; }
+.field.statusSuccess {
+ background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
+ border: 1px solid #80d04d;
+}
+.field.statusError {
+ background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
+ border: 1px solid #d80000;
+}
+
+.checkout-form p.alt1 .field,
+.checkout-form p.alt2 .field,
+.checkout-form p.pasfield1 .field,
+.checkout-form p.pasfield2 .field {
+ width: 100%;
+}
+
+.checkout-form .creditcard .field { width: 250px; }
+.checkout-form .creditcard p.alt1.expdate .field { width: 78px; }
+.checkout-form .creditcard p.alt2 .field { width: 70px; }
+
+.creditcards { padding: 0 0 0 50px; }
+.creditcards span {
+ display: inline-block;
+ height: 45px;
+}
+.creditcards span.paypal {
+ border-left: 1px solid #d3d3d3;
+ margin-left: 10px;
+ padding-left: 15px;
+}
+
+.password-block {
+ border: 1px solid #e3e3e3;
+ float: right;
+ padding: 12px 20px;
+ width: 390px;
+}
+.password-block p {
+ clear: none !important;
+ padding: 0 30px 0 0;
+}
+.password-block p.pasfield1 {
+ width: 150px;
+}
+
+.colorbar {
+ display: inline-block;
+ height: 8px;
+ width: 29px;
+}
+
+.password-strength { display: none; font-weight: bold; }
+.password-strength .meterDefault { color: #aaa; }
+.password-strength .meterFail { color: #daa; }
+.password-strength .meterWarn { color: #fd6; }
+.password-strength .meterGood { color: #ada; }
+.password-strength .meterExcel { color: #66c133; }
+.password-strength .colorbar.meterDefault { background-color: #ddd; }
+.password-strength .colorbar.meterFail { background-color: #fdd; }
+.password-strength .colorbar.meterWarn { background-color: #feb; }
+.password-strength .colorbar.meterGood { background-color: #dfd; }
+.password-strength .colorbar.meterExcel { background-color: #66c133; }
+
+.checkout-form .safe-shop {
+ background: url(@templates_base@/img/safe-shop.jpg) no-repeat 0 40px;
+ min-height: 335px;
+ margin: 115px 0 0 50px;
+}
+.checkout-form .safe-shop .title {
+ color: #389901;
+ font: bold 1.462em Verdana,Arial,Tahoma,Sans-Serif;
+ padding-left: 18px;
+}
+.checkout-form .safe-shop ul.list {
+ float: left;
+ padding: 10px 0 0 130px;
+}
+.checkout-form .safe-shop ul.list li {
+ background: url(@templates_base@/img/icon-galka.png) no-repeat 0 50%;
+ color: #313030;
+ font-weight: bold;
+ padding: 6px 0 6px 25px;
+}
+
+dl.total { padding: 20px 0 0; width: 240px; }
+dl.total dt,
+dl.total dd {
+ float: left;
+ font-weight: bold;
+ padding: 0 0 10px;
+ text-align: right;
+ width: 120px;
+}
+dl.total dt.discount { color: #bf0000; }
+dl.total dd { font-size: 1.385em; }
+dl.total dd span { font-size: 15px; }
+dl.total dd.price1 { color: #333; font-size: 1.538em; }
+dl.total dd.price2 { color: #bf0000; }
+dl.total dd.price3 { font-weight: normal; }
+dl.total dd.price4 { color: #3f911f; font-size: 1.538em; }
+
+.product-discount .item-price span, .product-discount .item-discount span,
+.shop-cart-row .price-cell span, .shop-cart-row .extended-price-cell span {
+ font-size: 12px;
+}
+
+.cart-detail .terms {
+ text-align: right;
+ width: 240px;
+}
+
+.place-button,
+.place-grey-button,
+.checkout-button,
+.checkout-grey-button {
+ background: url(@templates_base@/img/order-left.jpg) no-repeat 0 0;
+ color: #faffed;
+ display: inline-block;
+ font-size: 1.385em;
+ font-weight: bold;
+ text-shadow: #000 0px 1px 1px;
+ text-decoration: none;
+}
+.place-grey-button,
+.checkout-grey-button {
+ color: #000;
+ text-shadow: none;
+}
+.place-button span,
+.place-grey-button span,
+.checkout-button span,
+.checkout-grey-button span {
+ background: url(@templates_base@/img/order-right.jpg) no-repeat 100% 0;
+ display: inline-block;
+ height: 37px;
+ line-height: 37px;
+ padding: 0 50px 0 30px;
+}
+.place-button:hover,
+.place-grey-button:hover,
+.checkout-button:hover,
+.checkout-grey-button:hover { color: #faffed; }
+
+.checkout-button span {
+ background: url(@templates_base@/img/checkout-right.jpg) no-repeat 100% 0;
+ padding: 0 30px 0 20px;
+}
+.place-grey-button {
+ background: url(@templates_base@/img/checkout-grey-left.jpg) no-repeat 0 0;
+}
+.place-grey-button span {
+ background: url(@templates_base@/img/order-grey-right.jpg) no-repeat 100% 0;
+}
+.checkout-grey-button {
+ background: url(@templates_base@/img/checkout-grey-left.jpg) no-repeat 0 0;
+ margin-top: 20px;
+}
+.checkout-grey-button span {
+ background: url(@templates_base@/img/checkout-grey-right.jpg) no-repeat 100% 0;
+ padding: 0 30px 0 20px;
+}
+
+.continue-button {
+ background: url(@templates_base@/img/bg-button-continue-right.jpg) no-repeat 100% 0;
+ color: #3c3c3c;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 20px;
+ text-decoration: none;
+}
+.continue-button span {
+ background: url(@templates_base@/img/bg-button-continue-left.jpg) no-repeat 0 0;
+ display: inline-block;
+ height: 26px;
+ line-height: 26px;
+ padding: 0 20px 0 25px;
+}
+.continue-button:hover {
+ color: #3c3c3c;
+}
+
+.cart-detail.receipt .success-order {
+ background: url(@templates_base@/img/success.png) no-repeat 30px 30px;
+ border-bottom: 1px solid #d0d0d0;
+ margin-bottom: 25px;
+ padding: 0 0 25px 130px;
+}
+.cart-detail.receipt .success-order .links {
+ float: right;
+ padding: 0;
+}
+.cart-detail.receipt .success-order .links a.link-print {
+ background: url(@templates_base@/img/icon-print.jpg) no-repeat 0 0;
+ display: inline-block;
+ font-weight: bold;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 20px 0 40px;
+}
+.cart-detail.receipt .success-order .links a.link-download {
+ background: url(@templates_base@/img/icon-download.jpg) no-repeat 0 0;
+ display: inline-block;
+ font-weight: bold;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 0 0 40px;
+}
+.cart-detail.receipt .success-order .green {
+ color: #009f00;
+ font: 1.538em Tahoma,Verdana,Arial,Sans-Serif;
+}
+.cart-detail.receipt .success-order p {
+ padding: 5px 0;
+}
+
+.cart-detail.receipt p { padding-left: 16px; }
+.cart-detail.receipt dl.info {
+ padding-left: 16px;
+}
+.cart-detail.receipt dl.info dt {
+ clear: both !important;
+ float: left;
+ font-weight: bold;
+ padding: 5px 15px 5px 0;
+ width: 90px;
+}
+.cart-detail.receipt dl.info dd {
+ float: left;
+ padding: 5px 15px 5px 0;
+}
+
+.cart-detail.receipt .items {
+ border-bottom: 1px solid #d1d1d1;
+ margin-top: 30px;
+ width: 100%;
+}
+.cart-detail.shoppingcart .items {
+ margin-top: 0;
+}
+.cart-detail.receipt .items thead {
+ background: url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
+ border: 1px solid #adadad;
+}
+.cart-detail.receipt .items th {
+ color: #000;
+ font-weight: bold;
+ padding: 5px 10px;
+}
+.cart-detail.receipt .items td {
+ border-top: 1px solid #d1d1d1;
+ color: #000;
+ padding: 10px;
+ text-align: center;
+ vertical-align: middle;
+}
+.cart-detail.receipt .items tr:first-child td {
+ border-top: none;
+}
+.cart-detail.receipt .items td.options-td {
+ background-color: #f7f7f7;
+ border-top: none;
+ color: #686767;
+ text-align: left;
+}
+.cart-detail.receipt .items td.options-td .sel-options { float: left; padding: 0 20px 0 0; }
+.cart-detail.receipt .items .item-img { width: 70px; }
+.cart-detail.receipt .items .item-total { font-weight: bold; }
+.cart-detail.receipt .items .item-title {
+ color: #333;
+ font-weight: bold;
+ text-align: left;
+}
+.cart-detail.receipt .items .item-quantity { position: relative; }
+.cart-detail.receipt .items .item-quantity .field { text-align: center; width: 30px; }
+.formStatus {
+ position: absolute;
+ top: 37px;
+ left: 15px;
+ display: block;
+ z-index: 5000;
+ cursor: pointer;
+}
+.formStatus .formContent {
+ width: 100%;
+ position:relative;
+ z-index:5001;
+ color: #fff;
+ white-space: nowrap;
+ font-family: Arial;
+ font-size: 12px;
+ box-shadow: 0 0 3px #444;
+ -moz-box-shadow: 0 0 3px #444;
+ -webkit-box-shadow: 0 0 3px #444;
+ padding: 4px 10px 4px 10px;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+.formStatus .formArrow {
+ height: 11px;
+ margin: -34px 0 0 22px;
+ position: relative;
+ width: 21px;
+ z-index: 5006;
+}
+.formStatus.formSuccess .formContent { background: #398d1d url(@templates_base@/img/validate/con-success.png) repeat-x 0 0; }
+.formStatus.formSuccess .formArrow { background: url(@templates_base@/img/validate/con-success-arrow.png) no-repeat 0 0; }
+.formStatus.formError .formContent { background: #990000 url(@templates_base@/img/validate/con-error.png) repeat-x 0 0; }
+.formStatus.formError .formArrow { background: url(@templates_base@/img/validate/con-error-arrow.png) no-repeat 0 0; }
+
+.cart-detail.receipt dl.total { float: right; padding-right: 30px; }
+
+.cart-detail.receipt .discount-block {
+ float: left;
+ padding: 20px 0 0;
+ width: 300px;
+}
+.cart-detail.receipt .discount-block p { padding: 5px 0; }
+.cart-detail.receipt .discount-block .field { width: 170px; }
+.cart-detail.receipt .discount-block .num-discount { position: relative; }
+.cart-detail.receipt .discount-block .formStatus { left: -15px; }
+
+.cart-detail.shoppingcart h1 { float: left; }
+
+.cart-detail.shoppingcart .buttons-right { float: right; text-align: right; }
+.cart-detail.shoppingcart .buttons-right dl.total { float: none; padding-right: 0; }
Property changes on: branches/1.0.x/inc/cart.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/modal.css
===================================================================
--- branches/1.0.x/inc/modal.css (revision 15168)
+++ branches/1.0.x/inc/modal.css (revision 15169)
@@ -1,7 +1,7 @@
-@charset "UTF-8";
-
-.tbox {position:absolute; display:none; padding:14px 17px; z-index:900}
-.tinner {padding:15px; -moz-border-radius:3px; border-radius:3px; background:#fff url(@templates_base@/img/modal/preload.gif) no-repeat 50% 50%; border:1px solid #404040;}
-.tmask {position:absolute; display:none; top:0px; left:0px; height:100%; width:100%; background:#000; z-index:800}
-.tclose {position:absolute; top:45px; right:50px; width:100px; height:15px; cursor:pointer; background:url(@templates_base@/img/modal/close.png) no-repeat 100% 0; color: #5a5a5a; font: bold 11px Arial; text-align: right; padding-right: 20px;}
+@charset "UTF-8";
+
+.tbox {position:absolute; display:none; padding:14px 17px; z-index:900}
+.tinner {padding:15px; -moz-border-radius:3px; border-radius:3px; background:#fff url(@templates_base@/img/modal/preload.gif) no-repeat 50% 50%; border:1px solid #404040;}
+.tmask {position:absolute; display:none; top:0px; left:0px; height:100%; width:100%; background:#000; z-index:800}
+.tclose {position:absolute; top:45px; right:50px; width:100px; height:15px; cursor:pointer; background:url(@templates_base@/img/modal/close.png) no-repeat 100% 0; color: #5a5a5a; font: bold 11px Arial; text-align: right; padding-right: 20px;}
.tcontent {border: 9px solid #e6e6e6; padding: 40px 50px;}
\ No newline at end of file
Property changes on: branches/1.0.x/inc/modal.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/validationEngine.jquery.css
===================================================================
--- branches/1.0.x/inc/validationEngine.jquery.css (revision 15168)
+++ branches/1.0.x/inc/validationEngine.jquery.css (revision 15169)
@@ -1,145 +1,145 @@
-.inputContainer {
- position: relative;
- float: left;
-}
-
-.formError {
- position: absolute;
- top: 300px;
- left: 300px;
- display: block;
- z-index: 5000;
- cursor: pointer;
-}
-
-.ajaxSubmit {
- padding: 20px;
- background: #55ea55;
- border: 1px solid #999;
- display: none
-}
-
-.formError .formErrorContent {
- width: 100%;
- background: #990000 url(@templates_base@/img/validate/con-error.png) repeat-x 0 0;
- position:relative;
- z-index:5001;
- color: #fff;
- width: 200px;
- font-family: Arial;
- font-size: 12px;
- box-shadow: 0 0 3px #444;
- -moz-box-shadow: 0 0 3px #444;
- -webkit-box-shadow: 0 0 3px #444;
- padding: 4px 10px 4px 10px;
- border-radius: 3px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-
-.greenPopup .formErrorContent {
- background: #33be40;
-}
-
-.blackPopup .formErrorContent {
- background: #393939;
- color: #FFF;
-}
-
-.formError .formErrorArrow {
- background: url(@templates_base@/img/validate/con-arrow.png) no-repeat 0 0;
- height: 17px;
- margin: -21px 0 0 -8px;
- position: relative;
- width: 8px;
- z-index: 5006;
-}
-
-.formError .formErrorArrowBottom {
- box-shadow: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- margin: 0px 0 0 12px;
- top:2px;
-}
-
-.formError .formErrorArrow div {
- display: none;
-/* border-left: 2px solid #ddd;
- border-right: 2px solid #ddd;
- box-shadow: 0 2px 3px #444;
- -moz-box-shadow: 0 2px 3px #444;
- -webkit-box-shadow: 0 2px 3px #444;
- font-size: 0px;
- height: 1px;
- background: #ee0101;
- margin: 0 auto;
- line-height: 0;
- font-size: 0;
- display: block;*/
-}
-/*
-.formError .formErrorArrowBottom div {
- box-shadow: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
-}
-
-.greenPopup .formErrorArrow div {
- background: #33be40;
-}
-
-.blackPopup .formErrorArrow div {
- background: #393939;
- color: #FFF;
-}
-
-.formError .formErrorArrow .line10 {
- width: 15px;
- border: none;
-}
-
-.formError .formErrorArrow .line9 {
- width: 13px;
- border: none;
-}
-
-.formError .formErrorArrow .line8 {
- width: 11px;
-}
-
-.formError .formErrorArrow .line7 {
- width: 9px;
-}
-
-.formError .formErrorArrow .line6 {
- width: 7px;
-}
-
-.formError .formErrorArrow .line5 {
- width: 5px;
-}
-
-.formError .formErrorArrow .line4 {
- width: 3px;
-}
-
-.formError .formErrorArrow .line3 {
- width: 1px;
- border-left: 2px solid #ddd;
- border-right: 2px solid #ddd;
- border-bottom: 0 solid #ddd;
-}
-
-.formError .formErrorArrow .line2 {
- width: 3px;
- border: none;
- background: #ddd;
-}
-
-.formError .formErrorArrow .line1 {
- width: 1px;
- border: none;
- background: #ddd;
-}
+.inputContainer {
+ position: relative;
+ float: left;
+}
+
+.formError {
+ position: absolute;
+ top: 300px;
+ left: 300px;
+ display: block;
+ z-index: 5000;
+ cursor: pointer;
+}
+
+.ajaxSubmit {
+ padding: 20px;
+ background: #55ea55;
+ border: 1px solid #999;
+ display: none
+}
+
+.formError .formErrorContent {
+ width: 100%;
+ background: #990000 url(@templates_base@/img/validate/con-error.png) repeat-x 0 0;
+ position:relative;
+ z-index:5001;
+ color: #fff;
+ width: 200px;
+ font-family: Arial;
+ font-size: 12px;
+ box-shadow: 0 0 3px #444;
+ -moz-box-shadow: 0 0 3px #444;
+ -webkit-box-shadow: 0 0 3px #444;
+ padding: 4px 10px 4px 10px;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+.greenPopup .formErrorContent {
+ background: #33be40;
+}
+
+.blackPopup .formErrorContent {
+ background: #393939;
+ color: #FFF;
+}
+
+.formError .formErrorArrow {
+ background: url(@templates_base@/img/validate/con-arrow.png) no-repeat 0 0;
+ height: 17px;
+ margin: -21px 0 0 -8px;
+ position: relative;
+ width: 8px;
+ z-index: 5006;
+}
+
+.formError .formErrorArrowBottom {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ margin: 0px 0 0 12px;
+ top:2px;
+}
+
+.formError .formErrorArrow div {
+ display: none;
+/* border-left: 2px solid #ddd;
+ border-right: 2px solid #ddd;
+ box-shadow: 0 2px 3px #444;
+ -moz-box-shadow: 0 2px 3px #444;
+ -webkit-box-shadow: 0 2px 3px #444;
+ font-size: 0px;
+ height: 1px;
+ background: #ee0101;
+ margin: 0 auto;
+ line-height: 0;
+ font-size: 0;
+ display: block;*/
+}
+/*
+.formError .formErrorArrowBottom div {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+}
+
+.greenPopup .formErrorArrow div {
+ background: #33be40;
+}
+
+.blackPopup .formErrorArrow div {
+ background: #393939;
+ color: #FFF;
+}
+
+.formError .formErrorArrow .line10 {
+ width: 15px;
+ border: none;
+}
+
+.formError .formErrorArrow .line9 {
+ width: 13px;
+ border: none;
+}
+
+.formError .formErrorArrow .line8 {
+ width: 11px;
+}
+
+.formError .formErrorArrow .line7 {
+ width: 9px;
+}
+
+.formError .formErrorArrow .line6 {
+ width: 7px;
+}
+
+.formError .formErrorArrow .line5 {
+ width: 5px;
+}
+
+.formError .formErrorArrow .line4 {
+ width: 3px;
+}
+
+.formError .formErrorArrow .line3 {
+ width: 1px;
+ border-left: 2px solid #ddd;
+ border-right: 2px solid #ddd;
+ border-bottom: 0 solid #ddd;
+}
+
+.formError .formErrorArrow .line2 {
+ width: 3px;
+ border: none;
+ background: #ddd;
+}
+
+.formError .formErrorArrow .line1 {
+ width: 1px;
+ border: none;
+ background: #ddd;
+}
*/
\ No newline at end of file
Property changes on: branches/1.0.x/inc/validationEngine.jquery.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/profile.css
===================================================================
--- branches/1.0.x/inc/profile.css (revision 15168)
+++ branches/1.0.x/inc/profile.css (revision 15169)
@@ -1,133 +1,133 @@
-@charset "UTF-8";
-
-/* Profile Blocks
-*******************************************************************************/
-.profile {
- background-color: #fff;
- border: 1px solid #d0d0d0;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- padding: 20px 30px;
- width: auto;
-}
-.profile.registerpage {
- border: none;
- padding: 0 30px;
- width: 680px;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.profile-title {
- border-bottom: 1px solid #d0d0d0;
- margin-bottom: 15px;
- padding-bottom: 15px;
-}
-.profile, .review h1 {
- color: #525252;
- float: left;
- font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
-}
-.profile p.req {
- color: #3e85d2;
- float: right;
- font-size: 1em;
- font-weight: bold;
- padding-top: 10px;
-}
-.profile .halfcol {
- float: left;
- padding: 0 15px 0 0;
- width: 315px;
-}
-.profile .halfcol-last {
- padding: 0;
- position: relative;
-}
-
-.profile-form label {
- display: block;
- font-weight: bold;
- padding-bottom: 3px;
-}
-
-.profile-form.left label {
- display: inline;
- padding-bottom: 0px;
-
- float: left;
- padding-top: 3px;
- width: 90px;
-}
-
-.field-content label {
- display: inline;
- font-weight: normal;
- padding: 0;
-}
-
-.red {
- color: #cd0000;
- font-weight: normal;
- padding: 0 0 0 5px;
-}
-.profile-form p {
- clear: both !important;
- float: left;
- padding: 5px 0;
-}
-.profile-form .field { width: 270px; }
-.profile-form .alt2 .field { width: 150px; }
-.field.statusSuccess {
- background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
- border: 1px solid #80d04d !important;
-}
-.field.statusError, .error .field {
- background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
- border: 1px solid #d80000 !important;
-}
-
-.review .profile-form .field { float: left; width: 380px; }
-.review .profile-form p.buttons { padding: 0 0 0 90px; width: 380px; }
-.review .profile-form p.buttons em { float: right; text-align: right; width: 170px; }
-
-.terms {
- text-align: center;
- width: 100%;
-}
-
-.password-block {
- /*display: none;*/
- float: left;
- padding: 5px 0;
- position: relative;
- width: 100%;
-}
-.registerpage .password-block { display: block; }
-.password-block p {
- clear: none !important;
- padding: 0 15px 0 0;
-}
-.password-block p.pasfield2 { padding: 0; }
-.password-block .field { width: 121px; }
-#change-password { color: #267bd1; }
-
-
-.colorbar {
- display: inline-block;
- height: 8px;
- width: 29px;
-}
-
-.password-strength { display: none; font-weight: bold; }
-.password-strength .meterDefault { color: #aaa; }
-.password-strength .meterFail { color: #daa; }
-.password-strength .meterWarn { color: #fd6; }
-.password-strength .meterGood { color: #ada; }
-.password-strength .meterExcel { color: #66c133; }
-.password-strength .colorbar.meterDefault { background-color: #ddd; }
-.password-strength .colorbar.meterFail { background-color: #fdd; }
-.password-strength .colorbar.meterWarn { background-color: #feb; }
-.password-strength .colorbar.meterGood { background-color: #dfd; }
-.password-strength .colorbar.meterExcel { background-color: #66c133; }
+@charset "UTF-8";
+
+/* Profile Blocks
+*******************************************************************************/
+.profile {
+ background-color: #fff;
+ border: 1px solid #d0d0d0;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ padding: 20px 30px;
+ width: auto;
+}
+.profile.registerpage {
+ border: none;
+ padding: 0 30px;
+ width: 680px;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.profile-title {
+ border-bottom: 1px solid #d0d0d0;
+ margin-bottom: 15px;
+ padding-bottom: 15px;
+}
+.profile, .review h1 {
+ color: #525252;
+ float: left;
+ font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
+}
+.profile p.req {
+ color: #3e85d2;
+ float: right;
+ font-size: 1em;
+ font-weight: bold;
+ padding-top: 10px;
+}
+.profile .halfcol {
+ float: left;
+ padding: 0 15px 0 0;
+ width: 315px;
+}
+.profile .halfcol-last {
+ padding: 0;
+ position: relative;
+}
+
+.profile-form label {
+ display: block;
+ font-weight: bold;
+ padding-bottom: 3px;
+}
+
+.profile-form.left label {
+ display: inline;
+ padding-bottom: 0px;
+
+ float: left;
+ padding-top: 3px;
+ width: 90px;
+}
+
+.field-content label {
+ display: inline;
+ font-weight: normal;
+ padding: 0;
+}
+
+.red {
+ color: #cd0000;
+ font-weight: normal;
+ padding: 0 0 0 5px;
+}
+.profile-form p {
+ clear: both !important;
+ float: left;
+ padding: 5px 0;
+}
+.profile-form .field { width: 270px; }
+.profile-form .alt2 .field { width: 150px; }
+.field.statusSuccess {
+ background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
+ border: 1px solid #80d04d !important;
+}
+.field.statusError, .error .field {
+ background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
+ border: 1px solid #d80000 !important;
+}
+
+.review .profile-form .field { float: left; width: 380px; }
+.review .profile-form p.buttons { padding: 0 0 0 90px; width: 380px; }
+.review .profile-form p.buttons em { float: right; text-align: right; width: 170px; }
+
+.terms {
+ text-align: center;
+ width: 100%;
+}
+
+.password-block {
+ /*display: none;*/
+ float: left;
+ padding: 5px 0;
+ position: relative;
+ width: 100%;
+}
+.registerpage .password-block { display: block; }
+.password-block p {
+ clear: none !important;
+ padding: 0 15px 0 0;
+}
+.password-block p.pasfield2 { padding: 0; }
+.password-block .field { width: 121px; }
+#change-password { color: #267bd1; }
+
+
+.colorbar {
+ display: inline-block;
+ height: 8px;
+ width: 29px;
+}
+
+.password-strength { display: none; font-weight: bold; }
+.password-strength .meterDefault { color: #aaa; }
+.password-strength .meterFail { color: #daa; }
+.password-strength .meterWarn { color: #fd6; }
+.password-strength .meterGood { color: #ada; }
+.password-strength .meterExcel { color: #66c133; }
+.password-strength .colorbar.meterDefault { background-color: #ddd; }
+.password-strength .colorbar.meterFail { background-color: #fdd; }
+.password-strength .colorbar.meterWarn { background-color: #feb; }
+.password-strength .colorbar.meterGood { background-color: #dfd; }
+.password-strength .colorbar.meterExcel { background-color: #66c133; }
Property changes on: branches/1.0.x/inc/profile.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/flexslider.css
===================================================================
--- branches/1.0.x/inc/flexslider.css (revision 15168)
+++ branches/1.0.x/inc/flexslider.css (revision 15169)
Property changes on: branches/1.0.x/inc/flexslider.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/review.css
===================================================================
--- branches/1.0.x/inc/review.css (revision 15168)
+++ branches/1.0.x/inc/review.css (revision 15169)
@@ -1,59 +1,59 @@
-@charset "UTF-8";
-
-/* Review Blocks
-*******************************************************************************/
-.review {
- background-color: #fff;
- width: 500px;
-}
-.review h1 {
- color: #525252;
- font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
- padding: 0 0 20px;
-}
-
-.profile-form label {
- float: left;
- font-weight: bold;
- padding-top: 3px;
- width: 90px;
-}
-.red {
- color: #cd0000;
- font-weight: normal;
- padding: 0 0 0 5px;
-}
-.profile-form p {
- clear: both !important;
- float: left;
- padding: 5px 0;
-}
-.profile-form .field { float: left; width: 380px; }
-.profile-form textarea.field {
- height: 70px;
-}
-.profile-form p span { float: left; width: 380px; }
-.profile-form p.buttons { padding: 0 0 0 90px; width: 380px; }
-.profile-form p.buttons em { float: right; text-align: right; width: 170px; }
-.field.statusSuccess {
- background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
- border: 1px solid #80d04d;
-}
-.field.statusError {
- background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
- border: 1px solid #d80000;
-}
-
-.review .success {
- color: #0b9f00;
- font-size: 1.385em;
- padding: 80px 0 20px;
- text-align: center;
-}
-.review .warning {
- padding-bottom: 30px;
- text-align: center;
-}
-.review .button {
- text-align: center;
-}
+@charset "UTF-8";
+
+/* Review Blocks
+*******************************************************************************/
+.review {
+ background-color: #fff;
+ width: 500px;
+}
+.review h1 {
+ color: #525252;
+ font: 1.538em Verdana,Arial,Tahoma,Sans-Serif;
+ padding: 0 0 20px;
+}
+
+.profile-form label {
+ float: left;
+ font-weight: bold;
+ padding-top: 3px;
+ width: 90px;
+}
+.red {
+ color: #cd0000;
+ font-weight: normal;
+ padding: 0 0 0 5px;
+}
+.profile-form p {
+ clear: both !important;
+ float: left;
+ padding: 5px 0;
+}
+.profile-form .field { float: left; width: 380px; }
+.profile-form textarea.field {
+ height: 70px;
+}
+.profile-form p span { float: left; width: 380px; }
+.profile-form p.buttons { padding: 0 0 0 90px; width: 380px; }
+.profile-form p.buttons em { float: right; text-align: right; width: 170px; }
+.field.statusSuccess {
+ background: url(@templates_base@/img/bg-field-success.jpg) repeat-x 0 0;
+ border: 1px solid #80d04d;
+}
+.field.statusError {
+ background: url(@templates_base@/img/bg-field-error.jpg) repeat-x 0 0;
+ border: 1px solid #d80000;
+}
+
+.review .success {
+ color: #0b9f00;
+ font-size: 1.385em;
+ padding: 80px 0 20px;
+ text-align: center;
+}
+.review .warning {
+ padding-bottom: 30px;
+ text-align: center;
+}
+.review .button {
+ text-align: center;
+}
Property changes on: branches/1.0.x/inc/review.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/jquery.gzoom.css
===================================================================
--- branches/1.0.x/inc/jquery.gzoom.css (revision 15168)
+++ branches/1.0.x/inc/jquery.gzoom.css (revision 15169)
Property changes on: branches/1.0.x/inc/jquery.gzoom.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/category.css
===================================================================
--- branches/1.0.x/inc/category.css (revision 15168)
+++ branches/1.0.x/inc/category.css (revision 15169)
@@ -1,220 +1,220 @@
-@charset "UTF-8";
-
-/* Category Page
-*******************************************************************************/
-.goods {
- margin: 5px 0;
- padding: 20px 20px 10px 20px;
-}
-.goods .good-item {
- float: left;
- height: 200px;
- margin-bottom: 10px;
- width: 165px;
-}
-.goods .good-item.borbottom {
- border-bottom: 1px dotted #d0d0d0;
- padding-bottom: 10px;
-}
-.goods .good-item dl {
- border-right: 1px dotted #d0d0d0;
- padding: 5px;
-}
-.goods .good-item dl.no-border-right { border-right: none; }
-
-/*** Filter block ***/
-.filter-block { float: left; padding: 10px 0; width: 100%; }
-.filter-block div { float: left; }
-.filter-block .paginate {
- font-weight: bold;
- padding: 0 40px 0 0;
-}
-.filter-block .sortby { font-weight: bold; }
-.filter-block .sortby a { font-weight: normal; }
-.filter-block .display_switch { float: right; text-align: right; }
-.filter-block .display_switch a.switch_thumb {
- width: 48px;
- height: 21px;
- display: block;
- background: url(@templates_base@/img/display-view.png) no-repeat 0 0;
- outline: none;
- text-indent: -9999px;
-}
-.filter-block .display_switch a.swap { background-position: 0 100%; }
-.filter-block .sortby form { display: inline; }
-
-.items { padding: 20px; }
-.items.items-alt { padding: 0; }
-.items .item {
- border-top: 1px solid #d0d0d0;
- float: left;
- padding: 15px 10px;
- position: relative;
- width: auto;
-}
-.items .ribbon {
- background: url(@templates_base@/img/ribbon.png) no-repeat 0 0;
- height: 40px;
- position: absolute;
- top: -3px; right: -26px;
- width: 102px;
- z-index: 100;
-}
-.items .ribbon.sale { background-position: 0 0; }
-.items .ribbon.top { background-position: 0 -40px; }
-.items .ribbon.new { background-position: 0 -80px; }
-.items .item .img {
- float: left;
- padding-right: 15px;
- width: 70px;
-}
-.items .item .descr {
- float: left;
- padding-right: 15px;
- width: 360px;
-}
-.items .item .descr h3 {
- font-size: 1.077em;
- font-weight: bold;
- padding-bottom: 5px;
-}
-.items .item .descr .optional { padding: 5px 0; }
-.items .item .descr .optional .stars { padding: 0 20px 0 0; }
-.items .item .descr .optional .comp label em {
- font-style: normal;
- text-decoration: underline;
-}
-.items .item .descr .optional .comp label input {
- bottom: -2px;
- margin: 0 5px 0 0;
- position: relative;
-}
-.items .item .price-block {
- float: left;
- width: 185px;
-}
-.items .item .price-block s.under {
- display: block;
- font-size: 1.308em;
- font-weight: bold;
- padding-right: 10px;
-}
-.items .item .price-block s.under span { font-size: 0.706em; }
-.items .item .price-block .redprice { padding: 10px 0; }
-.items .item .price-block em.price {
- color: #C2120A;
- font-size: 1.846em;
- font-weight: bold;
- font-style: normal;
-}
-.items .item .price-block em.price span { font-size: 0.708em; }
-.items .item .price-block .addtocart {
- background: url(@templates_base@/img/addtocart-left.jpg) no-repeat 0 0;
- color: #faffed;
- display: inline-block;
- font-size: 1.077em;
- font-weight: bold;
- text-shadow: #000 0px 1px 1px;
- text-decoration: none;
-}
-.items .item .price-block .addtocart span {
- background: url(@templates_base@/img/addtocart-right.jpg) no-repeat 100% 0;
- display: inline-block;
- height: 33px;
- line-height: 33px;
- padding: 0 20px;
-}
-
-ul.display { border-bottom: 1px solid #d0d0d0; float: left; width: 100%; }
-ul.display li { float: left; width: 100%; }
-
-ul.thumb_view { border-bottom: none; }
-ul.thumb_view li {
- background-color: #fff;
- border: 1px solid #d0d0d0;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
- float: left;
- height: 180px;
- margin: 0 5px 5px 0;
- width: 348px;
-}
-ul.thumb_view li .item {
- border-top: none;
- padding: 15px;
- width: 319px;
-}
-ul.thumb_view li .item .img {
- position: absolute;
- top: 38px;
- width: 133px;
-}
-ul.thumb_view li .item .img img { height: 133px; width: 133px; }
-ul.thumb_view li .item .ribbon { right: -4px; }
-ul.thumb_view li .item .descr {
- position: absolute;
- width: auto;
-}
-ul.thumb_view li .item .descr .optional {
- left: 158px;
- position: absolute;
- top: 132px;
- width: 165px;
-}
-ul.thumb_view li .item .descr .optional .stars { padding: 0 10px 0 0; }
-ul.thumb_view li .item .descr p,
-ul.thumb_view li .item .descr .optional .reviews { display: none; }
-ul.thumb_view li .item .price-block {
- float: none;
- left: 170px;
- position: absolute;
- top: 50px;
-}
-
-/*** Pagination ***/
-.pagination { padding-top: 20px; text-align: center; }
-.pagination span,
-.pagination a {
- background: url(@templates_base@/img/paginate.png) no-repeat -28px 0;
- color: #fff;
- display: inline-block;
- font-size: 1.308em;
- font-weight: bold;
- height: 28px;
- line-height: 28px;
- text-align: center;
- text-decoration: none;
- width: 28px;
-}
-.pagination span.prev {
- background-position: 0 100%;
- margin-right: 20px;
-}
-.pagination a.prev {
- background-position: 0 0;
- margin-right: 20px;
-}
-.pagination span.next {
- background-position: -56px 100%;
- margin-left: 20px;
-}
-.pagination a.next {
- background-position: -56px 0;
- margin-left: 20px;
-}
-.pagination a.active {
- background-position: -28px 100%;
-}
-
-/*** Searchbox ***/
-/*
-.form { padding: 10px 0; }
-.form input[type="text"] {
- border: none;
- background: #fff url(@templates_base@/img/bg-searchfield.jpg) no-repeat 0 0;
- height: 23px;
- padding: 2px 5px 2px 35px;
- width: 162px;
-}
-*/
+@charset "UTF-8";
+
+/* Category Page
+*******************************************************************************/
+.goods {
+ margin: 5px 0;
+ padding: 20px 20px 10px 20px;
+}
+.goods .good-item {
+ float: left;
+ height: 200px;
+ margin-bottom: 10px;
+ width: 165px;
+}
+.goods .good-item.borbottom {
+ border-bottom: 1px dotted #d0d0d0;
+ padding-bottom: 10px;
+}
+.goods .good-item dl {
+ border-right: 1px dotted #d0d0d0;
+ padding: 5px;
+}
+.goods .good-item dl.no-border-right { border-right: none; }
+
+/*** Filter block ***/
+.filter-block { float: left; padding: 10px 0; width: 100%; }
+.filter-block div { float: left; }
+.filter-block .paginate {
+ font-weight: bold;
+ padding: 0 40px 0 0;
+}
+.filter-block .sortby { font-weight: bold; }
+.filter-block .sortby a { font-weight: normal; }
+.filter-block .display_switch { float: right; text-align: right; }
+.filter-block .display_switch a.switch_thumb {
+ width: 48px;
+ height: 21px;
+ display: block;
+ background: url(@templates_base@/img/display-view.png) no-repeat 0 0;
+ outline: none;
+ text-indent: -9999px;
+}
+.filter-block .display_switch a.swap { background-position: 0 100%; }
+.filter-block .sortby form { display: inline; }
+
+.items { padding: 20px; }
+.items.items-alt { padding: 0; }
+.items .item {
+ border-top: 1px solid #d0d0d0;
+ float: left;
+ padding: 15px 10px;
+ position: relative;
+ width: auto;
+}
+.items .ribbon {
+ background: url(@templates_base@/img/ribbon.png) no-repeat 0 0;
+ height: 40px;
+ position: absolute;
+ top: -3px; right: -26px;
+ width: 102px;
+ z-index: 100;
+}
+.items .ribbon.sale { background-position: 0 0; }
+.items .ribbon.top { background-position: 0 -40px; }
+.items .ribbon.new { background-position: 0 -80px; }
+.items .item .img {
+ float: left;
+ padding-right: 15px;
+ width: 70px;
+}
+.items .item .descr {
+ float: left;
+ padding-right: 15px;
+ width: 360px;
+}
+.items .item .descr h3 {
+ font-size: 1.077em;
+ font-weight: bold;
+ padding-bottom: 5px;
+}
+.items .item .descr .optional { padding: 5px 0; }
+.items .item .descr .optional .stars { padding: 0 20px 0 0; }
+.items .item .descr .optional .comp label em {
+ font-style: normal;
+ text-decoration: underline;
+}
+.items .item .descr .optional .comp label input {
+ bottom: -2px;
+ margin: 0 5px 0 0;
+ position: relative;
+}
+.items .item .price-block {
+ float: left;
+ width: 185px;
+}
+.items .item .price-block s.under {
+ display: block;
+ font-size: 1.308em;
+ font-weight: bold;
+ padding-right: 10px;
+}
+.items .item .price-block s.under span { font-size: 0.706em; }
+.items .item .price-block .redprice { padding: 10px 0; }
+.items .item .price-block em.price {
+ color: #C2120A;
+ font-size: 1.846em;
+ font-weight: bold;
+ font-style: normal;
+}
+.items .item .price-block em.price span { font-size: 0.708em; }
+.items .item .price-block .addtocart {
+ background: url(@templates_base@/img/addtocart-left.jpg) no-repeat 0 0;
+ color: #faffed;
+ display: inline-block;
+ font-size: 1.077em;
+ font-weight: bold;
+ text-shadow: #000 0px 1px 1px;
+ text-decoration: none;
+}
+.items .item .price-block .addtocart span {
+ background: url(@templates_base@/img/addtocart-right.jpg) no-repeat 100% 0;
+ display: inline-block;
+ height: 33px;
+ line-height: 33px;
+ padding: 0 20px;
+}
+
+ul.display { border-bottom: 1px solid #d0d0d0; float: left; width: 100%; }
+ul.display li { float: left; width: 100%; }
+
+ul.thumb_view { border-bottom: none; }
+ul.thumb_view li {
+ background-color: #fff;
+ border: 1px solid #d0d0d0;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ float: left;
+ height: 180px;
+ margin: 0 5px 5px 0;
+ width: 348px;
+}
+ul.thumb_view li .item {
+ border-top: none;
+ padding: 15px;
+ width: 319px;
+}
+ul.thumb_view li .item .img {
+ position: absolute;
+ top: 38px;
+ width: 133px;
+}
+ul.thumb_view li .item .img img { height: 133px; width: 133px; }
+ul.thumb_view li .item .ribbon { right: -4px; }
+ul.thumb_view li .item .descr {
+ position: absolute;
+ width: auto;
+}
+ul.thumb_view li .item .descr .optional {
+ left: 158px;
+ position: absolute;
+ top: 132px;
+ width: 165px;
+}
+ul.thumb_view li .item .descr .optional .stars { padding: 0 10px 0 0; }
+ul.thumb_view li .item .descr p,
+ul.thumb_view li .item .descr .optional .reviews { display: none; }
+ul.thumb_view li .item .price-block {
+ float: none;
+ left: 170px;
+ position: absolute;
+ top: 50px;
+}
+
+/*** Pagination ***/
+.pagination { padding-top: 20px; text-align: center; }
+.pagination span,
+.pagination a {
+ background: url(@templates_base@/img/paginate.png) no-repeat -28px 0;
+ color: #fff;
+ display: inline-block;
+ font-size: 1.308em;
+ font-weight: bold;
+ height: 28px;
+ line-height: 28px;
+ text-align: center;
+ text-decoration: none;
+ width: 28px;
+}
+.pagination span.prev {
+ background-position: 0 100%;
+ margin-right: 20px;
+}
+.pagination a.prev {
+ background-position: 0 0;
+ margin-right: 20px;
+}
+.pagination span.next {
+ background-position: -56px 100%;
+ margin-left: 20px;
+}
+.pagination a.next {
+ background-position: -56px 0;
+ margin-left: 20px;
+}
+.pagination a.active {
+ background-position: -28px 100%;
+}
+
+/*** Searchbox ***/
+/*
+.form { padding: 10px 0; }
+.form input[type="text"] {
+ border: none;
+ background: #fff url(@templates_base@/img/bg-searchfield.jpg) no-repeat 0 0;
+ height: 23px;
+ padding: 2px 5px 2px 35px;
+ width: 162px;
+}
+*/
Property changes on: branches/1.0.x/inc/category.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/qtip.css
===================================================================
--- branches/1.0.x/inc/qtip.css (revision 15168)
+++ branches/1.0.x/inc/qtip.css (revision 15169)
Property changes on: branches/1.0.x/inc/qtip.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/reset.css
===================================================================
--- branches/1.0.x/inc/reset.css (revision 15168)
+++ branches/1.0.x/inc/reset.css (revision 15169)
@@ -1,48 +1,48 @@
-/* http://meyerweb.com/eric/tools/css/reset/
- v2.0 | 20110126
- License: none (public domain)
-*/
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, sub, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- font: inherit;
- vertical-align: baseline;
-}
-/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
- display: block;
-}
-body {
- line-height: 1;
-}
-ol, ul {
- list-style: none;
-}
-blockquote, q {
- quotes: none;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
- content: '';
- content: none;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, sub, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
}
\ No newline at end of file
Property changes on: branches/1.0.x/inc/reset.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/styles.css
===================================================================
--- branches/1.0.x/inc/styles.css (revision 15168)
+++ branches/1.0.x/inc/styles.css (revision 15169)
Property changes on: branches/1.0.x/inc/styles.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/details.css
===================================================================
--- branches/1.0.x/inc/details.css (revision 15168)
+++ branches/1.0.x/inc/details.css (revision 15169)
@@ -1,355 +1,355 @@
-@charset "UTF-8";
-
-/* Category Page
-*******************************************************************************/
-.goods {
- margin: 5px 0;
- padding: 20px 20px 10px 20px;
-}
-
-.block h2 a.product-prev {
- background: url(@templates_base@/img/product-nav.png) no-repeat 0 0;
- height: 21px;
- position: absolute;
- right: 40px;
- top: 9px;
- width: 21px;
-}
-.block h2 a.product-next {
- background: url(@templates_base@/img/product-nav.png) no-repeat 100% 0;
- height: 21px;
- position: absolute;
- right: 15px;
- top: 9px;
- width: 21px;
-}
-.block h2 a.product-prev:hover { background-position: 0 -21px; }
-.block h2 a.product-next:hover { background-position: 100% -21px; }
-
-.block h2 a.product-prev.disabled { background-position: 0 -42px; }
-.block h2 a.product-next.disabled { background-position: 100% -42px; }
-
-.block h2 a.product-prev.disabled:hover,
-.block h2 a.product-next.disabled:hover { background: none; }
-
-.product-detail { position: relative; }
-.product-detail .ribbon {
- background: url(@templates_base@/img/ribbon-big.png) no-repeat 0 0;
- height: 53px;
- position: absolute;
- top: -3px; right: -7px;
- width: 136px;
- z-index: 100;
-}
-.product-detail .ribbon.sale { background-position: 0 0; }
-.product-detail .ribbon.top { background-position: 0 -53px; }
-.product-detail .ribbon.new { background-position: 0 -106px; }
-
-.product-detail h1 {
- color: #000;
- float: left;
- font: 1.846em Tahoma,Verdana,Arial,Sans-Serif;
- padding: 0 0 20px;
-}
-.product-detail .rating {
- float: left;
- padding: 6px 0 0 10px;
-}
-.product-detail .h1-reviews {
- float: left;
- padding: 8px 0 0 10px;
-}
-
-.product .info {
- float: left;
- padding: 0 20px 0 0;
- width: 260px;
-}
-.product .info .img {
- position: relative;
-}
-.product .viewlarger {
- position: absolute;
- text-align: center;
- top: 265px;
- width: 260px;
-}
-.product .viewlarger a {
- background: url(@templates_base@/img/icon-zoom-small.png) no-repeat 0 2px;
- padding: 0 0 0 20px;
-}
-.product .info .img .signsmall {
- color: #000;
- font-size: 0.846em;
- position: absolute;
- top: 320px;
- text-align: center;
- width: 260px;
-}
-.product .info .img .showmore {
- color: #686767;
- margin-top: 490px;
- position: absolute;
-}
-
-.product .info .doplinks {
- background: url(@templates_base@/img/bg-doplinks.jpg) no-repeat 0 0;
- float: left;
- height: 152px;
- margin-top: 220px;
- padding: 40px 0 0 25px;
- width: 225px;
-}
-.product .doplinks a.link-print {
- background: url(@templates_base@/img/icon-print.jpg) no-repeat 0 0;
- display: inline-block;
- height: 32px;
- line-height: 32px;
- padding: 0 20px 13px 40px;
-}
-.product .doplinks a.link-compare {
- background: url(@templates_base@/img/icon-compare.png) no-repeat 3px 5px;
- display: inline-block;
- height: 32px;
- line-height: 32px;
- padding: 0 20px 10px 40px;
-}
-.product .doplinks a.link-wishlist {
- background: url(@templates_base@/img/icon-wishlist.jpg) no-repeat 0 0;
- display: inline-block;
- height: 32px;
- line-height: 32px;
- padding: 0 20px 0 40px;
-}
-
-.product .description {
- float: left;
- width: 380px;
-}
-.product .description .text {
- padding: 15px 0;
-}
-
-.product .description .options-har {
- background-color: #f0f0f0;
- margin-bottom: 15px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.product .description .options-har .sel-options {
- color: #686767;
- float: left;
- padding: 8px 0 8px 20px;
-}
-.product .description .har { border-top: 1px solid #d0d0d0; float: left; margin-top: 10px; padding-top: 10px; text-align: left; width: 50%; }
-.product .description .har dt { float: left; font-weight: bold; padding: 0 10px 3px 0; width: 100px; }
-.product .description .har dd { float: left; padding: 0 0 3px 0; width: 80px; }
-.product .description .har_right dt { width: 50px; }
-
-.product .description .price-block {
- float: left;
- width: 150px;
-}
-.product .description .price-block s.under {
- display: block;
- font-size: 1.308em;
- font-weight: bold;
- padding-right: 10px;
-}
-.product .description .price-block s.under span { font-size: 0.706em; }
-.product .description .price-block .redprice { padding: 10px 0; }
-.product .description .price-block em.price {
- color: #C2120A;
- font-size: 1.846em;
- font-weight: bold;
- font-style: normal;
-}
-.product .description .price-block em.price span { font-size: 0.708em; }
-.product .description .order-block {
- float: right;
- width: 230px;
-}
-.product .description .order-block .qty {
- color: #686767;
- float: left;
- padding-top: 5px;
-}
-.product .description .order-block .qty .field {
- text-align: center;
- width: 25px;
-}
-.product .description .order-block .avail {
- color: #686767;
- float: right;
- font-weight: bold;
- padding-top: 10px;
-}
-.product .description .order-block .avail em {
- color: #00b309;
-}
-.product .description .order-block .but {
- float: right;
-}
-.product .description .order-block .addtocart {
- background: url(@templates_base@/img/addtocart-left.jpg) no-repeat 0 0;
- color: #faffed;
- display: inline-block;
- font-size: 1.077em;
- font-weight: bold;
- text-shadow: #000 0px 1px 1px;
- text-decoration: none;
-}
-.product .description .order-block .addtocart span {
- background: url(@templates_base@/img/addtocart-right.jpg) no-repeat 100% 0;
- display: inline-block;
- padding: 0 20px 0 10px;
-}
-.product .description .order-block .addtocart span i {
- background: url(@templates_base@/img/bg-button-cart-add.png) no-repeat 0 3px;
- line-height: 33px;
- padding: 7px 0 7px 30px;
-}
-
-.product .description .order-block .addedtocart {
- color: #3D901F;
- font-size: 1.154em;
-}
-
-/*** Tabs ***/
-.ui-tabs .ui-tabs-nav {
- padding: 0;
-}
-.ui-widget-header {
- background: none;
- border: none;
- color: #000;
-}
-.ui-tabs .ui-tabs-nav li {
- border: 1px solid #949494;
-}
-.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
- background: #fff url(@templates_base@/img/bg-tab.png) repeat-x 0 0;
- border-bottom: none;
- position: relative;
- z-index: 100;
- bottom: -1px;
-}
-
-.ui-tabs .ui-tabs-panel {
- border: 1px solid #949494;
- height: 350px;
- overflow-x: hidden;
-}
-.ui-tabs .ui-tabs-panel p { padding-bottom: 15px; }
-
-/*** Reviews ***/
-.reviews {
- border-bottom: 1px solid #d0d0d0;
- float: left;
- padding-top: 30px;
- width: 100%;
-}
-.reviews .info-review {
- float: left;
- padding: 0 0 20px;
- width: 350px;
-}
-.reviews .info-review .title {
- color: #2b2b2b;
- font-size: 1.385em;
- line-height: 1.2em;
-}
-.reviews .info-review .but-review {
- float: left;
- padding: 20px 0 0;
-}
-.reviews .info-review .addreview {
- background: url(@templates_base@/img/icon-addreview.jpg) no-repeat 0 0;
- display: block;
- height: 22px;
- line-height: 22px;
- padding: 0 0 0 30px;
-}
-.reviews .info-review .sortby {
- color: #585858;
- float: left;
- font-weight: bold;
- padding: 20px 0 0 20px;
-}
-.reviews .overall-review {
- float: right;
- width: 215px;
-}
-.reviews .overall-review p {
- color: #585858;
- float: left;
- font-weight: bold;
- padding: 0 10px 0 0;
-}
-.reviews .overall-review .overall-detail {
- float: left;
-}
-.reviews .overall-review .overall-detail i {
- float: left;
- width: 35px;
-}
-.reviews .overall-review .overall-detail span {
- float: left;
- width: 75px;
-}
-
-.reviews .row-review {
- border-top: 1px solid #d0d0d0;
- clear: both !important;
- float: left;
- padding: 15px 0;
-}
-.reviews .row-review .user { color: #2275cd; font-weight: bold; padding: 0 0 10px; }
-.reviews .row-review .text-review { color: #000; padding: 0 0 10px; }
-.reviews .row-review .optional-review { color: #000; font-size: 0.846em; }
-.reviews .row-review .optional-review p {
- float: left;
- padding: 0 20px 0 0;
-}
-.reviews .row-review .optional-review em { color: #8b8b8b; }
-.reviews .row-review .optional-review p.rat img { margin-bottom: -2px; }
-.reviews .row-review .optional-review p.date { float: right; padding: 0; text-align: right; }
-.reviews .row-review .optional-review a { color: #000; }
-.reviews .row-review .optional-review a.yes { color: #009000; font-weight: bold; }
-.reviews .row-review .optional-review a.no { color: #ae0000; font-weight: bold; }
-
-/*** Pagination ***/
-.pagination { padding: 20px 0 10px; text-align: center; }
-.pagination span,
-.pagination a {
- background: url(@templates_base@/img/paginate.png) no-repeat -28px 0;
- color: #fff;
- display: inline-block;
- font-size: 1.308em;
- font-weight: bold;
- height: 28px;
- line-height: 28px;
- text-align: center;
- text-decoration: none;
- width: 28px;
-}
-.pagination span.prev {
- background-position: 0 100%;
- margin-right: 20px;
-}
-.pagination a.prev {
- background-position: 0 0;
- margin-right: 20px;
-}
-.pagination span.next {
- background-position: -56px 100%;
- margin-left: 20px;
-}
-.pagination a.next {
- background-position: -56px 0;
- margin-left: 20px;
-}
-.pagination a.active {
- background-position: -28px 100%;
-}
+@charset "UTF-8";
+
+/* Category Page
+*******************************************************************************/
+.goods {
+ margin: 5px 0;
+ padding: 20px 20px 10px 20px;
+}
+
+.block h2 a.product-prev {
+ background: url(@templates_base@/img/product-nav.png) no-repeat 0 0;
+ height: 21px;
+ position: absolute;
+ right: 40px;
+ top: 9px;
+ width: 21px;
+}
+.block h2 a.product-next {
+ background: url(@templates_base@/img/product-nav.png) no-repeat 100% 0;
+ height: 21px;
+ position: absolute;
+ right: 15px;
+ top: 9px;
+ width: 21px;
+}
+.block h2 a.product-prev:hover { background-position: 0 -21px; }
+.block h2 a.product-next:hover { background-position: 100% -21px; }
+
+.block h2 a.product-prev.disabled { background-position: 0 -42px; }
+.block h2 a.product-next.disabled { background-position: 100% -42px; }
+
+.block h2 a.product-prev.disabled:hover,
+.block h2 a.product-next.disabled:hover { background: none; }
+
+.product-detail { position: relative; }
+.product-detail .ribbon {
+ background: url(@templates_base@/img/ribbon-big.png) no-repeat 0 0;
+ height: 53px;
+ position: absolute;
+ top: -3px; right: -7px;
+ width: 136px;
+ z-index: 100;
+}
+.product-detail .ribbon.sale { background-position: 0 0; }
+.product-detail .ribbon.top { background-position: 0 -53px; }
+.product-detail .ribbon.new { background-position: 0 -106px; }
+
+.product-detail h1 {
+ color: #000;
+ float: left;
+ font: 1.846em Tahoma,Verdana,Arial,Sans-Serif;
+ padding: 0 0 20px;
+}
+.product-detail .rating {
+ float: left;
+ padding: 6px 0 0 10px;
+}
+.product-detail .h1-reviews {
+ float: left;
+ padding: 8px 0 0 10px;
+}
+
+.product .info {
+ float: left;
+ padding: 0 20px 0 0;
+ width: 260px;
+}
+.product .info .img {
+ position: relative;
+}
+.product .viewlarger {
+ position: absolute;
+ text-align: center;
+ top: 265px;
+ width: 260px;
+}
+.product .viewlarger a {
+ background: url(@templates_base@/img/icon-zoom-small.png) no-repeat 0 2px;
+ padding: 0 0 0 20px;
+}
+.product .info .img .signsmall {
+ color: #000;
+ font-size: 0.846em;
+ position: absolute;
+ top: 320px;
+ text-align: center;
+ width: 260px;
+}
+.product .info .img .showmore {
+ color: #686767;
+ margin-top: 490px;
+ position: absolute;
+}
+
+.product .info .doplinks {
+ background: url(@templates_base@/img/bg-doplinks.jpg) no-repeat 0 0;
+ float: left;
+ height: 152px;
+ margin-top: 220px;
+ padding: 40px 0 0 25px;
+ width: 225px;
+}
+.product .doplinks a.link-print {
+ background: url(@templates_base@/img/icon-print.jpg) no-repeat 0 0;
+ display: inline-block;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 20px 13px 40px;
+}
+.product .doplinks a.link-compare {
+ background: url(@templates_base@/img/icon-compare.png) no-repeat 3px 5px;
+ display: inline-block;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 20px 10px 40px;
+}
+.product .doplinks a.link-wishlist {
+ background: url(@templates_base@/img/icon-wishlist.jpg) no-repeat 0 0;
+ display: inline-block;
+ height: 32px;
+ line-height: 32px;
+ padding: 0 20px 0 40px;
+}
+
+.product .description {
+ float: left;
+ width: 380px;
+}
+.product .description .text {
+ padding: 15px 0;
+}
+
+.product .description .options-har {
+ background-color: #f0f0f0;
+ margin-bottom: 15px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.product .description .options-har .sel-options {
+ color: #686767;
+ float: left;
+ padding: 8px 0 8px 20px;
+}
+.product .description .har { border-top: 1px solid #d0d0d0; float: left; margin-top: 10px; padding-top: 10px; text-align: left; width: 50%; }
+.product .description .har dt { float: left; font-weight: bold; padding: 0 10px 3px 0; width: 100px; }
+.product .description .har dd { float: left; padding: 0 0 3px 0; width: 80px; }
+.product .description .har_right dt { width: 50px; }
+
+.product .description .price-block {
+ float: left;
+ width: 150px;
+}
+.product .description .price-block s.under {
+ display: block;
+ font-size: 1.308em;
+ font-weight: bold;
+ padding-right: 10px;
+}
+.product .description .price-block s.under span { font-size: 0.706em; }
+.product .description .price-block .redprice { padding: 10px 0; }
+.product .description .price-block em.price {
+ color: #C2120A;
+ font-size: 1.846em;
+ font-weight: bold;
+ font-style: normal;
+}
+.product .description .price-block em.price span { font-size: 0.708em; }
+.product .description .order-block {
+ float: right;
+ width: 230px;
+}
+.product .description .order-block .qty {
+ color: #686767;
+ float: left;
+ padding-top: 5px;
+}
+.product .description .order-block .qty .field {
+ text-align: center;
+ width: 25px;
+}
+.product .description .order-block .avail {
+ color: #686767;
+ float: right;
+ font-weight: bold;
+ padding-top: 10px;
+}
+.product .description .order-block .avail em {
+ color: #00b309;
+}
+.product .description .order-block .but {
+ float: right;
+}
+.product .description .order-block .addtocart {
+ background: url(@templates_base@/img/addtocart-left.jpg) no-repeat 0 0;
+ color: #faffed;
+ display: inline-block;
+ font-size: 1.077em;
+ font-weight: bold;
+ text-shadow: #000 0px 1px 1px;
+ text-decoration: none;
+}
+.product .description .order-block .addtocart span {
+ background: url(@templates_base@/img/addtocart-right.jpg) no-repeat 100% 0;
+ display: inline-block;
+ padding: 0 20px 0 10px;
+}
+.product .description .order-block .addtocart span i {
+ background: url(@templates_base@/img/bg-button-cart-add.png) no-repeat 0 3px;
+ line-height: 33px;
+ padding: 7px 0 7px 30px;
+}
+
+.product .description .order-block .addedtocart {
+ color: #3D901F;
+ font-size: 1.154em;
+}
+
+/*** Tabs ***/
+.ui-tabs .ui-tabs-nav {
+ padding: 0;
+}
+.ui-widget-header {
+ background: none;
+ border: none;
+ color: #000;
+}
+.ui-tabs .ui-tabs-nav li {
+ border: 1px solid #949494;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
+ background: #fff url(@templates_base@/img/bg-tab.png) repeat-x 0 0;
+ border-bottom: none;
+ position: relative;
+ z-index: 100;
+ bottom: -1px;
+}
+
+.ui-tabs .ui-tabs-panel {
+ border: 1px solid #949494;
+ height: 350px;
+ overflow-x: hidden;
+}
+.ui-tabs .ui-tabs-panel p { padding-bottom: 15px; }
+
+/*** Reviews ***/
+.reviews {
+ border-bottom: 1px solid #d0d0d0;
+ float: left;
+ padding-top: 30px;
+ width: 100%;
+}
+.reviews .info-review {
+ float: left;
+ padding: 0 0 20px;
+ width: 350px;
+}
+.reviews .info-review .title {
+ color: #2b2b2b;
+ font-size: 1.385em;
+ line-height: 1.2em;
+}
+.reviews .info-review .but-review {
+ float: left;
+ padding: 20px 0 0;
+}
+.reviews .info-review .addreview {
+ background: url(@templates_base@/img/icon-addreview.jpg) no-repeat 0 0;
+ display: block;
+ height: 22px;
+ line-height: 22px;
+ padding: 0 0 0 30px;
+}
+.reviews .info-review .sortby {
+ color: #585858;
+ float: left;
+ font-weight: bold;
+ padding: 20px 0 0 20px;
+}
+.reviews .overall-review {
+ float: right;
+ width: 215px;
+}
+.reviews .overall-review p {
+ color: #585858;
+ float: left;
+ font-weight: bold;
+ padding: 0 10px 0 0;
+}
+.reviews .overall-review .overall-detail {
+ float: left;
+}
+.reviews .overall-review .overall-detail i {
+ float: left;
+ width: 35px;
+}
+.reviews .overall-review .overall-detail span {
+ float: left;
+ width: 75px;
+}
+
+.reviews .row-review {
+ border-top: 1px solid #d0d0d0;
+ clear: both !important;
+ float: left;
+ padding: 15px 0;
+}
+.reviews .row-review .user { color: #2275cd; font-weight: bold; padding: 0 0 10px; }
+.reviews .row-review .text-review { color: #000; padding: 0 0 10px; }
+.reviews .row-review .optional-review { color: #000; font-size: 0.846em; }
+.reviews .row-review .optional-review p {
+ float: left;
+ padding: 0 20px 0 0;
+}
+.reviews .row-review .optional-review em { color: #8b8b8b; }
+.reviews .row-review .optional-review p.rat img { margin-bottom: -2px; }
+.reviews .row-review .optional-review p.date { float: right; padding: 0; text-align: right; }
+.reviews .row-review .optional-review a { color: #000; }
+.reviews .row-review .optional-review a.yes { color: #009000; font-weight: bold; }
+.reviews .row-review .optional-review a.no { color: #ae0000; font-weight: bold; }
+
+/*** Pagination ***/
+.pagination { padding: 20px 0 10px; text-align: center; }
+.pagination span,
+.pagination a {
+ background: url(@templates_base@/img/paginate.png) no-repeat -28px 0;
+ color: #fff;
+ display: inline-block;
+ font-size: 1.308em;
+ font-weight: bold;
+ height: 28px;
+ line-height: 28px;
+ text-align: center;
+ text-decoration: none;
+ width: 28px;
+}
+.pagination span.prev {
+ background-position: 0 100%;
+ margin-right: 20px;
+}
+.pagination a.prev {
+ background-position: 0 0;
+ margin-right: 20px;
+}
+.pagination span.next {
+ background-position: -56px 100%;
+ margin-left: 20px;
+}
+.pagination a.next {
+ background-position: -56px 0;
+ margin-left: 20px;
+}
+.pagination a.active {
+ background-position: -28px 100%;
+}
Property changes on: branches/1.0.x/inc/details.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.pikachoose.full.js
===================================================================
--- branches/1.0.x/inc/js/jquery.pikachoose.full.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.pikachoose.full.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.pikachoose.full.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.scripts.js
===================================================================
--- branches/1.0.x/inc/js/jquery.scripts.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.scripts.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.scripts.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/list_manager.js
===================================================================
--- branches/1.0.x/inc/js/list_manager.js (revision 15168)
+++ branches/1.0.x/inc/js/list_manager.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/list_manager.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.gzoom.js
===================================================================
--- branches/1.0.x/inc/js/jquery.gzoom.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.gzoom.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.gzoom.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.qtip.min.js
===================================================================
--- branches/1.0.x/inc/js/jquery.qtip.min.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.qtip.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.qtip.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/validate/jquery.validationEngine-en.js
===================================================================
--- branches/1.0.x/inc/js/validate/jquery.validationEngine-en.js (revision 15168)
+++ branches/1.0.x/inc/js/validate/jquery.validationEngine-en.js (revision 15169)
@@ -1,167 +1,167 @@
-(function($){
- $.fn.validationEngineLanguage = function(){
- };
- $.validationEngineLanguage = {
- newLang: function(){
- $.validationEngineLanguage.allRules = {
- "required": { // Add your regex rules here, you can take telephone as an example
- "regex": "none",
- "alertText": "* This field is required",
- "alertTextCheckboxMultiple": "* Please select an option",
- "alertTextCheckboxe": "* This checkbox is required",
- "alertTextDateRange": "* Both date range fields are required"
- },
- "dateRange": {
- "regex": "none",
- "alertText": "* Invalid ",
- "alertText2": "Date Range"
- },
- "dateTimeRange": {
- "regex": "none",
- "alertText": "* Invalid ",
- "alertText2": "Date Time Range"
- },
- "minSize": {
- "regex": "none",
- "alertText": "* Minimum ",
- "alertText2": " characters allowed"
- },
- "maxSize": {
- "regex": "none",
- "alertText": "* Maximum ",
- "alertText2": " characters allowed"
- },
- "groupRequired": {
- "regex": "none",
- "alertText": "* You must fill one of the following fields"
- },
- "min": {
- "regex": "none",
- "alertText": "* Minimum value is "
- },
- "max": {
- "regex": "none",
- "alertText": "* Maximum value is "
- },
- "past": {
- "regex": "none",
- "alertText": "* Date prior to "
- },
- "future": {
- "regex": "none",
- "alertText": "* Date past "
- },
- "maxCheckbox": {
- "regex": "none",
- "alertText": "* Maximum ",
- "alertText2": " options allowed"
- },
- "minCheckbox": {
- "regex": "none",
- "alertText": "* Please select ",
- "alertText2": " options"
- },
- "equals": {
- "regex": "none",
- "alertText": "* Fields do not match"
- },
- "phone": {
- // credit: jquery.h5validate.js / orefalo
- "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,
- "alertText": "* Invalid phone number"
- },
- "email": {
- // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/
- "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
- "alertText": "* Invalid email address"
- },
- "integer": {
- "regex": /^[\-\+]?\d+$/,
- "alertText": "* Not a valid integer"
- },
- "number": {
- // Number, including positive, negative, and floating decimal. credit: orefalo
- "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/,
- "alertText": "* Invalid floating decimal number"
- },
- "date": {
- "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/,
- "alertText": "* Invalid date, must be in YYYY-MM-DD format"
- },
- "ipv4": {
- "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
- "alertText": "* Invalid IP address"
- },
- "url": {
- "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
- "alertText": "* Invalid URL"
- },
- "onlyNumberSp": {
- "regex": /^[0-9\ ]+$/,
- "alertText": "* Numbers only"
- },
- "onlyLetterSp": {
- "regex": /^[a-zA-Z\ \']+$/,
- "alertText": "* Letters only"
- },
- "onlyLetterNumber": {
- "regex": /^[0-9a-zA-Z]+$/,
- "alertText": "* No special characters allowed"
- },
- // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
- "ajaxUserCall": {
- "url": "ajaxValidateFieldUser",
- // you may want to pass extra data on the ajax call
- "extraData": "name=eric",
- "alertText": "* This user is already taken",
- "alertTextLoad": "* Validating, please wait"
- },
- "ajaxUserCallPhp": {
- "url": "phpajax/ajaxValidateFieldUser.php",
- // you may want to pass extra data on the ajax call
- "extraData": "name=eric",
- // if you provide an "alertTextOk", it will show as a green prompt when the field validates
- "alertTextOk": "* This username is available",
- "alertText": "* This user is already taken",
- "alertTextLoad": "* Validating, please wait"
- },
- "ajaxNameCall": {
- // remote json service location
- "url": "ajaxValidateFieldName",
- // error
- "alertText": "* This name is already taken",
- // if you provide an "alertTextOk", it will show as a green prompt when the field validates
- "alertTextOk": "* This name is available",
- // speaks by itself
- "alertTextLoad": "* Validating, please wait"
- },
- "ajaxNameCallPhp": {
- // remote json service location
- "url": "phpajax/ajaxValidateFieldName.php",
- // error
- "alertText": "* This name is already taken",
- // speaks by itself
- "alertTextLoad": "* Validating, please wait"
- },
- "validate2fields": {
- "alertText": "* Please input HELLO"
- },
- //tls warning:homegrown not fielded
- "dateFormat":{
- "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
- "alertText": "* Invalid Date"
- },
- //tls warning:homegrown not fielded
- "dateTimeFormat": {
- "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
- "alertText": "* Invalid Date or Date Format",
- "alertText2": "Expected Format: ",
- "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ",
- "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
- }
- };
-
- }
- };
- $.validationEngineLanguage.newLang();
+(function($){
+ $.fn.validationEngineLanguage = function(){
+ };
+ $.validationEngineLanguage = {
+ newLang: function(){
+ $.validationEngineLanguage.allRules = {
+ "required": { // Add your regex rules here, you can take telephone as an example
+ "regex": "none",
+ "alertText": "* This field is required",
+ "alertTextCheckboxMultiple": "* Please select an option",
+ "alertTextCheckboxe": "* This checkbox is required",
+ "alertTextDateRange": "* Both date range fields are required"
+ },
+ "dateRange": {
+ "regex": "none",
+ "alertText": "* Invalid ",
+ "alertText2": "Date Range"
+ },
+ "dateTimeRange": {
+ "regex": "none",
+ "alertText": "* Invalid ",
+ "alertText2": "Date Time Range"
+ },
+ "minSize": {
+ "regex": "none",
+ "alertText": "* Minimum ",
+ "alertText2": " characters allowed"
+ },
+ "maxSize": {
+ "regex": "none",
+ "alertText": "* Maximum ",
+ "alertText2": " characters allowed"
+ },
+ "groupRequired": {
+ "regex": "none",
+ "alertText": "* You must fill one of the following fields"
+ },
+ "min": {
+ "regex": "none",
+ "alertText": "* Minimum value is "
+ },
+ "max": {
+ "regex": "none",
+ "alertText": "* Maximum value is "
+ },
+ "past": {
+ "regex": "none",
+ "alertText": "* Date prior to "
+ },
+ "future": {
+ "regex": "none",
+ "alertText": "* Date past "
+ },
+ "maxCheckbox": {
+ "regex": "none",
+ "alertText": "* Maximum ",
+ "alertText2": " options allowed"
+ },
+ "minCheckbox": {
+ "regex": "none",
+ "alertText": "* Please select ",
+ "alertText2": " options"
+ },
+ "equals": {
+ "regex": "none",
+ "alertText": "* Fields do not match"
+ },
+ "phone": {
+ // credit: jquery.h5validate.js / orefalo
+ "regex": /^([\+][0-9]{1,3}[ \.\-])?([\(]{1}[0-9]{2,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,
+ "alertText": "* Invalid phone number"
+ },
+ "email": {
+ // Shamelessly lifted from Scott Gonzalez via the Bassistance Validation plugin http://projects.scottsplayground.com/email_address_validation/
+ "regex": /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
+ "alertText": "* Invalid email address"
+ },
+ "integer": {
+ "regex": /^[\-\+]?\d+$/,
+ "alertText": "* Not a valid integer"
+ },
+ "number": {
+ // Number, including positive, negative, and floating decimal. credit: orefalo
+ "regex": /^[\-\+]?(([0-9]+)([\.,]([0-9]+))?|([\.,]([0-9]+))?)$/,
+ "alertText": "* Invalid floating decimal number"
+ },
+ "date": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/,
+ "alertText": "* Invalid date, must be in YYYY-MM-DD format"
+ },
+ "ipv4": {
+ "regex": /^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/,
+ "alertText": "* Invalid IP address"
+ },
+ "url": {
+ "regex": /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
+ "alertText": "* Invalid URL"
+ },
+ "onlyNumberSp": {
+ "regex": /^[0-9\ ]+$/,
+ "alertText": "* Numbers only"
+ },
+ "onlyLetterSp": {
+ "regex": /^[a-zA-Z\ \']+$/,
+ "alertText": "* Letters only"
+ },
+ "onlyLetterNumber": {
+ "regex": /^[0-9a-zA-Z]+$/,
+ "alertText": "* No special characters allowed"
+ },
+ // --- CUSTOM RULES -- Those are specific to the demos, they can be removed or changed to your likings
+ "ajaxUserCall": {
+ "url": "ajaxValidateFieldUser",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ "alertText": "* This user is already taken",
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxUserCallPhp": {
+ "url": "phpajax/ajaxValidateFieldUser.php",
+ // you may want to pass extra data on the ajax call
+ "extraData": "name=eric",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* This username is available",
+ "alertText": "* This user is already taken",
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxNameCall": {
+ // remote json service location
+ "url": "ajaxValidateFieldName",
+ // error
+ "alertText": "* This name is already taken",
+ // if you provide an "alertTextOk", it will show as a green prompt when the field validates
+ "alertTextOk": "* This name is available",
+ // speaks by itself
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "ajaxNameCallPhp": {
+ // remote json service location
+ "url": "phpajax/ajaxValidateFieldName.php",
+ // error
+ "alertText": "* This name is already taken",
+ // speaks by itself
+ "alertTextLoad": "* Validating, please wait"
+ },
+ "validate2fields": {
+ "alertText": "* Please input HELLO"
+ },
+ //tls warning:homegrown not fielded
+ "dateFormat":{
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/,
+ "alertText": "* Invalid Date"
+ },
+ //tls warning:homegrown not fielded
+ "dateTimeFormat": {
+ "regex": /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/,
+ "alertText": "* Invalid Date or Date Format",
+ "alertText2": "Expected Format: ",
+ "alertText3": "mm/dd/yyyy hh:mm:ss AM|PM or ",
+ "alertText4": "yyyy-mm-dd hh:mm:ss AM|PM"
+ }
+ };
+
+ }
+ };
+ $.validationEngineLanguage.newLang();
})(jQuery);
\ No newline at end of file
Property changes on: branches/1.0.x/inc/js/validate/jquery.validationEngine-en.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/validate/jquery.validationEngine.js
===================================================================
--- branches/1.0.x/inc/js/validate/jquery.validationEngine.js (revision 15168)
+++ branches/1.0.x/inc/js/validate/jquery.validationEngine.js (revision 15169)
@@ -1,1429 +1,1429 @@
-/*
- * Inline Form Validation Engine 2.2, jQuery plugin
- *
- * Copyright(c) 2010, Cedric Dugas
- * http://www.position-absolute.com
- *
- * 2.0 Rewrite by Olivier Refalo
- * http://www.crionics.com
- *
- * Form validation engine allowing custom regex rules to be added.
- * Licensed under the MIT License
- */
-(function($) {
-
- var methods = {
-
- /**
- * Kind of the constructor, called before any action
- * @param {Map} user options
- */
- init: function(options) {
- var form = this;
- if (!form.data('jqv') || form.data('jqv') == null ) {
- methods._saveOptions(form, options);
-
- // bind all formError elements to close on click
- $(".formError").live("click", function() {
- $(this).fadeOut(150, function() {
-
- // remove prompt once invisible
- $(this).remove();
- });
- });
- }
- },
- /**
- * Attachs jQuery.validationEngine to form.submit and field.blur events
- * Takes an optional params: a list of options
- * ie. jQuery("#formID1").validationEngine('attach', {promptPosition : "centerRight"});
- */
- attach: function(userOptions) {
-
- var form = this;
- var options;
-
- if(userOptions)
- options = methods._saveOptions(form, userOptions);
- else
- options = form.data('jqv');
-
- var validateAttribute = (form.find("[data-validation-engine*=validate]")) ? "data-validation-engine" : "class";
-
- if (!options.binded) {
- if (options.bindMethod == "bind"){
-
- // bind fields
- form.find("[class*=validate]").not("[type=checkbox]").not("[type=radio]").not(".datepicker").bind(options.validationEventTrigger, methods._onFieldEvent);
- form.find("[class*=validate][type=checkbox],[class*=validate][type=radio]").bind("click", methods._onFieldEvent);
-
- form.find("[class*=validate][class*=datepicker]").bind(options.validationEventTrigger,{"delay": 300}, methods._onFieldEvent);
-
- // bind form.submit
- form.bind("submit", methods._onSubmitEvent);
- } else if (options.bindMethod == "live") {
- // bind fields with LIVE (for persistant state)
- form.find("[class*=validate]").not("[type=checkbox]").not(".datepicker").live(options.validationEventTrigger, methods._onFieldEvent);
- form.find("[class*=validate][type=checkbox]").live("click", methods._onFieldEvent);
-
- form.find("[class*=validate][class*=datepicker]").live(options.validationEventTrigger,{"delay": 300}, methods._onFieldEvent);
-
- // bind form.submit
- form.live("submit", methods._onSubmitEvent);
- }
-
- options.binded = true;
- }
- return this;
- },
- /**
- * Unregisters any bindings that may point to jQuery.validaitonEngine
- */
- detach: function() {
- var form = this;
- var options = form.data('jqv');
- if (options.binded) {
-
- // unbind fields
- form.find("[class*=validate]").not("[type=checkbox]").unbind(options.validationEventTrigger, methods._onFieldEvent);
- form.find("[class*=validate][type=checkbox],[class*=validate][type=radio]").unbind("click", methods._onFieldEvent);
-
- // unbind form.submit
- form.unbind("submit", methods.onAjaxFormComplete);
-
-
- // unbind live fields (kill)
- form.find("[class*=validate]").not("[type=checkbox]").die(options.validationEventTrigger, methods._onFieldEvent);
- form.find("[class*=validate][type=checkbox]").die("click", methods._onFieldEvent);
- // unbind form.submit
-
-
-
-
- form.die("submit", methods.onAjaxFormComplete);
-
- form.removeData('jqv');
- }
- },
- /**
- * Validates the form fields, shows prompts accordingly.
- * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
- *
- * @return true if the form validates, false if it fails
- */
- validate: function() {
- return methods._validateFields(this);
- },
- /**
- * Validates one field, shows prompt accordingly.
- * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
- *
- * @return true if the form validates, false if it fails
- */
- validateField: function(el) {
- var options = $(this).data('jqv');
- return methods._validateField($(el), options);
- },
- /**
- * Validates the form fields, shows prompts accordingly.
- * Note: this methods performs fields and form ajax validations(if setup)
- *
- * @return true if the form validates, false if it fails, undefined if ajax is used for form validation
- */
- validateform: function() {
- return methods._onSubmitEvent.call(this);
- },
- /**
- * Redraw prompts position, useful when you change the DOM state when validating
- */
- updatePromptsPosition: function() {
- var form = this.closest('form');
- var options = form.data('jqv');
- // No option, take default one
- form.find('[class*=validate]').not(':hidden').not(":disabled").each(function(){
- var field = $(this);
-
- var prompt = methods._getPrompt(field);
- var promptText = $(prompt).find(".formErrorContent").html();
-
- if(prompt) methods._updatePrompt(field, $(prompt), promptText, undefined, false, options);
- })
- },
- /**
- * Displays a prompt on a element.
- * Note that the element needs an id!
- *
- * @param {String} promptText html text to display type
- * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
- * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight
- */
- showPrompt: function(promptText, type, promptPosition, showArrow) {
-
- var form = this.closest('form');
- var options = form.data('jqv');
- // No option, take default one
- if(!options) options = methods._saveOptions(this, options);
- if(promptPosition)
- options.promptPosition=promptPosition;
- options.showArrow = showArrow==true;
-
- methods._showPrompt(this, promptText, type, false, options);
- },
- /**
- * Closes all error prompts on the page
- */
- hidePrompt: function() {
- var promptClass = "."+ methods._getClassName($(this).attr("id")) + "formError";
- $(promptClass).fadeTo("fast", 0.3, function() {
- $(this).remove();
- });
- },
- /**
- * Closes form error prompts, CAN be invidual
- */
- hide: function() {
- var closingtag;
- if($(this).is("form")){
- closingtag = "parentForm"+$(this).attr('id');
- }else{
- closingtag = $(this).attr('id') +"formError";
- }
- $('.'+closingtag).fadeTo("fast", 0.3, function() {
- $(this).remove();
- });
- },
- /**
- * Closes all error prompts on the page
- */
- hideAll: function() {
- $('.formError').fadeTo("fast", 0.3, function() {
- $(this).remove();
- });
- },
- /**
- * Typically called when user exists a field using tab or a mouse click, triggers a field
- * validation
- */
- _onFieldEvent: function(event) {
- var field = $(this);
- var form = field.closest('form');
- var options = form.data('jqv');
- // validate the current field
- window.setTimeout(function() {
- methods._validateField(field, options);
- }, (event.data) ? event.data.delay : 0);
-
- },
- /**
- * Called when the form is submited, shows prompts accordingly
- *
- * @param {jqObject}
- * form
- * @return false if form submission needs to be cancelled
- */
- _onSubmitEvent: function() {
- var form = $(this);
- var options = form.data('jqv');
-
- // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation)
- var r=methods._validateFields(form, true);
-
- if (r && options.ajaxFormValidation) {
- methods._validateFormWithAjax(form, options);
- return false;
- }
-
- if(options.onValidationComplete) {
- options.onValidationComplete(form, r);
- return false;
- }
- return r;
- },
-
- /**
- * Return true if the ajax field validations passed so far
- * @param {Object} options
- * @return true, is all ajax validation passed so far (remember ajax is async)
- */
- _checkAjaxStatus: function(options) {
- var status = true;
- $.each(options.ajaxValidCache, function(key, value) {
- if (!value) {
- status = false;
- // break the each
- return false;
- }
- });
- return status;
- },
- /**
- * Validates form fields, shows prompts accordingly
- *
- * @param {jqObject}
- * form
- * @param {skipAjaxFieldValidation}
- * boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked
- *
- * @return true if form is valid, false if not, undefined if ajax form validation is done
- */
- _validateFields: function(form, skipAjaxValidation) {
- var options = form.data('jqv');
-
- // this variable is set to true if an error is found
- var errorFound = false;
-
- // Trigger hook, start validation
- form.trigger("jqv.form.validating");
- // first, evaluate status of non ajax fields
- form.find('[class*=validate]').not(':hidden').not(":disabled").each( function() {
- var field = $(this);
- errorFound |= methods._validateField(field, options, skipAjaxValidation);
- });
- // second, check to see if all ajax calls completed ok
- // errorFound |= !methods._checkAjaxStatus(options);
-
- // thrird, check status and scroll the container accordingly
- form.trigger("jqv.form.result", [errorFound]);
-
- if (errorFound) {
-
- if (options.scroll) {
-
- // get the position of the first error, there should be at least one, no need to check this
- //var destination = form.find(".formError:not('.greenPopup'):first").offset().top;
-
- // look for the visually top prompt
- var destination = Number.MAX_VALUE;
- var fixleft = 0;
- var lst = $(".formError:not('.greenPopup')");
-
- for (var i = 0; i < lst.length; i++) {
- var d = $(lst[i]).offset().top;
- if (d < destination){
- destination = d;
- fixleft = $(lst[i]).offset().left;
- }
- }
-
- if (!options.isOverflown)
- $("html:not(:animated),body:not(:animated)").animate({
- scrollTop: destination,
- scrollLeft: fixleft
- }, 1100);
- else {
- var overflowDIV = $(options.overflownDIV);
- var scrollContainerScroll = overflowDIV.scrollTop();
- var scrollContainerPos = -parseInt(overflowDIV.offset().top);
-
- destination += scrollContainerScroll + scrollContainerPos - 5;
- var scrollContainer = $(options.overflownDIV + ":not(:animated)");
-
- scrollContainer.animate({
- scrollTop: destination
- }, 1100);
-
- $("html:not(:animated),body:not(:animated)").animate({
- scrollTop: overflowDIV.offset().top,
- scrollLeft: fixleft
- }, 1100);
- }
- }
- return false;
- }
- return true;
- },
- /**
- * This method is called to perform an ajax form validation.
- * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true
- *
- * @param {jqObject} form
- * @param {Map} options
- */
- _validateFormWithAjax: function(form, options) {
-
- var data = form.serialize();
- var url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr("action");
- $.ajax({
- type: "GET",
- url: url,
- cache: false,
- dataType: "json",
- data: data,
- form: form,
- methods: methods,
- options: options,
- beforeSend: function() {
- return options.onBeforeAjaxFormValidation(form, options);
- },
- error: function(data, transport) {
- methods._ajaxError(data, transport);
- },
- success: function(json) {
-
- if (json !== true) {
-
- // getting to this case doesn't necessary means that the form is invalid
- // the server may return green or closing prompt actions
- // this flag helps figuring it out
- var errorInForm=false;
- for (var i = 0; i < json.length; i++) {
- var value = json[i];
-
- var errorFieldId = value[0];
- var errorField = $($("#" + errorFieldId)[0]);
-
- // make sure we found the element
- if (errorField.length == 1) {
-
- // promptText or selector
- var msg = value[2];
- // if the field is valid
- if (value[1] == true) {
-
- if (msg == "" || !msg){
- // if for some reason, status==true and error="", just close the prompt
- methods._closePrompt(errorField);
- } else {
- // the field is valid, but we are displaying a green prompt
- if (options.allrules[msg]) {
- var txt = options.allrules[msg].alertTextOk;
- if (txt)
- msg = txt;
- }
- methods._showPrompt(errorField, msg, "pass", false, options, true);
- }
-
- } else {
- // the field is invalid, show the red error prompt
- errorInForm|=true;
- if (options.allrules[msg]) {
- var txt = options.allrules[msg].alertText;
- if (txt)
- msg = txt;
- }
- methods._showPrompt(errorField, msg, "", false, options, true);
- }
- }
- }
- options.onAjaxFormComplete(!errorInForm, form, json, options);
- } else
- options.onAjaxFormComplete(true, form, "", options);
- }
- });
-
- },
- /**
- * Validates field, shows prompts accordingly
- *
- * @param {jqObject}
- * field
- * @param {Array[String]}
- * field's validation rules
- * @param {Map}
- * user options
- * @return true if field is valid
- */
- _validateField: function(field, options, skipAjaxValidation) {
- if (!field.attr("id"))
- $.error("jQueryValidate: an ID attribute is required for this field: " + field.attr("name") + " class:" +
- field.attr("class"));
-
- var rulesParsing = field.attr('class');
- var getRules = /validate\[(.*)\]/.exec(rulesParsing);
- if (!getRules)
- return false;
- var str = getRules[1];
- var rules = str.split(/\[|,|\]/);
-
- // true if we ran the ajax validation, tells the logic to stop messing with prompts
- var isAjaxValidator = false;
- var fieldName = field.attr("name");
- var promptText = "";
- var required = false;
- options.isError = false;
- options.showArrow = true;
-
- for (var i = 0; i < rules.length; i++) {
-
- var errorMsg = undefined;
- switch (rules[i]) {
-
- case "required":
- required = true;
- errorMsg = methods._required(field, rules, i, options);
- break;
- case "custom":
- errorMsg = methods._customRegex(field, rules, i, options);
- break;
- case "groupRequired":
- // Check is its the first of group, if not, reload validation with first field
- // AND continue normal validation on present field
- var classGroup = "[class*=" +rules[i + 1] +"]";
- var firstOfGroup = field.closest("form").find(classGroup).eq(0);
- if(firstOfGroup[0] != field[0]){
- methods._validateField(firstOfGroup, options, skipAjaxValidation)
- options.showArrow = true;
- continue;
- };
- errorMsg = methods._groupRequired(field, rules, i, options);
- if(errorMsg) required = true;
- options.showArrow = false;
- break;
- case "ajax":
- // ajax has its own prompts handling technique
- if(!skipAjaxValidation){
- methods._ajax(field, rules, i, options);
- isAjaxValidator = true;
- }
- break;
- case "minSize":
- errorMsg = methods._minSize(field, rules, i, options);
- break;
- case "maxSize":
- errorMsg = methods._maxSize(field, rules, i, options);
- break;
- case "min":
- errorMsg = methods._min(field, rules, i, options);
- break;
- case "max":
- errorMsg = methods._max(field, rules, i, options);
- break;
- case "past":
- errorMsg = methods._past(field, rules, i, options);
- break;
- case "future":
- errorMsg = methods._future(field, rules, i, options);
- break;
- case "dateRange":
- var classGroup = "[class*=" + rules[i + 1] + "]";
- var firstOfGroup = field.closest("form").find(classGroup).eq(0);
- var secondOfGroup = field.closest("form").find(classGroup).eq(1);
- /*
- if (firstOfGroup[0] != field[0]) {
- methods._validateField(firstOfGroup, options, skipAjaxValidation)
- options.showArrow = true;
- continue;
- };
- */
- //if one entry out of the pair has value then proceed to run through validation
- if (firstOfGroup[0].value || secondOfGroup[0].value) {
- errorMsg = methods._dateRange(firstOfGroup, secondOfGroup, rules, i, options);
- }
- if (errorMsg) required = true;
- options.showArrow = false;
- break;
-
- case "dateTimeRange":
- var classGroup = "[class*=" + rules[i + 1] + "]";
- var firstOfGroup = field.closest("form").find(classGroup).eq(0);
- var secondOfGroup = field.closest("form").find(classGroup).eq(1);
- /*
- if (firstOfGroup[0] != field[0]) {
- methods._validateField(firstOfGroup, options, skipAjaxValidation)
- options.showArrow = true;
- continue;
- };
- */
- //if one entry out of the pair has value then proceed to run through validation
- if (firstOfGroup[0].value || secondOfGroup[0].value) {
- errorMsg = methods._dateTimeRange(firstOfGroup, secondOfGroup, rules, i, options);
- }
- if (errorMsg) required = true;
- options.showArrow = false;
- break;
- case "maxCheckbox":
- errorMsg = methods._maxCheckbox(field, rules, i, options);
- field = $($("input[name='" + fieldName + "']"));
- break;
- case "minCheckbox":
- errorMsg = methods._minCheckbox(field, rules, i, options);
- field = $($("input[name='" + fieldName + "']"));
- break;
- case "equals":
- errorMsg = methods._equals(field, rules, i, options);
- break;
- case "funcCall":
- errorMsg = methods._funcCall(field, rules, i, options);
- break;
-
- default:
- //$.error("jQueryValidator rule not found"+rules[i]);
- }
- if (errorMsg !== undefined) {
- promptText += errorMsg + "<br/>";
- options.isError = true;
-
- }
-
- }
- // If the rules required is not added, an empty field is not validated
- if(!required){
- if(field.val() == "") options.isError = false;
- }
-
- // Hack for radio/checkbox group button, the validation go into the
- // first radio/checkbox of the group
- var fieldType = field.attr("type");
-
- if ((fieldType == "radio" || fieldType == "checkbox") && $("input[name='" + fieldName + "']").size() > 1) {
- field = $($("input[name='" + fieldName + "'][type!=hidden]:first"));
- options.showArrow = false;
- }
- if (fieldType == "text" && $("input[name='" + fieldName + "']").size() > 1) {
- field = $($("input[name='" + fieldName + "'][type!=hidden]:first"));
- options.showArrow = false;
- }
-
- if (options.isError){
-
- methods._showPrompt(field, promptText, "", false, options);
- }else{
- if (!isAjaxValidator) methods._closePrompt(field);
- }
- field.trigger("jqv.field.result", [field, options.isError, promptText]);
- return options.isError;
- },
- /**
- * Required validation
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _required: function(field, rules, i, options) {
- switch (field.attr("type")) {
- case "text":
- case "password":
- case "textarea":
- case "file":
- default:
- if (!field.val())
- return options.allrules[rules[i]].alertText;
- break;
- case "radio":
- case "checkbox":
- var name = field.attr("name");
- if ($("input[name='" + name + "']:checked").size() == 0) {
- if ($("input[name='" + name + "']").size() == 1)
- return options.allrules[rules[i]].alertTextCheckboxe;
- else
- return options.allrules[rules[i]].alertTextCheckboxMultiple;
- }
- break;
- // required for <select>
- case "select-one":
- // added by paul@kinetek.net for select boxes, Thank you
- if (!field.val())
- return options.allrules[rules[i]].alertText;
- break;
- case "select-multiple":
- // added by paul@kinetek.net for select boxes, Thank you
- if (!field.find("option:selected").val())
- return options.allrules[rules[i]].alertText;
- break;
- }
- },
- /**
- * Validate that 1 from the group field is required
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _groupRequired: function(field, rules, i, options) {
- var classGroup = "[class*=" +rules[i + 1] +"]";
- var isValid = false;
- // Check all fields from the group
- field.closest("form").find(classGroup).each(function(){
- if(!methods._required($(this), rules, i, options)){
- isValid = true;
- return false;
- }
- })
-
- if(!isValid) return options.allrules[rules[i]].alertText;
- },
- /**
- * Validate Regex rules
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _customRegex: function(field, rules, i, options) {
- var customRule = rules[i + 1];
- var rule = options.allrules[customRule];
- if(!rule) {
- alert("jqv:custom rule not found "+customRule);
- return;
- }
-
- var ex=rule.regex;
- if(!ex) {
- alert("jqv:custom regex not found "+customRule);
- return;
- }
- var pattern = new RegExp(ex);
-
- if (!pattern.test(field.val()))
- return options.allrules[customRule].alertText;
- },
- /**
- * Validate custom function outside of the engine scope
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _funcCall: function(field, rules, i, options) {
- var functionName = rules[i + 1];
- var fn = window[functionName];
- if (typeof(fn) == 'function')
- return fn(field, rules, i, options);
-
- },
- /**
- * Field match
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _equals: function(field, rules, i, options) {
- var equalsField = rules[i + 1];
-
- if (field.val() != $("#" + equalsField).val())
- return options.allrules.equals.alertText;
- },
- /**
- * Check the maximum size (in characters)
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _maxSize: function(field, rules, i, options) {
- var max = rules[i + 1];
- var len = field.val().length;
-
- if (len > max) {
- var rule = options.allrules.maxSize;
- return rule.alertText + max + rule.alertText2;
- }
- },
- /**
- * Check the minimum size (in characters)
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _minSize: function(field, rules, i, options) {
- var min = rules[i + 1];
- var len = field.val().length;
-
- if (len < min) {
- var rule = options.allrules.minSize;
- return rule.alertText + min + rule.alertText2;
- }
- },
- /**
- * Check number minimum value
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _min: function(field, rules, i, options) {
- var min = parseFloat(rules[i + 1]);
- var len = parseFloat(field.val());
-
- if (len < min) {
- var rule = options.allrules.min;
- if (rule.alertText2) return rule.alertText + min + rule.alertText2;
- return rule.alertText + min;
- }
- },
- /**
- * Check number maximum value
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _max: function(field, rules, i, options) {
- var max = parseFloat(rules[i + 1]);
- var len = parseFloat(field.val());
-
- if (len >max ) {
- var rule = options.allrules.max;
- if (rule.alertText2) return rule.alertText + max + rule.alertText2;
- //orefalo: to review, also do the translations
- return rule.alertText + max;
- }
- },
- /**
- * Checks date is in the past
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _past: function(field, rules, i, options) {
-
- var p=rules[i + 1];
- var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
- var vdate = methods._parseDate(field.val());
-
- if (vdate < pdate ) {
- var rule = options.allrules.past;
- if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
- return rule.alertText + methods._dateToString(pdate);
- }
- },
- /**
- * Checks date is in the future
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _future: function(field, rules, i, options) {
-
- var p=rules[i + 1];
- var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
- var vdate = methods._parseDate(field.val());
-
- if (vdate > pdate ) {
- var rule = options.allrules.future;
- if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
- return rule.alertText + methods._dateToString(pdate);
- }
- },
- /**
- * Checks if valid date
- *
- * @param {string} date string
- * @return a bool based on determination of valid date
- */
- _isDate: function (value) {
- var dateRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/);
- if (dateRegEx.test(value)) {
- return true;
- }
- return false;
- },
- /**
- * Checks if valid date time
- *
- * @param {string} date string
- * @return a bool based on determination of valid date time
- */
- _isDateTime: function (value){
- var dateTimeRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/);
- if (dateTimeRegEx.test(value)) {
- return true;
- }
- return false;
- },
- //Checks if the start date is before the end date
- //returns true if end is later than start
- _dateCompare: function (start, end) {
- return (new Date(start.toString()) < new Date(end.toString()));
- },
- /**
- * Checks date range
- *
- * @param {jqObject} first field name
- * @param {jqObject} second field name
- * @return an error string if validation failed
- */
- _dateRange: function (first, second, rules, i, options) {
- //are not both populated
- if ((!first[0].value && second[0].value) || (first[0].value && !second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
-
- //are not both dates
- if (!methods._isDate(first[0].value) || !methods._isDate(second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
-
- //are both dates but range is off
- if (!methods._dateCompare(first[0].value, second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
- },
-
-
- /**
- * Checks date time range
- *
- * @param {jqObject} first field name
- * @param {jqObject} second field name
- * @return an error string if validation failed
- */
- _dateTimeRange: function (first, second, rules, i, options) {
- //are not both populated
- if ((!first[0].value && second[0].value) || (first[0].value && !second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
- //are not both dates
- if (!methods._isDateTime(first[0].value) || !methods._isDateTime(second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
- //are both dates but range is off
- if (!methods._dateCompare(first[0].value, second[0].value)) {
- return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
- }
- },
- /**
- * Max number of checkbox selected
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _maxCheckbox: function(field, rules, i, options) {
-
- var nbCheck = rules[i + 1];
- var groupname = field.attr("name");
- var groupSize = $("input[name='" + groupname + "']:checked").size();
- if (groupSize > nbCheck) {
- options.showArrow = false;
- if (options.allrules.maxCheckbox.alertText2) return options.allrules.maxCheckbox.alertText + " " + nbCheck + " " + options.allrules.maxCheckbox.alertText2;
- return options.allrules.maxCheckbox.alertText;
- }
- },
- /**
- * Min number of checkbox selected
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return an error string if validation failed
- */
- _minCheckbox: function(field, rules, i, options) {
-
- var nbCheck = rules[i + 1];
- var groupname = field.attr("name");
- var groupSize = $("input[name='" + groupname + "']:checked").size();
- if (groupSize < nbCheck) {
- options.showArrow = false;
- return options.allrules.minCheckbox.alertText + " " + nbCheck + " " +
- options.allrules.minCheckbox.alertText2;
- }
- },
- /**
- * Ajax field validation
- *
- * @param {jqObject} field
- * @param {Array[String]} rules
- * @param {int} i rules index
- * @param {Map}
- * user options
- * @return nothing! the ajax validator handles the prompts itself
- */
- _ajax: function(field, rules, i, options) {
-
-
- var errorSelector = rules[i + 1];
- var rule = options.allrules[errorSelector];
- var extraData = rule.extraData;
- var extraDataDynamic = rule.extraDataDynamic;
-
- if (!extraData)
- extraData = "";
-
- if (extraDataDynamic) {
- var tmpData = [];
- var domIds = String(extraDataDynamic).split(",");
- for (var i = 0; i < domIds.length; i++) {
- var id = domIds[i];
- if ($(id).length) {
- var inputValue = field.closest("form").find(id).val();
- var keyValue = id.replace('#', '') + '=' + escape(inputValue);
- tmpData.push(keyValue);
- }
- }
- extraDataDynamic = tmpData.join("&");
- } else {
- extraDataDynamic = "";
- }
-
- if (!options.isError) {
- $.ajax({
- type: "GET",
- url: rule.url,
- cache: false,
- dataType: "json",
- data: "fieldId=" + field.attr("id") + "&fieldValue=" + field.val() + "&extraData=" + extraData + "&" + extraDataDynamic,
- field: field,
- rule: rule,
- methods: methods,
- options: options,
- beforeSend: function() {
- // build the loading prompt
- var loadingText = rule.alertTextLoad;
- if (loadingText)
- methods._showPrompt(field, loadingText, "load", true, options);
- },
- error: function(data, transport) {
- methods._ajaxError(data, transport);
- },
- success: function(json) {
-
- // asynchronously called on success, data is the json answer from the server
- var errorFieldId = json[0];
- var errorField = $($("#" + errorFieldId)[0]);
- // make sure we found the element
- if (errorField.length == 1) {
- var status = json[1];
- // read the optional msg from the server
- var msg = json[2];
- if (!status) {
- // Houston we got a problem - display an red prompt
- options.ajaxValidCache[errorFieldId] = false;
- options.isError = true;
-
- // resolve the msg prompt
- if(msg) {
- if (options.allrules[msg]) {
- var txt = options.allrules[msg].alertText;
- if (txt)
- msg = txt;
- }
- }
- else
- msg = rule.alertText;
-
- methods._showPrompt(errorField, msg, "", true, options);
- } else {
- if (options.ajaxValidCache[errorFieldId] !== undefined)
- options.ajaxValidCache[errorFieldId] = true;
-
- // resolves the msg prompt
- if(msg) {
- if (options.allrules[msg]) {
- var txt = options.allrules[msg].alertTextOk;
- if (txt)
- msg = txt;
- }
- }
- else
- msg = rule.alertTextOk;
-
- // see if we should display a green prompt
- if (msg)
- methods._showPrompt(errorField, msg, "pass", true, options);
- else
- methods._closePrompt(errorField);
- }
- }
- }
- });
- }
- },
- /**
- * Common method to handle ajax errors
- *
- * @param {Object} data
- * @param {Object} transport
- */
- _ajaxError: function(data, transport) {
- if(data.status == 0 && transport == null)
- alert("The page is not served from a server! ajax call failed");
- else if(typeof console != "undefined")
- console.log("Ajax error: " + data.status + " " + transport);
- },
- /**
- * date -> string
- *
- * @param {Object} date
- */
- _dateToString: function(date) {
-
- return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
- },
- /**
- * Parses an ISO date
- * @param {String} d
- */
- _parseDate: function(d) {
-
- var dateParts = d.split("-");
- if(dateParts==d)
- dateParts = d.split("/");
- return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
- },
- /**
- * Builds or updates a prompt with the given information
- *
- * @param {jqObject} field
- * @param {String} promptText html text to display type
- * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
- * @param {boolean} ajaxed - use to mark fields than being validated with ajax
- * @param {Map} options user options
- */
- _showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {
- var prompt = methods._getPrompt(field);
- // The ajax submit errors are not see has an error in the form,
- // When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time
- // Because no error was found befor submitting
- if(ajaxform) prompt = false;
- if (prompt)
- methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);
- else
- methods._buildPrompt(field, promptText, type, ajaxed, options);
- },
- /**
- * Builds and shades a prompt for the given field.
- *
- * @param {jqObject} field
- * @param {String} promptText html text to display type
- * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
- * @param {boolean} ajaxed - use to mark fields than being validated with ajax
- * @param {Map} options user options
- */
- _buildPrompt: function(field, promptText, type, ajaxed, options) {
-
- // create the prompt
- var prompt = $('<div>');
- prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
- // add a class name to identify the parent form of the prompt
- if(field.is(":input")) prompt.addClass("parentForm"+methods._getClassName(field.parents('form').attr("id")));
- prompt.addClass("formError");
-
- switch (type) {
- case "pass":
- prompt.addClass("greenPopup");
- break;
- case "load":
- prompt.addClass("blackPopup");
- }
- if (ajaxed)
- prompt.addClass("ajaxed");
-
- // create the prompt content
- var promptContent = $('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);
- // create the css arrow pointing at the field
- // note that there is no triangle on max-checkbox and radio
- if (options.showArrow) {
- var arrow = $('<div>').addClass("formErrorArrow");
-
- switch (options.promptPosition) {
- case "bottomLeft":
- case "bottomRight":
- prompt.find(".formErrorContent").before(arrow);
- arrow.addClass("formErrorArrowBottom").html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
- break;
- case "topLeft":
- case "topRight":
- arrow.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
- prompt.append(arrow);
- break;
- }
- }
-
- //Cedric: Needed if a container is in position:relative
- // insert prompt in the form or in the overflown container?
- if (options.isOverflown)
- field.before(prompt);
- else
- $("body").append(prompt);
-
- var pos = methods._calculatePosition(field, prompt, options);
- prompt.css({
- "top": pos.callerTopPosition,
- "left": pos.callerleftPosition,
- "marginTop": pos.marginTopSize,
- "opacity": 0
- });
-
- return prompt.animate({
- "opacity": 0.87
- });
-
- },
- /**
- * Updates the prompt text field - the field for which the prompt
- * @param {jqObject} field
- * @param {String} promptText html text to display type
- * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
- * @param {boolean} ajaxed - use to mark fields than being validated with ajax
- * @param {Map} options user options
- */
- _updatePrompt: function(field, prompt, promptText, type, ajaxed, options) {
-
- if (prompt) {
- if (type == "pass")
- prompt.addClass("greenPopup");
- else
- prompt.removeClass("greenPopup");
-
- if (type == "load")
- prompt.addClass("blackPopup");
- else
- prompt.removeClass("blackPopup");
-
- if (ajaxed)
- prompt.addClass("ajaxed");
- else
- prompt.removeClass("ajaxed");
-
- prompt.find(".formErrorContent").html(promptText);
-
- var pos = methods._calculatePosition(field, prompt, options);
- prompt.animate({
- "top": pos.callerTopPosition,
- "left": pos.callerleftPosition,
- "marginTop": pos.marginTopSize
- });
- }
- },
- /**
- * Closes the prompt associated with the given field
- *
- * @param {jqObject}
- * field
- */
- _closePrompt: function(field) {
-
- var prompt = methods._getPrompt(field);
- if (prompt)
- prompt.fadeTo("fast", 0, function() {
- prompt.remove();
- });
- },
- closePrompt: function(field) {
- return methods._closePrompt(field);
- },
- /**
- * Returns the error prompt matching the field if any
- *
- * @param {jqObject}
- * field
- * @return undefined or the error prompt (jqObject)
- */
- _getPrompt: function(field) {
- var className = field.attr("id").replace(":","_") + "formError";
- var match = $("." + methods._escapeExpression(className))[0];
- if (match)
- return $(match);
- },
- /**
- * Returns the escapade classname
- *
- * @param {selector}
- * className
- */
- _escapeExpression: function (selector) {
- return selector.replace(/([#;&,\.\+\*\~':"\!\^$\[\]\(\)=>\|])/g, "\\$1");
- },
- /**
- * Calculates prompt position
- *
- * @param {jqObject}
- * field
- * @param {jqObject}
- * the prompt
- * @param {Map}
- * options
- * @return positions
- */
- _calculatePosition: function (field, promptElmt, options) {
-
- var promptTopPosition, promptleftPosition, marginTopSize;
- var fieldWidth = field.width();
- var promptHeight = promptElmt.height();
-
- var overflow = options.isOverflown;
- if (overflow) {
- // is the form contained in an overflown container?
- promptTopPosition = promptleftPosition = 0;
- // compensation for the arrow
- marginTopSize = -promptHeight;
- } else {
- var offset = field.offset();
- promptTopPosition = offset.top;
- promptleftPosition = offset.left;
- marginTopSize = 0;
- }
-
- switch (options.promptPosition) {
-
- default:
- case "topRight":
- if (overflow)
- // Is the form contained in an overflown container?
- promptleftPosition += fieldWidth - 30;
- else {
- promptleftPosition += fieldWidth - 30;
- promptTopPosition += -promptHeight -2;
- }
- break;
- case "topLeft":
- promptTopPosition += -promptHeight - 10;
- break;
- case "centerRight":
- promptleftPosition += fieldWidth + 13;
- break;
- case "bottomLeft":
- promptTopPosition = promptTopPosition + field.height() + 15;
- break;
- case "bottomRight":
- promptleftPosition += fieldWidth - 30;
- promptTopPosition += field.height() + 5;
- }
-
- return {
- "callerTopPosition": promptTopPosition + 23 + "px",
- "callerleftPosition": promptleftPosition + 50 + "px",
- "marginTopSize": marginTopSize + "px"
- };
- },
- /**
- * Saves the user options and variables in the form.data
- *
- * @param {jqObject}
- * form - the form where the user option should be saved
- * @param {Map}
- * options - the user options
- * @return the user options (extended from the defaults)
- */
- _saveOptions: function(form, options) {
-
- // is there a language localisation ?
- if ($.validationEngineLanguage)
- var allRules = $.validationEngineLanguage.allRules;
- else
- $.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");
- // --- Internals DO NOT TOUCH or OVERLOAD ---
- // validation rules and i18
- $.validationEngine.defaults.allrules = allRules;
-
- var userOptions = $.extend({},$.validationEngine.defaults, options);
-
- form.data('jqv', userOptions);
- return userOptions;
- },
-
- /**
- * Removes forbidden characters from class name
- * @param {String} className
- */
- _getClassName: function(className) {
- return className.replace(":","_").replace(".","_");
- }
- };
-
- /**
- * Plugin entry point.
- * You may pass an action as a parameter or a list of options.
- * if none, the init and attach methods are being called.
- * Remember: if you pass options, the attached method is NOT called automatically
- *
- * @param {String}
- * method (optional) action
- */
- $.fn.validationEngine = function(method) {
-
- var form = $(this);
- if(!form[0]) return false; // stop here if the form does not exist
-
- if (typeof(method) == 'string' && method.charAt(0) != '_' && methods[method]) {
-
- // make sure init is called once
- if(method != "showPrompt" && method != "hidePrompt" && method != "hide" && method != "hideAll")
- methods.init.apply(form);
-
- return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));
- } else if (typeof method == 'object' || !method) {
- // default constructor with or without arguments
-
- methods.init.apply(form, arguments);
- return methods.attach.apply(form);
- } else {
- $.error('Method ' + method + ' does not exist in jQuery.validationEngine');
- }
- };
- // LEAK GLOBAL OPTIONS
- $.validationEngine= {defaults:{
-
- // Name of the event triggering field validation
- validationEventTrigger: "blur",
- // Automatically scroll viewport to the first error
- scroll: true,
- // Opening box position, possible locations are: topLeft,
- // topRight, bottomLeft, centerRight, bottomRight
- promptPosition: "topRight",
- bindMethod:"bind",
- // internal, automatically set to true when it parse a _ajax rule
- inlineAjax: false,
- // if set to true, the form data is sent asynchronously via ajax to the form.action url (get)
- ajaxFormValidation: false,
- // Ajax form validation callback method: boolean onComplete(form, status, errors, options)
- // retuns false if the form.submit event needs to be canceled.
- ajaxFormValidationURL: false,
- // The url to send the submit ajax validation (default to action)
- onAjaxFormComplete: $.noop,
- // called right before the ajax call, may return false to cancel
- onBeforeAjaxFormValidation: $.noop,
- // Stops form from submitting and execute function assiciated with it
- onValidationComplete: false,
-
- // Used when the form is displayed within a scrolling DIV
- isOverflown: false,
- overflownDIV: "",
-
- // true when form and fields are binded
- binded: false,
- // set to true, when the prompt arrow needs to be displayed
- showArrow: true,
- // did one of the validation fail ? kept global to stop further ajax validations
- isError: false,
- // Caches field validation status, typically only bad status are created.
- // the array is used during ajax form validation to detect issues early and prevent an expensive submit
- ajaxValidCache: {}
-
- }}
-
-})(jQuery);
+/*
+ * Inline Form Validation Engine 2.2, jQuery plugin
+ *
+ * Copyright(c) 2010, Cedric Dugas
+ * http://www.position-absolute.com
+ *
+ * 2.0 Rewrite by Olivier Refalo
+ * http://www.crionics.com
+ *
+ * Form validation engine allowing custom regex rules to be added.
+ * Licensed under the MIT License
+ */
+(function($) {
+
+ var methods = {
+
+ /**
+ * Kind of the constructor, called before any action
+ * @param {Map} user options
+ */
+ init: function(options) {
+ var form = this;
+ if (!form.data('jqv') || form.data('jqv') == null ) {
+ methods._saveOptions(form, options);
+
+ // bind all formError elements to close on click
+ $(".formError").live("click", function() {
+ $(this).fadeOut(150, function() {
+
+ // remove prompt once invisible
+ $(this).remove();
+ });
+ });
+ }
+ },
+ /**
+ * Attachs jQuery.validationEngine to form.submit and field.blur events
+ * Takes an optional params: a list of options
+ * ie. jQuery("#formID1").validationEngine('attach', {promptPosition : "centerRight"});
+ */
+ attach: function(userOptions) {
+
+ var form = this;
+ var options;
+
+ if(userOptions)
+ options = methods._saveOptions(form, userOptions);
+ else
+ options = form.data('jqv');
+
+ var validateAttribute = (form.find("[data-validation-engine*=validate]")) ? "data-validation-engine" : "class";
+
+ if (!options.binded) {
+ if (options.bindMethod == "bind"){
+
+ // bind fields
+ form.find("[class*=validate]").not("[type=checkbox]").not("[type=radio]").not(".datepicker").bind(options.validationEventTrigger, methods._onFieldEvent);
+ form.find("[class*=validate][type=checkbox],[class*=validate][type=radio]").bind("click", methods._onFieldEvent);
+
+ form.find("[class*=validate][class*=datepicker]").bind(options.validationEventTrigger,{"delay": 300}, methods._onFieldEvent);
+
+ // bind form.submit
+ form.bind("submit", methods._onSubmitEvent);
+ } else if (options.bindMethod == "live") {
+ // bind fields with LIVE (for persistant state)
+ form.find("[class*=validate]").not("[type=checkbox]").not(".datepicker").live(options.validationEventTrigger, methods._onFieldEvent);
+ form.find("[class*=validate][type=checkbox]").live("click", methods._onFieldEvent);
+
+ form.find("[class*=validate][class*=datepicker]").live(options.validationEventTrigger,{"delay": 300}, methods._onFieldEvent);
+
+ // bind form.submit
+ form.live("submit", methods._onSubmitEvent);
+ }
+
+ options.binded = true;
+ }
+ return this;
+ },
+ /**
+ * Unregisters any bindings that may point to jQuery.validaitonEngine
+ */
+ detach: function() {
+ var form = this;
+ var options = form.data('jqv');
+ if (options.binded) {
+
+ // unbind fields
+ form.find("[class*=validate]").not("[type=checkbox]").unbind(options.validationEventTrigger, methods._onFieldEvent);
+ form.find("[class*=validate][type=checkbox],[class*=validate][type=radio]").unbind("click", methods._onFieldEvent);
+
+ // unbind form.submit
+ form.unbind("submit", methods.onAjaxFormComplete);
+
+
+ // unbind live fields (kill)
+ form.find("[class*=validate]").not("[type=checkbox]").die(options.validationEventTrigger, methods._onFieldEvent);
+ form.find("[class*=validate][type=checkbox]").die("click", methods._onFieldEvent);
+ // unbind form.submit
+
+
+
+
+ form.die("submit", methods.onAjaxFormComplete);
+
+ form.removeData('jqv');
+ }
+ },
+ /**
+ * Validates the form fields, shows prompts accordingly.
+ * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
+ *
+ * @return true if the form validates, false if it fails
+ */
+ validate: function() {
+ return methods._validateFields(this);
+ },
+ /**
+ * Validates one field, shows prompt accordingly.
+ * Note: There is no ajax form validation with this method, only field ajax validation are evaluated
+ *
+ * @return true if the form validates, false if it fails
+ */
+ validateField: function(el) {
+ var options = $(this).data('jqv');
+ return methods._validateField($(el), options);
+ },
+ /**
+ * Validates the form fields, shows prompts accordingly.
+ * Note: this methods performs fields and form ajax validations(if setup)
+ *
+ * @return true if the form validates, false if it fails, undefined if ajax is used for form validation
+ */
+ validateform: function() {
+ return methods._onSubmitEvent.call(this);
+ },
+ /**
+ * Redraw prompts position, useful when you change the DOM state when validating
+ */
+ updatePromptsPosition: function() {
+ var form = this.closest('form');
+ var options = form.data('jqv');
+ // No option, take default one
+ form.find('[class*=validate]').not(':hidden').not(":disabled").each(function(){
+ var field = $(this);
+
+ var prompt = methods._getPrompt(field);
+ var promptText = $(prompt).find(".formErrorContent").html();
+
+ if(prompt) methods._updatePrompt(field, $(prompt), promptText, undefined, false, options);
+ })
+ },
+ /**
+ * Displays a prompt on a element.
+ * Note that the element needs an id!
+ *
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {String} possible values topLeft, topRight, bottomLeft, centerRight, bottomRight
+ */
+ showPrompt: function(promptText, type, promptPosition, showArrow) {
+
+ var form = this.closest('form');
+ var options = form.data('jqv');
+ // No option, take default one
+ if(!options) options = methods._saveOptions(this, options);
+ if(promptPosition)
+ options.promptPosition=promptPosition;
+ options.showArrow = showArrow==true;
+
+ methods._showPrompt(this, promptText, type, false, options);
+ },
+ /**
+ * Closes all error prompts on the page
+ */
+ hidePrompt: function() {
+ var promptClass = "."+ methods._getClassName($(this).attr("id")) + "formError";
+ $(promptClass).fadeTo("fast", 0.3, function() {
+ $(this).remove();
+ });
+ },
+ /**
+ * Closes form error prompts, CAN be invidual
+ */
+ hide: function() {
+ var closingtag;
+ if($(this).is("form")){
+ closingtag = "parentForm"+$(this).attr('id');
+ }else{
+ closingtag = $(this).attr('id') +"formError";
+ }
+ $('.'+closingtag).fadeTo("fast", 0.3, function() {
+ $(this).remove();
+ });
+ },
+ /**
+ * Closes all error prompts on the page
+ */
+ hideAll: function() {
+ $('.formError').fadeTo("fast", 0.3, function() {
+ $(this).remove();
+ });
+ },
+ /**
+ * Typically called when user exists a field using tab or a mouse click, triggers a field
+ * validation
+ */
+ _onFieldEvent: function(event) {
+ var field = $(this);
+ var form = field.closest('form');
+ var options = form.data('jqv');
+ // validate the current field
+ window.setTimeout(function() {
+ methods._validateField(field, options);
+ }, (event.data) ? event.data.delay : 0);
+
+ },
+ /**
+ * Called when the form is submited, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * form
+ * @return false if form submission needs to be cancelled
+ */
+ _onSubmitEvent: function() {
+ var form = $(this);
+ var options = form.data('jqv');
+
+ // validate each field (- skip field ajax validation, no necessary since we will perform an ajax form validation)
+ var r=methods._validateFields(form, true);
+
+ if (r && options.ajaxFormValidation) {
+ methods._validateFormWithAjax(form, options);
+ return false;
+ }
+
+ if(options.onValidationComplete) {
+ options.onValidationComplete(form, r);
+ return false;
+ }
+ return r;
+ },
+
+ /**
+ * Return true if the ajax field validations passed so far
+ * @param {Object} options
+ * @return true, is all ajax validation passed so far (remember ajax is async)
+ */
+ _checkAjaxStatus: function(options) {
+ var status = true;
+ $.each(options.ajaxValidCache, function(key, value) {
+ if (!value) {
+ status = false;
+ // break the each
+ return false;
+ }
+ });
+ return status;
+ },
+ /**
+ * Validates form fields, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * form
+ * @param {skipAjaxFieldValidation}
+ * boolean - when set to true, ajax field validation is skipped, typically used when the submit button is clicked
+ *
+ * @return true if form is valid, false if not, undefined if ajax form validation is done
+ */
+ _validateFields: function(form, skipAjaxValidation) {
+ var options = form.data('jqv');
+
+ // this variable is set to true if an error is found
+ var errorFound = false;
+
+ // Trigger hook, start validation
+ form.trigger("jqv.form.validating");
+ // first, evaluate status of non ajax fields
+ form.find('[class*=validate]').not(':hidden').not(":disabled").each( function() {
+ var field = $(this);
+ errorFound |= methods._validateField(field, options, skipAjaxValidation);
+ });
+ // second, check to see if all ajax calls completed ok
+ // errorFound |= !methods._checkAjaxStatus(options);
+
+ // thrird, check status and scroll the container accordingly
+ form.trigger("jqv.form.result", [errorFound]);
+
+ if (errorFound) {
+
+ if (options.scroll) {
+
+ // get the position of the first error, there should be at least one, no need to check this
+ //var destination = form.find(".formError:not('.greenPopup'):first").offset().top;
+
+ // look for the visually top prompt
+ var destination = Number.MAX_VALUE;
+ var fixleft = 0;
+ var lst = $(".formError:not('.greenPopup')");
+
+ for (var i = 0; i < lst.length; i++) {
+ var d = $(lst[i]).offset().top;
+ if (d < destination){
+ destination = d;
+ fixleft = $(lst[i]).offset().left;
+ }
+ }
+
+ if (!options.isOverflown)
+ $("html:not(:animated),body:not(:animated)").animate({
+ scrollTop: destination,
+ scrollLeft: fixleft
+ }, 1100);
+ else {
+ var overflowDIV = $(options.overflownDIV);
+ var scrollContainerScroll = overflowDIV.scrollTop();
+ var scrollContainerPos = -parseInt(overflowDIV.offset().top);
+
+ destination += scrollContainerScroll + scrollContainerPos - 5;
+ var scrollContainer = $(options.overflownDIV + ":not(:animated)");
+
+ scrollContainer.animate({
+ scrollTop: destination
+ }, 1100);
+
+ $("html:not(:animated),body:not(:animated)").animate({
+ scrollTop: overflowDIV.offset().top,
+ scrollLeft: fixleft
+ }, 1100);
+ }
+ }
+ return false;
+ }
+ return true;
+ },
+ /**
+ * This method is called to perform an ajax form validation.
+ * During this process all the (field, value) pairs are sent to the server which returns a list of invalid fields or true
+ *
+ * @param {jqObject} form
+ * @param {Map} options
+ */
+ _validateFormWithAjax: function(form, options) {
+
+ var data = form.serialize();
+ var url = (options.ajaxFormValidationURL) ? options.ajaxFormValidationURL : form.attr("action");
+ $.ajax({
+ type: "GET",
+ url: url,
+ cache: false,
+ dataType: "json",
+ data: data,
+ form: form,
+ methods: methods,
+ options: options,
+ beforeSend: function() {
+ return options.onBeforeAjaxFormValidation(form, options);
+ },
+ error: function(data, transport) {
+ methods._ajaxError(data, transport);
+ },
+ success: function(json) {
+
+ if (json !== true) {
+
+ // getting to this case doesn't necessary means that the form is invalid
+ // the server may return green or closing prompt actions
+ // this flag helps figuring it out
+ var errorInForm=false;
+ for (var i = 0; i < json.length; i++) {
+ var value = json[i];
+
+ var errorFieldId = value[0];
+ var errorField = $($("#" + errorFieldId)[0]);
+
+ // make sure we found the element
+ if (errorField.length == 1) {
+
+ // promptText or selector
+ var msg = value[2];
+ // if the field is valid
+ if (value[1] == true) {
+
+ if (msg == "" || !msg){
+ // if for some reason, status==true and error="", just close the prompt
+ methods._closePrompt(errorField);
+ } else {
+ // the field is valid, but we are displaying a green prompt
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertTextOk;
+ if (txt)
+ msg = txt;
+ }
+ methods._showPrompt(errorField, msg, "pass", false, options, true);
+ }
+
+ } else {
+ // the field is invalid, show the red error prompt
+ errorInForm|=true;
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertText;
+ if (txt)
+ msg = txt;
+ }
+ methods._showPrompt(errorField, msg, "", false, options, true);
+ }
+ }
+ }
+ options.onAjaxFormComplete(!errorInForm, form, json, options);
+ } else
+ options.onAjaxFormComplete(true, form, "", options);
+ }
+ });
+
+ },
+ /**
+ * Validates field, shows prompts accordingly
+ *
+ * @param {jqObject}
+ * field
+ * @param {Array[String]}
+ * field's validation rules
+ * @param {Map}
+ * user options
+ * @return true if field is valid
+ */
+ _validateField: function(field, options, skipAjaxValidation) {
+ if (!field.attr("id"))
+ $.error("jQueryValidate: an ID attribute is required for this field: " + field.attr("name") + " class:" +
+ field.attr("class"));
+
+ var rulesParsing = field.attr('class');
+ var getRules = /validate\[(.*)\]/.exec(rulesParsing);
+ if (!getRules)
+ return false;
+ var str = getRules[1];
+ var rules = str.split(/\[|,|\]/);
+
+ // true if we ran the ajax validation, tells the logic to stop messing with prompts
+ var isAjaxValidator = false;
+ var fieldName = field.attr("name");
+ var promptText = "";
+ var required = false;
+ options.isError = false;
+ options.showArrow = true;
+
+ for (var i = 0; i < rules.length; i++) {
+
+ var errorMsg = undefined;
+ switch (rules[i]) {
+
+ case "required":
+ required = true;
+ errorMsg = methods._required(field, rules, i, options);
+ break;
+ case "custom":
+ errorMsg = methods._customRegex(field, rules, i, options);
+ break;
+ case "groupRequired":
+ // Check is its the first of group, if not, reload validation with first field
+ // AND continue normal validation on present field
+ var classGroup = "[class*=" +rules[i + 1] +"]";
+ var firstOfGroup = field.closest("form").find(classGroup).eq(0);
+ if(firstOfGroup[0] != field[0]){
+ methods._validateField(firstOfGroup, options, skipAjaxValidation)
+ options.showArrow = true;
+ continue;
+ };
+ errorMsg = methods._groupRequired(field, rules, i, options);
+ if(errorMsg) required = true;
+ options.showArrow = false;
+ break;
+ case "ajax":
+ // ajax has its own prompts handling technique
+ if(!skipAjaxValidation){
+ methods._ajax(field, rules, i, options);
+ isAjaxValidator = true;
+ }
+ break;
+ case "minSize":
+ errorMsg = methods._minSize(field, rules, i, options);
+ break;
+ case "maxSize":
+ errorMsg = methods._maxSize(field, rules, i, options);
+ break;
+ case "min":
+ errorMsg = methods._min(field, rules, i, options);
+ break;
+ case "max":
+ errorMsg = methods._max(field, rules, i, options);
+ break;
+ case "past":
+ errorMsg = methods._past(field, rules, i, options);
+ break;
+ case "future":
+ errorMsg = methods._future(field, rules, i, options);
+ break;
+ case "dateRange":
+ var classGroup = "[class*=" + rules[i + 1] + "]";
+ var firstOfGroup = field.closest("form").find(classGroup).eq(0);
+ var secondOfGroup = field.closest("form").find(classGroup).eq(1);
+ /*
+ if (firstOfGroup[0] != field[0]) {
+ methods._validateField(firstOfGroup, options, skipAjaxValidation)
+ options.showArrow = true;
+ continue;
+ };
+ */
+ //if one entry out of the pair has value then proceed to run through validation
+ if (firstOfGroup[0].value || secondOfGroup[0].value) {
+ errorMsg = methods._dateRange(firstOfGroup, secondOfGroup, rules, i, options);
+ }
+ if (errorMsg) required = true;
+ options.showArrow = false;
+ break;
+
+ case "dateTimeRange":
+ var classGroup = "[class*=" + rules[i + 1] + "]";
+ var firstOfGroup = field.closest("form").find(classGroup).eq(0);
+ var secondOfGroup = field.closest("form").find(classGroup).eq(1);
+ /*
+ if (firstOfGroup[0] != field[0]) {
+ methods._validateField(firstOfGroup, options, skipAjaxValidation)
+ options.showArrow = true;
+ continue;
+ };
+ */
+ //if one entry out of the pair has value then proceed to run through validation
+ if (firstOfGroup[0].value || secondOfGroup[0].value) {
+ errorMsg = methods._dateTimeRange(firstOfGroup, secondOfGroup, rules, i, options);
+ }
+ if (errorMsg) required = true;
+ options.showArrow = false;
+ break;
+ case "maxCheckbox":
+ errorMsg = methods._maxCheckbox(field, rules, i, options);
+ field = $($("input[name='" + fieldName + "']"));
+ break;
+ case "minCheckbox":
+ errorMsg = methods._minCheckbox(field, rules, i, options);
+ field = $($("input[name='" + fieldName + "']"));
+ break;
+ case "equals":
+ errorMsg = methods._equals(field, rules, i, options);
+ break;
+ case "funcCall":
+ errorMsg = methods._funcCall(field, rules, i, options);
+ break;
+
+ default:
+ //$.error("jQueryValidator rule not found"+rules[i]);
+ }
+ if (errorMsg !== undefined) {
+ promptText += errorMsg + "<br/>";
+ options.isError = true;
+
+ }
+
+ }
+ // If the rules required is not added, an empty field is not validated
+ if(!required){
+ if(field.val() == "") options.isError = false;
+ }
+
+ // Hack for radio/checkbox group button, the validation go into the
+ // first radio/checkbox of the group
+ var fieldType = field.attr("type");
+
+ if ((fieldType == "radio" || fieldType == "checkbox") && $("input[name='" + fieldName + "']").size() > 1) {
+ field = $($("input[name='" + fieldName + "'][type!=hidden]:first"));
+ options.showArrow = false;
+ }
+ if (fieldType == "text" && $("input[name='" + fieldName + "']").size() > 1) {
+ field = $($("input[name='" + fieldName + "'][type!=hidden]:first"));
+ options.showArrow = false;
+ }
+
+ if (options.isError){
+
+ methods._showPrompt(field, promptText, "", false, options);
+ }else{
+ if (!isAjaxValidator) methods._closePrompt(field);
+ }
+ field.trigger("jqv.field.result", [field, options.isError, promptText]);
+ return options.isError;
+ },
+ /**
+ * Required validation
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _required: function(field, rules, i, options) {
+ switch (field.attr("type")) {
+ case "text":
+ case "password":
+ case "textarea":
+ case "file":
+ default:
+ if (!field.val())
+ return options.allrules[rules[i]].alertText;
+ break;
+ case "radio":
+ case "checkbox":
+ var name = field.attr("name");
+ if ($("input[name='" + name + "']:checked").size() == 0) {
+ if ($("input[name='" + name + "']").size() == 1)
+ return options.allrules[rules[i]].alertTextCheckboxe;
+ else
+ return options.allrules[rules[i]].alertTextCheckboxMultiple;
+ }
+ break;
+ // required for <select>
+ case "select-one":
+ // added by paul@kinetek.net for select boxes, Thank you
+ if (!field.val())
+ return options.allrules[rules[i]].alertText;
+ break;
+ case "select-multiple":
+ // added by paul@kinetek.net for select boxes, Thank you
+ if (!field.find("option:selected").val())
+ return options.allrules[rules[i]].alertText;
+ break;
+ }
+ },
+ /**
+ * Validate that 1 from the group field is required
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _groupRequired: function(field, rules, i, options) {
+ var classGroup = "[class*=" +rules[i + 1] +"]";
+ var isValid = false;
+ // Check all fields from the group
+ field.closest("form").find(classGroup).each(function(){
+ if(!methods._required($(this), rules, i, options)){
+ isValid = true;
+ return false;
+ }
+ })
+
+ if(!isValid) return options.allrules[rules[i]].alertText;
+ },
+ /**
+ * Validate Regex rules
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _customRegex: function(field, rules, i, options) {
+ var customRule = rules[i + 1];
+ var rule = options.allrules[customRule];
+ if(!rule) {
+ alert("jqv:custom rule not found "+customRule);
+ return;
+ }
+
+ var ex=rule.regex;
+ if(!ex) {
+ alert("jqv:custom regex not found "+customRule);
+ return;
+ }
+ var pattern = new RegExp(ex);
+
+ if (!pattern.test(field.val()))
+ return options.allrules[customRule].alertText;
+ },
+ /**
+ * Validate custom function outside of the engine scope
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _funcCall: function(field, rules, i, options) {
+ var functionName = rules[i + 1];
+ var fn = window[functionName];
+ if (typeof(fn) == 'function')
+ return fn(field, rules, i, options);
+
+ },
+ /**
+ * Field match
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _equals: function(field, rules, i, options) {
+ var equalsField = rules[i + 1];
+
+ if (field.val() != $("#" + equalsField).val())
+ return options.allrules.equals.alertText;
+ },
+ /**
+ * Check the maximum size (in characters)
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _maxSize: function(field, rules, i, options) {
+ var max = rules[i + 1];
+ var len = field.val().length;
+
+ if (len > max) {
+ var rule = options.allrules.maxSize;
+ return rule.alertText + max + rule.alertText2;
+ }
+ },
+ /**
+ * Check the minimum size (in characters)
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _minSize: function(field, rules, i, options) {
+ var min = rules[i + 1];
+ var len = field.val().length;
+
+ if (len < min) {
+ var rule = options.allrules.minSize;
+ return rule.alertText + min + rule.alertText2;
+ }
+ },
+ /**
+ * Check number minimum value
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _min: function(field, rules, i, options) {
+ var min = parseFloat(rules[i + 1]);
+ var len = parseFloat(field.val());
+
+ if (len < min) {
+ var rule = options.allrules.min;
+ if (rule.alertText2) return rule.alertText + min + rule.alertText2;
+ return rule.alertText + min;
+ }
+ },
+ /**
+ * Check number maximum value
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _max: function(field, rules, i, options) {
+ var max = parseFloat(rules[i + 1]);
+ var len = parseFloat(field.val());
+
+ if (len >max ) {
+ var rule = options.allrules.max;
+ if (rule.alertText2) return rule.alertText + max + rule.alertText2;
+ //orefalo: to review, also do the translations
+ return rule.alertText + max;
+ }
+ },
+ /**
+ * Checks date is in the past
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _past: function(field, rules, i, options) {
+
+ var p=rules[i + 1];
+ var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
+ var vdate = methods._parseDate(field.val());
+
+ if (vdate < pdate ) {
+ var rule = options.allrules.past;
+ if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+ return rule.alertText + methods._dateToString(pdate);
+ }
+ },
+ /**
+ * Checks date is in the future
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _future: function(field, rules, i, options) {
+
+ var p=rules[i + 1];
+ var pdate = (p.toLowerCase() == "now")? new Date():methods._parseDate(p);
+ var vdate = methods._parseDate(field.val());
+
+ if (vdate > pdate ) {
+ var rule = options.allrules.future;
+ if (rule.alertText2) return rule.alertText + methods._dateToString(pdate) + rule.alertText2;
+ return rule.alertText + methods._dateToString(pdate);
+ }
+ },
+ /**
+ * Checks if valid date
+ *
+ * @param {string} date string
+ * @return a bool based on determination of valid date
+ */
+ _isDate: function (value) {
+ var dateRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/);
+ if (dateRegEx.test(value)) {
+ return true;
+ }
+ return false;
+ },
+ /**
+ * Checks if valid date time
+ *
+ * @param {string} date string
+ * @return a bool based on determination of valid date time
+ */
+ _isDateTime: function (value){
+ var dateTimeRegEx = new RegExp(/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1}$|^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^((1[012]|0?[1-9]){1}\/(0?[1-9]|[12][0-9]|3[01]){1}\/\d{2,4}\s+(1[012]|0?[1-9]){1}:(0?[1-5]|[0-6][0-9]){1}:(0?[0-6]|[0-6][0-9]){1}\s+(am|pm|AM|PM){1})$/);
+ if (dateTimeRegEx.test(value)) {
+ return true;
+ }
+ return false;
+ },
+ //Checks if the start date is before the end date
+ //returns true if end is later than start
+ _dateCompare: function (start, end) {
+ return (new Date(start.toString()) < new Date(end.toString()));
+ },
+ /**
+ * Checks date range
+ *
+ * @param {jqObject} first field name
+ * @param {jqObject} second field name
+ * @return an error string if validation failed
+ */
+ _dateRange: function (first, second, rules, i, options) {
+ //are not both populated
+ if ((!first[0].value && second[0].value) || (first[0].value && !second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+
+ //are not both dates
+ if (!methods._isDate(first[0].value) || !methods._isDate(second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+
+ //are both dates but range is off
+ if (!methods._dateCompare(first[0].value, second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ },
+
+
+ /**
+ * Checks date time range
+ *
+ * @param {jqObject} first field name
+ * @param {jqObject} second field name
+ * @return an error string if validation failed
+ */
+ _dateTimeRange: function (first, second, rules, i, options) {
+ //are not both populated
+ if ((!first[0].value && second[0].value) || (first[0].value && !second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ //are not both dates
+ if (!methods._isDateTime(first[0].value) || !methods._isDateTime(second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ //are both dates but range is off
+ if (!methods._dateCompare(first[0].value, second[0].value)) {
+ return options.allrules[rules[i]].alertText + options.allrules[rules[i]].alertText2;
+ }
+ },
+ /**
+ * Max number of checkbox selected
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _maxCheckbox: function(field, rules, i, options) {
+
+ var nbCheck = rules[i + 1];
+ var groupname = field.attr("name");
+ var groupSize = $("input[name='" + groupname + "']:checked").size();
+ if (groupSize > nbCheck) {
+ options.showArrow = false;
+ if (options.allrules.maxCheckbox.alertText2) return options.allrules.maxCheckbox.alertText + " " + nbCheck + " " + options.allrules.maxCheckbox.alertText2;
+ return options.allrules.maxCheckbox.alertText;
+ }
+ },
+ /**
+ * Min number of checkbox selected
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return an error string if validation failed
+ */
+ _minCheckbox: function(field, rules, i, options) {
+
+ var nbCheck = rules[i + 1];
+ var groupname = field.attr("name");
+ var groupSize = $("input[name='" + groupname + "']:checked").size();
+ if (groupSize < nbCheck) {
+ options.showArrow = false;
+ return options.allrules.minCheckbox.alertText + " " + nbCheck + " " +
+ options.allrules.minCheckbox.alertText2;
+ }
+ },
+ /**
+ * Ajax field validation
+ *
+ * @param {jqObject} field
+ * @param {Array[String]} rules
+ * @param {int} i rules index
+ * @param {Map}
+ * user options
+ * @return nothing! the ajax validator handles the prompts itself
+ */
+ _ajax: function(field, rules, i, options) {
+
+
+ var errorSelector = rules[i + 1];
+ var rule = options.allrules[errorSelector];
+ var extraData = rule.extraData;
+ var extraDataDynamic = rule.extraDataDynamic;
+
+ if (!extraData)
+ extraData = "";
+
+ if (extraDataDynamic) {
+ var tmpData = [];
+ var domIds = String(extraDataDynamic).split(",");
+ for (var i = 0; i < domIds.length; i++) {
+ var id = domIds[i];
+ if ($(id).length) {
+ var inputValue = field.closest("form").find(id).val();
+ var keyValue = id.replace('#', '') + '=' + escape(inputValue);
+ tmpData.push(keyValue);
+ }
+ }
+ extraDataDynamic = tmpData.join("&");
+ } else {
+ extraDataDynamic = "";
+ }
+
+ if (!options.isError) {
+ $.ajax({
+ type: "GET",
+ url: rule.url,
+ cache: false,
+ dataType: "json",
+ data: "fieldId=" + field.attr("id") + "&fieldValue=" + field.val() + "&extraData=" + extraData + "&" + extraDataDynamic,
+ field: field,
+ rule: rule,
+ methods: methods,
+ options: options,
+ beforeSend: function() {
+ // build the loading prompt
+ var loadingText = rule.alertTextLoad;
+ if (loadingText)
+ methods._showPrompt(field, loadingText, "load", true, options);
+ },
+ error: function(data, transport) {
+ methods._ajaxError(data, transport);
+ },
+ success: function(json) {
+
+ // asynchronously called on success, data is the json answer from the server
+ var errorFieldId = json[0];
+ var errorField = $($("#" + errorFieldId)[0]);
+ // make sure we found the element
+ if (errorField.length == 1) {
+ var status = json[1];
+ // read the optional msg from the server
+ var msg = json[2];
+ if (!status) {
+ // Houston we got a problem - display an red prompt
+ options.ajaxValidCache[errorFieldId] = false;
+ options.isError = true;
+
+ // resolve the msg prompt
+ if(msg) {
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertText;
+ if (txt)
+ msg = txt;
+ }
+ }
+ else
+ msg = rule.alertText;
+
+ methods._showPrompt(errorField, msg, "", true, options);
+ } else {
+ if (options.ajaxValidCache[errorFieldId] !== undefined)
+ options.ajaxValidCache[errorFieldId] = true;
+
+ // resolves the msg prompt
+ if(msg) {
+ if (options.allrules[msg]) {
+ var txt = options.allrules[msg].alertTextOk;
+ if (txt)
+ msg = txt;
+ }
+ }
+ else
+ msg = rule.alertTextOk;
+
+ // see if we should display a green prompt
+ if (msg)
+ methods._showPrompt(errorField, msg, "pass", true, options);
+ else
+ methods._closePrompt(errorField);
+ }
+ }
+ }
+ });
+ }
+ },
+ /**
+ * Common method to handle ajax errors
+ *
+ * @param {Object} data
+ * @param {Object} transport
+ */
+ _ajaxError: function(data, transport) {
+ if(data.status == 0 && transport == null)
+ alert("The page is not served from a server! ajax call failed");
+ else if(typeof console != "undefined")
+ console.log("Ajax error: " + data.status + " " + transport);
+ },
+ /**
+ * date -> string
+ *
+ * @param {Object} date
+ */
+ _dateToString: function(date) {
+
+ return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate();
+ },
+ /**
+ * Parses an ISO date
+ * @param {String} d
+ */
+ _parseDate: function(d) {
+
+ var dateParts = d.split("-");
+ if(dateParts==d)
+ dateParts = d.split("/");
+ return new Date(dateParts[0], (dateParts[1] - 1) ,dateParts[2]);
+ },
+ /**
+ * Builds or updates a prompt with the given information
+ *
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _showPrompt: function(field, promptText, type, ajaxed, options, ajaxform) {
+ var prompt = methods._getPrompt(field);
+ // The ajax submit errors are not see has an error in the form,
+ // When the form errors are returned, the engine see 2 bubbles, but those are ebing closed by the engine at the same time
+ // Because no error was found befor submitting
+ if(ajaxform) prompt = false;
+ if (prompt)
+ methods._updatePrompt(field, prompt, promptText, type, ajaxed, options);
+ else
+ methods._buildPrompt(field, promptText, type, ajaxed, options);
+ },
+ /**
+ * Builds and shades a prompt for the given field.
+ *
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _buildPrompt: function(field, promptText, type, ajaxed, options) {
+
+ // create the prompt
+ var prompt = $('<div>');
+ prompt.addClass(methods._getClassName(field.attr("id")) + "formError");
+ // add a class name to identify the parent form of the prompt
+ if(field.is(":input")) prompt.addClass("parentForm"+methods._getClassName(field.parents('form').attr("id")));
+ prompt.addClass("formError");
+
+ switch (type) {
+ case "pass":
+ prompt.addClass("greenPopup");
+ break;
+ case "load":
+ prompt.addClass("blackPopup");
+ }
+ if (ajaxed)
+ prompt.addClass("ajaxed");
+
+ // create the prompt content
+ var promptContent = $('<div>').addClass("formErrorContent").html(promptText).appendTo(prompt);
+ // create the css arrow pointing at the field
+ // note that there is no triangle on max-checkbox and radio
+ if (options.showArrow) {
+ var arrow = $('<div>').addClass("formErrorArrow");
+
+ switch (options.promptPosition) {
+ case "bottomLeft":
+ case "bottomRight":
+ prompt.find(".formErrorContent").before(arrow);
+ arrow.addClass("formErrorArrowBottom").html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');
+ break;
+ case "topLeft":
+ case "topRight":
+ arrow.html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');
+ prompt.append(arrow);
+ break;
+ }
+ }
+
+ //Cedric: Needed if a container is in position:relative
+ // insert prompt in the form or in the overflown container?
+ if (options.isOverflown)
+ field.before(prompt);
+ else
+ $("body").append(prompt);
+
+ var pos = methods._calculatePosition(field, prompt, options);
+ prompt.css({
+ "top": pos.callerTopPosition,
+ "left": pos.callerleftPosition,
+ "marginTop": pos.marginTopSize,
+ "opacity": 0
+ });
+
+ return prompt.animate({
+ "opacity": 0.87
+ });
+
+ },
+ /**
+ * Updates the prompt text field - the field for which the prompt
+ * @param {jqObject} field
+ * @param {String} promptText html text to display type
+ * @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
+ * @param {boolean} ajaxed - use to mark fields than being validated with ajax
+ * @param {Map} options user options
+ */
+ _updatePrompt: function(field, prompt, promptText, type, ajaxed, options) {
+
+ if (prompt) {
+ if (type == "pass")
+ prompt.addClass("greenPopup");
+ else
+ prompt.removeClass("greenPopup");
+
+ if (type == "load")
+ prompt.addClass("blackPopup");
+ else
+ prompt.removeClass("blackPopup");
+
+ if (ajaxed)
+ prompt.addClass("ajaxed");
+ else
+ prompt.removeClass("ajaxed");
+
+ prompt.find(".formErrorContent").html(promptText);
+
+ var pos = methods._calculatePosition(field, prompt, options);
+ prompt.animate({
+ "top": pos.callerTopPosition,
+ "left": pos.callerleftPosition,
+ "marginTop": pos.marginTopSize
+ });
+ }
+ },
+ /**
+ * Closes the prompt associated with the given field
+ *
+ * @param {jqObject}
+ * field
+ */
+ _closePrompt: function(field) {
+
+ var prompt = methods._getPrompt(field);
+ if (prompt)
+ prompt.fadeTo("fast", 0, function() {
+ prompt.remove();
+ });
+ },
+ closePrompt: function(field) {
+ return methods._closePrompt(field);
+ },
+ /**
+ * Returns the error prompt matching the field if any
+ *
+ * @param {jqObject}
+ * field
+ * @return undefined or the error prompt (jqObject)
+ */
+ _getPrompt: function(field) {
+ var className = field.attr("id").replace(":","_") + "formError";
+ var match = $("." + methods._escapeExpression(className))[0];
+ if (match)
+ return $(match);
+ },
+ /**
+ * Returns the escapade classname
+ *
+ * @param {selector}
+ * className
+ */
+ _escapeExpression: function (selector) {
+ return selector.replace(/([#;&,\.\+\*\~':"\!\^$\[\]\(\)=>\|])/g, "\\$1");
+ },
+ /**
+ * Calculates prompt position
+ *
+ * @param {jqObject}
+ * field
+ * @param {jqObject}
+ * the prompt
+ * @param {Map}
+ * options
+ * @return positions
+ */
+ _calculatePosition: function (field, promptElmt, options) {
+
+ var promptTopPosition, promptleftPosition, marginTopSize;
+ var fieldWidth = field.width();
+ var promptHeight = promptElmt.height();
+
+ var overflow = options.isOverflown;
+ if (overflow) {
+ // is the form contained in an overflown container?
+ promptTopPosition = promptleftPosition = 0;
+ // compensation for the arrow
+ marginTopSize = -promptHeight;
+ } else {
+ var offset = field.offset();
+ promptTopPosition = offset.top;
+ promptleftPosition = offset.left;
+ marginTopSize = 0;
+ }
+
+ switch (options.promptPosition) {
+
+ default:
+ case "topRight":
+ if (overflow)
+ // Is the form contained in an overflown container?
+ promptleftPosition += fieldWidth - 30;
+ else {
+ promptleftPosition += fieldWidth - 30;
+ promptTopPosition += -promptHeight -2;
+ }
+ break;
+ case "topLeft":
+ promptTopPosition += -promptHeight - 10;
+ break;
+ case "centerRight":
+ promptleftPosition += fieldWidth + 13;
+ break;
+ case "bottomLeft":
+ promptTopPosition = promptTopPosition + field.height() + 15;
+ break;
+ case "bottomRight":
+ promptleftPosition += fieldWidth - 30;
+ promptTopPosition += field.height() + 5;
+ }
+
+ return {
+ "callerTopPosition": promptTopPosition + 23 + "px",
+ "callerleftPosition": promptleftPosition + 50 + "px",
+ "marginTopSize": marginTopSize + "px"
+ };
+ },
+ /**
+ * Saves the user options and variables in the form.data
+ *
+ * @param {jqObject}
+ * form - the form where the user option should be saved
+ * @param {Map}
+ * options - the user options
+ * @return the user options (extended from the defaults)
+ */
+ _saveOptions: function(form, options) {
+
+ // is there a language localisation ?
+ if ($.validationEngineLanguage)
+ var allRules = $.validationEngineLanguage.allRules;
+ else
+ $.error("jQuery.validationEngine rules are not loaded, plz add localization files to the page");
+ // --- Internals DO NOT TOUCH or OVERLOAD ---
+ // validation rules and i18
+ $.validationEngine.defaults.allrules = allRules;
+
+ var userOptions = $.extend({},$.validationEngine.defaults, options);
+
+ form.data('jqv', userOptions);
+ return userOptions;
+ },
+
+ /**
+ * Removes forbidden characters from class name
+ * @param {String} className
+ */
+ _getClassName: function(className) {
+ return className.replace(":","_").replace(".","_");
+ }
+ };
+
+ /**
+ * Plugin entry point.
+ * You may pass an action as a parameter or a list of options.
+ * if none, the init and attach methods are being called.
+ * Remember: if you pass options, the attached method is NOT called automatically
+ *
+ * @param {String}
+ * method (optional) action
+ */
+ $.fn.validationEngine = function(method) {
+
+ var form = $(this);
+ if(!form[0]) return false; // stop here if the form does not exist
+
+ if (typeof(method) == 'string' && method.charAt(0) != '_' && methods[method]) {
+
+ // make sure init is called once
+ if(method != "showPrompt" && method != "hidePrompt" && method != "hide" && method != "hideAll")
+ methods.init.apply(form);
+
+ return methods[method].apply(form, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method == 'object' || !method) {
+ // default constructor with or without arguments
+
+ methods.init.apply(form, arguments);
+ return methods.attach.apply(form);
+ } else {
+ $.error('Method ' + method + ' does not exist in jQuery.validationEngine');
+ }
+ };
+ // LEAK GLOBAL OPTIONS
+ $.validationEngine= {defaults:{
+
+ // Name of the event triggering field validation
+ validationEventTrigger: "blur",
+ // Automatically scroll viewport to the first error
+ scroll: true,
+ // Opening box position, possible locations are: topLeft,
+ // topRight, bottomLeft, centerRight, bottomRight
+ promptPosition: "topRight",
+ bindMethod:"bind",
+ // internal, automatically set to true when it parse a _ajax rule
+ inlineAjax: false,
+ // if set to true, the form data is sent asynchronously via ajax to the form.action url (get)
+ ajaxFormValidation: false,
+ // Ajax form validation callback method: boolean onComplete(form, status, errors, options)
+ // retuns false if the form.submit event needs to be canceled.
+ ajaxFormValidationURL: false,
+ // The url to send the submit ajax validation (default to action)
+ onAjaxFormComplete: $.noop,
+ // called right before the ajax call, may return false to cancel
+ onBeforeAjaxFormValidation: $.noop,
+ // Stops form from submitting and execute function assiciated with it
+ onValidationComplete: false,
+
+ // Used when the form is displayed within a scrolling DIV
+ isOverflown: false,
+ overflownDIV: "",
+
+ // true when form and fields are binded
+ binded: false,
+ // set to true, when the prompt arrow needs to be displayed
+ showArrow: true,
+ // did one of the validation fail ? kept global to stop further ajax validations
+ isError: false,
+ // Caches field validation status, typically only bad status are created.
+ // the array is used during ajax form validation to detect issues early and prevent an expensive submit
+ ajaxValidCache: {}
+
+ }}
+
+})(jQuery);
Property changes on: branches/1.0.x/inc/js/validate/jquery.validationEngine.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/validate/jquery.validationEngine-ru.js
===================================================================
--- branches/1.0.x/inc/js/validate/jquery.validationEngine-ru.js (revision 15168)
+++ branches/1.0.x/inc/js/validate/jquery.validationEngine-ru.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/validate/jquery.validationEngine-ru.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/passwordStrengthMeter.js
===================================================================
--- branches/1.0.x/inc/js/passwordStrengthMeter.js (revision 15168)
+++ branches/1.0.x/inc/js/passwordStrengthMeter.js (revision 15169)
@@ -1,138 +1,138 @@
-function PasswordStrengthMeter($settings) {
- this.inputSelector = '';
-
- this.phrases = {
- 'short': 'Too Short Password',
- 'bad': 'Week; Use letters & numbers',
- 'good': 'Medium; Use special characters',
- 'strong': 'Strong Password'
- };
-
- this.cssClasses = {
- 'short': 'meterFail',
- 'bad': 'meterWarn',
- 'good': 'meterGood',
- 'strong': 'meterExcel'
- };
-
- $.extend(true, this, $settings);
-
- var $me = this;
-
- $(document).ready(
- function() {
- $($me.inputSelector).keyup(
- function($e) {
- $($me.inputSelector + '_strength')
- .html( $me.getStrengthHTML( $(this).val() ) )
- .show();
- }
- );
- }
- );
-}
-
-PasswordStrengthMeter.prototype.getStrength = function (password) {
- var score = 0;
-
- // password < 4
- if (password.length < 4) {
- return 'short';
- }
-
- // password length
- score += password.length * 4;
- score += parseInt( this.checkRepetition(1, password).length - password.length );
- score += parseInt( this.checkRepetition(2, password).length - password.length );
- score += parseInt( this.checkRepetition(3, password).length - password.length );
- score += parseInt( this.checkRepetition(4, password).length - password.length );
-
- // password has 3 numbers
- if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
- score += 5;
- }
-
- // password has 2 symbols
- if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) {
- score += 5;
- }
-
- // password has Upper and Lower chars
- if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
- score += 10;
- }
-
- // password has number and chars
- if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
- score += 15;
- }
- //
- // password has number and symbol
- if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
- score += 15;
- }
-
- // password has char and symbol
- if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
- score += 15;
- }
-
- // password is just a nubers or chars
- if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
- score -= 10;
- }
-
- // verifying 0 < score < 100
- if (score < 0) {
- score = 0;
- }
-
- if (score > 100) {
- score = 100;
- }
-
- if (score < 34) {
- return 'bad';
- }
-
- if (score < 68) {
- return 'good';
- }
-
- return 'strong';
-}
-
-PasswordStrengthMeter.prototype.getStrengthHTML = function (password) {
- var $strength = this.getStrength(password),
- $css_class = this.cssClasses[$strength],
- $phrase = this.phrases[$strength];
-
- return '<span class="colorbar ' + $css_class + '"></span> <span class="' + $css_class + '">' + $phrase + '</span>';
-}
-
-PasswordStrengthMeter.prototype.checkRepetition = function(pLen, str) {
- var res = "",
- repeated = true;
-
- for (i = 0; i < str.length; i++) {
- repeated = true;
-
- for (j = 0; j < pLen && (j + i + pLen) < str.length; j++) {
- repeated = repeated && (str.charAt(j + i) == str.charAt(j + i + pLen));
- }
-
- if (j < pLen) {
- repeated = false;
- }
-
- if (repeated) {
- i += pLen - 1;
- repeated = false;
- }
- else {
- res += str.charAt(i);
- }
- }
-
- return res;
+function PasswordStrengthMeter($settings) {
+ this.inputSelector = '';
+
+ this.phrases = {
+ 'short': 'Too Short Password',
+ 'bad': 'Week; Use letters & numbers',
+ 'good': 'Medium; Use special characters',
+ 'strong': 'Strong Password'
+ };
+
+ this.cssClasses = {
+ 'short': 'meterFail',
+ 'bad': 'meterWarn',
+ 'good': 'meterGood',
+ 'strong': 'meterExcel'
+ };
+
+ $.extend(true, this, $settings);
+
+ var $me = this;
+
+ $(document).ready(
+ function() {
+ $($me.inputSelector).keyup(
+ function($e) {
+ $($me.inputSelector + '_strength')
+ .html( $me.getStrengthHTML( $(this).val() ) )
+ .show();
+ }
+ );
+ }
+ );
+}
+
+PasswordStrengthMeter.prototype.getStrength = function (password) {
+ var score = 0;
+
+ // password < 4
+ if (password.length < 4) {
+ return 'short';
+ }
+
+ // password length
+ score += password.length * 4;
+ score += parseInt( this.checkRepetition(1, password).length - password.length );
+ score += parseInt( this.checkRepetition(2, password).length - password.length );
+ score += parseInt( this.checkRepetition(3, password).length - password.length );
+ score += parseInt( this.checkRepetition(4, password).length - password.length );
+
+ // password has 3 numbers
+ if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
+ score += 5;
+ }
+
+ // password has 2 symbols
+ if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) {
+ score += 5;
+ }
+
+ // password has Upper and Lower chars
+ if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
+ score += 10;
+ }
+
+ // password has number and chars
+ if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
+ score += 15;
+ }
+ //
+ // password has number and symbol
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
+ score += 15;
+ }
+
+ // password has char and symbol
+ if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
+ score += 15;
+ }
+
+ // password is just a nubers or chars
+ if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
+ score -= 10;
+ }
+
+ // verifying 0 < score < 100
+ if (score < 0) {
+ score = 0;
+ }
+
+ if (score > 100) {
+ score = 100;
+ }
+
+ if (score < 34) {
+ return 'bad';
+ }
+
+ if (score < 68) {
+ return 'good';
+ }
+
+ return 'strong';
+}
+
+PasswordStrengthMeter.prototype.getStrengthHTML = function (password) {
+ var $strength = this.getStrength(password),
+ $css_class = this.cssClasses[$strength],
+ $phrase = this.phrases[$strength];
+
+ return '<span class="colorbar ' + $css_class + '"></span> <span class="' + $css_class + '">' + $phrase + '</span>';
+}
+
+PasswordStrengthMeter.prototype.checkRepetition = function(pLen, str) {
+ var res = "",
+ repeated = true;
+
+ for (i = 0; i < str.length; i++) {
+ repeated = true;
+
+ for (j = 0; j < pLen && (j + i + pLen) < str.length; j++) {
+ repeated = repeated && (str.charAt(j + i) == str.charAt(j + i + pLen));
+ }
+
+ if (j < pLen) {
+ repeated = false;
+ }
+
+ if (repeated) {
+ i += pLen - 1;
+ repeated = false;
+ }
+ else {
+ res += str.charAt(i);
+ }
+ }
+
+ return res;
}
\ No newline at end of file
Property changes on: branches/1.0.x/inc/js/passwordStrengthMeter.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jcookie.js
===================================================================
--- branches/1.0.x/inc/js/jcookie.js (revision 15168)
+++ branches/1.0.x/inc/js/jcookie.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jcookie.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.easing.1.3.js
===================================================================
--- branches/1.0.x/inc/js/jquery.easing.1.3.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.easing.1.3.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.easing.1.3.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.contentcarousel.js
===================================================================
--- branches/1.0.x/inc/js/jquery.contentcarousel.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.contentcarousel.js (revision 15169)
@@ -1,155 +1,155 @@
-(function($) {
- var cache = {},
- aux = {
- // navigates left / right
- navigate : function( dir, $el, $wrapper, opts ) {
- var scroll = opts.scroll,
- factor = 1,
- idxClicked = 0;
-
- if( cache.expanded ) {
- scroll = 1; // scroll is always 1 in full mode
- factor = 3; // the width of the expanded item will be 3 times bigger than 1 collapsed item
- idxClicked = cache.idxClicked; // the index of the clicked item
- }
-
- // clone the elements on the right / left and append / prepend them according to dir and scroll
- if( dir === 1 ) {
- $wrapper.find('div.good-item:lt(' + scroll + ')').each(function(i) {
- $(this).clone(true).css( 'left', ( cache.totalItems - idxClicked + i ) * cache.itemW * factor + 'px' ).appendTo( $wrapper );
- });
- }
- else {
- var $first = $wrapper.children().eq(0);
-
- $wrapper.find('div.good-item:gt(' + ( cache.totalItems - 1 - scroll ) + ')').each(function(i) {
- // insert before $first so they stay in the right order
- $(this).clone(true).css( 'left', - ( scroll - i + idxClicked ) * cache.itemW * factor + 'px' ).insertBefore( $first );
- });
- }
-
- // animate the left of each item
- // the calculations are dependent on dir and on the cache.expanded value
- $wrapper.find('div.good-item').each(function(i) {
- var $item = $(this);
- $item.stop().animate({
- left : ( dir === 1 ) ? '-=' + ( cache.itemW * factor * scroll ) + 'px' : '+=' + ( cache.itemW * factor * scroll ) + 'px'
- }, opts.sliderSpeed, opts.sliderEasing, function() {
- if( ( dir === 1 && $item.position().left < - idxClicked * cache.itemW * factor ) || ( dir === -1 && $item.position().left > ( ( cache.totalItems - 1 - idxClicked ) * cache.itemW * factor ) ) ) {
- // remove the item that was cloned
- $item.remove();
- }
- cache.isAnimating = false;
- });
- });
-
- },
- // gets the item's position (1, 2, or 3) on the viewport (the visible items)
- // val is the left of the item
- getWinPos : function( val ) {
- switch( val ) {
- case 0 : return 1; break;
- case cache.itemW : return 2; break;
- case cache.itemW * 2 : return 3; break;
- }
- }
- },
- methods = {
- init : function( options ) {
-
- if( this.length ) {
-
- var settings = {
- sliderSpeed : 500, // speed for the sliding animation
- sliderEasing : 'easeOutExpo',// easing for the sliding animation
- itemSpeed : 500, // speed for the item animation (open / close)
- itemEasing : 'easeOutExpo',// easing for the item animation (open / close)
- scroll : 1 // number of items to scroll at a time
- };
-
- return this.each(function() {
-
- // if options exist, lets merge them with our default settings
- if ( options ) {
- $.extend( settings, options );
- }
-
- var $el = $(this),
- $wrapper = $el.find('div.items'),
- $items = $wrapper.children('div.good-item');
-
- // save the with of one item
- cache.itemW = $items.width();
- // save the number of total items
- cache.totalItems = $items.length;
-
- // add navigation buttons
- if( cache.totalItems > 3 )
- $el.prepend('<div class="ca-nav"><span class="ca-nav-prev">Предыдущий</span><span class="ca-nav-next">Следующий</span></div>')
-
- // control the scroll value
- if( settings.scroll < 1 )
- settings.scroll = 1;
- else if( settings.scroll > 3 )
- settings.scroll = 3;
-
- var $navPrev = $el.find('span.ca-nav-prev'),
- $navNext = $el.find('span.ca-nav-next');
-
- // hide the items except the first 3
- $wrapper.css( 'overflow', 'hidden' );
-
- // the items will have position absolute
- // calculate the left of each item
- $items.each(function(i) {
- $(this).css({
- position : 'absolute',
- left : i * cache.itemW + 'px'
- });
- });
-
- // navigate left
- $navPrev.bind('click.contentcarousel', function( event ) {
- if( cache.isAnimating ) return false;
- cache.isAnimating = true;
- aux.navigate( -1, $el, $wrapper, settings );
- });
-
- // navigate right
- $navNext.bind('click.contentcarousel', function( event ) {
- if( cache.isAnimating ) return false;
- cache.isAnimating = true;
- aux.navigate( 1, $el, $wrapper, settings );
- });
-
- // adds events to the mouse
- $el.bind('mousewheel.contentcarousel', function(e, delta) {
- if(delta > 0) {
- if( cache.isAnimating ) return false;
- cache.isAnimating = true;
- aux.navigate( -1, $el, $wrapper, settings );
- }
- else {
- if( cache.isAnimating ) return false;
- cache.isAnimating = true;
- aux.navigate( 1, $el, $wrapper, settings );
- }
- return false;
- });
-
- });
- }
- }
- };
-
- $.fn.contentcarousel = function(method) {
- if ( methods[method] ) {
- return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( typeof method === 'object' || ! method ) {
- return methods.init.apply( this, arguments );
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.contentcarousel' );
- }
- };
-
+(function($) {
+ var cache = {},
+ aux = {
+ // navigates left / right
+ navigate : function( dir, $el, $wrapper, opts ) {
+ var scroll = opts.scroll,
+ factor = 1,
+ idxClicked = 0;
+
+ if( cache.expanded ) {
+ scroll = 1; // scroll is always 1 in full mode
+ factor = 3; // the width of the expanded item will be 3 times bigger than 1 collapsed item
+ idxClicked = cache.idxClicked; // the index of the clicked item
+ }
+
+ // clone the elements on the right / left and append / prepend them according to dir and scroll
+ if( dir === 1 ) {
+ $wrapper.find('div.good-item:lt(' + scroll + ')').each(function(i) {
+ $(this).clone(true).css( 'left', ( cache.totalItems - idxClicked + i ) * cache.itemW * factor + 'px' ).appendTo( $wrapper );
+ });
+ }
+ else {
+ var $first = $wrapper.children().eq(0);
+
+ $wrapper.find('div.good-item:gt(' + ( cache.totalItems - 1 - scroll ) + ')').each(function(i) {
+ // insert before $first so they stay in the right order
+ $(this).clone(true).css( 'left', - ( scroll - i + idxClicked ) * cache.itemW * factor + 'px' ).insertBefore( $first );
+ });
+ }
+
+ // animate the left of each item
+ // the calculations are dependent on dir and on the cache.expanded value
+ $wrapper.find('div.good-item').each(function(i) {
+ var $item = $(this);
+ $item.stop().animate({
+ left : ( dir === 1 ) ? '-=' + ( cache.itemW * factor * scroll ) + 'px' : '+=' + ( cache.itemW * factor * scroll ) + 'px'
+ }, opts.sliderSpeed, opts.sliderEasing, function() {
+ if( ( dir === 1 && $item.position().left < - idxClicked * cache.itemW * factor ) || ( dir === -1 && $item.position().left > ( ( cache.totalItems - 1 - idxClicked ) * cache.itemW * factor ) ) ) {
+ // remove the item that was cloned
+ $item.remove();
+ }
+ cache.isAnimating = false;
+ });
+ });
+
+ },
+ // gets the item's position (1, 2, or 3) on the viewport (the visible items)
+ // val is the left of the item
+ getWinPos : function( val ) {
+ switch( val ) {
+ case 0 : return 1; break;
+ case cache.itemW : return 2; break;
+ case cache.itemW * 2 : return 3; break;
+ }
+ }
+ },
+ methods = {
+ init : function( options ) {
+
+ if( this.length ) {
+
+ var settings = {
+ sliderSpeed : 500, // speed for the sliding animation
+ sliderEasing : 'easeOutExpo',// easing for the sliding animation
+ itemSpeed : 500, // speed for the item animation (open / close)
+ itemEasing : 'easeOutExpo',// easing for the item animation (open / close)
+ scroll : 1 // number of items to scroll at a time
+ };
+
+ return this.each(function() {
+
+ // if options exist, lets merge them with our default settings
+ if ( options ) {
+ $.extend( settings, options );
+ }
+
+ var $el = $(this),
+ $wrapper = $el.find('div.items'),
+ $items = $wrapper.children('div.good-item');
+
+ // save the with of one item
+ cache.itemW = $items.width();
+ // save the number of total items
+ cache.totalItems = $items.length;
+
+ // add navigation buttons
+ if( cache.totalItems > 3 )
+ $el.prepend('<div class="ca-nav"><span class="ca-nav-prev">Предыдущий</span><span class="ca-nav-next">Следующий</span></div>')
+
+ // control the scroll value
+ if( settings.scroll < 1 )
+ settings.scroll = 1;
+ else if( settings.scroll > 3 )
+ settings.scroll = 3;
+
+ var $navPrev = $el.find('span.ca-nav-prev'),
+ $navNext = $el.find('span.ca-nav-next');
+
+ // hide the items except the first 3
+ $wrapper.css( 'overflow', 'hidden' );
+
+ // the items will have position absolute
+ // calculate the left of each item
+ $items.each(function(i) {
+ $(this).css({
+ position : 'absolute',
+ left : i * cache.itemW + 'px'
+ });
+ });
+
+ // navigate left
+ $navPrev.bind('click.contentcarousel', function( event ) {
+ if( cache.isAnimating ) return false;
+ cache.isAnimating = true;
+ aux.navigate( -1, $el, $wrapper, settings );
+ });
+
+ // navigate right
+ $navNext.bind('click.contentcarousel', function( event ) {
+ if( cache.isAnimating ) return false;
+ cache.isAnimating = true;
+ aux.navigate( 1, $el, $wrapper, settings );
+ });
+
+ // adds events to the mouse
+ $el.bind('mousewheel.contentcarousel', function(e, delta) {
+ if(delta > 0) {
+ if( cache.isAnimating ) return false;
+ cache.isAnimating = true;
+ aux.navigate( -1, $el, $wrapper, settings );
+ }
+ else {
+ if( cache.isAnimating ) return false;
+ cache.isAnimating = true;
+ aux.navigate( 1, $el, $wrapper, settings );
+ }
+ return false;
+ });
+
+ });
+ }
+ }
+ };
+
+ $.fn.contentcarousel = function(method) {
+ if ( methods[method] ) {
+ return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
+ } else if ( typeof method === 'object' || ! method ) {
+ return methods.init.apply( this, arguments );
+ } else {
+ $.error( 'Method ' + method + ' does not exist on jQuery.contentcarousel' );
+ }
+ };
+
})(jQuery);
\ No newline at end of file
Property changes on: branches/1.0.x/inc/js/jquery.contentcarousel.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.mousewheel.js
===================================================================
--- branches/1.0.x/inc/js/jquery.mousewheel.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.mousewheel.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.mousewheel.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/tinybox.js
===================================================================
--- branches/1.0.x/inc/js/tinybox.js (revision 15168)
+++ branches/1.0.x/inc/js/tinybox.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/tinybox.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/jquery.flexslider-min.js
===================================================================
--- branches/1.0.x/inc/js/jquery.flexslider-min.js (revision 15168)
+++ branches/1.0.x/inc/js/jquery.flexslider-min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/jquery.flexslider-min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/ui/jquery.ui.core.min.js
===================================================================
--- branches/1.0.x/inc/js/ui/jquery.ui.core.min.js (revision 15168)
+++ branches/1.0.x/inc/js/ui/jquery.ui.core.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/ui/jquery.ui.core.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/ui/jquery.ui.tabs.min.js
===================================================================
--- branches/1.0.x/inc/js/ui/jquery.ui.tabs.min.js (revision 15168)
+++ branches/1.0.x/inc/js/ui/jquery.ui.tabs.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/ui/jquery.ui.tabs.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/ui/jquery.ui.accordion.min.js
===================================================================
--- branches/1.0.x/inc/js/ui/jquery.ui.accordion.min.js (revision 15168)
+++ branches/1.0.x/inc/js/ui/jquery.ui.accordion.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/ui/jquery.ui.accordion.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/ui/jquery.ui.slider.min.js
===================================================================
--- branches/1.0.x/inc/js/ui/jquery.ui.slider.min.js (revision 15168)
+++ branches/1.0.x/inc/js/ui/jquery.ui.slider.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/ui/jquery.ui.slider.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/js/ui/jquery.ui.widget.min.js
===================================================================
--- branches/1.0.x/inc/js/ui/jquery.ui.widget.min.js (revision 15168)
+++ branches/1.0.x/inc/js/ui/jquery.ui.widget.min.js (revision 15169)
Property changes on: branches/1.0.x/inc/js/ui/jquery.ui.widget.min.js
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/pikachoose.css
===================================================================
--- branches/1.0.x/inc/pikachoose.css (revision 15168)
+++ branches/1.0.x/inc/pikachoose.css (revision 15169)
Property changes on: branches/1.0.x/inc/pikachoose.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/compare.css
===================================================================
--- branches/1.0.x/inc/compare.css (revision 15168)
+++ branches/1.0.x/inc/compare.css (revision 15169)
@@ -1,77 +1,77 @@
-@charset "UTF-8";
-
-/* Compare Page
-*******************************************************************************/
-#content .compare { padding: 20px; }
-.good-item {
- border-right: 1px dotted #333;
- float: left;
- min-height: 450px;
- padding: 0 0 15px;
- width: 225px;
-}
-.good-item.last-child {
- border-right: none;
-}
-.good-item .button-delete {
- padding: 0 0 10px 0;
- text-align: center;
-}
-.good-item .rating { padding: 10px 0 0; text-align: center; }
-.good-item .rating p { padding: 5px 0 0; }
-.good-item .har { text-align: left; }
-.good-item .har dt { float: left; font-weight: bold; padding: 0 10px 3px 0; width: 100px; }
-.good-item .har dd { float: left; width: 80px; }
-
-.buttons-block { padding-top: 120px; text-align: center; }
-.compare-button {
- background: url(@templates_base@/img/bg-button-compare-left.jpg) no-repeat 0 0;
- color: #323232;
- display: inline-block;
- font-size: 1.385em;
- font-weight: bold;
- text-decoration: none;
-}
-.compare-button span {
- background: url(@templates_base@/img/bg-button-compare-right.jpg) no-repeat 100% 0;
- display: inline-block;
- height: 60px;
- padding: 10px 20px;
- text-align: center;
-}
-
-/*** Compare accordion ***/
-#compare-menu h3 {
- background: #fff url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
- color: #5b5b5b;
- cursor: pointer;
- font-weight: bold;
- height: 26px;
- line-height: 26px;
- padding: 0 16px;
- position: relative;
-}
-#compare-menu a { color: #5b5b5b; padding-left: 20px; text-decoration: none; }
-#compare-menu h3.active a { color: #fff; }
-#compare-menu .ui-icon-circle-arrow-e {
- background: url(@templates_base@/img/bullet-menu.png) no-repeat 0 -22px;
- height: 6px;
- width: 10px;
-}
-#compare-menu .ui-icon-circle-arrow-s {
- background: url(@templates_base@/img/bullet-menu.png) no-repeat 0 -6px;
- height: 6px;
- width: 10px;
-}
-#compare-menu .good-item-cell {
- border-right: 1px dotted #333;
- float: left;
- max-height: 450px;
- padding-bottom: 25px;
- width: 225px;
-}
-#compare-menu .good-item-cell .description {
- max-height: 450px;
- overflow-x: hidden;
- padding: 5px 16px;
-}
+@charset "UTF-8";
+
+/* Compare Page
+*******************************************************************************/
+#content .compare { padding: 20px; }
+.good-item {
+ border-right: 1px dotted #333;
+ float: left;
+ min-height: 450px;
+ padding: 0 0 15px;
+ width: 225px;
+}
+.good-item.last-child {
+ border-right: none;
+}
+.good-item .button-delete {
+ padding: 0 0 10px 0;
+ text-align: center;
+}
+.good-item .rating { padding: 10px 0 0; text-align: center; }
+.good-item .rating p { padding: 5px 0 0; }
+.good-item .har { text-align: left; }
+.good-item .har dt { float: left; font-weight: bold; padding: 0 10px 3px 0; width: 100px; }
+.good-item .har dd { float: left; width: 80px; }
+
+.buttons-block { padding-top: 120px; text-align: center; }
+.compare-button {
+ background: url(@templates_base@/img/bg-button-compare-left.jpg) no-repeat 0 0;
+ color: #323232;
+ display: inline-block;
+ font-size: 1.385em;
+ font-weight: bold;
+ text-decoration: none;
+}
+.compare-button span {
+ background: url(@templates_base@/img/bg-button-compare-right.jpg) no-repeat 100% 0;
+ display: inline-block;
+ height: 60px;
+ padding: 10px 20px;
+ text-align: center;
+}
+
+/*** Compare accordion ***/
+#compare-menu h3 {
+ background: #fff url(@templates_base@/img/bg-form-fieldset.jpg) repeat-x 0 0;
+ color: #5b5b5b;
+ cursor: pointer;
+ font-weight: bold;
+ height: 26px;
+ line-height: 26px;
+ padding: 0 16px;
+ position: relative;
+}
+#compare-menu a { color: #5b5b5b; padding-left: 20px; text-decoration: none; }
+#compare-menu h3.active a { color: #fff; }
+#compare-menu .ui-icon-circle-arrow-e {
+ background: url(@templates_base@/img/bullet-menu.png) no-repeat 0 -22px;
+ height: 6px;
+ width: 10px;
+}
+#compare-menu .ui-icon-circle-arrow-s {
+ background: url(@templates_base@/img/bullet-menu.png) no-repeat 0 -6px;
+ height: 6px;
+ width: 10px;
+}
+#compare-menu .good-item-cell {
+ border-right: 1px dotted #333;
+ float: left;
+ max-height: 450px;
+ padding-bottom: 25px;
+ width: 225px;
+}
+#compare-menu .good-item-cell .description {
+ max-height: 450px;
+ overflow-x: hidden;
+ padding: 5px 16px;
+}
Property changes on: branches/1.0.x/inc/compare.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.accordion.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.accordion.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.accordion.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.accordion.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.slider.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.slider.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.slider.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.slider.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.theme.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.theme.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.theme.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.theme.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.accordion2.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.accordion2.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.accordion2.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.accordion2.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.theme2.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.theme2.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.theme2.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.theme2.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.all.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.all.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.all.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.all.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.core.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.core.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.core.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.core.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.tabs.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.tabs.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.tabs.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.tabs.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/inc/ui/jquery.ui.base.css
===================================================================
--- branches/1.0.x/inc/ui/jquery.ui.base.css (revision 15168)
+++ branches/1.0.x/inc/ui/jquery.ui.base.css (revision 15169)
Property changes on: branches/1.0.x/inc/ui/jquery.ui.base.css
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/title_bar.elm.tpl
===================================================================
--- branches/1.0.x/elements/title_bar.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/title_bar.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/title_bar.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/captcha_image.elm.tpl
===================================================================
--- branches/1.0.x/elements/captcha_image.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/captcha_image.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/captcha_image.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/filters.elm.tpl
===================================================================
--- branches/1.0.x/elements/filters.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/filters.elm.tpl (revision 15169)
@@ -1,209 +1,209 @@
-<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>>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</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>>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</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>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</li>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="filter_range_block" PrefixSpecial="item-filter" filter_type="range" is_list="0">
- <div style="text-align: center; margin-bottom: 10px;">
- <input type="text" class="field" id="<inp2:FilterInputName/>_start" style="width: 35px;" value=""/> - <input type="text" class="field" id="<inp2:FilterInputName/>_end" style="width: 35px;" value=""/>
-
- <a href="#" class="grey-but" id="<inp2:FilterInputName/>_apply_btn">
- <span>Apply</span>
- </a>
-
- </div>
-
- <div class="range-block">
- <ul class="range">
- <inp2:ListFilterOptions render_as="filter_range_value_element" type="value" currency="selected" pass_params="1"/>
- </ul>
- <div class="slider-vertical" id="<inp2:FilterInputName/>_slider" style="height:<inp2:SliderHeight factor="26"/>px;"></div>
- <ul class="range2">
- <inp2:ListFilterOptions render_as="filter_range_count_element" type="count" pass_params="1"/>
- </ul>
- <div class="clear"></div>
- </div>
-
- <script type="text/javascript">
- $(document).ready(
- function() {
- var $slider_options = {
- min: <inp2:m_Get name="min_range_value"/>,
- max: <inp2:m_Get name="max_range_value"/>,
- step: <inp2:m_Get name="range_step"/>
- },
- $options = {
- orientation: 'vertical',
- range: true,
- values: [<inp2:m_Get name="selected_from_range"/>, <inp2:m_Get name="selected_to_range"/>],
- change: function(event, ui) {
- // jQuery UI slider has inverted range - fix that here
- var $selected_range = ListManager.invertRange($slider_options, ui.values[0], ui.values[1]);
-
- if ( $selected_range[0] == $slider_options.min && $selected_range[1] == $slider_options.max ) {
- $('#' + jq('<inp2:FilterInputName/>')).val('');
- }
- else {
- $('#' + jq('<inp2:FilterInputName/>')).val($selected_range[0] + '-' + $selected_range[1]);
- }
-
- $( '#' + jq('<inp2:FilterInputName/>_start') ).val($selected_range[0]);
- $( '#' + jq('<inp2:FilterInputName/>_end') ).val($selected_range[1]);
-
- ListManager.updateFilterParams('<inp2:m_Param name="filter_field"/>');
- }
- },
- $values = ListManager.invertRange($slider_options, $options.values[0], $options.values[1]);
-
- $options.values[0] = $values[0];
- $options.values[1] = $values[1];
-
- $.extend($options, $slider_options);
-
- $( '#' + jq('<inp2:FilterInputName/>_start') ).val($slider_options.min);
- $( '#' + jq('<inp2:FilterInputName/>_end') ).val($slider_options.max);
- $( '#' + jq('<inp2:FilterInputName/>_slider') ).slider($options);
-
- $( '#' + jq('<inp2:FilterInputName/>_apply_btn')).click(
- function ($e) {
- var $remainder = 0,
- $range_from = parseFloat( $( '#' + jq('<inp2:FilterInputName/>_start') ).val() ),
- $range_to = parseFloat( $( '#' + jq('<inp2:FilterInputName/>_end') ).val() );
-
- // ensure entered range is valid
- if ( isNaN($range_from) || $range_from < $slider_options.min ) {
- $range_from = $slider_options.min;
- }
-
- if ( isNaN($range_to) || $range_to > $slider_options.max ) {
- $range_to = $slider_options.max;
- }
-
- // changed entered range to exactly match range steps on a slider
- $remainder = $range_from % $slider_options.step;
-
- if ( $remainder > 0 ) {
- $range_from -= $remainder;
- }
-
- $remainder = $range_to % $slider_options.step;
-
- if ( $remainder > 0 ) {
- $range_to += $slider_options.step - $remainder;
- }
-
- // set new values to the slider
- var $selected_range = ListManager.invertRange($slider_options, $range_from, $range_to);
-
- $( '#' + jq('<inp2:FilterInputName/>_slider') ).slider('option', 'values', $selected_range);
-
- return false;
- }
- );
-
- }
- );
-
- ListManager.setFilterParams('<inp2:m_Param name="filter_field"/>', {max_value: <inp2:m_Get name="max_range_value"/>});
- </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_IFDataExists>
- <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'/>">
- <script type="text/javascript">
- var $filter_params = {};
- </script>
-
- <div class="block alt-block">
- <h2>
- <em class="filter-header">
- Filter by <inp2:m_Phrase name="lu_fld_{$filter_field}"/>
- </em>
-
- <a href="#" class="reset-filter" style="display: none;">
- <img src="<inp2:m_TemplatesBase/>img/btn_reset_filter.png" width="18" height="18" alt="Reset Filter"/>
- </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('<inp2:m_Param name="filter_field"/>');
- }
- );
- </script>
- </form>
- </inp2:m_IFDataExists>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="filter_counter_element">
- '<inp2:m_Param name="key"/>': <inp2:m_Param name="count"/><inp2:m_ifnot check="m_Param" name="is_last">,</inp2:m_ifnot>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="filter_counters_element">
- ListManager.replaceCounters('<inp2:m_Param name="filter_field"/>', {<inp2:ListFilterOptions render_as="filter_counter_element" type="count" pass_params="1" strip_nl="2"/>});
-</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 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>>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</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>>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</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>(<span id="filter-counter[<inp2:m_Param name='filter_field'/>][<inp2:m_param name='key'/>]" class="filter-counter"><inp2:m_Param name="count"/></span>)</li>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_range_block" PrefixSpecial="item-filter" filter_type="range" is_list="0">
+ <div style="text-align: center; margin-bottom: 10px;">
+ <input type="text" class="field" id="<inp2:FilterInputName/>_start" style="width: 35px;" value=""/> - <input type="text" class="field" id="<inp2:FilterInputName/>_end" style="width: 35px;" value=""/>
+
+ <a href="#" class="grey-but" id="<inp2:FilterInputName/>_apply_btn">
+ <span>Apply</span>
+ </a>
+
+ </div>
+
+ <div class="range-block">
+ <ul class="range">
+ <inp2:ListFilterOptions render_as="filter_range_value_element" type="value" currency="selected" pass_params="1"/>
+ </ul>
+ <div class="slider-vertical" id="<inp2:FilterInputName/>_slider" style="height:<inp2:SliderHeight factor="26"/>px;"></div>
+ <ul class="range2">
+ <inp2:ListFilterOptions render_as="filter_range_count_element" type="count" pass_params="1"/>
+ </ul>
+ <div class="clear"></div>
+ </div>
+
+ <script type="text/javascript">
+ $(document).ready(
+ function() {
+ var $slider_options = {
+ min: <inp2:m_Get name="min_range_value"/>,
+ max: <inp2:m_Get name="max_range_value"/>,
+ step: <inp2:m_Get name="range_step"/>
+ },
+ $options = {
+ orientation: 'vertical',
+ range: true,
+ values: [<inp2:m_Get name="selected_from_range"/>, <inp2:m_Get name="selected_to_range"/>],
+ change: function(event, ui) {
+ // jQuery UI slider has inverted range - fix that here
+ var $selected_range = ListManager.invertRange($slider_options, ui.values[0], ui.values[1]);
+
+ if ( $selected_range[0] == $slider_options.min && $selected_range[1] == $slider_options.max ) {
+ $('#' + jq('<inp2:FilterInputName/>')).val('');
+ }
+ else {
+ $('#' + jq('<inp2:FilterInputName/>')).val($selected_range[0] + '-' + $selected_range[1]);
+ }
+
+ $( '#' + jq('<inp2:FilterInputName/>_start') ).val($selected_range[0]);
+ $( '#' + jq('<inp2:FilterInputName/>_end') ).val($selected_range[1]);
+
+ ListManager.updateFilterParams('<inp2:m_Param name="filter_field"/>');
+ }
+ },
+ $values = ListManager.invertRange($slider_options, $options.values[0], $options.values[1]);
+
+ $options.values[0] = $values[0];
+ $options.values[1] = $values[1];
+
+ $.extend($options, $slider_options);
+
+ $( '#' + jq('<inp2:FilterInputName/>_start') ).val($slider_options.min);
+ $( '#' + jq('<inp2:FilterInputName/>_end') ).val($slider_options.max);
+ $( '#' + jq('<inp2:FilterInputName/>_slider') ).slider($options);
+
+ $( '#' + jq('<inp2:FilterInputName/>_apply_btn')).click(
+ function ($e) {
+ var $remainder = 0,
+ $range_from = parseFloat( $( '#' + jq('<inp2:FilterInputName/>_start') ).val() ),
+ $range_to = parseFloat( $( '#' + jq('<inp2:FilterInputName/>_end') ).val() );
+
+ // ensure entered range is valid
+ if ( isNaN($range_from) || $range_from < $slider_options.min ) {
+ $range_from = $slider_options.min;
+ }
+
+ if ( isNaN($range_to) || $range_to > $slider_options.max ) {
+ $range_to = $slider_options.max;
+ }
+
+ // changed entered range to exactly match range steps on a slider
+ $remainder = $range_from % $slider_options.step;
+
+ if ( $remainder > 0 ) {
+ $range_from -= $remainder;
+ }
+
+ $remainder = $range_to % $slider_options.step;
+
+ if ( $remainder > 0 ) {
+ $range_to += $slider_options.step - $remainder;
+ }
+
+ // set new values to the slider
+ var $selected_range = ListManager.invertRange($slider_options, $range_from, $range_to);
+
+ $( '#' + jq('<inp2:FilterInputName/>_slider') ).slider('option', 'values', $selected_range);
+
+ return false;
+ }
+ );
+
+ }
+ );
+
+ ListManager.setFilterParams('<inp2:m_Param name="filter_field"/>', {max_value: <inp2:m_Get name="max_range_value"/>});
+ </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_IFDataExists>
+ <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'/>">
+ <script type="text/javascript">
+ var $filter_params = {};
+ </script>
+
+ <div class="block alt-block">
+ <h2>
+ <em class="filter-header">
+ Filter by <inp2:m_Phrase name="lu_fld_{$filter_field}"/>
+ </em>
+
+ <a href="#" class="reset-filter" style="display: none;">
+ <img src="<inp2:m_TemplatesBase/>img/btn_reset_filter.png" width="18" height="18" alt="Reset Filter"/>
+ </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('<inp2:m_Param name="filter_field"/>');
+ }
+ );
+ </script>
+ </form>
+ </inp2:m_IFDataExists>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_counter_element">
+ '<inp2:m_Param name="key"/>': <inp2:m_Param name="count"/><inp2:m_ifnot check="m_Param" name="is_last">,</inp2:m_ifnot>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="filter_counters_element">
+ ListManager.replaceCounters('<inp2:m_Param name="filter_field"/>', {<inp2:ListFilterOptions render_as="filter_counter_element" type="count" pass_params="1" strip_nl="2"/>});
+</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
Property changes on: branches/1.0.x/elements/filters.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/order_totals.tpl
===================================================================
--- branches/1.0.x/elements/ajax/order_totals.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/order_totals.tpl (revision 15169)
@@ -1,42 +1,42 @@
-<inp2:m_DefaultParam prefix="ord"/>
-
-<inp2:m_DefineElement name="sub_total">
- <dt>Subtotal</dt>
- <dd><inp2:Field name="AmountWithoutVAT" currency="selected"/></dd>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="shipping_total">
- <!--##<dt>Shipping</dt>
- <dd class="price3"><inp2:Field name="ShippingCost" currency="selected"/></dd>
-
- <dt>Insurance Fee</dt>
- <dd class="price3"><inp2:Field name="InsuranceFee" currency="selected"/></dd>##-->
-
- <dt>Shipping</dt>
- <dd class="price3"><inp2:Field name="ShippingSubTotal" currency="selected"/></dd>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="processing_total">
- <dt>Processing Fee</dt>
- <dd class="price3"><inp2:Field name="ProcessingFee" currency="selected"/></dd>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="vat_total">
- <dt>Tax <inp2:Field name="VATPercent"/>%</dt>
- <dd class="price3"><inp2:Field name="VAT" currency="selected"/></dd>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="discount_total">
- <dt class="discount">Discount:</dt>
- <dd class="price2">- <inp2:Field name="DiscountTotal" currency="selected" /></dd>
-</inp2:m_DefineElement>
-
-<inp2:$prefix_PrintTotals sub_total_render_as="sub_total" discount_render_as="discount_total" shipping_render_as="shipping_total" processing_render_as="processing_total" vat_render_as="vat_total"/>
-
-<inp2:m_if check="ord_Field" name="GiftCertificateId">
- <dt>Gift Certificate</dt>
- <dd class="price3"><inp2:Field name="GiftCertificateDiscount" currency="selected"/></dd>
-</inp2:m_if>
-
-<dt>Order Total</dt>
+<inp2:m_DefaultParam prefix="ord"/>
+
+<inp2:m_DefineElement name="sub_total">
+ <dt>Subtotal</dt>
+ <dd><inp2:Field name="AmountWithoutVAT" currency="selected"/></dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="shipping_total">
+ <!--##<dt>Shipping</dt>
+ <dd class="price3"><inp2:Field name="ShippingCost" currency="selected"/></dd>
+
+ <dt>Insurance Fee</dt>
+ <dd class="price3"><inp2:Field name="InsuranceFee" currency="selected"/></dd>##-->
+
+ <dt>Shipping</dt>
+ <dd class="price3"><inp2:Field name="ShippingSubTotal" currency="selected"/></dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="processing_total">
+ <dt>Processing Fee</dt>
+ <dd class="price3"><inp2:Field name="ProcessingFee" currency="selected"/></dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="vat_total">
+ <dt>Tax <inp2:Field name="VATPercent"/>%</dt>
+ <dd class="price3"><inp2:Field name="VAT" currency="selected"/></dd>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="discount_total">
+ <dt class="discount">Discount:</dt>
+ <dd class="price2">- <inp2:Field name="DiscountTotal" currency="selected" /></dd>
+</inp2:m_DefineElement>
+
+<inp2:$prefix_PrintTotals sub_total_render_as="sub_total" discount_render_as="discount_total" shipping_render_as="shipping_total" processing_render_as="processing_total" vat_render_as="vat_total"/>
+
+<inp2:m_if check="ord_Field" name="GiftCertificateId">
+ <dt>Gift Certificate</dt>
+ <dd class="price3"><inp2:Field name="GiftCertificateDiscount" currency="selected"/></dd>
+</inp2:m_if>
+
+<dt>Order Total</dt>
<dd class="price4"><inp2:$prefix_Field name="TotalAmount" currency="selected"/></dd>
\ No newline at end of file
Property changes on: branches/1.0.x/elements/ajax/order_totals.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/shipping_type.tpl
===================================================================
--- branches/1.0.x/elements/ajax/shipping_type.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/shipping_type.tpl (revision 15169)
@@ -1,42 +1,42 @@
-<inp2:m_DefineElement name="no_shipments">
- <div class="field-error"><inp2:m_Recall name="usps_errors"/></div>
- <inp2:m_Phrase label="lu_comm_ErrorNoShippingTypes"/><!-- (<a href="mailto:<inp2:conf_ConfigValue name="Comm_Contacts_Email"/>"><inp2:conf_ConfigValue name="Comm_Contacts_Email"/></a>).-->
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="order_shipping_type">
- <option <inp2:m_param name="selected"/> value="<inp2:m_param name='ShippingId'/>"> <inp2:m_param name="ShippingName"/> (<inp2:m_if check="m_param" name="ShippingFree" value="1"><inp2:m_Phrase label="lu_comm_FreeShipping" /><inp2:m_else/><inp2:m_param name="TotalCost"/></inp2:m_if>)</option>
-</inp2:m_DefineElement>
-
-<inp2:m_DefineElement name="order_shipment">
- <select class="field" name="<inp2:m_param name='field_name'/>">
- <option value="">Please select</option>
- <inp2:ord_PrintShippingTypes render_as="order_shipping_type" currency="selected"/>
- </select>
-</inp2:m_DefineElement>
-
-<label for="ship">How would you like the items shipped? <span class="star">*</span></label>
-
-<inp2:m_if check="ord_AddressValid" type="shipping">
- <inp2:ord_PrintShippings render_as="order_shipment" currency="selected" no_shipments_render_as="no_shipments"/>
-<inp2:m_else/>
- <select class="field" name="<inp2:ord_InputName name='ShippingTypeId'/>[1]">
- <option value="">Please enter address</option>
- </select>
-</inp2:m_if>
-
-<script type="text/javascript">
- $(document).ready(
- function () {
- $('select', '#shipping-type-container').change(
- function ($e) {
- CheckoutManager.updateOrder(
- 'elements/ajax/order_totals',
- function ($data) {
- $('.total').html($data);
- }
- );
- }
- );
- }
- );
+<inp2:m_DefineElement name="no_shipments">
+ <div class="field-error"><inp2:m_Recall name="usps_errors"/></div>
+ <inp2:m_Phrase label="lu_comm_ErrorNoShippingTypes"/><!-- (<a href="mailto:<inp2:conf_ConfigValue name="Comm_Contacts_Email"/>"><inp2:conf_ConfigValue name="Comm_Contacts_Email"/></a>).-->
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="order_shipping_type">
+ <option <inp2:m_param name="selected"/> value="<inp2:m_param name='ShippingId'/>"> <inp2:m_param name="ShippingName"/> (<inp2:m_if check="m_param" name="ShippingFree" value="1"><inp2:m_Phrase label="lu_comm_FreeShipping" /><inp2:m_else/><inp2:m_param name="TotalCost"/></inp2:m_if>)</option>
+</inp2:m_DefineElement>
+
+<inp2:m_DefineElement name="order_shipment">
+ <select class="field" name="<inp2:m_param name='field_name'/>">
+ <option value="">Please select</option>
+ <inp2:ord_PrintShippingTypes render_as="order_shipping_type" currency="selected"/>
+ </select>
+</inp2:m_DefineElement>
+
+<label for="ship">How would you like the items shipped? <span class="star">*</span></label>
+
+<inp2:m_if check="ord_AddressValid" type="shipping">
+ <inp2:ord_PrintShippings render_as="order_shipment" currency="selected" no_shipments_render_as="no_shipments"/>
+<inp2:m_else/>
+ <select class="field" name="<inp2:ord_InputName name='ShippingTypeId'/>[1]">
+ <option value="">Please enter address</option>
+ </select>
+</inp2:m_if>
+
+<script type="text/javascript">
+ $(document).ready(
+ function () {
+ $('select', '#shipping-type-container').change(
+ function ($e) {
+ CheckoutManager.updateOrder(
+ 'elements/ajax/order_totals',
+ function ($data) {
+ $('.total').html($data);
+ }
+ );
+ }
+ );
+ }
+ );
</script>
\ No newline at end of file
Property changes on: branches/1.0.x/elements/ajax/shipping_type.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/search_results.tpl
===================================================================
--- branches/1.0.x/elements/ajax/search_results.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/search_results.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/ajax/search_results.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/product_options.tpl
===================================================================
--- branches/1.0.x/elements/ajax/product_options.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/product_options.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/ajax/product_options.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/order_details.tpl
===================================================================
--- branches/1.0.x/elements/ajax/order_details.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/order_details.tpl (revision 15169)
@@ -1,51 +1,51 @@
-<inp2:m_Include template="elements/content_boxes.elm" strip_nl="2"/>
-<inp2:m_Include template="elements/options.elm" strip_nl="2"/>
-
-<inp2:m_DefineElement name="orderitem_elem">
- <tr>
- <td class="item-img"<inp2:m_if check="HasOptions"> rowspan="2"</inp2:m_if>>
- <inp2:p_Image render_as="image_element" Primary="1" MaxWidth="58" DefaultWidth="58" DefaultImage="img/product_no_picture.png"/>
- </td>
- <td class="item-title">
- <inp2:Field name="ProductName"/><inp2:m_if check="ord_BackorderFlag"> <span><inp2:m_phrase label="lu_cart_BackorderFlag" /></span></inp2:m_if>
-
- <inp2:m_if check="HasDiscount">
- <br />
- <inp2:m_Phrase label="lu_comm_RegularPrice" />: <inp2:Field name="FlatPrice" currency="selected"/><br />
- <inp2:m_Phrase label="lu_comm_Discount" />: <span><inp2:Field name="ItemDiscount" currency="selected" negative="1"/></span>
- </inp2:m_if>
- </td>
- <td><inp2:Field name="Quantity"/></td>
- <td><inp2:Field name="Price" currency="selected"/></td>
- <td><inp2:Field name="ExtendedPrice" currency="selected"/></td>
- </tr>
-
- <inp2:m_if check="HasOptions">
- <tr>
- <td class="options-td" colspan="5">
- <inp2:m_if check="DisplayOptionsPricing">
- <inp2:PrintOptions render_as="ro_option_element" currency="selected"/>
- <inp2:m_else/>
- <inp2:PrintOptions render_as="ro_option_element_no_price" currency="selected"/>
- </inp2:m_if>
- </td>
- </tr>
- </inp2:m_if>
-</inp2:m_DefineElement>
-
-<div class="cart-detail receipt" style="width: 90%;">
- <table class="items">
- <thead>
- <tr>
- <th colspan="2" style="text-align: left;">Items in your order (<inp2:ord_ItemsInCart/>)</th>
- <th>Qty.</th>
- <th>Price</th>
- <th>Total</th>
- </tr>
- </thead>
-
- <tbody>
- <inp2:ord_ListOrderItems render_as="orderitem_elem"/>
- </tbody>
- </table>
+<inp2:m_Include template="elements/content_boxes.elm" strip_nl="2"/>
+<inp2:m_Include template="elements/options.elm" strip_nl="2"/>
+
+<inp2:m_DefineElement name="orderitem_elem">
+ <tr>
+ <td class="item-img"<inp2:m_if check="HasOptions"> rowspan="2"</inp2:m_if>>
+ <inp2:p_Image render_as="image_element" Primary="1" MaxWidth="58" DefaultWidth="58" DefaultImage="img/product_no_picture.png"/>
+ </td>
+ <td class="item-title">
+ <inp2:Field name="ProductName"/><inp2:m_if check="ord_BackorderFlag"> <span><inp2:m_phrase label="lu_cart_BackorderFlag" /></span></inp2:m_if>
+
+ <inp2:m_if check="HasDiscount">
+ <br />
+ <inp2:m_Phrase label="lu_comm_RegularPrice" />: <inp2:Field name="FlatPrice" currency="selected"/><br />
+ <inp2:m_Phrase label="lu_comm_Discount" />: <span><inp2:Field name="ItemDiscount" currency="selected" negative="1"/></span>
+ </inp2:m_if>
+ </td>
+ <td><inp2:Field name="Quantity"/></td>
+ <td><inp2:Field name="Price" currency="selected"/></td>
+ <td><inp2:Field name="ExtendedPrice" currency="selected"/></td>
+ </tr>
+
+ <inp2:m_if check="HasOptions">
+ <tr>
+ <td class="options-td" colspan="5">
+ <inp2:m_if check="DisplayOptionsPricing">
+ <inp2:PrintOptions render_as="ro_option_element" currency="selected"/>
+ <inp2:m_else/>
+ <inp2:PrintOptions render_as="ro_option_element_no_price" currency="selected"/>
+ </inp2:m_if>
+ </td>
+ </tr>
+ </inp2:m_if>
+</inp2:m_DefineElement>
+
+<div class="cart-detail receipt" style="width: 90%;">
+ <table class="items">
+ <thead>
+ <tr>
+ <th colspan="2" style="text-align: left;">Items in your order (<inp2:ord_ItemsInCart/>)</th>
+ <th>Qty.</th>
+ <th>Price</th>
+ <th>Total</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <inp2:ord_ListOrderItems render_as="orderitem_elem"/>
+ </tbody>
+ </table>
</div>
\ No newline at end of file
Property changes on: branches/1.0.x/elements/ajax/order_details.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/ajax/payment_form.tpl
===================================================================
--- branches/1.0.x/elements/ajax/payment_form.tpl (revision 15168)
+++ branches/1.0.x/elements/ajax/payment_form.tpl (revision 15169)
@@ -1,7 +1,7 @@
-<form id="payment-form" method="post" action="<inp2:ord_GetFormAction/>">
- <inp2:ord_GetFormHiddenFields return_template="receipt" cancel_template="checkout"/>
-
- <!--##<inp2:m_if check="ord_NeedsPlaceButton">
- <input type="submit" value="<inp2:m_Phrase label='lu_order_CompleteOrder'/>"/>
- </inp2:m_if>##-->
+<form id="payment-form" method="post" action="<inp2:ord_GetFormAction/>">
+ <inp2:ord_GetFormHiddenFields return_template="receipt" cancel_template="checkout"/>
+
+ <!--##<inp2:m_if check="ord_NeedsPlaceButton">
+ <input type="submit" value="<inp2:m_Phrase label='lu_order_CompleteOrder'/>"/>
+ </inp2:m_if>##-->
</form>
\ No newline at end of file
Property changes on: branches/1.0.x/elements/ajax/payment_form.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/side_boxes/recently_viewed.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/recently_viewed.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/side_boxes/recently_viewed.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/side_boxes/recently_viewed.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/side_boxes/filter_dropdown.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/filter_dropdown.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/side_boxes/filter_dropdown.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/side_boxes/filter_dropdown.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/side_boxes/filter_range.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/filter_range.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/side_boxes/filter_range.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/side_boxes/filter_range.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/side_boxes/filter_checkboxes.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/filter_checkboxes.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/side_boxes/filter_checkboxes.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/side_boxes/filter_checkboxes.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/side_boxes/related_products.elm.tpl
===================================================================
--- branches/1.0.x/elements/side_boxes/related_products.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/side_boxes/related_products.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/side_boxes/related_products.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/content_boxes.elm.tpl
===================================================================
--- branches/1.0.x/elements/content_boxes.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/content_boxes.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/content_boxes.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/product_elements.elm.tpl
===================================================================
--- branches/1.0.x/elements/product_elements.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/product_elements.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/product_elements.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/navigation_bar.elm.tpl
===================================================================
--- branches/1.0.x/elements/navigation_bar.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/navigation_bar.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/navigation_bar.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/navigation_menu.elm.tpl
===================================================================
--- branches/1.0.x/elements/navigation_menu.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/navigation_menu.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/navigation_menu.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/sorting.elm.tpl
===================================================================
--- branches/1.0.x/elements/sorting.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/sorting.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/sorting.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/html_head.elm.tpl
===================================================================
--- branches/1.0.x/elements/html_head.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/html_head.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/html_head.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/header.elm.tpl
===================================================================
--- branches/1.0.x/elements/header.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/header.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/header.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/pagination.elm.tpl
===================================================================
--- branches/1.0.x/elements/pagination.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/pagination.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/pagination.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/dynamic_forms.elm.tpl
===================================================================
--- branches/1.0.x/elements/dynamic_forms.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/dynamic_forms.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/dynamic_forms.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/options.elm.tpl
===================================================================
--- branches/1.0.x/elements/options.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/options.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/options.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/footer.elm.tpl
===================================================================
--- branches/1.0.x/elements/footer.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/footer.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/footer.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/content_boxes/categories.elm.tpl
===================================================================
--- branches/1.0.x/elements/content_boxes/categories.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/content_boxes/categories.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/content_boxes/categories.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/content_boxes/products.elm.tpl
===================================================================
--- branches/1.0.x/elements/content_boxes/products.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/content_boxes/products.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/content_boxes/products.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Index: branches/1.0.x/elements/tracking.elm.tpl
===================================================================
--- branches/1.0.x/elements/tracking.elm.tpl (revision 15168)
+++ branches/1.0.x/elements/tracking.elm.tpl (revision 15169)
Property changes on: branches/1.0.x/elements/tracking.elm.tpl
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property

Event Timeline