spree_multi_slideshow 0.70.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. data/LICENSE +26 -0
  2. data/README.md +38 -0
  3. data/app/assets/images/store/slides/bg-gallery.png +0 -0
  4. data/app/assets/images/store/slides/bg-text02.png +0 -0
  5. data/app/assets/images/store/slides/sprite01.png +0 -0
  6. data/app/assets/javascripts/admin/slides/index.js +10 -0
  7. data/app/assets/javascripts/admin/slides/new.js +5 -0
  8. data/app/assets/javascripts/admin/spree_multi_slideshow.js +1 -0
  9. data/app/assets/javascripts/store/spree_multi_slideshow.js +231 -0
  10. data/app/assets/stylesheets/admin/spree_multi_slideshow.css +3 -0
  11. data/app/assets/stylesheets/store/spree_multi_slideshow.css +73 -0
  12. data/app/controllers/admin/slides_controller.rb +24 -0
  13. data/app/controllers/admin/slideshow_types_controller.rb +7 -0
  14. data/app/controllers/spree/slides_controller.rb +5 -0
  15. data/app/controllers/spree/slideshow_types_controller.rb +5 -0
  16. data/app/helpers/slides_helper.rb +2 -0
  17. data/app/helpers/slideshow_types_helper.rb +50 -0
  18. data/app/models/slide.rb +33 -0
  19. data/app/models/slideshow_type.rb +15 -0
  20. data/app/overrides/slideshow_type_admin_tab.rb +4 -0
  21. data/app/views/admin/shared/_slideshow_type_tabs.html.erb +16 -0
  22. data/app/views/admin/slides/_form.html.erb +6 -0
  23. data/app/views/admin/slides/edit.html.erb +17 -0
  24. data/app/views/admin/slides/index.html.erb +33 -0
  25. data/app/views/admin/slides/new.html.erb +12 -0
  26. data/app/views/admin/slideshow_types/_form.html.erb +8 -0
  27. data/app/views/admin/slideshow_types/edit.html.erb +8 -0
  28. data/app/views/admin/slideshow_types/index.html.erb +32 -0
  29. data/app/views/admin/slideshow_types/new.html.erb +7 -0
  30. data/lib/generators/spree_multi_slideshow/install/install_generator.rb +29 -0
  31. data/lib/spree_multi_slideshow.rb +2 -0
  32. data/lib/spree_multi_slideshow/engine.rb +24 -0
  33. metadata +169 -0
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2012 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ SpreeMultiSlideshow
2
+ ===================
3
+
4
+ Add multiple slideshow for Spree Commerce Shop
5
+
6
+
7
+ Basic Installation
8
+ ------------------
9
+
10
+ 1. Add the following to your Gemfile
11
+ <pre>
12
+ gem 'spree_multi_slideshow', :git => 'git://github.com/damianogiacomello/spree_multi_slideshow'
13
+ </pre>
14
+ 2. Run `bundle install`
15
+ 3. To copy and apply migrations run:
16
+ <pre>
17
+ rails g spree_multi_slideshow:install
18
+ </pre>
19
+
20
+ Example
21
+ =======
22
+
23
+ 1. add slideshow helper method in your view:
24
+ <pre>
25
+ <%= insert_slideshow %>
26
+ </pre>
27
+ add slides for the slideshow in the admin section
28
+ 2. Additional options:
29
+ <pre>
30
+ <%= insert_slideshow(:category => "my_category") %>
31
+ </pre>
32
+ displays slides for which the category column, dafault is "home"
33
+ <pre>
34
+ <%= insert_slideshow(:style => "small") %>
35
+ </pre>
36
+ style layout for slideshow: [small, medium, slide, default => custom]
37
+
38
+ Copyright (c) 2012 [Damiano Giacomello], released under the New BSD License
@@ -0,0 +1,10 @@
1
+ $(document).ready(function(){
2
+
3
+ $('#new_slide_link').click(function (event) {
4
+ event.preventDefault();
5
+ $(this).hide();
6
+ $.ajax({type: 'GET', url: this.href, data: ({authenticity_token: AUTH_TOKEN}),
7
+ success: function(r){ $('#slides').html(r);} });
8
+ });
9
+
10
+ });
@@ -0,0 +1,5 @@
1
+ $('#cancel_link').click(function (event) {
2
+ event.preventDefault();
3
+ $('#new_slide_link').show();
4
+ $('#slides').html('');
5
+ });
@@ -0,0 +1 @@
1
+ //= require admin/spree_core
@@ -0,0 +1,231 @@
1
+ //= require store/spree_core
2
+
3
+ // page init
4
+ jQuery(function($) {
5
+ initGalleries();
6
+ });
7
+
8
+ // galleries init
9
+ function initGalleries(){
10
+ // main banner slideshow
11
+ jQuery('div.gallery').fadeGallery({
12
+ autoRotation: true,
13
+ switchTime: 5000, //ms
14
+ duration: 800 //ms
15
+ });
16
+ };
17
+
18
+ // slideshow plugin
19
+ jQuery.fn.fadeGallery = function(_options){
20
+ var _options = jQuery.extend({
21
+ slideElements:'div.frame > ul > li',
22
+ pagerGener: false,
23
+ pagerHold: false,
24
+ pagerLinks:'ul.nav-list li',
25
+ btnNext:'a.next',
26
+ btnPrev:'a.prev',
27
+ btnPlayPause:'a.play-pause',
28
+ btnPlay:'a.play',
29
+ btnPause:'a.pause',
30
+ pausedClass:'paused',
31
+ disabledClass: 'disabled',
32
+ playClass:'playing',
33
+ activeClass:'active',
34
+ currentNum:false,
35
+ allNum:false,
36
+ startSlide:null,
37
+ noCircle:false,
38
+ caption:'ul.caption > li',
39
+ pauseOnHover:false,
40
+ autoRotation:false,
41
+ autoHeight:false,
42
+ onChange:false,
43
+ switchTime:3000,
44
+ duration:650,
45
+ event:'click'
46
+ },_options);
47
+
48
+ return this.each(function(){
49
+ // gallery options
50
+ var _this = jQuery(this);
51
+ var _slides = jQuery(_options.slideElements, _this);
52
+ var _btnPrev = jQuery(_options.btnPrev, _this);
53
+ var _btnNext = jQuery(_options.btnNext, _this);
54
+ var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
55
+ var _btnPause = jQuery(_options.btnPause, _this);
56
+ var _btnPlay = jQuery(_options.btnPlay, _this);
57
+ var _pauseOnHover = _options.pauseOnHover;
58
+ var _autoRotation = _options.autoRotation;
59
+ var _activeClass = _options.activeClass;
60
+ var _disabledClass = _options.disabledClass;
61
+ var _pausedClass = _options.pausedClass;
62
+ var _playClass = _options.playClass;
63
+ var _autoHeight = _options.autoHeight;
64
+ var _duration = _options.duration;
65
+ var _switchTime = _options.switchTime;
66
+ var _controlEvent = _options.event;
67
+ var _currentNum = (_options.currentNum ? jQuery(_options.currentNum, _this) : false);
68
+ var _allNum = (_options.allNum ? jQuery(_options.allNum, _this) : false);
69
+ var _startSlide = _options.startSlide;
70
+ var _noCycle = _options.noCircle;
71
+ var _onChange = _options.onChange;
72
+ var _pagerGener = _options.pagerGener;
73
+ var _pagerHold = jQuery(_options.pagerHold,_this);
74
+ var _caption = jQuery(_options.caption,_this);
75
+ var _paging = '';
76
+ if(_pagerGener){
77
+ for(var i=0; i< _slides.length; i++){
78
+ _paging += '<li><a href="#">'+(i+1)+'</a></li>';
79
+ }
80
+ _pagerHold.html('<ul>'+_paging+'</ul>');
81
+ }
82
+ var _pagerLinks = jQuery(_options.pagerLinks, _this);
83
+ // gallery init
84
+ var _hover = false;
85
+ var _prevIndex = 0;
86
+ var _currentIndex = 0;
87
+ var _slideCount = _slides.length;
88
+ var _timer;
89
+ if(_slideCount < 2) return;
90
+
91
+ _prevIndex = _slides.index(_slides.filter('.'+_activeClass));
92
+ if(_prevIndex < 0) _prevIndex = _currentIndex = 0;
93
+ else _currentIndex = _prevIndex;
94
+ if(_startSlide != null) {
95
+ if(_startSlide == 'random') _prevIndex = _currentIndex = Math.floor(Math.random()*_slideCount);
96
+ else _prevIndex = _currentIndex = parseInt(_startSlide);
97
+ }
98
+ _slides.hide().eq(_currentIndex).show();
99
+ _caption.hide().eq(_currentIndex).show();
100
+ if(_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
101
+ else _this.removeClass(_playClass).addClass(_pausedClass);
102
+
103
+ // gallery control
104
+ if(_btnPrev.length) {
105
+ _btnPrev.bind(_controlEvent,function(){
106
+ prevSlide();
107
+ return false;
108
+ });
109
+ }
110
+ if(_btnNext.length) {
111
+ _btnNext.bind(_controlEvent,function(){
112
+ nextSlide();
113
+ return false;
114
+ });
115
+ }
116
+ if(_pagerLinks.length) {
117
+ _pagerLinks.each(function(_ind){
118
+ jQuery(this).bind(_controlEvent,function(){
119
+ if(_currentIndex != _ind) {
120
+ _prevIndex = _currentIndex;
121
+ _currentIndex = _ind;
122
+ switchSlide();
123
+ }
124
+ return false;
125
+ });
126
+ });
127
+ }
128
+
129
+ // play pause section
130
+ if(_btnPlayPause.length) {
131
+ _btnPlayPause.bind(_controlEvent,function(){
132
+ if(_this.hasClass(_pausedClass)) {
133
+ _this.removeClass(_pausedClass).addClass(_playClass);
134
+ _autoRotation = true;
135
+ autoSlide();
136
+ } else {
137
+ _autoRotation = false;
138
+ if(_timer) clearTimeout(_timer);
139
+ _this.removeClass(_playClass).addClass(_pausedClass);
140
+ }
141
+ return false;
142
+ });
143
+ }
144
+ if(_btnPlay.length) {
145
+ _btnPlay.bind(_controlEvent,function(){
146
+ _this.removeClass(_pausedClass).addClass(_playClass);
147
+ _autoRotation = true;
148
+ autoSlide();
149
+ return false;
150
+ });
151
+ }
152
+ if(_btnPause.length) {
153
+ _btnPause.bind(_controlEvent,function(){
154
+ _autoRotation = false;
155
+ if(_timer) clearTimeout(_timer);
156
+ _this.removeClass(_playClass).addClass(_pausedClass);
157
+ return false;
158
+ });
159
+ }
160
+ // gallery animation
161
+ function prevSlide() {
162
+ _prevIndex = _currentIndex;
163
+ if(_currentIndex > 0) _currentIndex--;
164
+ else {
165
+ if(_noCycle) return;
166
+ else _currentIndex = _slideCount-1;
167
+ }
168
+ switchSlide();
169
+ }
170
+ function nextSlide() {
171
+ _prevIndex = _currentIndex;
172
+ if(_currentIndex < _slideCount-1) _currentIndex++;
173
+ else {
174
+ if(_noCycle) return;
175
+ else _currentIndex = 0;
176
+ }
177
+ switchSlide();
178
+ }
179
+ function refreshStatus() {
180
+ if(_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
181
+ if(_currentNum) _currentNum.text(_currentIndex+1);
182
+ if(_allNum) _allNum.text(_slideCount);
183
+ _slides.eq(_prevIndex).removeClass(_activeClass);
184
+ _slides.eq(_currentIndex).addClass(_activeClass);
185
+ if(_noCycle) {
186
+ if(_btnPrev.length) {
187
+ if(_currentIndex == 0) _btnPrev.addClass(_disabledClass);
188
+ else _btnPrev.removeClass(_disabledClass);
189
+ }
190
+ if(_btnNext.length) {
191
+ if(_currentIndex == _slideCount-1) _btnNext.addClass(_disabledClass);
192
+ else _btnNext.removeClass(_disabledClass);
193
+ }
194
+ }
195
+ if(typeof _onChange === 'function') {
196
+ _onChange(_this, _currentIndex);
197
+ }
198
+ }
199
+ function switchSlide() {
200
+ _slides.eq(_prevIndex).stop().animate({opacity:0},{duration: _duration, queue: false,complete:function(){
201
+ jQuery(this).css({display:'none'});
202
+ }})
203
+ _slides.eq(_currentIndex).stop().css({display:'block',opacity:0}).animate({opacity:1},{duration: _duration, queue: false,complete:function(){
204
+ jQuery(this).css({opacity:''});
205
+ }})
206
+ _caption.eq(_prevIndex).fadeOut();
207
+ _caption.eq(_currentIndex).fadeIn();
208
+ if(_autoHeight) _slides.eq(_currentIndex).parent().animate({height:_slides.eq(_currentIndex).outerHeight(true)},{duration:_duration,queue:false});
209
+ refreshStatus();
210
+ autoSlide();
211
+ }
212
+
213
+ // autoslide function
214
+ function autoSlide() {
215
+ if(!_autoRotation || _hover) return;
216
+ if(_timer) clearTimeout(_timer);
217
+ _timer = setTimeout(nextSlide,_switchTime+_duration);
218
+ }
219
+ if(_pauseOnHover) {
220
+ _this.hover(function(){
221
+ _hover = true;
222
+ if(_timer) clearTimeout(_timer);
223
+ },function(){
224
+ _hover = false;
225
+ autoSlide();
226
+ });
227
+ }
228
+ refreshStatus();
229
+ autoSlide();
230
+ });
231
+ };
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require admin/spree_core
3
+ */
@@ -0,0 +1,73 @@
1
+ /*
2
+ *= require store/spree_core
3
+ */
4
+
5
+ .gallery{
6
+ width: 900px;
7
+ height:276px;
8
+ padding:15px 0 0;
9
+ overflow: hidden;
10
+ z-index:0;
11
+ color:#fff;
12
+ background:url(/assets/images/bg-gallery.png) no-repeat 20px 0;
13
+ margin-bottom:-2px;
14
+ }
15
+ .gallery .frame{
16
+ width:900px;
17
+ overflow:hidden;
18
+ position:relative;
19
+ height:251px;
20
+ }
21
+ .gallery .frame ul{
22
+ position:absolute;
23
+ overflow:hidden;
24
+ margin:0;
25
+ padding:0;
26
+ list-style:none;
27
+ width:900px;
28
+ height:251px;
29
+ }
30
+ .gallery .frame li{
31
+ width:900px;
32
+ height:251px;
33
+ position:absolute;
34
+ top:0;
35
+ left:0;
36
+ background:#f1f1f1;
37
+ }
38
+ .gallery .frame li.active{z-index:2;}
39
+ .gallery img{
40
+ display:block;
41
+ }
42
+ .gallery .prev,
43
+ .gallery .next{
44
+ position:absolute;
45
+ top:160px;
46
+ left:47px;
47
+ background:url(/assets/images/sprite01.png) no-repeat;
48
+ width:39px;
49
+ height:39px;
50
+ text-indent:-9999px;
51
+ overflow:hidden;
52
+ z-index:3;
53
+ }
54
+ .gallery .next{
55
+ right:56px;
56
+ left:auto;
57
+ background-position: 0 -43px;
58
+ }
59
+ .gallery .text-holder{
60
+ background:url(/assets/images/bg-text02.png) no-repeat;
61
+ width: 234px;
62
+ height:98px;
63
+ padding:45px 0 0 50px;
64
+ position:absolute;
65
+ right:1px;
66
+ bottom:1px;
67
+ font:bold 33px/40px 'Candrb', Arial, Helvetica, sans-serif;
68
+ text-align:center;
69
+ }
70
+ .gallery .text-holder strong span{
71
+ font-size:52px;
72
+ display:block;
73
+ }
@@ -0,0 +1,24 @@
1
+ class Admin::SlidesController < Admin::ResourceController
2
+ before_filter :load_data
3
+
4
+ def load_data
5
+ @slideshow_type = SlideshowType.find(params[:slideshow_type_id])
6
+ end
7
+
8
+ def update_positions
9
+ params[:positions].each do |id, index|
10
+ Image.update_all(['position=?', index], ['id=?', id])
11
+ end
12
+
13
+ respond_to do |format|
14
+ format.js { render :text => 'Ok' }
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def location_after_save
21
+ admin_slideshow_type_slides_url(@slideshow_type)
22
+ end
23
+
24
+ end
@@ -0,0 +1,7 @@
1
+ class Admin::SlideshowTypesController < Admin::ResourceController
2
+
3
+ def location_after_save
4
+ edit_admin_slideshow_type_url(@slideshow_type)
5
+ end
6
+
7
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class SlidesController < BaseController
3
+
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class SlideshowTypesController < BaseController
3
+
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ module SlidesHelper
2
+ end
@@ -0,0 +1,50 @@
1
+ module SlideshowTypesHelper
2
+
3
+ def insert_slideshow(params={})
4
+ @content_for_head_added ||= false
5
+ if not @content_for_head_added
6
+ content_for(:head) { stylesheet_link_tag 'spree_multi_slideshow.css' }
7
+ content_for(:head) { javascript_include_tag 'spree_multi_slideshow.js' }
8
+ @content_for_head_added = true
9
+ end
10
+ if slide_images(params)
11
+ navigation = enable_navigation(params)
12
+ content_tag(:div, navigation[:prev] + content_tag(:div, content_tag(:ul, raw(slide_images(params))), :class => "frame") + navigation[:succ], :class => "gallery playing")
13
+ end
14
+ end
15
+
16
+ def slide_images(params)
17
+ category = params[:category] || "home"
18
+ style = params[:style] || "custom"
19
+ slideshow = SlideshowType.enable(category)
20
+ if !slideshow.blank?
21
+ max = slideshow.first.slide_number || 4
22
+ slides = Slide.where("slideshow_type_id = ?", slideshow.first.id).limit(max).sort_by { |slide| slide.position }
23
+
24
+ slides.map do |slide|
25
+ content_tag(:li, raw(link_to(image_tag(slide.image.url(style.to_sym)), slide.url, { :title => slide.title })) + raw(content_tag(:div, content_tag(:strong, raw(slide.title)), :class => "text-holder")))
26
+ end.join
27
+ else
28
+ false
29
+ end
30
+ end
31
+
32
+ def enable_navigation(params)
33
+ category = params[:category] || "home"
34
+ slideshow = SlideshowType.enable(category)
35
+ if !slideshow.blank?
36
+ if slideshow.first.enable_navigation
37
+ prev = link_to("prev", "#", :class => "prev")
38
+ succ = link_to("next", "#", :class => "next")
39
+ else
40
+ prev = ""
41
+ succ = ""
42
+ end
43
+ res = Hash.new()
44
+ res[:prev] = prev
45
+ res[:succ] = succ
46
+ return res
47
+ end
48
+ end
49
+
50
+ end
@@ -0,0 +1,33 @@
1
+ class Slide < ActiveRecord::Base
2
+
3
+ has_many :slideshow_types
4
+ validates_presence_of :slideshow_type_id
5
+
6
+ has_attached_file :image,
7
+ :url => "/spree/slides/:id/:style_:basename.:extension",
8
+ :path => ":rails_root/public/spree/slides/:id/:style_:basename.:extension",
9
+ #:default_url => "/missing/:style.jpg",
10
+ :styles => {
11
+ :thumbnail => "100x33#",
12
+ :small => "300x100#",
13
+ :medium => "600x200#",
14
+ :slide => "900x300#",
15
+ :custom => Proc.new { |instance| "#{SlideshowType.find(instance.slideshow_type_id).slide_width}x#{SlideshowType.find(instance.slideshow_type_id).slide_height}#" }
16
+ },
17
+ :convert_options => {
18
+ :thumbnail => "-gravity center",
19
+ :small => "-gravity center",
20
+ :medium => "-gravity center",
21
+ :slide => "-gravity center",
22
+ :custom => "-gravity center"
23
+ }
24
+
25
+ #process_in_background :image UTILE MA OCCORRE ATTIVARE ANCHE LA GEMMA DELAYED-PAPERCLIP
26
+
27
+ def initialize(*args)
28
+ super(*args)
29
+ last_slide = Slide.last
30
+ self.position = last_slide ? last_slide.position + 1 : 0
31
+ end
32
+
33
+ end
@@ -0,0 +1,15 @@
1
+ class SlideshowType < ActiveRecord::Base
2
+
3
+ belongs_to :slide
4
+
5
+ validates :slide_number, :slide_width, :slide_height, :presence => true
6
+ validates_uniqueness_of :category
7
+ validates_numericality_of :slide_number, :only_integer => true
8
+
9
+ scope :enable, lambda { |category| {:conditions => {:enabled => true, :category => category}} }
10
+
11
+ def initialize(*args)
12
+ super(*args)
13
+ end
14
+
15
+ end
@@ -0,0 +1,4 @@
1
+ Deface::Override.new(:virtual_path => "layouts/admin",
2
+ :name => "slideshow_type_admin_tab",
3
+ :insert_bottom => "[data-hook='admin_tabs']",
4
+ :text => "<%= tab(:slideshow_types) %>")
@@ -0,0 +1,16 @@
1
+ <% content_for :sidebar do %>
2
+
3
+ <h3><%= t("slideshow_type.sidebar") %></h3>
4
+ <br class="clear" />
5
+
6
+ <ul class="sidebar slide-menu" data-hook="admin_slide_tabs">
7
+ <li<%== ' class="active"' if current == 'Slideshow_type Details' %>>
8
+ <%= link_to t("slideshow_type.detail"), edit_admin_slideshow_type_url(@slideshow_type) %>
9
+ </li>
10
+ <li<%== ' class="active"' if current == 'Slide Image' %>>
11
+ <%= link_to t("slideshow_type.slide.many"), admin_slideshow_type_slides_path(@slideshow_type) %>
12
+ </li>
13
+ </ul>
14
+ <br class="clear" />
15
+
16
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <%= f.inputs do %>
2
+ <%= f.input :title %>
3
+ <%= f.input :url %>
4
+ <%= f.input :image, :as => :file, :label => I18n.t("slideshow_type.slide.image.one").capitalize, :hint => f.object.image.blank? ? f.template.content_tag(:span, "No Image Yet") : f.template.image_tag(f.object.image.url(:thumbnail)) %>
5
+ <%= f.input :slideshow_type_id, :as => :hidden, :value => params[:slideshow_type_id] %>
6
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <%= render :partial => 'admin/shared/slideshow_type_tabs', :locals => {:current => 'Slide Image'} %>
2
+ <h1><%= t("slideshow_type.slide.editing_page") %></h1>
3
+ <%= render 'shared/error_messages', :target => @slide %>
4
+
5
+ <%= semantic_form_for [:admin, @slideshow_type, @slide], :html => { :multipart => true } do |f| %>
6
+ <table class="basic-table" data-hook="edit_image">
7
+ <tr data-hook="thumbnail">
8
+ <td><%= t(:thumbnail) %>:</td>
9
+ <td><%= link_to image_tag(@slide.image.url(:small)), @slide.image.url(:medium) %></td>
10
+ </tr>
11
+ <%= render :partial => 'form', :locals => { :f => f } %>
12
+ </table>
13
+ <p class="form-buttons" data-hook="buttons">
14
+ <%= button t(:update) %>
15
+ <%= t(:or) %> <%= link_to t(:cancel), admin_slideshow_type_slide_url(@slideshow_type), :id => 'cancel_link' %>
16
+ </p>
17
+ <% end %>
@@ -0,0 +1,33 @@
1
+ <%= render :partial => 'admin/shared/slideshow_type_tabs', :locals => {:current => 'Slide Image'} %>
2
+
3
+ <%= javascript_include_tag 'admin/slides/index.js' %>
4
+ <div id="slides" data-hook></div>
5
+ <p data-hook="links">
6
+ <%= link_to icon('add') + ' ' + t("slideshow_type.slide.new_page"), new_admin_slideshow_type_slide_url(@slideshow_type), :id => 'new_slide_link' %>
7
+ </p>
8
+
9
+ <table class="index sortable" data-hook="slide_table">
10
+ <tr data-hook="images_header">
11
+ <th><%= t("slideshow_type.slide.thumbnail") %></th>
12
+ <th><%= t("slideshow_type.slide.title") %></th>
13
+ <th><%= t("slideshow_type.slide.url") %></th>
14
+ <th><%= t(:action) %></th>
15
+ </tr>
16
+
17
+ <% Slide.find_all_by_slideshow_type_id(@slideshow_type.id).each do |slide| %>
18
+ <tr id="<%= dom_id(slide) %>" data-hook="images_row">
19
+ <td>
20
+ <span class="handle"></span>
21
+ <%= link_to image_tag(slide.image.url(:thumbnail)), slide.image.url(:medium) %>
22
+ </td>
23
+ <td><%= slide.title %></td>
24
+ <td><%= slide.url %></td>
25
+ <td class="actions">
26
+ <%= link_to_with_icon 'edit', t(:edit), edit_admin_slideshow_type_slide_url(@slideshow_type, slide), :class => 'edit' %>
27
+ &nbsp;
28
+ <%= link_to_delete slide, {:url => admin_slideshow_type_slide_url(@slideshow_type, slide) }%>
29
+ </td>
30
+ </tr>
31
+ <% end %>
32
+
33
+ </table>
@@ -0,0 +1,12 @@
1
+ <h4><%= t("slideshow_type.slide.new_page") %></h4>
2
+ <%= semantic_form_for [:admin, @slideshow_type, @slide], :html => { :multipart => true } do |f| %>
3
+ <table class="basic-table" data-hook="new_slide">
4
+ <%= render :partial => 'form', :locals => { :f => f } %>
5
+ </table>
6
+ <p class="form-buttons" data-hook="buttons">
7
+ <%= button t(:update) %>
8
+ <%= t(:or) %> <%= link_to t(:cancel), admin_slideshow_type_slides_url(@slideshow_type), :id => 'cancel_link' %>
9
+ </p>
10
+ <% end %>
11
+
12
+ <%= javascript_include_tag 'admin/slides/new.js' %>
@@ -0,0 +1,8 @@
1
+ <%= f.inputs do %>
2
+ <%= f.input :category %>
3
+ <%= f.input :slide_width %>
4
+ <%= f.input :slide_height %>
5
+ <%= f.input :slide_number %>
6
+ <%= f.input :enable_navigation %>
7
+ <%= f.input :enabled %>
8
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <h1><%= t("slideshow_type.editing_page") %></h1>
2
+ <%= render :partial => 'admin/shared/slideshow_type_tabs', :locals => {:current => 'Slideshow_type Details'} %>
3
+ <%= render "shared/error_messages", :target => @slideshow_type %>
4
+
5
+ <%= semantic_form_for([:admin, @slideshow_type]) do |f| %>
6
+ <%= render :partial => "form", :locals => { :f => f } %>
7
+ <%= render :partial => 'admin/shared/edit_resource_links' %>
8
+ <% end %>
@@ -0,0 +1,32 @@
1
+ <div class='toolbar'>
2
+ <ul class='actions'>
3
+ <li id="new_product_link">
4
+ <%= button_link_to t("slideshow_type.new_page"), new_admin_slideshow_type_url, {:icon => 'add'} %>
5
+ </li>
6
+ </ul>
7
+ <br class='clear' />
8
+ </div>
9
+
10
+ <h1><%= t("slideshow_type.many") %></h1>
11
+
12
+ <table class="index">
13
+ <tr>
14
+ <th><%= t("slideshow_type.category") %></th>
15
+ <th><%= t("slideshow_type.enable") %></th>
16
+ <th><%= t("slideshow_type.slide_number") %></th>
17
+ <th><%= t("action") %></th>
18
+ </tr>
19
+ <tbody>
20
+ <% @slideshow_types.each do |slideshow_type| %>
21
+ <tr class="<%= cycle('even', 'odd') %>" id="<%= dom_id slideshow_type %>">
22
+ <td><%= slideshow_type.category %></td>
23
+ <td><%= icon('tick') if slideshow_type.enabled %></td>
24
+ <td><%= slideshow_type.slide_number %></td>
25
+ <td>
26
+ <%= link_to_edit slideshow_type %> &nbsp;
27
+ <%= link_to_delete slideshow_type %>
28
+ </td>
29
+ </tr>
30
+ <% end %>
31
+ </tbody>
32
+ </table>
@@ -0,0 +1,7 @@
1
+ <h1><%= t("slideshow_type.new_page") %></h1>
2
+ <%= render "shared/error_messages", :target => @slideshow_type %>
3
+
4
+ <%= semantic_form_for([:admin, @slideshow_type], :html => { :enctype => "multipart/form-data" }) do |f| %>
5
+ <%= render :partial => "form", :locals => { :f => f } %>
6
+ <%= render :partial => 'admin/shared/new_resource_links' %>
7
+ <% end %>
@@ -0,0 +1,29 @@
1
+ module SpreeMultiSlideshow
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ def add_javascripts
6
+ append_file "app/assets/javascripts/store/all.js", "//= require store/spree_multi_slideshow\n"
7
+ #append_file "app/assets/javascripts/admin/all.js", "//= require admin/spree_multi_slideshow\n"
8
+ end
9
+
10
+ def add_stylesheets
11
+ inject_into_file "app/assets/stylesheets/store/all.css", " *= require store/spree_multi_slideshow\n", :before => /\*\//, :verbose => true
12
+ #inject_into_file "app/assets/stylesheets/admin/all.css", " *= require admin/spree_multi_slideshow\n", :before => /\*\//, :verbose => true
13
+ end
14
+
15
+ def add_migrations
16
+ run 'bundle exec rake railties:install:migrations FROM=spree_multi_slideshow'
17
+ end
18
+
19
+ def run_migrations
20
+ res = ask "Would you like to run the migrations now? [Y/n]"
21
+ if res == "" || res.downcase == "y"
22
+ run 'bundle exec rake db:migrate'
23
+ else
24
+ puts "Skiping rake db:migrate, don't forget to run it!"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_multi_slideshow/engine'
@@ -0,0 +1,24 @@
1
+ module SpreeMultiSlideshow
2
+ class Engine < Rails::Engine
3
+ engine_name 'spree_multi_slideshow'
4
+
5
+ config.autoload_paths += %W(#{config.root}/lib)
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
14
+ Rails.application.config.cache_classes ? require(c) : load(c)
15
+ end
16
+
17
+ Dir.glob(File.join(File.dirname(__FILE__), "../../app/overrides/*.rb")) do |c|
18
+ Rails.application.config.cache_classes ? require(c) : load(c)
19
+ end
20
+ end
21
+
22
+ config.to_prepare &method(:activate).to_proc
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_multi_slideshow
3
+ version: !ruby/object:Gem::Version
4
+ hash: 257
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 70
9
+ - 3
10
+ version: 0.70.3
11
+ platform: ruby
12
+ authors:
13
+ - Damiano Giacomello
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-03-15 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: spree_core
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: spree_auth
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: formtastic
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: paperclip
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 27
71
+ segments:
72
+ - 2
73
+ - 5
74
+ - 0
75
+ version: 2.5.0
76
+ type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec-rails
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :development
91
+ version_requirements: *id005
92
+ description:
93
+ email: damiano.giacomello@diginess.it
94
+ executables: []
95
+
96
+ extensions: []
97
+
98
+ extra_rdoc_files: []
99
+
100
+ files:
101
+ - README.md
102
+ - LICENSE
103
+ - lib/generators/spree_multi_slideshow/install/install_generator.rb
104
+ - lib/spree_multi_slideshow/engine.rb
105
+ - lib/spree_multi_slideshow.rb
106
+ - app/assets/images/store/slides/bg-gallery.png
107
+ - app/assets/images/store/slides/bg-text02.png
108
+ - app/assets/images/store/slides/sprite01.png
109
+ - app/assets/javascripts/admin/slides/index.js
110
+ - app/assets/javascripts/admin/slides/new.js
111
+ - app/assets/javascripts/admin/spree_multi_slideshow.js
112
+ - app/assets/javascripts/store/spree_multi_slideshow.js
113
+ - app/assets/stylesheets/admin/spree_multi_slideshow.css
114
+ - app/assets/stylesheets/store/spree_multi_slideshow.css
115
+ - app/controllers/admin/slides_controller.rb
116
+ - app/controllers/admin/slideshow_types_controller.rb
117
+ - app/controllers/spree/slides_controller.rb
118
+ - app/controllers/spree/slideshow_types_controller.rb
119
+ - app/helpers/slides_helper.rb
120
+ - app/helpers/slideshow_types_helper.rb
121
+ - app/models/slide.rb
122
+ - app/models/slideshow_type.rb
123
+ - app/overrides/slideshow_type_admin_tab.rb
124
+ - app/views/admin/shared/_slideshow_type_tabs.html.erb
125
+ - app/views/admin/slides/_form.html.erb
126
+ - app/views/admin/slides/edit.html.erb
127
+ - app/views/admin/slides/index.html.erb
128
+ - app/views/admin/slides/new.html.erb
129
+ - app/views/admin/slideshow_types/_form.html.erb
130
+ - app/views/admin/slideshow_types/edit.html.erb
131
+ - app/views/admin/slideshow_types/index.html.erb
132
+ - app/views/admin/slideshow_types/new.html.erb
133
+ homepage:
134
+ licenses: []
135
+
136
+ post_install_message:
137
+ rdoc_options: []
138
+
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ hash: 57
147
+ segments:
148
+ - 1
149
+ - 8
150
+ - 7
151
+ version: 1.8.7
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ requirements:
162
+ - none
163
+ rubyforge_project:
164
+ rubygems_version: 1.8.10
165
+ signing_key:
166
+ specification_version: 3
167
+ summary: Extension to manage multi slideshow for Spree Shop
168
+ test_files: []
169
+