Bootstrap-Image-Gallery-rails 1.0.0.3.1.0 → 1.0.1.3.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,179 @@
1
+ #
2
+ # * blueimp Gallery Vimeo Video Factory JS 1.2.0
3
+ # * https://github.com/blueimp/Gallery
4
+ # *
5
+ # * Copyright 2013, Sebastian Tschan
6
+ # * https://blueimp.net
7
+ # *
8
+ # * Licensed under the MIT license:
9
+ # * http://www.opensource.org/licenses/MIT
10
+ #
11
+
12
+ # global define, window, document, location, $f
13
+ ((factory) ->
14
+ "use strict"
15
+ if typeof define is "function" and define.amd
16
+
17
+ # Register as an anonymous AMD module:
18
+ define [
19
+ "./blueimp-helper"
20
+ "./blueimp-gallery-video"
21
+ ], factory
22
+ else
23
+
24
+ # Browser globals:
25
+ factory window.blueimp.helper or window.jQuery, window.blueimp.Gallery
26
+ return
27
+ ) ($, Gallery) ->
28
+ "use strict"
29
+ return Gallery unless window.postMessage
30
+ $.extend Gallery::options,
31
+
32
+ # The list object property (or data attribute) with the Vimeo video id:
33
+ vimeoVideoIdProperty: "vimeo"
34
+
35
+ # The URL for the Vimeo video player, can be extended with custom parameters:
36
+ # https://developer.vimeo.com/player/embedding
37
+ vimeoPlayerUrl: "//player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID"
38
+
39
+ # The prefix for the Vimeo video player ID:
40
+ vimeoPlayerIdPrefix: "vimeo-player-"
41
+
42
+ # Require a click on the native Vimeo player for the initial playback:
43
+ vimeoClickToPlay: true
44
+
45
+ textFactory = Gallery::textFactory or Gallery::imageFactory
46
+ VimeoPlayer = (url, videoId, playerId, clickToPlay) ->
47
+ @url = url
48
+ @videoId = videoId
49
+ @playerId = playerId
50
+ @clickToPlay = clickToPlay
51
+ @element = document.createElement("div")
52
+ @listeners = {}
53
+ return
54
+
55
+ counter = 0
56
+ $.extend VimeoPlayer::,
57
+ canPlayType: ->
58
+ true
59
+
60
+ on: (type, func) ->
61
+ @listeners[type] = func
62
+ this
63
+
64
+ loadAPI: ->
65
+ that = this
66
+ apiUrl = "//" + ((if location.protocol is "https" then "secure-" else "")) + "a.vimeocdn.com/js/froogaloop2.min.js"
67
+ scriptTags = document.getElementsByTagName("script")
68
+ i = scriptTags.length
69
+ scriptTag = undefined
70
+ called = undefined
71
+ callback = ->
72
+ that.play() if not called and that.playOnReady
73
+ called = true
74
+ return
75
+
76
+ while i
77
+ i -= 1
78
+ if scriptTags[i].src is apiUrl
79
+ scriptTag = scriptTags[i]
80
+ break
81
+ unless scriptTag
82
+ scriptTag = document.createElement("script")
83
+ scriptTag.src = apiUrl
84
+ $(scriptTag).on "load", callback
85
+ scriptTags[0].parentNode.insertBefore scriptTag, scriptTags[0]
86
+
87
+ # Fix for cached scripts on IE 8:
88
+ callback() if /loaded|complete/.test(scriptTag.readyState)
89
+ return
90
+
91
+ onReady: ->
92
+ that = this
93
+ @ready = true
94
+ @player.addEvent "play", ->
95
+ that.hasPlayed = true
96
+ that.onPlaying()
97
+ return
98
+
99
+ @player.addEvent "pause", ->
100
+ that.onPause()
101
+ return
102
+
103
+ @player.addEvent "finish", ->
104
+ that.onPause()
105
+ return
106
+
107
+ @play() if @playOnReady
108
+ return
109
+
110
+ onPlaying: ->
111
+ if @playStatus < 2
112
+ @listeners.playing()
113
+ @playStatus = 2
114
+ return
115
+
116
+ onPause: ->
117
+ @listeners.pause()
118
+ delete @playStatus
119
+
120
+ return
121
+
122
+ insertIframe: ->
123
+ iframe = document.createElement("iframe")
124
+ iframe.src = @url.replace("VIDEO_ID", @videoId).replace("PLAYER_ID", @playerId)
125
+ iframe.id = @playerId
126
+ @element.parentNode.replaceChild iframe, @element
127
+ @element = iframe
128
+ return
129
+
130
+ play: ->
131
+ that = this
132
+ unless @playStatus
133
+ @listeners.play()
134
+ @playStatus = 1
135
+ if @ready
136
+ if not @hasPlayed and (@clickToPlay or (window.navigator and /iP(hone|od|ad)/.test(window.navigator.platform)))
137
+
138
+ # Manually trigger the playing callback if clickToPlay
139
+ # is enabled and to workaround a limitation in iOS,
140
+ # which requires synchronous user interaction to start
141
+ # the video playback:
142
+ @onPlaying()
143
+ else
144
+ @player.api "play"
145
+ else
146
+ @playOnReady = true
147
+ unless window.$f
148
+ @loadAPI()
149
+ else unless @player
150
+ @insertIframe()
151
+ @player = $f(@element)
152
+ @player.addEvent "ready", ->
153
+ that.onReady()
154
+ return
155
+
156
+ return
157
+
158
+ pause: ->
159
+ if @ready
160
+ @player.api "pause"
161
+ else if @playStatus
162
+ delete @playOnReady
163
+
164
+ @listeners.pause()
165
+ delete @playStatus
166
+ return
167
+
168
+ $.extend Gallery::,
169
+ VimeoPlayer: VimeoPlayer
170
+ textFactory: (obj, callback) ->
171
+ options = @options
172
+ videoId = @getItemProperty(obj, options.vimeoVideoIdProperty)
173
+ if videoId
174
+ obj[options.urlProperty] = "//vimeo.com/" + videoId if @getItemProperty(obj, options.urlProperty) is `undefined`
175
+ counter += 1
176
+ return @videoFactory(obj, callback, new VimeoPlayer(options.vimeoPlayerUrl, videoId, options.vimeoPlayerIdPrefix + counter, options.vimeoClickToPlay))
177
+ textFactory.call this, obj, callback
178
+
179
+ Gallery
@@ -0,0 +1,233 @@
1
+ /*
2
+ * blueimp Gallery NicoNico Video Factory JS 1.2.0
3
+ * https://github.com/blueimp/Gallery
4
+ *
5
+ * Copyright 2013, dogwood008
6
+ * https://blueimp.net
7
+ *
8
+ * Licensed under the MIT license:
9
+ * http://www.opensource.org/licenses/MIT
10
+ */
11
+
12
+ /* global define, window, document, YT */
13
+
14
+ (function (factory) {
15
+ 'use strict';
16
+ if (typeof define === 'function' && define.amd) {
17
+ // Register as an anonymous AMD module:
18
+ define([
19
+ './blueimp-helper',
20
+ './blueimp-gallery-video'
21
+ ], factory);
22
+ } else {
23
+ // Browser globals:
24
+ factory(
25
+ window.blueimp.helper || window.jQuery,
26
+ window.blueimp.Gallery
27
+ );
28
+ }
29
+ }(function ($, Gallery) {
30
+ 'use strict';
31
+
32
+ if (!window.postMessage) {
33
+ return Gallery;
34
+ }
35
+
36
+ $.extend(Gallery.prototype.options, {
37
+ // The list object property (or data attribute) with the Niconico video id:
38
+ nicoNicoVideoIdProperty: 'niconico',
39
+ // Optional object with parameters passed to the Niconico video player:
40
+ // https://developers.google.com/youtube/player_parameters
41
+ nicoNicoPlayerVars: {
42
+ wmode: 'transparent'
43
+ },
44
+ // Require a click on the native YouTube player for the initial playback:
45
+ nicoNicoClickToPlay: true
46
+ });
47
+
48
+ var textFactory = Gallery.prototype.textFactory || Gallery.prototype.imageFactory,
49
+ NicoNicoPlayer = function (videoId, playerVars, clickToPlay) {
50
+ this.videoId = videoId;
51
+ this.playerVars = playerVars;
52
+ this.clickToPlay = clickToPlay;
53
+ this.element = document.createElement('div');
54
+ this.listeners = {};
55
+ };
56
+
57
+ $.extend(NicoNicoPlayer.prototype, {
58
+
59
+ canPlayType: function () {
60
+ return true;
61
+ },
62
+
63
+ on: function (type, func) {
64
+ this.listeners[type] = func;
65
+ return this;
66
+ },
67
+
68
+ loadAPI: function () {
69
+ /* iframe html code */
70
+ /*
71
+ * <script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/sm23915389?w=490&h=307"></script><noscript><a href="http://www.nicovideo.jp/watch/sm23915389">【ニコニコ動画】【水曜激情】半沢と大和田常務に挟まれ折り合いがつかない野々村議員</a></noscript>
72
+ */
73
+ var that = this,
74
+ onNicoNicoIframeAPIReady = window.onNicoNicoIframeAPIReady,
75
+ apiUrl = '//ext.nicovideo.jp/thumb_watch/sm23915389?w=490&h=307';
76
+ scriptTags = document.getElementsByTagName('script'),
77
+ i = scriptTags.length,
78
+ scriptTag;
79
+ window.onNicoNicoIframeAPIReady = function () {
80
+ if (onNicoNicoIframeAPIReady) {
81
+ onNicoNicoIframeAPIReady.apply(this);
82
+ }
83
+ if (that.playOnReady) {
84
+ that.play();
85
+ }
86
+ };
87
+ while (i) {
88
+ i -= 1;
89
+ if (scriptTags[i].src === apiUrl) {
90
+ return;
91
+ }
92
+ }
93
+ scriptTag = document.createElement('script');
94
+ scriptTag.src = apiUrl;
95
+ scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0]);
96
+ },
97
+
98
+ onReady: function () {
99
+ this.ready = true;
100
+ if (this.playOnReady) {
101
+ this.play();
102
+ }
103
+ },
104
+
105
+ onPlaying: function () {
106
+ if (this.playStatus < 2) {
107
+ this.listeners.playing();
108
+ this.playStatus = 2;
109
+ }
110
+ },
111
+
112
+ onPause: function () {
113
+ Gallery.prototype.setTimeout.call(
114
+ this,
115
+ this.checkSeek,
116
+ null,
117
+ 2000
118
+ );
119
+ },
120
+
121
+ checkSeek: function () {
122
+ if (this.stateChange === YT.PlayerState.PAUSED ||
123
+ this.stateChange === YT.PlayerState.ENDED) {
124
+ // check if current state change is actually paused
125
+ this.listeners.pause();
126
+ delete this.playStatus;
127
+ }
128
+ },
129
+
130
+ onStateChange: function (event) {
131
+ switch (event.data) {
132
+ case YT.PlayerState.PLAYING:
133
+ this.hasPlayed = true;
134
+ this.onPlaying();
135
+ break;
136
+ case YT.PlayerState.PAUSED:
137
+ case YT.PlayerState.ENDED:
138
+ this.onPause();
139
+ break;
140
+ }
141
+ // Save most recent state change to this.stateChange
142
+ this.stateChange = event.data;
143
+ },
144
+
145
+ onError: function (event) {
146
+ this.listeners.error(event);
147
+ },
148
+
149
+ play: function () {
150
+ var that = this;
151
+ if (!this.playStatus) {
152
+ this.listeners.play();
153
+ this.playStatus = 1;
154
+ }
155
+ if (this.ready) {
156
+ if (!this.hasPlayed && (this.clickToPlay || (window.navigator &&
157
+ /iP(hone|od|ad)/.test(window.navigator.platform)))) {
158
+ // Manually trigger the playing callback if clickToPlay
159
+ // is enabled and to workaround a limitation in iOS,
160
+ // which requires synchronous user interaction to start
161
+ // the video playback:
162
+ this.onPlaying();
163
+ } else {
164
+ this.player.playVideo();
165
+ }
166
+ } else {
167
+ this.playOnReady = true;
168
+ if (!(window.YT && YT.Player)) {
169
+ this.loadAPI();
170
+ } else if (!this.player) {
171
+ this.player = new YT.Player(this.element, {
172
+ videoId: this.videoId,
173
+ playerVars: this.playerVars,
174
+ events: {
175
+ onReady: function () {
176
+ that.onReady();
177
+ },
178
+ onStateChange: function (event) {
179
+ that.onStateChange(event);
180
+ },
181
+ onError: function (event) {
182
+ that.onError(event);
183
+ }
184
+ }
185
+ });
186
+ }
187
+ }
188
+ },
189
+
190
+ pause: function () {
191
+ if (this.ready) {
192
+ this.player.pauseVideo();
193
+ } else if (this.playStatus) {
194
+ delete this.playOnReady;
195
+ this.listeners.pause();
196
+ delete this.playStatus;
197
+ }
198
+ }
199
+
200
+ });
201
+
202
+ $.extend(Gallery.prototype, {
203
+
204
+ NicoNicoPlayer: NicoNicoPlayer,
205
+
206
+ textFactory: function (obj, callback) {
207
+ var options = this.options,
208
+ videoId = this.getItemProperty(obj, options.nicoNicoVideoIdProperty);
209
+ if (videoId) {
210
+ if (this.getItemProperty(obj, options.urlProperty) === undefined) {
211
+ obj[options.urlProperty] = '//www.youtube.com/watch?v=' + videoId;
212
+ }
213
+ if (this.getItemProperty(obj, options.videoPosterProperty) === undefined) {
214
+ obj[options.videoPosterProperty] = '//img.youtube.com/vi/' + videoId +
215
+ '/maxresdefault.jpg';
216
+ }
217
+ return this.videoFactory(
218
+ obj,
219
+ callback,
220
+ new NicoNicoPlayer(
221
+ videoId,
222
+ options.nicoNicoPlayerVars,
223
+ options.nicoNicoClickToPlay
224
+ )
225
+ );
226
+ }
227
+ return textFactory.call(this, obj, callback);
228
+ }
229
+
230
+ });
231
+
232
+ return Gallery;
233
+ }));
@@ -0,0 +1,159 @@
1
+ // Generated by CoffeeScript 1.7.1
2
+ (function(factory) {
3
+ "use strict";
4
+ if (typeof define === "function" && define.amd) {
5
+ define(["./blueimp-helper", "./blueimp-gallery-video"], factory);
6
+ } else {
7
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery);
8
+ }
9
+ })(function($, Gallery) {
10
+ "use strict";
11
+ var NiconicoPlayer, counter, textFactory;
12
+ if (!window.postMessage) {
13
+ return Gallery;
14
+ }
15
+ $.extend(Gallery.prototype.options, {
16
+ niconicoVideoIdProperty: "niconico",
17
+ niconicoPlayerUrl: "//ext.nicovideo.jp/thumb_watch/VIDEO_ID?w=490&h=307",
18
+ niconicoPlayerIdPrefix: "niconico-player-",
19
+ niconicoClickToPlay: true
20
+ });
21
+ textFactory = Gallery.prototype.textFactory || Gallery.prototype.imageFactory;
22
+ NiconicoPlayer = function(url, videoId, playerId, clickToPlay) {
23
+ this.url = url;
24
+ this.videoId = videoId;
25
+ this.playerId = playerId;
26
+ this.clickToPlay = clickToPlay;
27
+ this.element = document.createElement("div");
28
+ this.listeners = {};
29
+ };
30
+ counter = 0;
31
+ $.extend(NiconicoPlayer.prototype, {
32
+ canPlayType: function() {
33
+ return true;
34
+ },
35
+ on: function(type, func) {
36
+ this.listeners[type] = func;
37
+ return this;
38
+ },
39
+ loadAPI: function() {
40
+ var apiUrl, callback, called, i, scriptTag, scriptTags, that;
41
+ that = this;
42
+ apiUrl = "//ext.nicovideo.jp/api/getthumbinfo/VIDEO_ID";
43
+ scriptTags = document.getElementsByTagName("script");
44
+ i = scriptTags.length;
45
+ scriptTag = void 0;
46
+ called = void 0;
47
+ callback = function() {
48
+ if (!called && that.playOnReady) {
49
+ that.play();
50
+ }
51
+ called = true;
52
+ };
53
+ while (i) {
54
+ i -= 1;
55
+ if (scriptTags[i].src === apiUrl) {
56
+ scriptTag = scriptTags[i];
57
+ break;
58
+ }
59
+ }
60
+ if (!scriptTag) {
61
+ scriptTag = document.createElement("script");
62
+ scriptTag.src = apiUrl;
63
+ }
64
+ $(scriptTag).on("load", callback);
65
+ scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0]);
66
+ if (/loaded|complete/.test(scriptTag.readyState)) {
67
+ callback();
68
+ }
69
+ },
70
+ onReady: function() {
71
+ var that;
72
+ that = this;
73
+ this.ready = true;
74
+ this.player.addEvent("play", function() {
75
+ that.hasPlayed = true;
76
+ that.onPlaying();
77
+ });
78
+ this.player.addEvent("pause", function() {
79
+ that.onPause();
80
+ });
81
+ this.player.addEvent("finish", function() {
82
+ that.onPause();
83
+ });
84
+ if (this.playOnReady) {
85
+ this.play();
86
+ }
87
+ },
88
+ onPlaying: function() {
89
+ if (this.playStatus < 2) {
90
+ this.listeners.playing();
91
+ this.playStatus = 2;
92
+ }
93
+ },
94
+ onPause: function() {
95
+ this.listeners.pause();
96
+ delete this.playStatus;
97
+ },
98
+ insertIframe: function() {
99
+ var iframe;
100
+ iframe = document.createElement("iframe");
101
+ iframe.src = this.url.replace("VIDEO_ID", this.videoId).replace("PLAYER_ID", this.playerId);
102
+ iframe.id = this.playerId;
103
+ this.element.parentNode.replaceChild(iframe, this.element);
104
+ this.element = iframe;
105
+ },
106
+ play: function() {
107
+ var that;
108
+ that = this;
109
+ if (!this.playStatus) {
110
+ this.listeners.play();
111
+ this.playStatus = 1;
112
+ }
113
+ if (this.ready) {
114
+ if (!this.hasPlayed && (this.clickToPlay || (window.navigator && /iP(hone|od|ad)/.test(window.navigator.platform)))) {
115
+ this.onPlaying();
116
+ } else {
117
+ this.player.api("play");
118
+ }
119
+ } else {
120
+ this.playOnReady = true;
121
+ if (!window.$f) {
122
+ this.loadAPI();
123
+ } else if (!this.player) {
124
+ this.insertIframe();
125
+ this.player = $f(this.element);
126
+ this.player.addEvent("ready", function() {
127
+ that.onReady();
128
+ });
129
+ }
130
+ }
131
+ },
132
+ pause: function() {
133
+ if (this.ready) {
134
+ this.player.api("pause");
135
+ } else if (this.playStatus) {
136
+ delete this.playOnReady;
137
+ this.listeners.pause();
138
+ delete this.playStatus;
139
+ }
140
+ }
141
+ });
142
+ $.extend(Gallery.prototype, {
143
+ NiconicoPlayer: NiconicoPlayer,
144
+ textFactory: function(obj, callback) {
145
+ var options, videoId;
146
+ options = this.options;
147
+ videoId = this.getItemProperty(obj, options.niconicoVideoIdProperty);
148
+ if (videoId) {
149
+ if (this.getItemProperty(obj, options.urlProperty) === undefined) {
150
+ obj[options.urlProperty] = "//niconico.com/" + videoId;
151
+ }
152
+ counter += 1;
153
+ return this.videoFactory(obj, callback, new NiconicoPlayer(options.niconicoPlayerUrl, videoId, options.niconicoPlayerIdPrefix + counter, options.niconicoClickToPlay));
154
+ }
155
+ return textFactory.call(this, obj, callback);
156
+ }
157
+ });
158
+ return Gallery;
159
+ });