countable-rails 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 466203ca5ba87067c5ba7d0657f90f955f6a2408
4
+ data.tar.gz: 5bfa6acafd0afd2656d5723a471ef35b01b8e582
5
+ SHA512:
6
+ metadata.gz: fccc6811184777f0c22a437a62b96d0ef9f5ffef3130d51cb7581816d67950c2121be5d3c1c8ab9eb261e40f14835134e36808940dc2a46ab364f0b143324faf
7
+ data.tar.gz: a86acde04a373572d1e7830b5b5499304a4102f27a8627ef045e2512a4a830b27b9b31b68fa6d76a20b12bed53ee91cc9c394a5d23e865d389066cf44591a6d1
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,33 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '3.2.8'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ gem 'sqlite3'
9
+
10
+
11
+ # Gems used only for assets and not required
12
+ # in production environments by default.
13
+ group :assets do
14
+ gem 'sass-rails', '~> 3.2.3'
15
+ gem 'coffee-rails', '~> 3.2.1'
16
+
17
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
18
+ # gem 'therubyracer', :platforms => :ruby
19
+
20
+ gem 'uglifier', '>= 1.0.3'
21
+
22
+ gem 'jquery-ui-rails'
23
+ end
24
+
25
+ gem 'jquery-rails'
26
+
27
+ # Specify your gem's dependencies in jquery-modal-rails.gemspec
28
+ gemspec
29
+
30
+ # add rspec
31
+ gem 'rspec'
32
+ gem 'rspec-rails'
33
+ gem 'shoulda', :require => false
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Kyle Szives
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.
data/README.md ADDED
@@ -0,0 +1,130 @@
1
+ # Countable
2
+
3
+ Countable Rails is a Rails wrapper for the javascript plugin Coutnable by [Sacha Schmid](http://sachaschmid.ch) ([**@sachaschmid**](https://twitter.com/sachaschmid))
4
+
5
+ Countable is a JavaScript function to add **live paragraph-, word- and character-counting** to an HTML element. Countable is a *zero-dependency* library and comes in at **1KB** when minified and gzipped.
6
+
7
+ [**View the Demo**](http://radlikewhoa.github.io/Countable#demo)
8
+
9
+ [**View the Original**](https://github.com/RadLikeWhoa/Countable)
10
+
11
+ ## Installation
12
+
13
+ ```
14
+ gem install 'countable-rails'
15
+ ```
16
+
17
+ or
18
+
19
+ ```
20
+ gem 'countable-rails'
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ Countable is available as a Node / CommonJS module, an AMD module and as a global. All methods are accessed on the Countable object directly.
26
+
27
+ ### Callbacks
28
+
29
+ The `live` and `once` method both accept a callback. The given callback is then called whenever needed with a single parameter that carries all the releavant data. `this` is bound to the current element. Take the following code for an example.
30
+
31
+ ```javascript
32
+ var area = document.getElementById('text')
33
+
34
+ Countable.once(area, function (counter) {
35
+ console.log(this, counter)
36
+ })
37
+ ```
38
+
39
+ ```
40
+ => <textarea id="text"></textarea>, { all: 0, characters: 0, paragraphs: 0, words: 0 }
41
+ ```
42
+
43
+ Property | Meaning
44
+ ---------- | --------------------------------------------------------------------------------------------
45
+ paragraphs | The number of paragraphs. Paragraphs can be separated by either a soft or a hard (two line breaks) return. To use hard returns, set the corresponding option (`hardReturns`).
46
+ words | The number of words. Words are split using spaces.
47
+ characters | The number of characters (without spaces). This contains all non-whitespace characters.
48
+ all | The number of characters including whitespace. This is the total number of all characters in the element.
49
+
50
+ ### Countable#live(elements, callback, options)
51
+
52
+ Bind the callback to all given elements. The callback gets called everytime the element's value or text is changed.
53
+
54
+ ```javascript
55
+ Countable.live(area, function (counter) {
56
+ console.log(counter)
57
+ })
58
+ ```
59
+
60
+ ### Countable#die(elements)
61
+
62
+ Remove the bound callback from all given elements.
63
+
64
+ ```javascript
65
+ Countable.die(area)
66
+ ```
67
+
68
+ ### Countable#once(elements, callback, options)
69
+
70
+ Similar to `Countable.live()`, but the callback is only executed once, there are no events bound.
71
+
72
+ ```javascript
73
+ Countable.once(area, function (counter) {
74
+ console.log(counter)
75
+ })
76
+ ```
77
+
78
+ ### Countable#enabled(element)
79
+
80
+ Checks the live-counting functionality is bound to the given.
81
+
82
+ ```javascript
83
+ Countable.enabled(area)
84
+ ```
85
+
86
+ ### Options
87
+
88
+ `Countable.live()` and `Countable.once()` both accept a third argument, an options object that allows you to change how Countable treats certain aspects of your element's text.
89
+
90
+ ```javascript
91
+ {
92
+ hardReturns: false,
93
+ stripTags: false
94
+ }
95
+ ```
96
+
97
+ By default, paragraphs are split by a single return (a soft return). By setting `hardReturns` to true, Countable splits paragraphs after two returns.
98
+
99
+ Depending on your application and audience, you might need to strip HTML tags from the text before counting it. You can do this by setting `stripTags` to true.
100
+
101
+ ## Browser Support
102
+
103
+ Countable supports all modern browsers. Internet Explorer is supported down to version 7. Note that some browsers don't implement the `oninput` event consistently so there might be differences in the way Countable works in different browsers.
104
+
105
+ ## Upgrading from version 1.x.x
106
+
107
+ Upgrading from version 1.x.x is easy. Most likely, you've used something like the following:
108
+
109
+ ```javascript
110
+ var area = document.getElementById('area')
111
+
112
+ new Countable(area, function (counter) {
113
+ console.log(counter)
114
+ }, { stripTags: true })
115
+ ```
116
+
117
+ The new syntax offers more functions as described above, but to keep the live-counting functionality, you just write this:
118
+
119
+ ```javascript
120
+ var area = document.getElementById('area')
121
+
122
+ Countable.live(area, function (counter) {
123
+ console.log(counter)
124
+ }, { stripTags: true })
125
+ ```
126
+
127
+ * The callback parameter is no longer optional
128
+ * `options.once` has been replaced with `Countable.once()`
129
+ * `Countable.live()` and `Countable.once()` both accept one or more elements, rather than just a single one
130
+ * Inside the callback, `this` is now bound to the current element
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'countable/rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "countable-rails"
8
+ spec.version = Countable::Rails::VERSION
9
+ spec.authors = ["Kyle Szives"]
10
+ spec.email = ["kjszives@gmail.com"]
11
+ spec.summary = "Countable is a script to allow for live paragraph-, word- and character- counting on an HTML element."
12
+ spec.description = "Countable is a script to allow for live paragraph-, word- and character- counting on an HTML element based on http://radlikewhoa.github.io/Countable."
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_dependency "railties", ">= 3.1"
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,6 @@
1
+ module Countable
2
+ module Rails
3
+ VERSION = "0.0.1"
4
+ COUNTABLE_VERSION = "2.0.1"
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ require "countable/rails/version"
2
+
3
+ module Countable
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Countable is a script to allow for live paragraph-, word- and character-
3
+ * counting on an HTML element.
4
+ *
5
+ * @author Sacha Schmid (<https://github.com/RadLikeWhoa>)
6
+ * @version 2.0.1
7
+ * @license MIT
8
+ * @see <http://radlikewhoa.github.io/Countable/>
9
+ */
10
+
11
+ /**
12
+ * Note: For the purpose of this internal documentation, arguments of the type
13
+ * {Nodes} are to be interpreted as either {NodeList} or {Element}.
14
+ */
15
+
16
+ ;(function (global) {
17
+ 'use strict'
18
+
19
+ /**
20
+ * @private
21
+ *
22
+ * `_liveElements` holds all elements that have the live-counting
23
+ * functionality bound to them.
24
+ *
25
+ * `_event` holds the event to handle the live counting, based on the
26
+ * browser's capabilities.
27
+ */
28
+
29
+ var _liveElements = [],
30
+ _event = 'oninput' in document ? 'input' : 'keyup'
31
+
32
+ /**
33
+ * `String.trim()` polyfill for non-supporting browsers. This is the
34
+ * recommended polyfill on MDN.
35
+ *
36
+ * @see <http://goo.gl/uYveB>
37
+ * @see <http://goo.gl/xjIxJ>
38
+ *
39
+ * @return {String} The original string with leading and trailing whitespace
40
+ * removed.
41
+ */
42
+
43
+ if (!String.prototype.trim) {
44
+ String.prototype.trim = function () {
45
+ return this.replace(/^\s+|\s+$/g, '')
46
+ }
47
+ }
48
+
49
+ /**
50
+ * `ucs2decode` function from the punycode.js library.
51
+ *
52
+ * Creates an array containing the decimal code points of each Unicode
53
+ * character in the string. While JavaScript uses UCS-2 internally, this
54
+ * function will convert a pair of surrogate halves (each of which UCS-2
55
+ * exposes as separate characters) into a single code point, matching
56
+ * UTF-16.
57
+ *
58
+ * @see <http://goo.gl/8M09r>
59
+ * @see <http://goo.gl/u4UUC>
60
+ *
61
+ * @param {String} string The Unicode input string (UCS-2).
62
+ *
63
+ * @return {Array} The new array of code points.
64
+ */
65
+
66
+ function _decode (string) {
67
+ var output = [],
68
+ counter = 0,
69
+ length = string.length,
70
+ value, extra
71
+
72
+ while (counter < length) {
73
+ value = string.charCodeAt(counter++)
74
+
75
+ if ((value & 0xF800) == 0xD800 && counter < length) {
76
+
77
+ // High surrogate, and there is a next character.
78
+
79
+ extra = string.charCodeAt(counter++)
80
+
81
+ if ((extra & 0xFC00) == 0xDC00) {
82
+
83
+ // Low surrogate.
84
+
85
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000)
86
+ } else {
87
+ output.push(value, extra)
88
+ }
89
+ } else {
90
+ output.push(value)
91
+ }
92
+ }
93
+
94
+ return output
95
+ }
96
+
97
+ /**
98
+ * `_validateArguments` validates the arguments given to each function call.
99
+ * Errors are logged to the console as warnings, but Countable fails silently.
100
+ *
101
+ * @private
102
+ *
103
+ * @param {Nodes} elements The (collection of) element(s) to
104
+ * validate.
105
+ *
106
+ * @param {Function} callback The callback function to validate.
107
+ *
108
+ * @return {Boolean} Returns whether all arguments are vaild.
109
+ */
110
+
111
+ function _validateArguments (elements, callback) {
112
+ var elementsValid = elements && ((Object.prototype.toString.call(elements) === '[object NodeList]' && elements.length) || (elements.nodeType === 1)),
113
+ callbackValid = callback && typeof callback === 'function'
114
+
115
+ if ('console' in window && 'warn' in console) {
116
+ if (!elementsValid) console.warn('Countable: No valid elements were found')
117
+ if (!callbackValid) console.warn('Countable: "' + callback + '" is not a valid callback function')
118
+ }
119
+
120
+ return elementsValid && callbackValid
121
+ }
122
+
123
+ /**
124
+ * `_extendDefaults` is a function to extend a set of default options with the
125
+ * ones given in the function call. Available options are described below.
126
+ *
127
+ * {Boolean} hardReturns Use two returns to seperate a paragraph instead of
128
+ * one.
129
+ * {Boolean} stripTags Strip HTML tags before counting the values.
130
+ *
131
+ * @private
132
+ *
133
+ * @param {Object} options Countable allows the options described above.
134
+ * They can be used in a function call to override
135
+ * the default behaviour.
136
+ *
137
+ * @return {Object} The new options object.
138
+ */
139
+
140
+ function _extendDefaults (options) {
141
+ var defaults = { hardReturns: false, stripTags: false }
142
+
143
+ for (var prop in options) {
144
+ if (defaults.hasOwnProperty(prop)) defaults[prop] = options[prop]
145
+ }
146
+
147
+ return defaults
148
+ }
149
+
150
+ /**
151
+ * `_count` trims an element's value, optionally strips HTML tags and counts
152
+ * paragraphs, words, characters and characters plus spaces.
153
+ *
154
+ * @private
155
+ *
156
+ * @param {Element} element The element whose value is to be counted.
157
+ *
158
+ * @param {Object} options The options to use for the counting.
159
+ *
160
+ * @return {Object} The object containing the number of paragraphs,
161
+ * words, characters and characters plus spaces.
162
+ */
163
+
164
+ function _count (element, options) {
165
+ var original = 'value' in element ? element.value : element.innerText || element.textContent,
166
+ trimmed
167
+
168
+ /**
169
+ * The initial implementation to allow for HTML tags stripping was created
170
+ * @craniumslows while the current one was created by @Rob--W.
171
+ *
172
+ * @see <http://goo.gl/Exmlr>
173
+ * @see <http://goo.gl/gFQQh>
174
+ */
175
+
176
+ if (options.stripTags) original = original.replace(/<\/?[a-z][^>]*>/gi, '')
177
+
178
+ trimmed = original.trim()
179
+
180
+ /**
181
+ * Most of the performance improvements are based on the works of @epmatsw.
182
+ *
183
+ * @see <http://goo.gl/SWOLB>
184
+ */
185
+
186
+ return {
187
+ paragraphs: trimmed ? (trimmed.match(options.hardReturns ? /\n{2,}/g : /\n+/g) || []).length + 1 : 0,
188
+ words: trimmed ? (trimmed.replace(/['";:,.?¿\-!¡]+/g, '').match(/\S+/g) || []).length : 0,
189
+ characters: trimmed ? _decode(trimmed.replace(/\s/g, '')).length : 0,
190
+ all: _decode(original.replace(/[\n\r]/g, '')).length
191
+ }
192
+ }
193
+
194
+ /**
195
+ * `_loop` is a helper function to iterate over a collection, e.g. a NodeList
196
+ * or an Array. The callback receives the current element as the single
197
+ * parameter.
198
+ *
199
+ * @private
200
+ *
201
+ * @param {Array} which The collection to iterate over.
202
+ *
203
+ * @param {Function} callback The callback function to call on each
204
+ * iteration.
205
+ */
206
+
207
+ function _loop (which, callback) {
208
+ var len = which.length
209
+
210
+ if (typeof len !== 'undefined') {
211
+ while (len--) {
212
+ callback(which[len])
213
+ }
214
+ } else {
215
+ callback(which)
216
+ }
217
+ }
218
+
219
+ /**
220
+ * This is the main object that will later be exposed to other scripts. It
221
+ * holds all the public methods that can be used to enable the Countable
222
+ * functionality.
223
+ */
224
+
225
+ var Countable = {
226
+
227
+ /**
228
+ * The `live` method binds the counting handler to all given elements. The
229
+ * event is either `oninput` or `onkeydown`, based on the capabilities of
230
+ * the browser.
231
+ *
232
+ * @param {Nodes} elements All elements that should receive the
233
+ * Countable functionality.
234
+ *
235
+ * @param {Function} callback The callback to fire whenever the
236
+ * element's value changes. The callback is
237
+ * called with the relevant element bound to
238
+ * `this` and the counted values as the
239
+ * single parameter.
240
+ *
241
+ * @param {Object} [options] An object to modify Countable's
242
+ * behaviour. Refer to `_extendDefaults` for
243
+ * a list of available options.
244
+ *
245
+ * @return {Object} Returns the Countable object to allow for chaining.
246
+ */
247
+
248
+ live: function (elements, callback, options) {
249
+ var ops = _extendDefaults(options),
250
+ bind = function (element) {
251
+ var handler = function () {
252
+ callback.call(element, _count(element, ops))
253
+ }
254
+
255
+ _liveElements.push({ element: element, handler: handler })
256
+
257
+ handler()
258
+
259
+ if (element.addEventListener) {
260
+ element.addEventListener(_event, handler, false)
261
+ } else if (element.attachEvent) {
262
+ element.attachEvent('on' + _event, handler)
263
+ }
264
+ }
265
+
266
+ if (!_validateArguments(elements, callback)) return
267
+
268
+ if (elements.length) {
269
+ _loop(elements, bind)
270
+ } else {
271
+ bind(elements)
272
+ }
273
+
274
+ return this
275
+ },
276
+
277
+ /**
278
+ * The `die` method removes the Countable functionality from all given
279
+ * elements.
280
+ *
281
+ * @param {Nodes} elements All elements whose Countable functionality
282
+ * should be unbound.
283
+ *
284
+ * @return {Object} Returns the Countable object to allow for chaining.
285
+ */
286
+
287
+ die: function (elements) {
288
+ if (!_validateArguments(elements, function () {})) return
289
+
290
+ _loop(elements, function (element) {
291
+ var liveElement
292
+
293
+ _loop(_liveElements, function (live) {
294
+ if (live.element === element) liveElement = live
295
+ })
296
+
297
+ if (!liveElement) return
298
+
299
+ if (element.removeEventListener) {
300
+ element.removeEventListener(_event, liveElement.handler, false)
301
+ } else if (element.detachEvent) {
302
+ element.detachEvent('on' + _event, liveElement.handler)
303
+ }
304
+
305
+ _liveElements.splice(_liveElements.indexOf(liveElement), 1)
306
+ })
307
+
308
+ return this
309
+ },
310
+
311
+ /**
312
+ * The `once` method works mostly like the `live` method, but no events are
313
+ * bound, the functionality is only executed once.
314
+ *
315
+ * @param {Nodes} elements All elements that should receive the
316
+ * Countable functionality.
317
+ *
318
+ * @param {Function} callback The callback to fire whenever the
319
+ * element's value changes. The callback is
320
+ * called with the relevant element bound to
321
+ * `this` and the counted values as the
322
+ * single parameter.
323
+ *
324
+ * @param {Object} [options] An object to modify Countable's
325
+ * behaviour. Refer to `_extendDefaults`
326
+ * for a list of available options.
327
+ *
328
+ * @return {Object} Returns the Countable object to allow for chaining.
329
+ */
330
+
331
+ once: function (elements, callback, options) {
332
+ if (!_validateArguments(elements, callback)) return
333
+
334
+ _loop(elements, function (element) {
335
+ callback.call(element, _count(element, _extendDefaults(options)))
336
+ })
337
+
338
+ return this
339
+ },
340
+
341
+ /**
342
+ * The `enabled` method checks if the live-counting functionality is bound
343
+ * to an element.
344
+ *
345
+ * @param {Element} element A single Element.
346
+ *
347
+ * @return {Boolean} A boolean value representing whether Countable
348
+ * functionality is bound to the given element.
349
+ */
350
+
351
+ enabled: function (element) {
352
+ var isEnabled = false
353
+
354
+ if (element && element.nodeType === 1) {
355
+ _loop(_liveElements, function (live) {
356
+ if (live.element === element) isEnabled = true
357
+ })
358
+ }
359
+
360
+ return isEnabled
361
+ }
362
+
363
+ }
364
+
365
+ /**
366
+ * Expose Countable depending on the module system used across the
367
+ * application. (Node / CommonJS, AMD, global)
368
+ */
369
+
370
+ if (typeof exports === 'object') {
371
+ module.exports = Countable
372
+ } else if (typeof define === 'function' && define.amd) {
373
+ define(function () { return Countable })
374
+ } else {
375
+ global.Countable = Countable
376
+ }
377
+ }(this))
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: countable-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kyle Szives
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Countable is a script to allow for live paragraph-, word- and character-
56
+ counting on an HTML element based on http://radlikewhoa.github.io/Countable.
57
+ email:
58
+ - kjszives@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - countable-rails.gemspec
69
+ - lib/countable/rails.rb
70
+ - lib/countable/rails/version.rb
71
+ - vendor/assets/javascripts/countable.js
72
+ homepage: ''
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.0.7
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Countable is a script to allow for live paragraph-, word- and character-
96
+ counting on an HTML element.
97
+ test_files: []