spree_multi_slideshow 0.70.3

Sign up to get free protection for your applications and to get access to all the features.
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
+