jquery-typewriter-rails 0.9.5

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.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Richard Lee
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+ # jQuery Typewriter for Rails
2
+
3
+ [jquery-typewriter](https://github.com/dmrschmidt/jquery-typewriter) is a jQuery plugin written by [Dennis Schmidt](https://github.com/dmrschmidt). The jQuery typewriter allows you to easily add the effect of an old-shool typewriter writing your text to the page.
4
+
5
+ ## Usage
6
+
7
+ Add the following to your `Gemfile`:
8
+
9
+ gem 'jquery-typewriter-rails'
10
+
11
+ Add the following directive to your JavaScript manifest file (for example, `application.js`):
12
+
13
+ //= require jquery.typewriter
14
+
15
+ For full documentation please visit [the original documentation site](http://dmrschmidt.github.com/jquery-typewriter/documentation.html) of this plugin.
16
+
17
+
18
+ ## Contributing
19
+
20
+ 1. Fork it
21
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
22
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
23
+ 4. Push to the branch (`git push origin my-new-feature`)
24
+ 5. Create new Pull Request
@@ -0,0 +1,10 @@
1
+ require "jquery/typewriter/rails/version"
2
+
3
+ module Jquery
4
+ module Typewriter
5
+ module Rails
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Jquery
2
+ module Typewriter
3
+ module Rails
4
+ VERSION = "0.9.5"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,359 @@
1
+ /*
2
+ * jQuery typewriter by Dennis Schmidt
3
+ * free download at: http://metzeltiger.github.com/jquery-typewriter/
4
+ */
5
+ var DEFAULTS = new Array();
6
+ DEFAULTS['data-timeout-letter'] = 15;
7
+ DEFAULTS['data-timeout-wait'] = 100;
8
+ DEFAULTS['data-iterations'] = 5;
9
+
10
+ /*
11
+ * Returns the desired timeout for the given element (DOM object) and type
12
+ * (timeout-letter or timeout-wait). These have default values that will be
13
+ * returned if the given element doesn't have a valid data-timeout-XXX
14
+ * attribute set.
15
+ */
16
+ function get_value(element, type, default_value) {
17
+ var timeout = parseInt(element.attr(type));
18
+ if(isNaN(timeout) || timeout <= 0) { timeout = default_value }
19
+ return timeout;
20
+ }
21
+
22
+ /**
23
+ * Wraps an element that is to be filled with text.
24
+ */
25
+ var Typebox = $.Class.create({
26
+ /*
27
+ * properties
28
+ */
29
+ _max_waiting : 15,
30
+ _possible_chars : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
31
+
32
+ /*
33
+ * Wrap the passed element into a new Typebox.
34
+ */
35
+ initialize: function(element, should_cycle, timeout_letter, timeout_wait,
36
+ max_iterations) {
37
+ this._fixed = "";
38
+ this._current = "";
39
+ this._position = 0;
40
+ this._iteration = 0;
41
+ this._waited = 0;
42
+ this._started = false;
43
+ this._element = $(element);
44
+ this._text = this._element.html();
45
+ this._in_tag = false;
46
+ this._element.html('');
47
+ this._should_cycle = should_cycle;
48
+ this._max_iterations = max_iterations;
49
+ this.set_timeouts(timeout_letter, timeout_wait);
50
+ },
51
+
52
+ /*
53
+ * Sets the timeouts to use.
54
+ */
55
+ set_timeouts: function(timeout_letter, timeout_wait) {
56
+ this._timeout_letter = get_value(this._element,
57
+ 'data-timeout-letter', timeout_letter);
58
+ this._timeout_wait = get_value(this._element,
59
+ 'data-timeout-wait', timeout_wait);
60
+ },
61
+
62
+ /*
63
+ * Returns the current (real) character that is about to be written.
64
+ */
65
+ current_char: function() {
66
+ return this._text[this._position];
67
+ },
68
+
69
+ /*
70
+ * Returns a randomly generated character from the list of all possible
71
+ * characters.
72
+ */
73
+ random_char: function() {
74
+ var index = Math.floor(Math.random() * this._possible_chars.length);
75
+ return this._possible_chars.charAt(index);
76
+ },
77
+
78
+ /*
79
+ * Returns true if the current character should be printed with other
80
+ * random characters, before actually printing the correct char itself.
81
+ * This is never the case for special characters, such as whitespaces.
82
+ */
83
+ should_cycle: function() {
84
+ var should_cycle = this._should_cycle &&
85
+ (this._iteration < (this._max_iterations - 1)) &&
86
+ !(this.current_char() == ' ' ||
87
+ this.current_char() == "\n" ||
88
+ this.current_char() == "\r");
89
+ return should_cycle;
90
+ },
91
+
92
+ /*
93
+ * What to do when we are waiting.
94
+ */
95
+ handle_waiting: function() {
96
+ var value = '.';
97
+ this._fixed = this._current;
98
+ // if waiting is finished, reset the text field
99
+ if(++this._waited == this._max_waiting) {
100
+ this._fixed = "";
101
+ value = '';
102
+ }
103
+ return value;
104
+ },
105
+
106
+ /*
107
+ * What to do when we are writing actual text.
108
+ */
109
+ handle_writing: function() {
110
+ var value = this.should_cycle()
111
+ ? this.random_char()
112
+ : this.current_char();
113
+ this._iteration = (this._iteration + 1) % (this._max_iterations + 1);
114
+ if(this._iteration == 0) {
115
+ this._position++;
116
+ this._fixed = this._current;
117
+ }
118
+ return value;
119
+ },
120
+
121
+ /*
122
+ * Calculates and returns the next character to be displayed.
123
+ */
124
+ get_char: function() {
125
+ if(this.is_waiting()) {
126
+ // display dots if in "waiting" mode
127
+ var value = this.handle_waiting();
128
+ } else {
129
+ // display random letter or real character when not waiting
130
+ var value = this.handle_writing();
131
+ }
132
+ return value;
133
+ },
134
+
135
+ /*
136
+ * Returns true, when currently an HTML tag needs to be written.
137
+ * Needed to quickly jump over these, to avoid ugliness.
138
+ */
139
+ in_tag: function() {
140
+ var current = this.current_char();
141
+ this._in_tag = (this._in_tag || current == '<') && current != '>';
142
+ return this._in_tag;
143
+ },
144
+
145
+ /*
146
+ * Quickly writes a tag.
147
+ */
148
+ write_tag: function() {
149
+ this._current = this._fixed + this.current_char();
150
+ $(this._element).html(this._current);
151
+ this._fixed = this._current;
152
+ this._position++;
153
+ },
154
+
155
+
156
+ /*
157
+ * Returns true if this Typebox is finished printing it's text.
158
+ */
159
+ is_done: function() {
160
+ return this._position >= this._text.length;
161
+ },
162
+
163
+ /*
164
+ * Returns true if this Typebox is currently in waiting mode.
165
+ */
166
+ is_waiting: function() {
167
+ return this._element.attr("data-prefill") == "true" &&
168
+ this._waited < this._max_waiting;
169
+ },
170
+
171
+ /*
172
+ * Update the Typebox's text with new content.
173
+ */
174
+ update: function() {
175
+ if(!this.is_done()) {
176
+ // skip any tags quickly
177
+ if(this.in_tag()) do { this.write_tag(); } while(this.in_tag())
178
+ // in case we skipped a tag, we need to verify we're not done again
179
+ if(!this.is_done()) {
180
+ this._current = this._fixed + this.get_char();
181
+ $(this._element).html(this._current);
182
+ }
183
+ }
184
+ this._started = true;
185
+ return this.is_done();
186
+ },
187
+
188
+ /*
189
+ * Returns true on the first run.
190
+ */
191
+ is_firstrun: function() {
192
+ return !this._started;
193
+ },
194
+
195
+ /*
196
+ * Returns true if the output should be performed after a pause.
197
+ */
198
+ should_pause: function() {
199
+ return this._element.attr("data-prepause") && this.is_firstrun();
200
+ },
201
+
202
+ /*
203
+ * Returns the desired interval until the next update should occur.
204
+ */
205
+ get_interval: function() {
206
+ if(this.should_pause()) {
207
+ return parseInt(this._element.attr("data-prepause"));
208
+ } else if(this.is_waiting()) {
209
+ return this._timeout_wait;
210
+ } else {
211
+ return this._timeout_letter;
212
+ }
213
+ },
214
+
215
+ /*
216
+ *
217
+ */
218
+ toString: function() {
219
+ return this._text;
220
+ },
221
+ });
222
+
223
+
224
+ /**
225
+ * Creates a couple of Typeboxes when initiated and manages their filling,
226
+ * by calling their update methods repetitively.
227
+ */
228
+ var Typewriter = $.Class.create({
229
+ /*
230
+ * Constructs a new typewriter for the given DOM Object ID.
231
+ */
232
+ initialize: function(element) {
233
+ this._started = false;
234
+ this._box_id = element.id;
235
+ this._box = $(element);
236
+ this._parts = [];
237
+ this._should_cycle = this._box.attr("data-cycling") != "false";
238
+ this.load_parts();
239
+ this.autostart();
240
+ },
241
+
242
+ /*
243
+ * Gets a list of DOM objects with class="typewriter-starter", and
244
+ * registers those with a value of data-start-typewriter identical to it's
245
+ * own ID as it's start handlers.
246
+ * Clicking on any of these items will then start the typewriter.
247
+ */
248
+ register_start_handlers: function(handlers) {
249
+ var self = this;
250
+ var box = this._box;
251
+ handlers.each(function(index, element) {
252
+ var to_start = $(element).attr("data-start-typewriter");
253
+ if(to_start == box.attr('id')) {
254
+ $(element).click(jQuery.proxy(self.start_typing, self));
255
+ }
256
+ });
257
+ },
258
+
259
+ /*
260
+ * Returns true when the typewriter shall start automatically (which is)
261
+ * the default behaviour, unless overwritten by setting data-autostart
262
+ * to false.
263
+ */
264
+ shall_autostart: function() {
265
+ return this._box.attr("data-autostart") != "false";
266
+ },
267
+
268
+ /*
269
+ * Performs an automatic start unless configured otherwise.
270
+ * By default this is enabled, but it can be disabled by adding
271
+ * data-autostart="false" to the main typewriter DOM object
272
+ * (the one with class 'typewriter').
273
+ */
274
+ autostart: function() {
275
+ if(this.shall_autostart()) { this.type(); }
276
+ },
277
+
278
+ /*
279
+ * Creates a Typebox instance from the given DOM object.
280
+ */
281
+ load_part: function(part) {
282
+ var timeout_letter = get_value(this._box, 'data-timeout-letter',
283
+ DEFAULTS['data-timeout-letter']);
284
+ var timeout_wait = get_value(this._box, 'data-timeout-wait',
285
+ DEFAULTS['data-timeout-wait']);
286
+ var max_iterations = get_value(this._box, 'data-iterations',
287
+ DEFAULTS['data-iterations']);
288
+ this._parts.push(new Typebox(
289
+ part,
290
+ this._should_cycle,
291
+ timeout_letter,
292
+ timeout_wait,
293
+ max_iterations)
294
+ );
295
+ },
296
+
297
+ /*
298
+ * Loads all the Typebox instances that are available.
299
+ */
300
+ load_parts: function() {
301
+ var boxes = this._box.find(".typewrite");
302
+ var parent = this;
303
+ $.each(boxes, function(index, element) { parent.load_part(element) });
304
+ },
305
+
306
+ /*
307
+ * Returns the Typebox instance that is currently in update progress.
308
+ */
309
+ get_part: function() {
310
+ if(this._current_part == null || (this._current_part.is_done() &&
311
+ this._parts.length > 0))
312
+ this._current_part = this._parts.shift();
313
+ return this._current_part;
314
+ },
315
+
316
+ /*
317
+ * Call this method externally to start the typing. Here we can assure
318
+ * #type() is only called ONCE, to avoid timing problems.
319
+ */
320
+ start_typing: function() {
321
+ if(!this._started) {
322
+ this._started = true;
323
+ this.type();
324
+ }
325
+ },
326
+
327
+ /*
328
+ * Delegates the filling of the Typeboxes to it's respective child
329
+ * Typebox instances.
330
+ */
331
+ type: function() {
332
+ this.get_part().update();
333
+ var timeout = this.get_part().get_interval();
334
+ window.setTimeout(jQuery.proxy(this.type, this), timeout);
335
+ },
336
+
337
+ /*
338
+ *
339
+ */
340
+ toString: function() {
341
+ return this._box_id;
342
+ }
343
+ });
344
+
345
+ /*
346
+ * perform some initializations
347
+ */
348
+ $(document).ready(function() {
349
+ var typewriters = [];
350
+ var handlers = $(".typewriter-starter");
351
+ $(".typewriter").each(function(index, element) {
352
+ var typewriter = new Typewriter(element);
353
+ // if it does not start on it's own, define a start handler
354
+ if(!typewriter.shall_autostart()) {
355
+ typewriter.register_start_handlers(handlers);
356
+ }
357
+ typewriters.push(typewriter);
358
+ });
359
+ });
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery-typewriter-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.5
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Richard Lee
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: railties
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: jquery-rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>'
36
+ - !ruby/object:Gem::Version
37
+ version: '2.0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>'
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.3'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: The jQuery typewriter allows you to easily add the effect of an old-shool
79
+ typewriter writing your text to the page.
80
+ email:
81
+ - rl@polydice.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/jquery/typewriter/rails/version.rb
87
+ - lib/jquery/typewriter/rails.rb
88
+ - vendor/assets/javascripts/jquery.typewriter.js
89
+ - LICENSE.txt
90
+ - README.md
91
+ homepage: https://github.com/polydice/jquery-typewriter-rails
92
+ licenses:
93
+ - MIT
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ segments:
105
+ - 0
106
+ hash: 3811699664421706861
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ segments:
114
+ - 0
115
+ hash: 3811699664421706861
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.23
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: jQuery typewriter text-style plugin wrapped for Rails.
122
+ test_files: []