humane-rails 5.0.1 → 5.0.2
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 +8 -8
- data/humane-rails.gemspec +1 -1
- data/lib/humane-rails/version.rb +1 -1
- data/vendor/assets/components/humane-js/Makefile +7 -0
- data/vendor/assets/components/humane-js/changelog.md +145 -0
- data/vendor/assets/components/humane-js/component.json +7 -0
- data/vendor/assets/components/humane-js/humane.js +229 -0
- data/vendor/assets/components/humane-js/humane.min.js +1 -0
- data/vendor/assets/components/humane-js/index.html +187 -0
- data/vendor/assets/components/humane-js/package.json +20 -0
- data/vendor/assets/components/humane-js/readme.md +85 -0
- data/vendor/assets/components/humane-js/test/issue23.html +11 -0
- data/vendor/assets/components/humane-js/test/issue36.html +9 -0
- data/vendor/assets/components/humane-js/test/issue38.html +15 -0
- data/vendor/assets/components/humane-js/theme-src/bigbox.styl +65 -0
- data/vendor/assets/components/humane-js/theme-src/boldlight.styl +64 -0
- data/vendor/assets/components/humane-js/theme-src/jackedup.styl +69 -0
- data/vendor/assets/components/humane-js/theme-src/libnotify.styl +61 -0
- data/vendor/assets/components/humane-js/theme-src/original.styl +51 -0
- data/vendor/assets/components/humane-js/themes/bigbox.css +123 -0
- data/vendor/assets/components/humane-js/themes/boldlight.css +122 -0
- data/vendor/assets/components/humane-js/themes/jackedup.css +123 -0
- data/vendor/assets/components/humane-js/themes/libnotify.css +115 -0
- data/vendor/assets/components/humane-js/themes/original.css +72 -0
- metadata +24 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDg2ZTMxNGQ4YjI0Yzc5NWQ5NzU5YWUyZjFiMTU3YjQyNTBjZjI1Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjhjNTM1MzM1MjQ3NzkwMDc2NDU0ZGE5M2NkOWRiMDk0YjU2Y2U0Ng==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTY0YmNiNzQ3OGI1NTg2OGFkOTI0YTg4NzMwZDdiODljNzA5Njg4YTc1ODMz
|
10
|
+
MWVmMDczNjM3ZTA1MjRiMWE1ZjdmNGQxZGYzZTlkMjRjODEwNjBkNTg4MTZi
|
11
|
+
YTMzMjJhNzRiY2YwZjg4NGM0MDgyZjMzOWMwZjhhMWI4N2RmNzA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2NjNmI2MjhjMWNlZjAyZDBlYjZhMDQ5ZmMzNDk5ZDk0OGZiNjVmMWNmMTZl
|
14
|
+
ZDhmNGEyYWI1OWUwNDQxOGI5MjQxZmExNjYwZmQ0MzNjNDI5NDYzMDBhNmNl
|
15
|
+
YThlY2YwZGZiZDAyYThjNTUyMmUwMDQ0ZGRiZTNmMmJmN2UwYWU=
|
data/humane-rails.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.description = %q{A gemified version of Marc Harter's humane-js.}
|
13
13
|
s.license = "MIT"
|
14
14
|
|
15
|
-
s.files = Dir["{app,lib}/**/*", "
|
15
|
+
s.files = Dir["{app,lib,vendor}/**/*", "humane-rails.gemspec", "Rakefile", "README.md"]
|
16
16
|
s.test_files = Dir["spec/**/*"]
|
17
17
|
|
18
18
|
s.add_dependency "rails", ">= 3.1.0"
|
data/lib/humane-rails/version.rb
CHANGED
@@ -0,0 +1,145 @@
|
|
1
|
+
|
2
|
+
3.1.0 / 2013-05-25
|
3
|
+
==================
|
4
|
+
|
5
|
+
* removed; forceNew opt, not used
|
6
|
+
* fixed; try catch for ie8 filter issue when gradient filter used
|
7
|
+
* fixed; prevent accessing property of null/undefined objects
|
8
|
+
* fixed; appendChild of null error GH #36
|
9
|
+
* added; component.json
|
10
|
+
* added new param: timeoutAfterMove : bool. Adds additional timeout after user action before closing
|
11
|
+
|
12
|
+
3.0.6 / 2013-01-04
|
13
|
+
==================
|
14
|
+
|
15
|
+
* updated; modified styles for themes
|
16
|
+
* fixed; timeout of 0 not working GH #35
|
17
|
+
* fixed; font typo in jackedup.css
|
18
|
+
* added; note about amd and commonjs to readme
|
19
|
+
* added; ability to set container element when creating new humane instance
|
20
|
+
|
21
|
+
3.0.5 / 2012-09-03
|
22
|
+
==================
|
23
|
+
|
24
|
+
* fixed; loading humane lib after dom ready GH #30
|
25
|
+
|
26
|
+
3.0.4 / 2012-07-21
|
27
|
+
==================
|
28
|
+
|
29
|
+
* updated; build process
|
30
|
+
* updated; attribution, sample
|
31
|
+
* added; support Asynchronous Module Definition [tahu]
|
32
|
+
* added; make spawn actions chainable
|
33
|
+
|
34
|
+
3.0.3 / 2012-07-06
|
35
|
+
==================
|
36
|
+
|
37
|
+
* fixed; queued notification overwrites previous [JensRoland]
|
38
|
+
* fixed; height declaration in themes [FileTrek]
|
39
|
+
|
40
|
+
3.0.1 / 2012-06-04
|
41
|
+
==================
|
42
|
+
|
43
|
+
* updated; humane location in index
|
44
|
+
* fixed; notification not showing up in ie8 onload GH #23
|
45
|
+
|
46
|
+
3.0.0 / 2012-05-07
|
47
|
+
==================
|
48
|
+
|
49
|
+
* updated; documentation
|
50
|
+
* removed; info, success, error (use spawn instead)
|
51
|
+
* fixed; js error when no cb on remove
|
52
|
+
* fixed; flicker bug in ie9
|
53
|
+
* fixed; demo page not working in ie7,8
|
54
|
+
* added; unique instance support
|
55
|
+
* added; spawn support
|
56
|
+
* added; options per notification
|
57
|
+
* added; custom class support
|
58
|
+
|
59
|
+
2.8.1 / 2012-04-24
|
60
|
+
==================
|
61
|
+
|
62
|
+
* added; callback to remove function GH #22
|
63
|
+
|
64
|
+
2.8.0 / 2012-02-21
|
65
|
+
==================
|
66
|
+
|
67
|
+
* added; custom notifier support GH #19
|
68
|
+
|
69
|
+
2.7.2 / 2012-02-10
|
70
|
+
==================
|
71
|
+
|
72
|
+
* fixed; IE 7/8 display issue
|
73
|
+
* updated; docs page
|
74
|
+
|
75
|
+
2.7.1 / 2012-01-26
|
76
|
+
==================
|
77
|
+
|
78
|
+
* fixed; display:none humane when not in use Fixes #18
|
79
|
+
* added; exposed remove()
|
80
|
+
|
81
|
+
2.7.0 / 2012-01-12
|
82
|
+
==================
|
83
|
+
|
84
|
+
* updated; improved support for iOS 4+, Android 2+
|
85
|
+
|
86
|
+
2.6.0 / 2012-01-02
|
87
|
+
==================
|
88
|
+
|
89
|
+
* added; event support
|
90
|
+
* fixed; bug w/ transEnd firing multiple times
|
91
|
+
|
92
|
+
2.5.0 / 2011-12-23
|
93
|
+
==================
|
94
|
+
|
95
|
+
* removed; forceNew (breaking change), hacky solution that didn't work very well
|
96
|
+
* updated; code cleanup and refactor
|
97
|
+
* updated; using transitionend for end events instead of timeout
|
98
|
+
* added; waitForMove by type
|
99
|
+
|
100
|
+
2.2.8 / 2011-12-22
|
101
|
+
==================
|
102
|
+
|
103
|
+
* added; timeout and clickToClose by type
|
104
|
+
|
105
|
+
2.2.7 / 2011-12-10
|
106
|
+
==================
|
107
|
+
|
108
|
+
* added; ability to set the timeout to 0 (no timeout)
|
109
|
+
|
110
|
+
2.2.6 / 2011-12-08
|
111
|
+
==================
|
112
|
+
|
113
|
+
* added; 'original' theme
|
114
|
+
|
115
|
+
2.2.5 / 2011-12-02
|
116
|
+
==================
|
117
|
+
|
118
|
+
* added; click to close option
|
119
|
+
|
120
|
+
2.2.0 / 2011-12-02
|
121
|
+
==================
|
122
|
+
|
123
|
+
* added; callback support @OiNutter
|
124
|
+
* fixed; jackedup to support IE<9
|
125
|
+
|
126
|
+
2.1.1 / 2011-11-28
|
127
|
+
==================
|
128
|
+
|
129
|
+
* fixed; restore original class after completion
|
130
|
+
* added; jackedup theme
|
131
|
+
* fixed; some IE fixes
|
132
|
+
|
133
|
+
2.1.0 / 2011-11-28
|
134
|
+
==================
|
135
|
+
|
136
|
+
* added; stylus support, updated themes
|
137
|
+
* added; bigbox theme
|
138
|
+
* added; message types (log, info, error, success)
|
139
|
+
|
140
|
+
2.0.0 / 2011-07-12
|
141
|
+
==================
|
142
|
+
|
143
|
+
* mobile support for iOS / Android
|
144
|
+
* ie z-index fix
|
145
|
+
* switched to z-index instead of visibility
|
@@ -0,0 +1,229 @@
|
|
1
|
+
/**
|
2
|
+
* humane.js
|
3
|
+
* Humanized Messages for Notifications
|
4
|
+
* @author Marc Harter (@wavded)
|
5
|
+
* @example
|
6
|
+
* humane.log('hello world');
|
7
|
+
* See more usage examples at: http://wavded.github.com/humane-js/
|
8
|
+
*/
|
9
|
+
|
10
|
+
;!function (name, context, definition) {
|
11
|
+
if (typeof module !== 'undefined') module.exports = definition(name, context)
|
12
|
+
else if (typeof define === 'function' && typeof define.amd === 'object') define(definition)
|
13
|
+
else context[name] = definition(name, context)
|
14
|
+
}('humane', this, function (name, context) {
|
15
|
+
var win = window
|
16
|
+
var doc = document
|
17
|
+
|
18
|
+
var ENV = {
|
19
|
+
on: function (el, type, cb) {
|
20
|
+
'addEventListener' in win ? el.addEventListener(type,cb,false) : el.attachEvent('on'+type,cb)
|
21
|
+
},
|
22
|
+
off: function (el, type, cb) {
|
23
|
+
'removeEventListener' in win ? el.removeEventListener(type,cb,false) : el.detachEvent('on'+type,cb)
|
24
|
+
},
|
25
|
+
bind: function (fn, ctx) {
|
26
|
+
return function () { fn.apply(ctx,arguments) }
|
27
|
+
},
|
28
|
+
isArray: Array.isArray || function (obj) { return Object.prototype.toString.call(obj) === '[object Array]' },
|
29
|
+
config: function (preferred, fallback) {
|
30
|
+
return preferred != null ? preferred : fallback
|
31
|
+
},
|
32
|
+
transSupport: false,
|
33
|
+
useFilter: /msie [678]/i.test(navigator.userAgent), // sniff, sniff
|
34
|
+
_checkTransition: function () {
|
35
|
+
var el = doc.createElement('div')
|
36
|
+
var vendors = { webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' }
|
37
|
+
|
38
|
+
for (var vendor in vendors)
|
39
|
+
if (vendor + 'Transition' in el.style) {
|
40
|
+
this.vendorPrefix = vendors[vendor]
|
41
|
+
this.transSupport = true
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}
|
45
|
+
ENV._checkTransition()
|
46
|
+
|
47
|
+
var Humane = function (o) {
|
48
|
+
o || (o = {})
|
49
|
+
this.queue = []
|
50
|
+
this.baseCls = o.baseCls || 'humane'
|
51
|
+
this.addnCls = o.addnCls || ''
|
52
|
+
this.timeout = 'timeout' in o ? o.timeout : 2500
|
53
|
+
this.waitForMove = o.waitForMove || false
|
54
|
+
this.clickToClose = o.clickToClose || false
|
55
|
+
this.timeoutAfterMove = o.timeoutAfterMove || false
|
56
|
+
this.container = o.container
|
57
|
+
|
58
|
+
try { this._setupEl() } // attempt to setup elements
|
59
|
+
catch (e) {
|
60
|
+
ENV.on(win,'load',ENV.bind(this._setupEl, this)) // dom wasn't ready, wait till ready
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
Humane.prototype = {
|
65
|
+
constructor: Humane,
|
66
|
+
_setupEl: function () {
|
67
|
+
var el = doc.createElement('div')
|
68
|
+
el.style.display = 'none'
|
69
|
+
if (!this.container){
|
70
|
+
if(doc.body) this.container = doc.body;
|
71
|
+
else throw 'document.body is null'
|
72
|
+
}
|
73
|
+
this.container.appendChild(el)
|
74
|
+
this.el = el
|
75
|
+
this.removeEvent = ENV.bind(function(){ if (!this.timeoutAfterMove){this.remove()} else {setTimeout(ENV.bind(this.remove,this),this.timeout);}},this)
|
76
|
+
this.transEvent = ENV.bind(this._afterAnimation,this)
|
77
|
+
this._run()
|
78
|
+
},
|
79
|
+
_afterTimeout: function () {
|
80
|
+
if (!ENV.config(this.currentMsg.waitForMove,this.waitForMove)) this.remove()
|
81
|
+
|
82
|
+
else if (!this.removeEventsSet) {
|
83
|
+
ENV.on(doc.body,'mousemove',this.removeEvent)
|
84
|
+
ENV.on(doc.body,'click',this.removeEvent)
|
85
|
+
ENV.on(doc.body,'keypress',this.removeEvent)
|
86
|
+
ENV.on(doc.body,'touchstart',this.removeEvent)
|
87
|
+
this.removeEventsSet = true
|
88
|
+
}
|
89
|
+
},
|
90
|
+
_run: function () {
|
91
|
+
if (this._animating || !this.queue.length || !this.el) return
|
92
|
+
|
93
|
+
this._animating = true
|
94
|
+
if (this.currentTimer) {
|
95
|
+
clearTimeout(this.currentTimer)
|
96
|
+
this.currentTimer = null
|
97
|
+
}
|
98
|
+
|
99
|
+
var msg = this.queue.shift()
|
100
|
+
var clickToClose = ENV.config(msg.clickToClose,this.clickToClose)
|
101
|
+
|
102
|
+
if (clickToClose) {
|
103
|
+
ENV.on(this.el,'click',this.removeEvent)
|
104
|
+
ENV.on(this.el,'touchstart',this.removeEvent)
|
105
|
+
}
|
106
|
+
|
107
|
+
var timeout = ENV.config(msg.timeout,this.timeout)
|
108
|
+
|
109
|
+
if (timeout > 0)
|
110
|
+
this.currentTimer = setTimeout(ENV.bind(this._afterTimeout,this), timeout)
|
111
|
+
|
112
|
+
if (ENV.isArray(msg.html)) msg.html = '<ul><li>'+msg.html.join('<li>')+'</ul>'
|
113
|
+
|
114
|
+
this.el.innerHTML = msg.html
|
115
|
+
this.currentMsg = msg
|
116
|
+
this.el.className = this.baseCls
|
117
|
+
if (ENV.transSupport) {
|
118
|
+
this.el.style.display = 'block'
|
119
|
+
setTimeout(ENV.bind(this._showMsg,this),50)
|
120
|
+
} else {
|
121
|
+
this._showMsg()
|
122
|
+
}
|
123
|
+
|
124
|
+
},
|
125
|
+
_setOpacity: function (opacity) {
|
126
|
+
if (ENV.useFilter){
|
127
|
+
try{
|
128
|
+
this.el.filters.item('DXImageTransform.Microsoft.Alpha').Opacity = opacity*100
|
129
|
+
} catch(err){}
|
130
|
+
} else {
|
131
|
+
this.el.style.opacity = String(opacity)
|
132
|
+
}
|
133
|
+
},
|
134
|
+
_showMsg: function () {
|
135
|
+
var addnCls = ENV.config(this.currentMsg.addnCls,this.addnCls)
|
136
|
+
if (ENV.transSupport) {
|
137
|
+
this.el.className = this.baseCls+' '+addnCls+' '+this.baseCls+'-animate'
|
138
|
+
}
|
139
|
+
else {
|
140
|
+
var opacity = 0
|
141
|
+
this.el.className = this.baseCls+' '+addnCls+' '+this.baseCls+'-js-animate'
|
142
|
+
this._setOpacity(0) // reset value so hover states work
|
143
|
+
this.el.style.display = 'block'
|
144
|
+
|
145
|
+
var self = this
|
146
|
+
var interval = setInterval(function(){
|
147
|
+
if (opacity < 1) {
|
148
|
+
opacity += 0.1
|
149
|
+
if (opacity > 1) opacity = 1
|
150
|
+
self._setOpacity(opacity)
|
151
|
+
}
|
152
|
+
else clearInterval(interval)
|
153
|
+
}, 30)
|
154
|
+
}
|
155
|
+
},
|
156
|
+
_hideMsg: function () {
|
157
|
+
var addnCls = ENV.config(this.currentMsg.addnCls,this.addnCls)
|
158
|
+
if (ENV.transSupport) {
|
159
|
+
this.el.className = this.baseCls+' '+addnCls
|
160
|
+
ENV.on(this.el,ENV.vendorPrefix ? ENV.vendorPrefix+'TransitionEnd' : 'transitionend',this.transEvent)
|
161
|
+
}
|
162
|
+
else {
|
163
|
+
var opacity = 1
|
164
|
+
var self = this
|
165
|
+
var interval = setInterval(function(){
|
166
|
+
if(opacity > 0) {
|
167
|
+
opacity -= 0.1
|
168
|
+
if (opacity < 0) opacity = 0
|
169
|
+
self._setOpacity(opacity);
|
170
|
+
}
|
171
|
+
else {
|
172
|
+
self.el.className = self.baseCls+' '+addnCls
|
173
|
+
clearInterval(interval)
|
174
|
+
self._afterAnimation()
|
175
|
+
}
|
176
|
+
}, 30)
|
177
|
+
}
|
178
|
+
},
|
179
|
+
_afterAnimation: function () {
|
180
|
+
if (ENV.transSupport) ENV.off(this.el,ENV.vendorPrefix ? ENV.vendorPrefix+'TransitionEnd' : 'transitionend',this.transEvent)
|
181
|
+
|
182
|
+
if (this.currentMsg.cb) this.currentMsg.cb()
|
183
|
+
this.el.style.display = 'none'
|
184
|
+
|
185
|
+
this._animating = false
|
186
|
+
this._run()
|
187
|
+
},
|
188
|
+
remove: function (e) {
|
189
|
+
var cb = typeof e == 'function' ? e : null
|
190
|
+
|
191
|
+
ENV.off(doc.body,'mousemove',this.removeEvent)
|
192
|
+
ENV.off(doc.body,'click',this.removeEvent)
|
193
|
+
ENV.off(doc.body,'keypress',this.removeEvent)
|
194
|
+
ENV.off(doc.body,'touchstart',this.removeEvent)
|
195
|
+
ENV.off(this.el,'click',this.removeEvent)
|
196
|
+
ENV.off(this.el,'touchstart',this.removeEvent)
|
197
|
+
this.removeEventsSet = false
|
198
|
+
|
199
|
+
if (cb && this.currentMsg) this.currentMsg.cb = cb
|
200
|
+
if (this._animating) this._hideMsg()
|
201
|
+
else if (cb) cb()
|
202
|
+
},
|
203
|
+
log: function (html, o, cb, defaults) {
|
204
|
+
var msg = {}
|
205
|
+
if (defaults)
|
206
|
+
for (var opt in defaults)
|
207
|
+
msg[opt] = defaults[opt]
|
208
|
+
|
209
|
+
if (typeof o == 'function') cb = o
|
210
|
+
else if (o)
|
211
|
+
for (var opt in o) msg[opt] = o[opt]
|
212
|
+
|
213
|
+
msg.html = html
|
214
|
+
if (cb) msg.cb = cb
|
215
|
+
this.queue.push(msg)
|
216
|
+
this._run()
|
217
|
+
return this
|
218
|
+
},
|
219
|
+
spawn: function (defaults) {
|
220
|
+
var self = this
|
221
|
+
return function (html, o, cb) {
|
222
|
+
self.log.call(self,html,o,cb,defaults)
|
223
|
+
return self
|
224
|
+
}
|
225
|
+
},
|
226
|
+
create: function (o) { return new Humane(o) }
|
227
|
+
}
|
228
|
+
return new Humane()
|
229
|
+
})
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(t,e,i){"undefined"!=typeof module?module.exports=i(t,e):"function"==typeof define&&"object"==typeof define.amd?define(i):e[t]=i(t,e)}("humane",this,function(){var t=window,e=document,i={on:function(e,i,n){"addEventListener"in t?e.addEventListener(i,n,!1):e.attachEvent("on"+i,n)},off:function(e,i,n){"removeEventListener"in t?e.removeEventListener(i,n,!1):e.detachEvent("on"+i,n)},bind:function(t,e){return function(){t.apply(e,arguments)}},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},config:function(t,e){return null!=t?t:e},transSupport:!1,useFilter:/msie [678]/i.test(navigator.userAgent),_checkTransition:function(){var t=e.createElement("div"),i={webkit:"webkit",Moz:"",O:"o",ms:"MS"};for(var n in i)n+"Transition"in t.style&&(this.vendorPrefix=i[n],this.transSupport=!0)}};i._checkTransition();var n=function(e){e||(e={}),this.queue=[],this.baseCls=e.baseCls||"humane",this.addnCls=e.addnCls||"",this.timeout="timeout"in e?e.timeout:2500,this.waitForMove=e.waitForMove||!1,this.clickToClose=e.clickToClose||!1,this.timeoutAfterMove=e.timeoutAfterMove||!1,this.container=e.container;try{this._setupEl()}catch(n){i.on(t,"load",i.bind(this._setupEl,this))}};return n.prototype={constructor:n,_setupEl:function(){var t=e.createElement("div");if(t.style.display="none",!this.container){if(!e.body)throw"document.body is null";this.container=e.body}this.container.appendChild(t),this.el=t,this.removeEvent=i.bind(function(){this.timeoutAfterMove?setTimeout(i.bind(this.remove,this),this.timeout):this.remove()},this),this.transEvent=i.bind(this._afterAnimation,this),this._run()},_afterTimeout:function(){i.config(this.currentMsg.waitForMove,this.waitForMove)?this.removeEventsSet||(i.on(e.body,"mousemove",this.removeEvent),i.on(e.body,"click",this.removeEvent),i.on(e.body,"keypress",this.removeEvent),i.on(e.body,"touchstart",this.removeEvent),this.removeEventsSet=!0):this.remove()},_run:function(){if(!this._animating&&this.queue.length&&this.el){this._animating=!0,this.currentTimer&&(clearTimeout(this.currentTimer),this.currentTimer=null);var t=this.queue.shift(),e=i.config(t.clickToClose,this.clickToClose);e&&(i.on(this.el,"click",this.removeEvent),i.on(this.el,"touchstart",this.removeEvent));var n=i.config(t.timeout,this.timeout);n>0&&(this.currentTimer=setTimeout(i.bind(this._afterTimeout,this),n)),i.isArray(t.html)&&(t.html="<ul><li>"+t.html.join("<li>")+"</ul>"),this.el.innerHTML=t.html,this.currentMsg=t,this.el.className=this.baseCls,i.transSupport?(this.el.style.display="block",setTimeout(i.bind(this._showMsg,this),50)):this._showMsg()}},_setOpacity:function(t){if(i.useFilter)try{this.el.filters.item("DXImageTransform.Microsoft.Alpha").Opacity=100*t}catch(e){}else this.el.style.opacity=String(t)},_showMsg:function(){var t=i.config(this.currentMsg.addnCls,this.addnCls);if(i.transSupport)this.el.className=this.baseCls+" "+t+" "+this.baseCls+"-animate";else{var e=0;this.el.className=this.baseCls+" "+t+" "+this.baseCls+"-js-animate",this._setOpacity(0),this.el.style.display="block";var n=this,s=setInterval(function(){1>e?(e+=.1,e>1&&(e=1),n._setOpacity(e)):clearInterval(s)},30)}},_hideMsg:function(){var t=i.config(this.currentMsg.addnCls,this.addnCls);if(i.transSupport)this.el.className=this.baseCls+" "+t,i.on(this.el,i.vendorPrefix?i.vendorPrefix+"TransitionEnd":"transitionend",this.transEvent);else var e=1,n=this,s=setInterval(function(){e>0?(e-=.1,0>e&&(e=0),n._setOpacity(e)):(n.el.className=n.baseCls+" "+t,clearInterval(s),n._afterAnimation())},30)},_afterAnimation:function(){i.transSupport&&i.off(this.el,i.vendorPrefix?i.vendorPrefix+"TransitionEnd":"transitionend",this.transEvent),this.currentMsg.cb&&this.currentMsg.cb(),this.el.style.display="none",this._animating=!1,this._run()},remove:function(t){var n="function"==typeof t?t:null;i.off(e.body,"mousemove",this.removeEvent),i.off(e.body,"click",this.removeEvent),i.off(e.body,"keypress",this.removeEvent),i.off(e.body,"touchstart",this.removeEvent),i.off(this.el,"click",this.removeEvent),i.off(this.el,"touchstart",this.removeEvent),this.removeEventsSet=!1,n&&this.currentMsg&&(this.currentMsg.cb=n),this._animating?this._hideMsg():n&&n()},log:function(t,e,i,n){var s={};if(n)for(var o in n)s[o]=n[o];if("function"==typeof e)i=e;else if(e)for(var o in e)s[o]=e[o];return s.html=t,i&&(s.cb=i),this.queue.push(s),this._run(),this},spawn:function(t){var e=this;return function(i,n,s){return e.log.call(e,i,n,s,t),e}},create:function(t){return new n(t)}},new n});
|
@@ -0,0 +1,187 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>humane.js</title>
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
6
|
+
<meta charset='utf-8'>
|
7
|
+
<link href='http://fonts.googleapis.com/css?family=Ubuntu&v2' rel='stylesheet' type='text/css'>
|
8
|
+
<link href='http://fonts.googleapis.com/css?family=Ubuntu+Mono' rel='stylesheet' type='text/css'>
|
9
|
+
<link href='http://fonts.googleapis.com/css?family=Cabin+Sketch:700&v2' rel='stylesheet' type='text/css'>
|
10
|
+
<style>
|
11
|
+
body {
|
12
|
+
font-family: Ubuntu, sans-serif;
|
13
|
+
padding: 80px;
|
14
|
+
background-color: #60D6A7;
|
15
|
+
}
|
16
|
+
h1,h3 {
|
17
|
+
font-family: 'Cabin Sketch', serif;
|
18
|
+
text-shadow: -1px 0px 1px #aaa;
|
19
|
+
}
|
20
|
+
h1 {
|
21
|
+
font-size: 4em;
|
22
|
+
margin: 0
|
23
|
+
}
|
24
|
+
h3 {
|
25
|
+
font-size: 2em;
|
26
|
+
margin: 0
|
27
|
+
}
|
28
|
+
select {
|
29
|
+
font-size: 0.8em;
|
30
|
+
}
|
31
|
+
a {
|
32
|
+
text-decoration: none;
|
33
|
+
color: #a13;
|
34
|
+
font-weight: bold;
|
35
|
+
}
|
36
|
+
a:hover {
|
37
|
+
text-decoration: underline;
|
38
|
+
}
|
39
|
+
pre {
|
40
|
+
font-family: "Ubuntu Mono";
|
41
|
+
font-size: 0.9em;
|
42
|
+
width: 75%;
|
43
|
+
background-color: #007143;
|
44
|
+
border-radius: 6px;
|
45
|
+
padding: 5px 10px;
|
46
|
+
color: #fff;
|
47
|
+
cursor: pointer;
|
48
|
+
text-shadow: -1px 1px 1px #333;
|
49
|
+
box-shadow: 0px 8px 8px -8px #333;
|
50
|
+
-moz-transition: all 0.3s ease-out;
|
51
|
+
-webkit-transition: all 0.3s ease-out;
|
52
|
+
-ms-transition: all 0.3s ease-out;
|
53
|
+
-o-transition: all 0.3s ease-out;
|
54
|
+
transition: all 0.3s ease-out;
|
55
|
+
}
|
56
|
+
pre:hover {
|
57
|
+
background-color: #00ae68;
|
58
|
+
}
|
59
|
+
blockquote {
|
60
|
+
font-size: 0.8em
|
61
|
+
}
|
62
|
+
</style>
|
63
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
64
|
+
<link rel='stylesheet' href='themes/bigbox.css'/>
|
65
|
+
<link rel='stylesheet' href='themes/boldlight.css'/>
|
66
|
+
<link rel='stylesheet' href='themes/jackedup.css'/>
|
67
|
+
<link rel='stylesheet' href='themes/libnotify.css'/>
|
68
|
+
<link rel='stylesheet' href='themes/original.css'/>
|
69
|
+
<script src='humane.js'></script>
|
70
|
+
</head>
|
71
|
+
<body>
|
72
|
+
<a href="http://github.com/wavded/humane-js"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
|
73
|
+
|
74
|
+
<h1>humane.js</h1>
|
75
|
+
<p>
|
76
|
+
<strong>A simple, modern, framework-independent, well-tested, unobtrusive, notification system.</strong>
|
77
|
+
<br/>Utilizes CSS transitions when available, falls back to JS animation when not. Includes mobile support.
|
78
|
+
</p>
|
79
|
+
<h3>Select a theme:
|
80
|
+
<select onchange='humane.baseCls="humane-"+this.options[this.selectedIndex].value'>
|
81
|
+
<option selected>libnotify</option>
|
82
|
+
<option>bigbox</option>
|
83
|
+
<option>boldlight</option>
|
84
|
+
<option>jackedup</option>
|
85
|
+
<option>original</option>
|
86
|
+
</select>
|
87
|
+
</h3>
|
88
|
+
<p>Click a code sample below to see it in action:</p>
|
89
|
+
|
90
|
+
<pre>humane.log("Welcome Back")</pre>
|
91
|
+
<pre>humane.log("Record <b>392</b> has been updated")</pre>
|
92
|
+
<pre>humane.log(["List","of","Items"])</pre>
|
93
|
+
<pre>humane.log("Callback when finished", function(){ document.body.style.backgroundColor="#a66000" })</pre>
|
94
|
+
<pre>humane.log("Options can be passed", { timeout: 4000, clickToClose: true, addnCls: 'humane-error' })</pre>
|
95
|
+
|
96
|
+
<h3>Options</h3>
|
97
|
+
<p>Options can be specified in a variety of ways. Either by the entire instance as shown below, or per notification, as shown above:</p>
|
98
|
+
<pre>humane.timeout = 5000 // default: 2500</pre>
|
99
|
+
<blockquote>
|
100
|
+
<p>Sets the delay before a message fades out (set to <b>0</b> for no timeout).</p>
|
101
|
+
</blockquote>
|
102
|
+
<pre>humane.waitForMove = true // default: false</pre>
|
103
|
+
<blockquote>
|
104
|
+
<p>Wait for mouse, keyboard, or touch action to be taken before clearing message (after timeout)</p>
|
105
|
+
</blockquote>
|
106
|
+
<pre>humane.clickToClose = true // default: false</pre>
|
107
|
+
<blockquote>
|
108
|
+
<p>Click or touch the notification to close</p>
|
109
|
+
</blockquote>
|
110
|
+
<pre>humane.timeoutAfterMove = 2000 // default: 0</pre>
|
111
|
+
<blockquote>
|
112
|
+
<p>Delay before notification disappears (useful in conjunction with waitForMove)</p>
|
113
|
+
</blockquote>
|
114
|
+
<pre>humane.addnCls = 'humane-info' // default: ''</pre>
|
115
|
+
<blockquote>
|
116
|
+
<p>Specify an additional class to apply when notifying (nice when you only want to change just a little bit of the style)</p>
|
117
|
+
</blockquote>
|
118
|
+
<h3>Create instances with humane.create</h3>
|
119
|
+
<p>Create a completely new instance of humane using <b>humane.create()</b>.</p>
|
120
|
+
<pre>
|
121
|
+
var notify = humane.create({ timeout: 4000, baseCls: 'humane-bigbox' })
|
122
|
+
notify.log('Custom Notifier')</pre>
|
123
|
+
|
124
|
+
<p>There are a options that can also be applied when creating an instance:</p>
|
125
|
+
<pre>humane.baseCls = 'humane' // default: 'humane'</pre>
|
126
|
+
<blockquote>
|
127
|
+
<p>Specify an base class</p>
|
128
|
+
</blockquote>
|
129
|
+
|
130
|
+
<h3>Spawn notifiers with humane.spawn</h3>
|
131
|
+
<p>Create a custom notifier using <b>humane.spawn()</b>.</p>
|
132
|
+
<pre>
|
133
|
+
humane.info = humane.spawn({ addnCls: 'humane-libnotify-info', timeout: 1000 })
|
134
|
+
humane.info('Info Themed Notifier')</pre>
|
135
|
+
<pre>
|
136
|
+
humane.error = humane.spawn({ addnCls: 'humane-libnotify-error', timeout: 1000 })
|
137
|
+
humane.error('Error Themed Notifier')</pre>
|
138
|
+
|
139
|
+
<h3>Force remove current notification</h3>
|
140
|
+
<pre>humane.remove(function(){ alert('removed') })</pre>
|
141
|
+
<blockquote>
|
142
|
+
<p>Force remove current notification, takes an optional callback fired when finished (note each instance has its own remove)</p>
|
143
|
+
</blockquote>
|
144
|
+
|
145
|
+
<h3>Go crazy</h3>
|
146
|
+
<p>With all this power, you are bound to go CRAZY! Click the sample below to go crazy:</p>
|
147
|
+
<pre>
|
148
|
+
var bigbox = humane.create({baseCls: 'humane-bigbox', timeout: 1000})
|
149
|
+
bigbox.error = bigbox.spawn({addnCls: 'humane-bigbox-error'})
|
150
|
+
bigbox.log('Oh!').error('No!')
|
151
|
+
|
152
|
+
var libnotify = humane.create({baseCls: 'humane-libnotify', addnCls: 'humane-libnotify-info'})
|
153
|
+
libnotify.log('Notified')
|
154
|
+
|
155
|
+
var jacked = humane.create({baseCls: 'humane-jackedup', addnCls: 'humane-jackedup-success'})
|
156
|
+
jacked.log("What's up here!")</pre>
|
157
|
+
|
158
|
+
<h3>Browser Support</h3>
|
159
|
+
<p>Uses CSS Transitions where available otherwise falls back to JS animation, degrades gracefully.</p>
|
160
|
+
<ul>
|
161
|
+
<li>Internet Explorer 7+</li>
|
162
|
+
<li>Firefox 3+</li>
|
163
|
+
<li>Chrome 9+</li>
|
164
|
+
<li>Safari 3+</li>
|
165
|
+
<li>Opera 10+</li>
|
166
|
+
<li>iOS 4+</li>
|
167
|
+
<li>Android 2+</li>
|
168
|
+
</ul>
|
169
|
+
|
170
|
+
<h3>Create A Custom Theme</h3>
|
171
|
+
<p>Humane is easily themable using <a href="http://learnboost.github.com/stylus">Stylus</a>. There are currently a few <a href='https://github.com/wavded/humane-js/wiki/Themes'>themes</a>, but I hope this grows. Send me a pull request and update the wiki with your favorite look and feel.</p>
|
172
|
+
|
173
|
+
|
174
|
+
<h3>Download and Usage</h3>
|
175
|
+
<p>Visit <a href='http://github.com/wavded/humane-js'>github page</a> to download and get more details.</p>
|
176
|
+
|
177
|
+
<script>
|
178
|
+
humane.baseCls = 'humane-libnotify'
|
179
|
+
var pretags = document.getElementsByTagName('pre')
|
180
|
+
for (var i = 0; i < pretags.length; i++) { (function(el){
|
181
|
+
el.onclick = function () {
|
182
|
+
eval(el.innerHTML)
|
183
|
+
}
|
184
|
+
}(pretags[i])) }
|
185
|
+
</script>
|
186
|
+
</body>
|
187
|
+
</html>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
"author": "Marc Harter <@wavded> (wavded.com)",
|
3
|
+
"name": "humane-js",
|
4
|
+
"description": "A simple, modern, browser notification system",
|
5
|
+
"version": "3.1.0",
|
6
|
+
"homepage": "http://wavded.github.com/humane-js/",
|
7
|
+
"repository": {
|
8
|
+
"type": "git",
|
9
|
+
"url": "git://github.com/wavded/humane-js.git"
|
10
|
+
},
|
11
|
+
"main": "humane.js",
|
12
|
+
"engines": {},
|
13
|
+
"dependencies": {},
|
14
|
+
"devDependencies": {
|
15
|
+
"uglify-js": "2.3.6",
|
16
|
+
"nib": "0.9.1",
|
17
|
+
"stylus": "0.32.1",
|
18
|
+
"canvas": "1.0.2"
|
19
|
+
}
|
20
|
+
}
|