From 22483303448f37ceb6c1ba2929fbb00e95805711 Mon Sep 17 00:00:00 2001 From: Nikit Date: Thu, 12 Mar 2015 15:48:21 +0900 Subject: [PATCH] Commerce Ajax Cart 7.x-1.x-dev rework. #2 --- README.md | 9 -- README.txt | 57 +++++++++ commerce_ajax_cart.admin.inc | 120 +++++++++--------- commerce_ajax_cart.info | 7 +- commerce_ajax_cart.module | 208 ++++++++++++++++++++------------ css/commerce_ajax_cart.css | 3 +- images/ajax-loader.gif | Bin 8787 -> 0 bytes js/commerce_ajax_cart.js | 63 ++++++++-- theme/ajax-loader.gif | Bin 0 -> 8787 bytes theme/commerce-ajax-cart-dialog.tpl.php | 26 ++++ theme/commerce-ajax-cart.tpl.php | 22 ++++ 11 files changed, 355 insertions(+), 160 deletions(-) delete mode 100644 README.md create mode 100644 README.txt delete mode 100644 images/ajax-loader.gif create mode 100644 theme/ajax-loader.gif create mode 100644 theme/commerce-ajax-cart-dialog.tpl.php create mode 100644 theme/commerce-ajax-cart.tpl.php diff --git a/README.md b/README.md deleted file mode 100644 index 3d8b857..0000000 --- a/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Add your own trigger. - - diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..5b6c7e0 --- /dev/null +++ b/README.txt @@ -0,0 +1,57 @@ +Commerce Ajax Cart +https://www.drupal.org/project/commerce_ajax_cart + +SUMMARY: +Making default commerce cart to be "ajax cart". + +REQUIREMENTS: +1. http://drupal.org/project/commerce (commerce_cart submodule) + +DEMO: +http://shop.shaque.net/ + +INSTALLATION: +Install as usual, see http://drupal.org/documentation/install/modules-themes/modules-7 for further information. + +CONFIGURATION: +1. Enable "Shopping cart" on your theme: admin/structure/block. +2. Visit module configure: admin/commerce/config/advanced-settings/ajax-cart +3. "Positioning of cart preview" (TODO: add some quick helping info) +4. Select "Shopping cart to use". Select "Shopping cart form", if you are not sure what to choose... +5. Select "Commerce cart block": you should select cart block from #1. +6. "Fly to cart" - when you click "Add to Cart" on product page, first image will fly to cart. + +NOTES: +You can use prepared cart views: "shopping cart commerce ajax cart": +1. Visit and enable it: admin/structure/views. +2. On commerce_ajax_cart configuration page select this View (see Configuration #4). + +THEMING: +1. "Show cart" link theming: + 1.1 Copy /theme/commerce-ajax-cart.tpl.php to your theme templates folder; + 1.2 See comments for ready-to-use available variables or use $order. +2. + +DEVELOPERS: + +(function($) { + $(window).bind('commerce_ajax_cart_update', function(e, formId) { + // Trigger cart update event. + }) + + // Trigger cart show. + var cart = jQuery('.commerce-ajax-cart-loader'); + cart.trigger('mouseenter'); + +})(jQuery); + +TODO: +1. See TODO comments in module codes. +2. form #ajax is bad: Increasing size of "cache_form" DB table for list of products, where "add to form" enabled for each product. + Solutions? + 2.1 $form_state['no_cache'] = TRUE; + 2.2 https://www.drupal.org/sandbox/xandeadx/2270819 +3. Make Views cart form ajaxable. + +CONTACTS: +Erik Seifert (www.b-connect.de) \ No newline at end of file diff --git a/commerce_ajax_cart.admin.inc b/commerce_ajax_cart.admin.inc index 7d74715..13f35de 100644 --- a/commerce_ajax_cart.admin.inc +++ b/commerce_ajax_cart.admin.inc @@ -10,96 +10,104 @@ */ function commerce_ajax_cart_settings_form() { $defaults = variable_get('commerce_ajax_cart_position', commerce_ajax_cart_get_defaults()); - - $views = views_get_enabled_views(); - $view_settings = array(); - foreach ($views as $view_id => $view) { - if ($view->base_table == 'commerce_order') { - foreach ($view->display as $display_id => $display) { - $view_settings[$view_id . '.' . $display_id] = $view->human_name . ' (' . $view->name . '.' . $display_id . ')'; - } - } - } - - $form['position'] = array( + $form['commerce_ajax_cart_position'] = array( '#type' => 'fieldset', '#tree' => TRUE, '#title' => t('Positioning of cart preview'), '#description' => t('For futher information, read documentation for jquery_ui position.', array('@url' => 'http://api.jqueryui.com/position/')), ); - $form['position']['my'] = array( + $form['commerce_ajax_cart_position']['my'] = array( '#type' => 'textfield', '#title' => 'my', '#default_value' => $defaults['my'], ); - $form['position']['at'] = array( + $form['commerce_ajax_cart_position']['at'] = array( '#type' => 'textfield', '#title' => 'at', '#default_value' => $defaults['at'], ); - $form['position']['collision'] = array( + $form['commerce_ajax_cart_position']['collision'] = array( '#type' => 'textfield', '#title' => 'collision', '#default_value' => $defaults['collision'], ); - $form['empty'] = array( + $form['commerce_ajax_cart_text'] = array( '#type' => 'textfield', '#title' => t('Empty cart text'), '#default_value' => variable_get('commerce_ajax_cart_text', t('There is no product in your cart')), ); - $form['view'] = array( + $views = views_get_enabled_views(); + $view_settings = array(); + foreach ($views as $view_id => $view) { + if ($view->base_table == 'commerce_order') { + foreach ($view->display as $display_id => $display) { + $view_settings[$view_id . '.' . $display_id] = $view->human_name . ' (' . $view->name . '.' . $display_id . ')'; + } + } + } + $form['commerce_ajax_cart_view'] = array( '#type' => 'select', '#options' => $view_settings, '#title' => t('Shopping cart to use'), '#default_value' => variable_get('commerce_ajax_cart_view', COMMERCE_AJAX_CART_DEFAULT_VIEW), + '#description' => t('Select Shopping cart form, if you are not sure...'), ); - $behaviours = commerce_ajax_cart_script_examples(); + module_load_include('inc', 'block', 'block.admin'); + $current_theme = variable_get('theme_default', 'garland'); + $blocks = block_admin_display_prepare_blocks($current_theme); + $blocks_list = array(); + foreach ($blocks as $block) { + if ($block['module'] == 'commerce_cart') { + $blocks_list[$block['bid']] = $block['info']; + } + } - $form['behaves'] = array( - '#type' => 'container', - '#tree' => TRUE, - '#title' => t('Example behaviours'), + $form['commerce_ajax_cart_block'] = array( + '#type' => 'select', + '#options' => $blocks_list, + '#title' => t('Commerce cart block'), + '#default_value' => variable_get('commerce_ajax_cart_block'), ); - $behaviours_default = variable_get('commerce_ajax_cart_behaves', array( - 'show_cart' => 0, - 'fly_to_cart' => 0, - )); + $form['commerce_ajax_cart_use_dialog'] = array( + '#type' => 'checkbox', + '#title' => t('Use dialog'), + '#default_value' => variable_get('commerce_ajax_cart_use_dialog'), + '#description ' => t('This popup dialog inform about adding to cart. If disabled, adding to cart message will appear as status message.'), + ); + $form['commerce_ajax_cart_content_name'] = array( + '#type' => 'textfield', + '#title' => t('Content id or class'), + '#default_value' => variable_get('commerce_ajax_cart_content_name', '#block-system-main'), + '#description' => t('Main container, where status message will appear. Usually, by default is #block-system-main'), + '#states' => array( + 'invisible' => array( + ':input[name="commerce_ajax_cart_use_dialog"]' => array('checked' => TRUE), + ), + ), + ); - foreach ($behaviours as $id => $b) { - $form['behaves'][$id] = array( - '#type' => 'checkbox', - '#title' => check_plain($b['title']), - '#return_value' => 1, - '#default_value' => $behaviours_default[$id], - ); - $form['behaves'][$id . '_example'] = array( - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#title' => t('Show code'), - ); - $form['behaves'][$id . '_example']['code'] = array( - '#markup' => '
' . $b['content'] . '
', - ); - } + $form['commerce_ajax_cart_fly2cart'] = array( + '#type' => 'checkbox', + '#title' => t('Fly to cart'), + '#default_value' => variable_get('commerce_ajax_cart_fly2cart'), + ); - $form['actions']['submit'] = array( - '#type' => 'submit', - '#value' => t('Save settings'), + // TODO Bad. Better solution? + $form['commerce_ajax_cart_fly2cart_parent'] = array( + '#type' => 'textfield', + '#title' => t('Image and add to cart container classes or IDs'), + '#default_value' => variable_get('commerce_ajax_cart_fly2cart_parent'), + '#description' => t('Class or ID names of closest parent element, separated by comma in order of distance increasing, that contain both image of product and "add to cart" form
For example, .node,.views-row - .node will seeked first, then if not found, .views-row
Be sure, it shouldn\'t contain other products images and add to cart forms.'), + '#states' => array( + 'invisible' => array( + ':input[name="commerce_ajax_cart_fly2cart"]' => array('checked' => FALSE), + ), + ), ); - return $form; -} -/** - * Implements hook_form_submit(). - */ -function commerce_ajax_cart_settings_form_submit($form, $form_state) { - variable_set('commerce_ajax_cart_position', $form_state['values']['position']); - variable_set('commerce_ajax_cart_text', $form_state['values']['empty']); - variable_set('commerce_ajax_cart_view', $form_state['values']['view']); - variable_set('commerce_ajax_cart_behaves', $form_state['values']['behaves']); + return system_settings_form($form); } diff --git a/commerce_ajax_cart.info b/commerce_ajax_cart.info index d693e0a..e49169a 100644 --- a/commerce_ajax_cart.info +++ b/commerce_ajax_cart.info @@ -4,10 +4,5 @@ package = Commerce (contrib) core = 7.x dependencies[] = commerce_cart -stylesheets[all][] = css/commerce_ajax_cart.css -; Information added by Drupal.org packaging script on 2014-01-17 -version = "7.x-1.0-beta2" -core = "7.x" -project = "commerce_ajax_cart" -datestamp = "1389966808" +stylesheets[all][] = css/commerce_ajax_cart.css diff --git a/commerce_ajax_cart.module b/commerce_ajax_cart.module index f472ef8..0f35054 100644 --- a/commerce_ajax_cart.module +++ b/commerce_ajax_cart.module @@ -7,7 +7,7 @@ */ define('COMMERCE_AJAX_CART_CACHE_PREFIX', 'commerce_ajax_cart_'); -define('COMMERCE_AJAX_CART_DEFAULT_VIEW', 'commerce_cart_block.default'); +define('COMMERCE_AJAX_CART_DEFAULT_VIEW', 'commerce_cart_form.default'); /** * Implements hook_views_api(). @@ -64,16 +64,30 @@ function commerce_ajax_cart_get_defaults() { } /** + * Implements hook_theme(). + */ +function commerce_ajax_cart_theme() { + return array( + 'commerce_ajax_cart' => array( + 'variables' => array('product_count' => NULL, 'total_quantity' => NULL, 'total_amount' => NULL, 'order' => NULL), + 'path' => drupal_get_path('module', 'commerce_ajax_cart') . '/theme', + 'template' => 'commerce-ajax-cart', + ), + 'commerce_ajax_cart_dialog' => array( + 'variables' => array('line_item' => NULL), + 'path' => drupal_get_path('module', 'commerce_ajax_cart') . '/theme', + 'template' => 'commerce-ajax-cart-dialog', + ), + ); +} + +/** * Implements hook_preprocess_block(). */ function commerce_ajax_cart_preprocess_block(&$variables) { - if ('commerce_cart' == $variables['block']->module && $variables['block_id'] == 1) { - $variables['content'] = l('' . t('Show cart') . '', 'cart', array( - 'html' => TRUE, - 'attributes' => array( - 'class' => array('commerce-ajax-cart-loader'), - ), - )); + if ($variables['block']->bid == variable_get('commerce_ajax_cart_block')) { + $params = commerce_ajax_cart_block_params(); + $variables['content'] = theme('commerce_ajax_cart', $params); } } @@ -81,8 +95,8 @@ function commerce_ajax_cart_preprocess_block(&$variables) { * Menu callback to print the contents block. */ function commerce_ajax_cart_show_contents_block() { - $content = commerce_cart_block_view('cart'); - print $content['content']; + $params = commerce_ajax_cart_block_params(); + print theme('commerce_ajax_cart', $params); } /** @@ -100,38 +114,28 @@ function commerce_ajax_validate_post_request() { */ function commerce_ajax_cart_preprocess_html() { $defaults = variable_get('commerce_ajax_cart_position', commerce_ajax_cart_get_defaults()); - drupal_add_library('system', 'ui.position', 'drupal.ajax'); + drupal_add_library('system', 'ui.position'); + drupal_add_library('system', 'drupal.ajax'); drupal_add_js(drupal_get_path('module', 'commerce_ajax_cart') . '/js/commerce_ajax_cart.js', array( 'type' => 'file', 'scope' => 'footer', - 'weight' => 100, + 'weight' => 9, )); $commerce_ajax_cart_view = commerce_ajax_cart_get_view_name(); - drupal_add_js(array( - 'commerce_ajax_cart' => array( - 'position' => $defaults, - 'update_url' => url('cart/ajax/update'), - 'form_id' => $commerce_ajax_cart_view['view'], - 'update_url_block' => url('cart/ajax/block'), - 'ajax_url' => url('cart/ajax'), - 'text' => variable_get('commerce_ajax_cart_text', t('There is no product in your cart')), - ), - ), 'setting'); - $behaves = commerce_ajax_cart_script_examples(); - $behaviours_default = variable_get('commerce_ajax_cart_behaves', array()); - foreach ($behaviours_default as $key => $status) { - if ($status == 1) { - $cmd = "jQuery(window).bind('commerce_ajax_cart_update',function(e,formId) {"; - $cmd .= $behaves[$key]['content']; - $cmd .= "});"; - drupal_add_js($cmd, array( - 'type' => 'inline', - 'scope' => 'footer', - 'weight' => 10, - )); - $cmd = ''; - } + $setting['commerce_ajax_cart']= array( + 'position' => $defaults, + 'update_url' => url('cart/ajax/update'), + 'form_id' => $commerce_ajax_cart_view['view'], + 'update_url_block' => url('cart/ajax/block'), + 'ajax_url' => url('cart/ajax'), + 'text' => variable_get('commerce_ajax_cart_text', t('There is no product in your cart')), + ); + if (variable_get('commerce_ajax_cart_fly2cart')) { + $parents = explode(',', variable_get('commerce_ajax_cart_fly2cart_parent')); + $setting['commerce_ajax_cart']['fly2cart_parent'] = $parents; } + drupal_add_js($setting, 'setting'); + } /** @@ -184,9 +188,49 @@ function commerce_ajax_cart_entity_info_alter(&$entity_info) { } /** + * Implements hook_form_alter(). + * +TODO Make views cart form ajaxable for all actions: edit quantity, remove, update. +function commerce_ajax_cart_form_alter(&$form, &$form_state, $form_id) { + $commerce_ajax_cart_view = variable_get('commerce_ajax_cart_view', COMMERCE_AJAX_CART_DEFAULT_VIEW); + // TODO Make better selection view form from settings: + if ($form_id == 'views_' . $commerce_ajax_cart_view['view'] . '_' . $commerce_ajax_cart_view['display']) { + $form['#action'] = url('cart'); + if (!empty($form['edit_delete'])) { + foreach(element_children($form['edit_delete']) as $key) { + if (!empty($form['edit_delete'][$key]['#line_item_id'])) { + $form['edit_delete'][$key]['#ajax'] = array( + 'callback' => 'commerce_ajax_cart_cart_callback', + ); + } + } + } + } +} + +function commerce_ajax_cart_cart_callback($form, &$form_state) { + global $user; + drupal_get_messages(); + $_POST = array(); + $order_id = commerce_cart_order_id($user->uid); + $cart = commerce_embed_view('commerce_cart_form', 'default', array($order_id)); + return array( + '#type' => 'ajax', + '#commands' => array( + ajax_command_replace('.view-commerce-cart-form', $cart), + ), + ); +} +*/ + +/** * Implements hook_form_FORM_ID_alter(). */ function commerce_ajax_cart_form_commerce_cart_add_to_cart_form_alter(&$form, $form_state, $form_id) { + if (variable_get('commerce_ajax_cart_use_dialog')) { + $form['#attached']['library'][] = array('system', 'ui.dialog'); + } + $form['submit']['#ajax'] = array( 'callback' => 'commerce_ajax_cart_callback', ); @@ -199,18 +243,45 @@ function commerce_ajax_cart_callback($form, &$form_state) { global $user; $form = drupal_rebuild_form($form['#form_id'], $form_state, $form); - + $commands[] = array('command' => 'commerce_ajax_cart_update'); - $commands[] = ajax_command_prepend('#block-system-main', theme('status_messages')); + + if (variable_get('commerce_ajax_cart_use_dialog')) { + // TODO Theme should more control on title, content and so on + $dialog = theme('commerce_ajax_cart_dialog', array('line_item' => $form_state['line_item'])); + $commands[] = ajax_command_remove('#commerce-ajax-cart-dialog'); + $commands[] = ajax_command_append('body', '
' . $dialog . '
'); + $commands[] = ajax_command_invoke('#commerce-ajax-cart-dialog', 'dialog', array(array( + 'modal' => TRUE, + 'width' => 'auto', // TODO Fixed width? + ))); + } + else { + $commands[] = ajax_command_invoke('#commerce_ajax_cart_messages', 'fadeOut'); + $commands[] = ajax_command_remove('#commerce_ajax_cart_messages'); + + // TODO if no #block-system-main? + $commands[] = ajax_command_prepend(variable_get('commerce_ajax_cart_content_name', '#block-system-main'), '
' . theme('status_messages') . '
'); + $commands[] = ajax_command_invoke('#commerce_ajax_cart_messages', 'fadeIn'); + } + $commands[] = ajax_command_replace('.' . drupal_html_class($form['#form_id']), drupal_render($form)); + $commands[] = array( 'command' => 'commerceAjaxCartFireTrigger', 'data' => $form['#form_id'], ); + if (variable_get('commerce_ajax_cart_fly2cart')) { + $commands[] = array( + 'command' => 'commerceAjaxCartFly', + 'data' => $form['#id'], + ); + } + return array( '#type' => 'ajax', - '#commands' => $commands, + '#commands' => $commands ); } @@ -294,43 +365,30 @@ function commerce_ajax_cart_get_view_name() { } /** - * Provides example JS snippets. + * Cart block content. */ -function commerce_ajax_cart_script_examples() { +function commerce_ajax_cart_block_params() { + global $user; + + $product_count = 0; + $total_quantity = 0; + $total_amount = 0; + + $order = commerce_cart_order_load($user->uid); + + if (!empty($order) && !empty($order->commerce_line_items)) { + $wrapper = entity_metadata_wrapper('commerce_order', $order); + $total_amount = $wrapper->commerce_order_total->value(); + foreach ($wrapper->commerce_line_items as $delta => $line_item_wrapper) { + $product_count++; + $total_quantity += $line_item_wrapper->quantity->value(); + } + } + return array( - 'show_cart' => array( - 'title' => t('Open cart'), - 'content' => "var cart = jQuery('.view-shopping-cart'); -cart.trigger('mouseenter');", - ), - 'fly_to_cart' => array( - 'title' => t('Fly to cart'), - 'content' => "var cart = jQuery('.view-shopping-cart'); -var imgtodrag = jQuery('.commerce-product-field').find('img').eq(0); -if (imgtodrag) { - var imgclone = imgtodrag.clone().offset({ - top: imgtodrag.offset().top, - left: imgtodrag.offset().left - }).css({ - 'opacity': '0.5', - 'position': 'absolute', - 'height': '150px', - 'width': '150px', - 'z-index': '100' - }).appendTo(jQuery('body')).animate({ - 'top': cart.offset().top + 10, - 'left': cart.offset().left + 10, - 'width': 75, - 'height': 75 - }, 1000); - imgclone.animate({ - 'width': 0, - 'height': 0 - }, - function () { - jQuery(this).detach(); - }); -}", - ), + 'product_count' => $product_count, + 'total_quantity' => $total_quantity, + 'total_amount' => $total_amount, + 'order' => $order, ); } diff --git a/css/commerce_ajax_cart.css b/css/commerce_ajax_cart.css index 1e82354..07a24a0 100644 --- a/css/commerce_ajax_cart.css +++ b/css/commerce_ajax_cart.css @@ -6,13 +6,14 @@ background-color: #fff; box-shadow: 3px 3px #ccc; + z-index: 99; } #commerce-ajax-cart-preview.loading { min-width: 100px; min-height: 100px; - background-image: url(../images/ajax-loader.gif); + background-image: url(../theme/ajax-loader.gif); background-repeat: no-repeat; background-position: center center; } diff --git a/images/ajax-loader.gif b/images/ajax-loader.gif deleted file mode 100644 index cbe59fb438d575e2b8aa6b356b5c903dacea6cd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8787 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 Z!QkV=)ywzNd0AvD_s_rnLh--P{{SmBg>3); diff --git a/js/commerce_ajax_cart.js b/js/commerce_ajax_cart.js index 27650cb..36adbbe 100644 --- a/js/commerce_ajax_cart.js +++ b/js/commerce_ajax_cart.js @@ -32,7 +32,7 @@ fillCartBlock: function() { $('a.commerce-ajax-cart-loader').each(function() { $.post(Drupal.settings.commerce_ajax_cart.update_url_block, function(data) { - $('a.commerce-ajax-cart-loader').html(data); + $('a.commerce-ajax-cart-loader').parent().html(data); }); }) }, @@ -40,25 +40,19 @@ var options = { 'my': Drupal.settings.commerce_ajax_cart.position.my, 'at': Drupal.settings.commerce_ajax_cart.position.at, - 'of': $('.view-id-' + Drupal.settings.commerce_ajax_cart.form_id).parent(), + 'of': $('.commerce-ajax-cart-loader').parent(), 'collision': Drupal.settings.commerce_ajax_cart.position.collision }; $('#commerce-ajax-cart-preview').position(options); }, attach: function(context, settings) { // Call for chached sites to update block display. - var $container = $(context).find('.view-id-' + Drupal.settings.commerce_ajax_cart.form_id).parent(); + var $container = $(context).find('.commerce-ajax-cart-loader').parent(); $container.once('commerce-ajax-cart-processed', function() { Drupal.ajax.prototype.commands.commerce_ajax_cart_update(); Drupal.behaviors.commerce_add_to_cart_show_ajax_cart.fillCartBlock(context); }); - $('#dc-cart-ajax-form-wrapper form').once('commerce-ajax-cart-update', function() { - $(this).find('a').bind('click', function() { - Drupal.ajax.prototype.commands.commerce_ajax_cart_update(); - }); - }) - $container.bind('mouseenter', function(e) { e.preventDefault(); window.clearTimeout(Drupal.behaviors.commerce_add_to_cart_show_ajax_cart.timer); @@ -86,10 +80,53 @@ $('#commerce-ajax-cart-preview').remove(); }, Drupal.behaviors.commerce_add_to_cart_show_ajax_cart.delay); }); + } } -})(jQuery); -Drupal.ajax.prototype.commands.commerceAjaxCartFireTrigger = function(ajax, response, status) { - jQuery(window).trigger('commerce_ajax_cart_update', response.data); -} + Drupal.ajax.prototype.commands.commerceAjaxCartFireTrigger = function(ajax, response, status) { + $(window).trigger('commerce_ajax_cart_update', response.data); + } + + Drupal.ajax.prototype.commands.commerceAjaxCartFly = function(ajax, response, status) { + var link2cart = $('.commerce-ajax-cart-loader'); + + // TODO Very bad. Better solution? + $.each(Drupal.settings.commerce_ajax_cart.fly2cart_parent, function(index, value) { + var imgtodrag = $('#' + response.data).parents(value).find('img').eq(0); + if (imgtodrag.length) { + var imgclone = imgtodrag.clone().offset({ + top: imgtodrag.offset().top, + left: imgtodrag.offset().left + }).css({ + 'opacity': '0.5', + 'position': 'absolute', + 'height': imgtodrag.clientHeight, + 'width': imgtodrag.clientWidth, + 'z-index': '999' + }).appendTo(jQuery('body')).animate({ + 'top': link2cart.offset().top + 10, + 'left': link2cart.offset().left + 10, + 'width': link2cart.clientHeight, + 'height': link2cart.clientHeight + }, 1000); + + imgclone.animate( + { + 'width': 0, + 'height': 0 + }, + function () { + $(this).detach(); + } + ); + // Break cycle if found and animated. + return false; + } + + }); + + + } + +})(jQuery); diff --git a/theme/ajax-loader.gif b/theme/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..cbe59fb438d575e2b8aa6b356b5c903dacea6cd5 GIT binary patch literal 8787 zcmaKyX;f3^-u9F1ojqkI*_j7ONJ5Aq1PBn6!?B)>77#TIA}ZE^pg6S=ky5obAz=~+ zP*7BC11cb*MeBfL0TFRVv=*ldR;{&qq}tlr)1E%N&wAH-KD?{$5BaoLR@U#n?(08X zc{g!l+&{7v6b0pH3gyo~|D;eTZEbBnpU>%ZCMPFPm@pwBAt56p!{u_VU%%e(_s^R* z&uBD8M@PrS#aS$t!otGl=H~tT_b*(y&|olhbad!+x~#0M+S*!;Mx#=xDk>`K>+4sq zUY(knx?;r&xm>PLC;|fm8yXsfLgDe_$GKeYp+kpGpFVx%%9X*v!J(m{{{H^n-rfff z9z1*Y?D6Brqobp*U%&qS_uuc{y$gaM`3o@&BR~KDNBJjXiakBeYIfM8BMbnQd_(zP zskI<4yD%?T@!^8Pd`0%c?Bc~AWamaKcz@mp6y+Nbg~_+{e|^_q5Gc@}Cbui00Vmc^ zI&WSa|CyVvDvYm7%4prJRV<$P^(cDqUIgA)7{4mq8nb2H3fY9t9gK4mBWC^!;b7Q@ zc0w8;Rjq*}J_lbU-B`|9?_dZ-HBu3<*?|kTZmauj3XLgXwFNa#1@;Wx4hRV$gNxQyA(AwPrW=Qv;(5tDW68hE1T4?b&5cuc8o2GcK<7_!4;$?jyb* z3(5i*lJ~Kv9VW^e{=a4%_l+Q7Q|J=m_;qbB>9?k8K)vg@vjnZxUjV6Z0c+ThwC6^# z!qnSZ+iA+TH10l9$esM9g=!7vuIp&5x!FvaDk3h=^Y*oE8CUtw+aKjW49F|`FeG4Q zI$I?Aq(BAXBxnu@ms@zSK(M9?mTYmNtnIr5oJJ>uy^G0W2JUh4nTPi~4yMuACr={B z<^)1#AhxV44ey1%>`z5tVzBi}3jFogOTMzvhv0K}tn_;@eRza|+@mA6pMdlr1Oc8{ zI4=<~`kEs74MB)Z=T!Fuoc7L7fTx<`1;0CzNc6icCCG|_rOr_Ut%52!I)kz_s>e;m zgu8x?_V$HPIXR!ES7&?ZB3Z2ZcK@%E3pBVEtB~4{e=+9z zByB>1N=LD;5r!=s&AL69r{ys^XU1(yYaf(cN%ot%i|m8%m`OGNonBpr4HFZ7Dpo+e zro#9vXGFj?jZs>6x`mTt-i>MNswQrFRMvTa@Oztu8MeT70ariWL{5X30 z@UiYv8cbY(mY*xd;K4!J)l&32eC1{yNT-{RNJicMmPQ_%^+25$MdkO=?`z+gjMEFh*pq znJrB5Snn2vVaMLx%{3e3NfXu;o-VldzHQ0-OGDT>b7e3aVlzKl`0=DA z?|DO1SQ-~jOkB%?Q4*~JX9l~L#*JgA@(_sF4k5C+7~~xTrYYdl2VnVfD>`NztDb)P z;+8X3IWm_6UpNh18KThWckl9V4M~FTBH6=N6ptR=|LzPf79&%hp8;RLKK#?%UvQlJ z+kbwGN*HDPYe9r(Gvrnyh>v4>xG2u%u@Jzv6#hX|WBFRmSnL3W7F>?wO|Y!~&GBnfPI*}0uH`wCA5)Z|-<>b>=v_TR?qbOXxC`obsh{Z50%njbD+gE)g4sRehm?e^}lmlmhS4u~jwdL65ftm%ZHA zUUCpX(TI7hDC(=n;51(R-s(&Rr4$vIsr8wP?h;g_Td1~2QSDf(J_lT$&40Q^8s)q+ zaO=SyOc?3xuQz-9k_F*cnrHuzF{bK7_WX{?*znoAr&gUA+;>srey@w_eTzM4x#ixS zHM!cqRIE)j;X~y+droEP>dzL&Qw1BRFWx!gDvsU8FdLe=tnaM1N1Z1kT>&a6XD$Pw zS0=(UK3?*HRHagiBxzg_30jkgZ~%!!jzaE|O~E3PG#?Qo+vvD#t_0pl9#IJ7umYbS zI1sqp$_Y459uZgs4uImreO&>;CoYu&*9Ne!QqYr^LJ*1&<)b(*A5JA6UgE0J*RQ!R zQX~(@jNt_S#Wlx0A(Wjo)S2z=q7aJlZpBgqR>A~dQY+&8!8_J0k7o`0DfIq$wZIp> zv|ufbE{oSYZ>1(Ba~bM^_C((|v<#}S=q10zLUZs!GjZ7ii)DZxk*=5J&=#Z%Bb#ZC z><0_ii42F@90zD&xHzWypu-aj-6p+6pO>8hWgSbK)478>eQ)&_tA6~AP81tB-DO*# zzb|lLF1Mnj+o5&vH#HUN5?8S@`v*r|adIDtTB6=Qbmqvc1=F=9KRPUC#e~vBE8gT6 zhlxZ4Ng6LIDqgVa|n^bkPwaxi_t~BKYkNX>Kn5Iy*5OxzvlPaxr}6!`ayOR!WD-k zxDG6x-op#AP3dqp+7p%7l+BryJvK}b*;3!}eb3o7_J-6I#~qC&^Z}J_COCI`a`uDor%DH{hC{e9NJEFXOU+>FZ&>FikHvG=#l);{mrlS4#P87eofYScf zF2F()cxl9KR{t+qO68UVmWJ5$&gm0UM_=4g zyoK&~oYrJg*rNZ^t=NHxeMK|kibFSkf1@eEv48UOmLE#R3XZ2ZU!wkZv}?E{493l`Z5#pV#uS}aI7)l; z*cK#`{wn2$YyS8n{HHa!{YSICupm53TgY*&p)ysN%3-c~u%^r|UW{mLb&05o3WZm9iL4$k60}xTAFJGvQD$?(3vYLiFQ-svJq3HX=hN7bhC8ym0 zL!R8(L5lS6y%^NT)qqrMc5(FCR=zVu&6`Z4c89OxZd`D~CUvW(mu;@n24eJTlirvY z2gGPSU*!-%K_9>blAWfJVO4;9{;Gwac;H%sfMuzn3^hrySPn>J42A>{m()QJTy7I` zxecF5cxh^I^S*ubPHU)8NTW4(6$0=nHWRh#LNyxgK~13zgV>i@Y=%V_9uaXpV#qGP zOSXSFB{od=>fw_VSOEizXBr!I3SY@=s(DJFt?Gl!-Qcd20Fy-pLQ>}+Y2T$t@J zd(Qze^ZGjwYj6!!I(An(ad0=j$;w|$9B9<6+itY<@S9A&tFyOR3$6^IPE*BBRRqy! z=2N^x@I;?s;84GJX9_2M-3;2obYfQNcrE9!56PU&YtVMT_TAj4NNUfUMZ23p8~6BA z1(DJ3J~<}h()SF?i;865AG(A~od@RDzm0fuJTO&7r7`3GB0e*h@1<%F<`SnB=Z#Mf z>f@(R;okTohd{38>K8YH8|k6@9<4w>2%>{IX*!LD1h-;=d@=f-3!&2yb*i2uRZ+!Y zaJf9%O4RLw>2Oe~ElhVHBD5kRje#OT@JU#_%o?db(-E#Kv;@|jf;d(~ROH|peZN(5 zl7Q|oEQb5{qoQuw0Qk-wz9l*)Ci?zEJNSeR(VqYM{70MY4x7z_F8R&X!>3h2l=xOt zm!FWrmFoOq{{w0TXE)y3Icn|;mFUttO)q!y>FUV*PG|H5N}bdgmp{X2zQmN`1L_>7 z_v$nzQiPpXG(CYhavv>@u-L9M_s`TIq_hWi02AYwQ5NgCZD>-hxO+KB-9|H3%%0Wc zaqkehI+#>@>pEUetk!Y-#>6|HuNvnpzBoPMM$g=mw`jXwEu+uxO4qL$(E68W6-Hxc zyLgGkFfFv!Zl9sfcy?sFpAdU1Gc(f;XK7;MkAcf2Ac*j}Ig$D>ovv6zt5J6e z0#0?1&|)j9G>whg1fbS~>_JNHhW!otHM&%;q7@+zsK831i{2g?xy*uz_mC5Z;?(KW z-G;MPStopv-fp~Oyn5Y+U4*|yEk^6T`*!?Wm>{xkcb?j0-x3f6{B#z1^9KL*a^>jN zF4&V3H{LMnR9ZqM(h07C;p|$RDUEA&T+6AUvMd?J!v_**H3C+xx?s46ya-4;f1}x3 z#u)d@!lQlL=wuGI1K(y$qgbZvh|28L38NRk2>D`*<}2+l1m^>(rF(G3z2zX+U!;c{aSQ4Mi47%VBaRJ{En# zsuqj8y4vj9&)TrApddQu>Q(eQ{Z7T#bJaJw&NmJW>Kd_KnKsC<*HK*(pu5>0+f<)`l~%21eJm@8Y}wXPM9ys|(ahfFcm z#mD-nTYpmIm(I-Tg=pr>J2Eeh1!)}=W<#fAELi0_7J8AJxP_(;b-uR6xpjcukF~ISO2l8 z#BKvY?NTDR)@T}0xLItWbalr&HE~s>^gX)V7G(EkYPUBht`DXjLDzO zmtcVaz$>2Vgto#i`qKR7(lYJLSC2iFi{j%x#-_Da zFzp{iC%nn)F6U->r~I*k3S^|W5w&V1Rn#OpSU=J;2*OLrBt=E3ln2WUVA)Vf$1e(1G%|9hwrzIe-S9oFYMwp^7th zHHu%sFW4A3_!W4~%D5^1dWa%J#3T2H0OUJl;2S(B=sV6gYC1Vg50PW}8#?U~{O6y; z?;NX3pn?d6kx)!~V5wWfE&2K4^4DheLf zvVKUB1ElPHH%M)GGq1axsce0}e&y>PfHr&FWW)TJUZ@6)tGK`g|F%cgvlblMy7YXm zYQ7<}J#qGg-Jj1~&M3CbJzTf&>~c+GhiKBHg2NXsZB3pz>qN3v)UfqPi$lm;Ia$9% zBjhqlypwdryh@p7?W71=4aTUQM8e1X+U<6Y#18=6opxDZD}e2_F-YJF;GmUzlymyH zg?k$9?V@md&-bZO{uQ(j!@(PzKJ>;7`9$Gb2DwlJ#S*)Sy%t4&_j2ja&-~xh> zUywT%<(QW*k9Fq8Is8s4-sW>^m7m)xIX|`Hai*GK&&L)`R(_nS7Xcn^E;LaZRd&3p ztPmM7_%0FwxPwxo1S&vSPEH&L-I{5^m@O{wT1qd(lt#p5{$~1a3PNDj`3Hy1=hhoG zX!dm#em4a~w<8LL%6EfZkpDrkSc4WGp-uZ|G9!8&JUTtasK%Pf6{h zx2Rb!-O!)Av3c>>1u-p$kh<>XR4HFrmA&Qm*4T`dA8#0u;IDHITuF#MaU^xm@VS3X zdX#kUNBfdh5gLtq;;K-MkQY&I3tJcV z8k1wFcldfsIYR5=0oRC$#+F3K{m12h?4bn_1d*veL!Y`{F(z?)mJ zx$W>l#$0{a%82mQ7H@WaLj)zE{)3-D!P;^l_XWe7*wmZ+yK?3060}GkxA}rC`f?xJ1NJ(#hyQBSQyfP z$5KJlWUd_eJrL7c#h3m$z1zGuL`J4WT>}8BqT%_Su5Qm+wyZjVQll{YHgF({+S1fr ziV38~;!z5rI74bv_fDUh!HP?GegB53w$`Q_AQOXUl#HI zH}GN8uhRr)AS~<0uxgJ8i)qQGn^`^2Cwd*RYqV-i7ecd^V{vl5k9sF(yVD zqEv>+%d4uQRo)GSY0-uqJCyaRZK;N+=Ez8?U!~fZ78Tp7*F)r5Cjd{^hn+fw1awP@ zbY1wlaGktIDw3q?G!daUbX@6>R6tMF2sPRf9R(C!7O-Yd)iAg;9#3N-$+m+m3ZQ7Fp;ikg;D)ry5=>HFLaw&8>Yq2YB zVZj4!-QpShYKDLQX6%CpP0wVZgErd&<4eu3^?WlQt5XzP70Td`Lq70O5Z}j8r3E6_ zVk&$CMH*160yY=}{C<^6Qg_N-__-rGRcuZMw>K@A5np52iQFx08CIEFsaC-h)2)NZ+vXBZV399 zL0p~PP2jw= zs(OcRTxfH9OeMG)Os-atu&F}J`t+rPNab`k8J3vbZVG^*reg75{OMf1-%w+*b5U^Y zLABFJ;s@$`eDU4BX&Ro12)`Zs{b2JHk>Ay5ry+Q_L_NgFX!r3~=nKW8%Rd-m(UJ{s zStd8&<9l}%Y|UDg)Dp1l0-s14N~^pei;xd>tQ*)pFJdU=*FtTKXv;M%9~(!!|EQPP z_RAzl^3f!mOhL+3sCN?Son@*3VC^JuLqIjBE{Q9WZjdf%NCZCfOG|dy#G?HoVs9du zP_tN72d(TQM{AE;m`9k*wk|TEX0x#_3v_Yd%Pu-}6WV?S{~9X30zl+O50+h_efto` z>x`4or*!(|k7A7fPUOod)`I1rwYVcRP&(Nrv%C7|^S`Nx$#d#ePocM-8`Z1=RCvIKp7N1;80 Z!QkV=)ywzNd0AvD_s_rnLh--P{{SmBg>3); literal 0 HcmV?d00001 diff --git a/theme/commerce-ajax-cart-dialog.tpl.php b/theme/commerce-ajax-cart-dialog.tpl.php new file mode 100644 index 0000000..83e9d9b --- /dev/null +++ b/theme/commerce-ajax-cart-dialog.tpl.php @@ -0,0 +1,26 @@ +quantity - added to cart line item quantity. + * ->order_id -> commerce order + * ->commerce_unit_price: array, see commerce-ajax-cart.tpl.php for amount output. + * ->commerce_total: array, see commerce-ajax-cart.tpl.php for amount output. + * ->commerce_product: added product. + * + * @see template_preprocess() + * @see template_process() + */ +?> +
+
+ +
diff --git a/theme/commerce-ajax-cart.tpl.php b/theme/commerce-ajax-cart.tpl.php new file mode 100644 index 0000000..38a12a2 --- /dev/null +++ b/theme/commerce-ajax-cart.tpl.php @@ -0,0 +1,22 @@ + + + + \ No newline at end of file -- 1.9.4.msysgit.2