synergy_default_theme 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +23 -0
- data/README.md +4 -0
- data/Rakefile +31 -0
- data/app/controllers/home_controller.rb +10 -0
- data/app/controllers/products_controller_decorator.rb +3 -0
- data/app/helpers/base_helper_decorator.rb +14 -0
- data/app/helpers/orders_helper_decorator.rb +5 -0
- data/app/helpers/product_helper_decorator.rb +22 -0
- data/app/helpers/taxons_helper_decorator.rb +7 -0
- data/app/models/page_sweeper.rb +20 -0
- data/app/models/tracker_sweeper.rb +20 -0
- data/app/views/admin/reviews/index.html.erb +42 -0
- data/app/views/admin/taxonomies/_list.html.erb +19 -0
- data/app/views/admin/taxonomies/_show_on_homepage_field.html.erb +4 -0
- data/app/views/checkout/_delivery.html.erb +25 -0
- data/app/views/checkout/_payment.html.erb +34 -0
- data/app/views/gateway/robokassa/show.html.erb +22 -0
- data/app/views/home/index.html.erb +11 -0
- data/app/views/layouts/spree_application.html.erb +110 -0
- data/app/views/orders/_advanced_cart.html.erb +45 -0
- data/app/views/products/_cart_form.html.erb +59 -0
- data/app/views/products/_eot_includes.html.erb +27 -0
- data/app/views/products/_image.html.erb +8 -0
- data/app/views/products/_properties.html.erb +12 -0
- data/app/views/products/_thumbnails.html.erb +36 -0
- data/app/views/products/show.html.erb +146 -0
- data/app/views/shared/_like_buttons.html.erb +27 -0
- data/app/views/shared/_login_bar.html.erb +26 -0
- data/app/views/shared/_order_details.html.erb +50 -0
- data/app/views/shared/_products.html.erb +42 -0
- data/app/views/shared/_rating.html.erb +8 -0
- data/app/views/shared/_reviews.html.erb +40 -0
- data/app/views/shared/_search.html.erb +3 -0
- data/app/views/shared/_synergy_compare_products_js.html.erb +51 -0
- data/app/views/shared/_taxonomies.html.erb +16 -0
- data/config/initializers/advanced_cart.rb +3 -0
- data/config/initializers/constants.rb +3 -0
- data/config/initializers/like_buttons.rb +1 -0
- data/config/locales/ru.yml +22 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20110330125354_add_show_on_main_page_flag_to_taxonomies.rb +9 -0
- data/db/migrate/20110404120925_change_column_title_in_reviews.rb +13 -0
- data/lib/spree_compare_products_hooks.rb +15 -0
- data/lib/spree_reviews_hook.rb +24 -0
- data/lib/synergy_default_theme.rb +39 -0
- data/lib/synergy_default_theme_hooks.rb +5 -0
- data/lib/tasks/install.rake +25 -0
- data/lib/tasks/synergy_default_theme.rake +1 -0
- data/public/images/bubblepopup_bg.png +0 -0
- data/public/images/bubblepopup_bottom.png +0 -0
- data/public/images/bubblepopup_top.png +0 -0
- data/public/images/button_long.png +0 -0
- data/public/images/button_short.png +0 -0
- data/public/images/cart.png +0 -0
- data/public/images/cart_th_bg.png +0 -0
- data/public/images/checkout.png +0 -0
- data/public/images/close_button.png +0 -0
- data/public/images/facebook_32.png +0 -0
- data/public/images/footer_panel.png +0 -0
- data/public/images/google_32.png +0 -0
- data/public/images/header_panel.png +0 -0
- data/public/images/libra.png +0 -0
- data/public/images/login_bar_bg.png +0 -0
- data/public/images/logo.png +0 -0
- data/public/images/noimage/product.jpg +0 -0
- data/public/images/noimage/small.jpg +0 -0
- data/public/images/red_button_bg.png +0 -0
- data/public/images/remove_comparable.png +0 -0
- data/public/images/search_button.png +0 -0
- data/public/images/search_textinput.png +0 -0
- data/public/images/search_textinput_active.png +0 -0
- data/public/images/star.png +0 -0
- data/public/images/star_orange.png +0 -0
- data/public/images/star_white.png +0 -0
- data/public/images/table_th1_34.png +0 -0
- data/public/images/twitter_32.png +0 -0
- data/public/images/vkontakte_32.png +0 -0
- data/public/images/zoom.png +0 -0
- data/public/javascripts/jquery.tools.min.js +23 -0
- data/public/javascripts/product.js +64 -0
- data/public/javascripts/product_simple.js +54 -0
- data/public/stylesheets/style.css +965 -0
- data/spec/spec_helper.rb +30 -0
- data/synergy_default_theme.gemspec +23 -0
- metadata +177 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
<%
|
2
|
+
paginated_products = @searcher.products if params.key?(:keywords)
|
3
|
+
paginated_products ||= products
|
4
|
+
%>
|
5
|
+
<% if products.empty? %>
|
6
|
+
<%= t(:no_products_found) %>
|
7
|
+
<% elsif params.key?(:keywords) %>
|
8
|
+
<h3><%= t(:search_results, :keywords => h(params[:keywords])) %></h3>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% if products.any? %>
|
12
|
+
<ul class="product-listing">
|
13
|
+
<% products.each do |product| %>
|
14
|
+
<% if Spree::Config[:show_zero_stock_products] || product.has_stock? %>
|
15
|
+
<li id="product_<%= product.id %>">
|
16
|
+
<%= hook :products_list_item, {:product => product} do %>
|
17
|
+
<%= link_to raw(product.name), product, :class => 'product-name' %>
|
18
|
+
<%= hook :products_list_item_image, {:product => product} do %>
|
19
|
+
<div class="product-image-wrapper">
|
20
|
+
<%= link_to small_image(product), product %>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
<% if defined?(SpreeReviews) %>
|
24
|
+
<div align="center" style="height: 15px;"><%= render 'shared/rating', :product => product %></div>
|
25
|
+
<% end %>
|
26
|
+
<%= link_to raw("<span class='price selling'>#{product_price(product)}</span>"), product, :class => 'info' %>
|
27
|
+
<% end %>
|
28
|
+
</li>
|
29
|
+
<% end %>
|
30
|
+
<% end %>
|
31
|
+
</ul>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<% if paginated_products.respond_to?(:total_pages)
|
35
|
+
params.delete(:search)
|
36
|
+
params.delete(:taxon)
|
37
|
+
%>
|
38
|
+
<%= will_paginate(paginated_products,
|
39
|
+
:previous_label => "« #{t('previous')}",
|
40
|
+
:next_label => "#{t('next')} »") %>
|
41
|
+
<% end %>
|
42
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% content_for :head do %>
|
2
|
+
<%= stylesheet_link_tag 'reviews.css' %>
|
3
|
+
<% end %>
|
4
|
+
<% stars = product.get_stars %>
|
5
|
+
<div title="<%# txt_stars(stars[0]) %>" class="rating-stars-container">
|
6
|
+
<%= render :partial => "reviews/stars", :locals => {:stars => stars[0]} %>
|
7
|
+
</div>
|
8
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<div id="reviews">
|
2
|
+
<a name="reviews_anc"></a>
|
3
|
+
<h3><%= t('review_header') %></h3>
|
4
|
+
|
5
|
+
<div style="margin-bottom: 2em">
|
6
|
+
<a id="add_review_link" href="#">Добавить отзыв</a>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div id="add_review_container" style="display: none">
|
10
|
+
<%= render 'reviews/form', { :product => @product, :review => Review.new } %>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<hr class="review_hr" style="" />
|
14
|
+
|
15
|
+
<a name="reviews_list"></a>
|
16
|
+
<% for review in @product.reviews.approval_filter %>
|
17
|
+
<%= render :partial => 'shared/review', :locals => {:review => review} %>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<script type="text/javascript">
|
22
|
+
$(function() {
|
23
|
+
$('#new_review').validate({
|
24
|
+
rules: {
|
25
|
+
'review[review]': {
|
26
|
+
required: true
|
27
|
+
},
|
28
|
+
'review[rating]': {
|
29
|
+
required: true
|
30
|
+
}
|
31
|
+
},
|
32
|
+
messages: {
|
33
|
+
'review[rating]': {
|
34
|
+
required: 'Оцените товар'
|
35
|
+
}
|
36
|
+
}
|
37
|
+
});
|
38
|
+
});
|
39
|
+
</script>
|
40
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<%= javascript_include_tag 'http://cdn.jquerytools.org/1.2.5/all/jquery.tools.min.js' %>
|
2
|
+
|
3
|
+
<script type="text/javascript">
|
4
|
+
$(function() {
|
5
|
+
var cp_wrapper = $('#comparable_products_wrapper').detach();
|
6
|
+
$('#tooltip_content').append(cp_wrapper);
|
7
|
+
|
8
|
+
jtooltip = $('#compare_products').tooltip({
|
9
|
+
position: 'bottom center',
|
10
|
+
events: { def: 'none,none' },
|
11
|
+
delay: 200000
|
12
|
+
}).data('tooltip');
|
13
|
+
|
14
|
+
$('#compare_products').click(function(e) {
|
15
|
+
if (jtooltip.isShown()) {
|
16
|
+
hideComparePopup();
|
17
|
+
}
|
18
|
+
else {
|
19
|
+
showComparePopup();
|
20
|
+
}
|
21
|
+
e.preventDefault();
|
22
|
+
});
|
23
|
+
|
24
|
+
$("#compare_products").html("<%= t(:compare_products, :scope => :compare_products, :count => @comparable_products.count) %>");
|
25
|
+
|
26
|
+
$("#compare_products_link a").addClass('button');
|
27
|
+
$("#log_in_link").overlay({
|
28
|
+
mask: {
|
29
|
+
color: 'black',
|
30
|
+
opacity: 0.3
|
31
|
+
}
|
32
|
+
});
|
33
|
+
});
|
34
|
+
|
35
|
+
function showComparePopup() {
|
36
|
+
jtooltip.show();
|
37
|
+
$("#compare_products").addClass('shown');
|
38
|
+
}
|
39
|
+
|
40
|
+
function hideComparePopup() {
|
41
|
+
jtooltip.hide();
|
42
|
+
$("#compare_products").removeClass('shown');
|
43
|
+
}
|
44
|
+
|
45
|
+
function onAddCompareProduct() {
|
46
|
+
showComparePopup();
|
47
|
+
}
|
48
|
+
function onRemoveCompareProduct() {
|
49
|
+
showComparePopup();
|
50
|
+
}
|
51
|
+
</script>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% cache ['taxonomies', @taxon], :expires_in => SHORT_INTERVAL do %>
|
2
|
+
<div id="taxonomies" class="sidebar-item">
|
3
|
+
<% get_taxonomies.select{|t| !t.show_on_homepage? }.each do |taxonomy| %>
|
4
|
+
<h2<%== ' class="current"' if @taxon && @taxon == taxonomy.root %>>
|
5
|
+
<%= link_to taxonomy.name, seo_url(taxonomy.root), :class => 'root' %>
|
6
|
+
</h2>
|
7
|
+
<ul class="nav-list">
|
8
|
+
<% taxonomy.root.children.each do |taxon| %>
|
9
|
+
<li<%== ' class="current"' if @taxon and ([@taxon] + @taxon.ancestors).include?(taxon) %>>
|
10
|
+
<%= link_to taxon.name, seo_url(taxon) %>
|
11
|
+
</li>
|
12
|
+
<% end %>
|
13
|
+
</ul>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
#Spree::Config.set(:vkontakte_app_id => 'VK_APP_ID')
|
@@ -0,0 +1,22 @@
|
|
1
|
+
ru:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
user:
|
5
|
+
email: "Электронная почта"
|
6
|
+
|
7
|
+
number:
|
8
|
+
# Used in number_to_currency()
|
9
|
+
currency:
|
10
|
+
format:
|
11
|
+
precision: 0
|
12
|
+
shipping_method: Способ доставки
|
13
|
+
order_processed_successfully: Ваш заказ был успешно оформлен
|
14
|
+
new_customer: Регистрация в магазине
|
15
|
+
add_to_cart: В корзину
|
16
|
+
compare_products:
|
17
|
+
сomparable_products: "Список товаров:"
|
18
|
+
subtotal: Стоимость товаров
|
19
|
+
recalculate: Пересчитать
|
20
|
+
save_and_continue: Продолжить
|
21
|
+
email: "Электронная почта"
|
22
|
+
email_address: "Адрес электронной почты"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
class ChangeColumnTitleInReviews < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
if table_exists?(:reviews)
|
4
|
+
change_column(:reviews, :title, :string, :default => '-')
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.down
|
9
|
+
if table_exists?(:reviews)
|
10
|
+
change_column(:reviews, :title, :string, :default => nil)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class SpreeCompareProductsHooks < Spree::ThemeSupport::HookListener
|
2
|
+
|
3
|
+
insert_after :admin_inside_taxonomy_form, 'admin/taxonomies/comparable_field'
|
4
|
+
|
5
|
+
replace :taxon_products, 'taxons/taxon_products'
|
6
|
+
|
7
|
+
#insert_after :products_list_item, 'shared/compare_product_field'
|
8
|
+
|
9
|
+
#insert_after :shared_login_bar, 'shared/comparable_products'
|
10
|
+
|
11
|
+
insert_after :inside_head, 'shared/compare_product_javascript'
|
12
|
+
|
13
|
+
#insert_after :cart_form, 'products/compare'
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class SpreeReviewsHooks < Spree::ThemeSupport::HookListener
|
2
|
+
|
3
|
+
insert_after :inside_head do
|
4
|
+
%(<%= stylesheet_link_tag('reviews.css') %>)
|
5
|
+
end
|
6
|
+
|
7
|
+
insert_after :footer_right do
|
8
|
+
%(
|
9
|
+
<%= javascript_include_tag("jquery.rating.js") %>
|
10
|
+
<%= javascript_tag("$(document).ready(function(){$('.stars').rating({required:true});});") %>
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
insert_after :admin_product_sub_tabs do
|
15
|
+
%(
|
16
|
+
<%= tab(:reviews, :label => 'review_management') %>
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
insert_after :admin_configurations_menu do
|
21
|
+
%(<%= configurations_menu_item(t('reviews.review_settings'), admin_review_settings_path, t('reviews.manage_review_settings')) %>)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spree_core'
|
2
|
+
require 'synergy_default_theme_hooks'
|
3
|
+
require 'spree_reviews_hook' if defined?(SpreeReviews)
|
4
|
+
require 'spree_compare_products_hooks' if defined?(SpreeCompareProducts)
|
5
|
+
|
6
|
+
module SynergyDefaultTheme
|
7
|
+
class Engine < Rails::Engine
|
8
|
+
|
9
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
10
|
+
|
11
|
+
def self.activate
|
12
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
13
|
+
Rails.env.production? ? require(c) : load(c)
|
14
|
+
end
|
15
|
+
|
16
|
+
Admin::PagesController.cache_sweeper :page_sweeper
|
17
|
+
Admin::TrackersController.cache_sweeper :tracker_sweeper
|
18
|
+
|
19
|
+
if defined?(Spree::RecentlyViewed) && Spree::RecentlyViewed::Config.instance
|
20
|
+
Spree::RecentlyViewed::Config.set :recently_viewed_products_max_count => 3
|
21
|
+
end
|
22
|
+
|
23
|
+
if Spree::Config.instance
|
24
|
+
Spree::Config.set :products_per_page => 9
|
25
|
+
end
|
26
|
+
|
27
|
+
Image.attachment_definitions[:attachment].merge!({
|
28
|
+
:styles => {
|
29
|
+
:mini => '40x40>',
|
30
|
+
:small => '120x120>',
|
31
|
+
:product => '200x200>',
|
32
|
+
:large => '600x600>'
|
33
|
+
}
|
34
|
+
})
|
35
|
+
end
|
36
|
+
|
37
|
+
config.to_prepare &method(:activate).to_proc
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace :synergy_default_theme do
|
2
|
+
desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
|
3
|
+
task :install do
|
4
|
+
Rake::Task['synergy_default_theme:install:migrations'].invoke
|
5
|
+
Rake::Task['synergy_default_theme:install:assets'].invoke
|
6
|
+
end
|
7
|
+
|
8
|
+
namespace :install do
|
9
|
+
desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
|
10
|
+
task :migrations do
|
11
|
+
source = File.join(File.dirname(__FILE__), '..', '..', 'db')
|
12
|
+
destination = File.join(Rails.root, 'db')
|
13
|
+
Spree::FileUtilz.mirror_files(source, destination)
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
|
17
|
+
task :assets do
|
18
|
+
source = File.join(File.dirname(__FILE__), '..', '..', 'public')
|
19
|
+
destination = File.join(Rails.root, 'public')
|
20
|
+
puts "INFO: Mirroring assets from #{source} to #{destination}"
|
21
|
+
Spree::FileUtilz.mirror_files(source, destination)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
# add custom rake tasks here
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery Tools 1.2.5 - The missing UI library for the Web
|
3
|
+
*
|
4
|
+
* [tooltip, tooltip.slide, tooltip.dynamic]
|
5
|
+
*
|
6
|
+
* NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
|
7
|
+
*
|
8
|
+
* http://flowplayer.org/tools/
|
9
|
+
*
|
10
|
+
* File generated: Sat Mar 19 16:41:56 GMT 2011
|
11
|
+
*/
|
12
|
+
(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,d=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];d+=a.outerWidth()+c.offset[1];if(/iPad/i.test(navigator.userAgent))h-=f(window).scrollTop();var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")d-=a/2;if(i=="left")d-=a;return{top:h,left:d}}function u(a,b){var c=this,h=a.add(c),d,i=0,j=
|
13
|
+
0,m=a.attr("title"),q=a.attr("data-tooltip"),r=o[b.effect],l,s=a.is(":input"),v=s&&a.is(":checkbox, :radio, select, :button, :submit"),t=a.attr("type"),k=b.events[t]||b.events[s?v?"widget":"input":"def"];if(!r)throw'Nonexistent effect "'+b.effect+'"';k=k.split(/,\s*/);if(k.length!=2)throw"Tooltip: bad events configuration for "+t;a.bind(k[0],function(e){clearTimeout(i);if(b.predelay)j=setTimeout(function(){c.show(e)},b.predelay);else c.show(e)}).bind(k[1],function(e){clearTimeout(j);if(b.delay)i=
|
14
|
+
setTimeout(function(){c.hide(e)},b.delay);else c.hide(e)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,{show:function(e){if(!d){if(q)d=f(q);else if(b.tip)d=f(b.tip).eq(0);else if(m)d=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else{d=a.next();d.length||(d=a.parent().next())}if(!d.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;d.stop(true,true);var g=p(a,d,b);b.tip&&d.html(a.data("title"));e=e||f.Event();e.type="onBeforeShow";
|
15
|
+
h.trigger(e,[g]);if(e.isDefaultPrevented())return c;g=p(a,d,b);d.css({position:"absolute",top:g.top,left:g.left});l=true;r[0].call(c,function(){e.type="onShow";l="full";h.trigger(e)});g=b.events.tooltip.split(/,\s*/);if(!d.data("__set")){d.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&d.bind(g[1],function(n){n.relatedTarget!=a[0]&&a.trigger(k[1].split(" ")[0])});d.data("__set",true)}return c},hide:function(e){if(!d||!c.isShown())return c;
|
16
|
+
e=e||f.Event();e.type="onBeforeHide";h.trigger(e);if(!e.isDefaultPrevented()){l=false;o[b.effect][1].call(c,function(){e.type="onHide";h.trigger(e)});return c}},isShown:function(e){return e?l=="full":l},getConf:function(){return b},getTip:function(){return d},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(e,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(n){n&&f(c).bind(g,n);return c}})}f.tools=f.tools||{version:"1.2.5"};f.tools.tooltip=
|
17
|
+
{conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){o[a]=[b,c]}};var o={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();
|
18
|
+
a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new u(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
|
19
|
+
(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
|
20
|
+
b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
|
21
|
+
(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
|
22
|
+
g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
|
23
|
+
a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
|
@@ -0,0 +1,64 @@
|
|
1
|
+
var add_image_handlers = function() {
|
2
|
+
$('ul.thumbnails li').eq(0).addClass('selected');
|
3
|
+
$('ul.thumbnails li a').click(function(e) {
|
4
|
+
var selectedThumb = $(this);
|
5
|
+
$('#main-image img').attr('src', selectedThumb.attr('href'));
|
6
|
+
$('ul.thumbnails li').removeClass('selected');
|
7
|
+
$(this).parent('li').addClass('selected');
|
8
|
+
|
9
|
+
$('#main-image a').attr('large', selectedThumb.attr('large'));
|
10
|
+
$('#large_image_overlay .large_image img').attr('src', selectedThumb.attr('large'));
|
11
|
+
e.preventDefault();
|
12
|
+
});
|
13
|
+
|
14
|
+
$('#main-image a').click(function() {
|
15
|
+
var thumbs = getThumbnails();
|
16
|
+
|
17
|
+
if (thumbs.size() > 0) {
|
18
|
+
var large_image = $('#large_image_overlay .large_image img');
|
19
|
+
var overlay = $('#large_image_overlay').data('overlay');
|
20
|
+
var thumbnails = $('#large_image_overlay .thumbs_gallery ul');
|
21
|
+
|
22
|
+
$('#large_image_overlay .thumbs_gallery').show();
|
23
|
+
thumbnails.empty();
|
24
|
+
thumbs.each(function(index, thumb) {
|
25
|
+
thumbnails.append('<li><a href="' + thumb.large + '"><img src="' + thumb.thumb + '" /></a></li>');
|
26
|
+
});
|
27
|
+
|
28
|
+
large_image.load(function() {
|
29
|
+
large_image.animate({ 'opacity': 1 }, 200);
|
30
|
+
});
|
31
|
+
|
32
|
+
|
33
|
+
$('#large_image_overlay .thumbs_gallery a').click(function(e) {
|
34
|
+
var selectedThumb = $(this);
|
35
|
+
if (large_image.attr('src') != selectedThumb.attr('href'))
|
36
|
+
large_image.animate({ 'opacity': 0.01 }, 200, function() {
|
37
|
+
large_image.attr('src', selectedThumb.attr('href'));
|
38
|
+
});
|
39
|
+
e.preventDefault();
|
40
|
+
});
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
$('#large_image_overlay .thumbs_gallery').hide();
|
44
|
+
}
|
45
|
+
}).overlay({
|
46
|
+
mask: {
|
47
|
+
color: 'black',
|
48
|
+
opacity: 0.3
|
49
|
+
},
|
50
|
+
onBeforeClose: function() {
|
51
|
+
$('#large_image_overlay .large_image img').unbind('load');
|
52
|
+
},
|
53
|
+
fixed: false
|
54
|
+
});
|
55
|
+
};
|
56
|
+
|
57
|
+
function getThumbnails() {
|
58
|
+
return $('ul.thumbnails li').map(function() {
|
59
|
+
return {
|
60
|
+
'thumb': $(this).find('img').attr('src'),
|
61
|
+
'large': $(this).find('a').attr('large')
|
62
|
+
};
|
63
|
+
});
|
64
|
+
}
|