kala-rails 0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # kala-rails
2
+
3
+ jquery.kala for Rails 3.1+ asset pipeline
4
+
5
+ ### Installation
6
+
7
+ In your Gemfile, add this line:
8
+
9
+ gem "kala-rails"
10
+
11
+ Then, run `bundle install`.
12
+
13
+ In your app/assets/javascripts/application.js, add this line:
14
+
15
+ //= require jquery.kala
16
+
17
+ You're done!
18
+
19
+
20
+ ### Use
21
+
22
+ See http://github.com/archit/kala for usage info.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ task :default => :spec
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/kala/rails/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "kala-rails"
6
+ s.version = Kala::Rails::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Archit Baweja"]
9
+ s.email = ["architbaweja@gmail.com"]
10
+ s.homepage = "http://github.com/archit/kala-rails"
11
+ s.summary = "jquery.kala for Rails 3.1+ Asset pipeline"
12
+ s.description = "Provides easy installation and usage of jQuery.kala javascript library for your Rails 3.1+ application."
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+
16
+ s.add_dependency "jquery-rails"
17
+ s.add_development_dependency "rails", "~> 3.1"
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.executables = `git ls-files`.split("\n").select{|f| f =~ /^bin/}
21
+ s.require_path = 'lib'
22
+ end
data/lib/kala-rails.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Kala
2
+ require 'kala/rails'
3
+ end
data/lib/kala/rails.rb ADDED
@@ -0,0 +1,6 @@
1
+ module Kala
2
+ module Rails
3
+ require 'kala/rails/engine'
4
+ require 'kala/rails/version'
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Kala
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Kala
2
+ module Rails
3
+ VERSION = "0.1"
4
+ KALA_VERSION = "0.1"
5
+ end
6
+ end
@@ -0,0 +1,191 @@
1
+ /*
2
+ * Copyright (c) 2012 Archit Baweja
3
+ * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
4
+ */
5
+ (function ($) {
6
+ /*
7
+ * Allows only time characters to be input
8
+ * TODO:
9
+ * Support other separators besides ':'
10
+ * Support Jack Bauer in fight against the terrorists.
11
+ *
12
+ * @name kala
13
+ * @param config { jackBauer: true }
14
+ * @param callback A function that runs if the number is not valid (fires onblur)
15
+ * @author Archit Baweja architbaweja@gmail.com
16
+ * @example $(".kala").kala();
17
+ */
18
+ $.fn.kala = function(config, callback)
19
+ {
20
+ // shorthand for 24 hour format
21
+ if (typeof config === 'boolean') {
22
+ config = { 'jackBauer' : true };
23
+ }
24
+ config = config || {};
25
+ // callback function
26
+ var callback = typeof callback == "function" ? callback : function(){};
27
+ // set data and methods
28
+ return this.data("kala.jackBauer", false).data("kala.callback", callback).keypress($.fn.kala.keypress).keyup($.fn.kala.keyup).blur($.fn.kala.blur);
29
+ }
30
+
31
+ $.fn.kala.keypress = function(e)
32
+ {
33
+ // get if allow 24 hour format
34
+ var jackBauer = $.data(this, "kala.jackBauer");
35
+ // get the key that was pressed
36
+ var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
37
+
38
+ // Allow spaces no matter what
39
+ if (key === 32) return true
40
+
41
+ var value = $(this).val();
42
+ // remove spaces so the math can be simpler
43
+ value = value.replace(/\s*/g, '')
44
+ // If we've reached the 7 limit (xx:xxpm), just return
45
+ if (value.length > 7) return false
46
+
47
+ // allow enter/return key (only when in an input box)
48
+ if (key == 13 && this.nodeName.toLowerCase() == "input") {
49
+ return true;
50
+ } else if (key == 13) {
51
+ return false;
52
+ }
53
+ var allow = false;
54
+ // allow Ctrl+A
55
+ if ((e.ctrlKey && key == 97 /* firefox */) || (e.ctrlKey && key == 65) /* opera */) return true;
56
+ // allow Ctrl+X (cut)
57
+ if ((e.ctrlKey && key == 120 /* firefox */) || (e.ctrlKey && key == 88) /* opera */) return true;
58
+ // allow Ctrl+C (copy)
59
+ if ((e.ctrlKey && key == 99 /* firefox */) || (e.ctrlKey && key == 67) /* opera */) return true;
60
+ // allow Ctrl+Z (undo)
61
+ if ((e.ctrlKey && key == 122 /* firefox */) || (e.ctrlKey && key == 90) /* opera */) return true;
62
+ // allow or deny Ctrl+V (paste), Shift+Ins
63
+ if ((e.ctrlKey && key == 118 /* firefox */) || (e.ctrlKey && key == 86) /* opera */
64
+ || (e.shiftKey && key == 45)) return true;
65
+
66
+ // if a number was not pressed
67
+ if (key < 48 || key > 57) {
68
+ // Allow : only after a number is entered
69
+ if (value.length > 0 && value.indexOf(":") == -1 && key == 58 && (value.length < 3 || ($.fn.getSelectionStart(this)) < 3)) return true;
70
+
71
+ // Allow am/pm at the end
72
+ if (value.length > 0 && value.length < 7 && !value.match(/(a|p|am|pm)/i)) return (key == 97 || key == 65 || key == 112 || key == 80);
73
+ if (value.length > 0 && value.length < 7 && !value.match(/m/i)) return (key == 109 || key == 77);
74
+
75
+ // check for other keys that have special purposes
76
+ // 8 backspace
77
+ // 9 tab
78
+ // 13 enter
79
+ // 35 end
80
+ // 36 home
81
+ // 37 left
82
+ // 39 right
83
+ // 46 del
84
+ if ($.inArray([8, 9, 13, 35, 36, 37, 39, 46], key) > 0) {
85
+ // for detecting special keys (listed above)
86
+ // IE does not support 'charCode' and ignores them in keypress anyway
87
+ if (typeof e.charCode != "undefined") {
88
+ // special keys have 'keyCode' and 'which' the same (e.g. backspace)
89
+ if (e.keyCode == e.which && e.which != 0) {
90
+ return true;
91
+ // . and delete share the same code, don't allow . (will be set to true later if it is the decimal point)
92
+ if (e.which == 46) return false;
93
+ } else if (e.keyCode != 0 && e.charCode == 0 && e.which == 0) {
94
+ // or keyCode != 0 and 'charCode'/'which' = 0
95
+ return true;
96
+ }
97
+ }
98
+ } else {
99
+ return false
100
+ }
101
+ } else {
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+
107
+ $.fn.kala.keyup = function(e)
108
+ {
109
+ var val = $(this).value;
110
+ if (val && val.length > 0) {
111
+ // get carat (cursor) position
112
+ var carat = $.fn.getSelectionStart(this);
113
+ var jackBauer = $.data(this, "kala.jackBauer");
114
+
115
+ var validChars = [0,1,2,3,4,5,6,7,8,9,':'];
116
+ // get length of the value (to loop through)
117
+ var length = val.length;
118
+ // loop backwards (to prevent going out of bounds)
119
+ for (var i = length - 1; i >= 0; i--) {
120
+ var ch = val.charAt(i);
121
+ var validChar = false;
122
+ // loop through validChars
123
+ for(var j = 0; j < validChars.length; j++) {
124
+ // if it is valid, break out the loop
125
+ if (ch == validChars[j]) {
126
+ validChar = true;
127
+ break;
128
+ }
129
+ }
130
+ // if not a valid character, or a space, remove
131
+ if (!validChar || ch == " ") {
132
+ val = val.substring(0, i) + val.substring(i + 1);
133
+ }
134
+ }
135
+ // set the value and prevent the cursor moving to the end
136
+ this.value = val;
137
+ $.fn.setSelection(this, carat);
138
+ }
139
+ }
140
+
141
+ $.fn.kala.blur = function()
142
+ {
143
+ var jackBauer = $.data(this, "kala.jackBauer");
144
+ var callback = $.data(this, "kala.callback");
145
+ var val = this.value.replace(/\s*g/, '');
146
+ if (val != "") {
147
+ var re = new RegExp("^(\\d{1,2}(:?\\d{2})?)(a|p|am|pm)?$", "i");
148
+ if (!val.match(re)) {
149
+ callback.apply(this);
150
+ }
151
+ }
152
+ }
153
+
154
+ $.fn.removeKala = function()
155
+ {
156
+ return this.data("kala.jackBauer", null).data("kala.callback", null).unbind("keypress", $.fn.kala.keypress).unbind("blur", $.fn.kala.blur);
157
+ }
158
+
159
+ // Based on code from http://javascript.nwbox.com/cursor_position/ (Diego Perini <dperini@nwbox.com>)
160
+ $.fn.getSelectionStart = function(o)
161
+ {
162
+ if (o.createTextRange) {
163
+ var r = document.selection.createRange().duplicate();
164
+ r.moveEnd('character', o.value.length);
165
+ if (r.text == '') return o.value.length;
166
+ return o.value.lastIndexOf(r.text);
167
+ } else {
168
+ return o.selectionStart;
169
+ }
170
+ }
171
+
172
+ // set the selection, o is the object (input), p is the position ([start, end] or just start)
173
+ $.fn.setSelection = function(o, p) {
174
+ // if p is number, start and end are the same
175
+ if (typeof p == "number") p = [p, p];
176
+ // only set if p is an array of length 2
177
+ if (p && p.constructor == Array && p.length == 2) {
178
+ if (o.createTextRange) {
179
+ var r = o.createTextRange();
180
+ r.collapse(true);
181
+ r.moveStart('character', p[0]);
182
+ r.moveEnd('character', p[1]);
183
+ r.select();
184
+ } else if (o.setSelectionRange) {
185
+ o.focus();
186
+ o.setSelectionRange(p[0], p[1]);
187
+ }
188
+ }
189
+ }
190
+
191
+ })(jQuery);
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kala-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Archit Baweja
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jquery-rails
16
+ requirement: &70220178719200 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70220178719200
25
+ - !ruby/object:Gem::Dependency
26
+ name: rails
27
+ requirement: &70220178718520 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.1'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70220178718520
36
+ description: Provides easy installation and usage of jQuery.kala javascript library
37
+ for your Rails 3.1+ application.
38
+ email:
39
+ - architbaweja@gmail.com
40
+ executables: []
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - README.md
46
+ - Rakefile
47
+ - kala-rails.gemspec
48
+ - lib/kala-rails.rb
49
+ - lib/kala/rails.rb
50
+ - lib/kala/rails/engine.rb
51
+ - lib/kala/rails/version.rb
52
+ - vendor/assets/javascripts/jquery.kala.js
53
+ homepage: http://github.com/archit/kala-rails
54
+ licenses: []
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: 1.3.6
71
+ requirements: []
72
+ rubyforge_project:
73
+ rubygems_version: 1.8.17
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: jquery.kala for Rails 3.1+ Asset pipeline
77
+ test_files: []