ultimate-flash 0.6.1.1 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ultimate-flash (0.6.1.1)
5
- ultimate-base (~> 0.3.1)
4
+ ultimate-flash (0.7.1)
5
+ ultimate-base (~> 0.3.3)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- ultimate-base (0.3.1.1)
10
+ ultimate-base (0.3.3)
11
11
 
12
12
  PLATFORMS
13
13
  ruby
data/README.md CHANGED
@@ -7,6 +7,16 @@ Ruby on Rails oriented jQuery plugin for smart notifications
7
7
  window.flash = $(".l-page__flashes").ultimateFlash({locale: "ru"}, true);
8
8
  ```
9
9
 
10
+ **Usage**:
11
+
12
+ ```javascript
13
+ $(".l-page__flashes").ultimateFlash('notice', 'Hello.');
14
+ ```
15
+ or
16
+ ```javascript
17
+ flash.notice('Hello.');
18
+ ```
19
+
10
20
  ## Licence ##
11
21
 
12
22
  The MIT License
@@ -1,11 +1,7 @@
1
1
  ###*
2
- * Ultimate Flash 0.6.1 - Ruby on Rails oriented jQuery plugin
3
- *
2
+ * Ultimate Flash 0.7.1 - Ruby on Rails oriented jQuery plugin for smart notifications
4
3
  * Copyright 2011-2012 Karpunin Dmitry (KODer) / Evrone.com
5
- *
6
- * Dual licensed under the MIT and GPL licenses:
7
- * http://www.opensource.org/licenses/mit-license.php
8
- * http://www.gnu.org/licenses/gpl.html
4
+ * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
9
5
  *
10
6
  ###
11
7
 
@@ -18,17 +14,16 @@
18
14
  * standart actions:
19
15
  * construction .ultimateFlash([Object options = {}]) : {jQuery} jContainer
20
16
  * updateOptions .pluginName({Object} options) : {Object} view options
21
- * get options .pluginName("options") : {Object} view options
22
- * show .ultimateFlash("show", String type, String text) : {jQuery} jFlash | {Boolean} false
23
- * notice .ultimateFlash("notice", String text) : {jQuery} jFlash | {Boolean} false
24
- * alert .ultimateFlash("alert", String text) : {jQuery} jFlash | {Boolean} false
17
+ * get options .pluginName('options') : {Object} view options
18
+ * show .ultimateFlash('show', String type, String text) : {jQuery} jFlash | {Boolean} false
19
+ * notice .ultimateFlash('notice', String text) : {jQuery} jFlash | {Boolean} false
20
+ * alert .ultimateFlash('alert', String text) : {jQuery} jFlash | {Boolean} false
25
21
  * extended actions:
26
- * auto .ultimateFlash("auto", {ArrayOrObject} obj) : {Array} ajFlashes | {Boolean} false
27
- * ajaxSuccess .ultimateFlash("ajaxSuccess"[, Arguments successArgs = []])
28
- * ajaxError .ultimateFlash("ajaxError"[, String text = translations.defaultErrorText][, Arguments errorArgs = []])
22
+ * auto .ultimateFlash('auto', {ArrayOrObject} obj) : {Array} ajFlashes | {Boolean} false
23
+ * ajaxSuccess .ultimateFlash('ajaxSuccess'[, Arguments successArgs = []])
24
+ * ajaxError .ultimateFlash('ajaxError'[, String text = translations.defaultErrorText][, Arguments errorArgs = []])
29
25
  ###
30
26
 
31
- # TODO customizable show() and hide()
32
27
  # TODO improve English
33
28
  # TODO jGrowl features
34
29
 
@@ -39,25 +34,28 @@ Ultimate.Plugins ||= {}
39
34
 
40
35
  class Ultimate.Plugins.Flash extends Ultimate.Plugin
41
36
 
42
- el: ".l-page__flashes"
37
+ el: '.l-page__flashes'
43
38
 
44
- @defaultLocales:
39
+ @defaultLocales =
45
40
  en:
46
- defaultErrorText: "Error"
47
- defaultThrownError: "server connection error"
48
- formFieldsError: "Form filled with errors"
41
+ defaultErrorText: 'Error'
42
+ defaultThrownError: 'server connection error'
43
+ formFieldsError: 'Form filled with errors'
49
44
  ru:
50
- defaultErrorText: "Ошибка"
51
- defaultThrownError: "ошибка соединения с сервером"
52
- formFieldsError: "Форма заполнена с ошибками"
45
+ defaultErrorText: 'Ошибка'
46
+ defaultThrownError: 'ошибка соединения с сервером'
47
+ formFieldsError: 'Форма заполнена с ошибками'
53
48
 
54
- slideTime: 200
55
- showTime: 3600
56
- showTimePerChar: 30
49
+ flashClass: 'flash' # css-class of message container
57
50
  showAjaxErrors: true # catch global jQuery.ajaxErrors(), try detect message and show it
58
51
  showAjaxSuccesses: true # catch global jQuery.ajaxSuccessess(), try detect message and show it
59
52
  detectFormErrors: true # can be function (parsedJSON)
60
53
  detectPlainTextMaxLength: 200 # if response has plain text and its length fits, show it
54
+ productionMode: true
55
+
56
+ slideTime: 200 # show and hide animate duration
57
+ showTime: 3600 # base time for show flash message
58
+ showTimePerChar: 30 # show time per char of flash message
61
59
  hideOnClick: true # click on notice fire hide()
62
60
  removeOnHide: true # remove notice DOM-element on hide
63
61
  forceAddDotsAfterLastWord: false
@@ -65,94 +63,103 @@ class Ultimate.Plugins.Flash extends Ultimate.Plugin
65
63
  regExpLastWordWithoutDot: /[\wа-яёА-ЯЁ]{3,}$/
66
64
  regExpLastWordWithDot: /([\wа-яёА-ЯЁ]{3,})\.$/
67
65
 
68
- events:
69
- "click .flash:not(:animated)" : "closeFlashClick"
66
+ events: ->
67
+ _events = {}
68
+ _events["click .#{@flashClass}:not(:animated)"] = 'closeFlashClick'
69
+ _events
70
70
 
71
71
  initialize: (options) ->
72
- super
73
72
  # init flashes come from server in page
74
73
  @jFlashes().each (index, flash) =>
75
74
  jFlash = $(flash)
76
- jFlash.html @_prepareText(jFlash.html())
75
+ jFlash.html @_prepareText(jFlash.html(), jFlash)
77
76
  @_setTimeout jFlash
78
77
  # binding hook ajaxError handler
79
78
  @$el.ajaxError =>
80
79
  if @showAjaxErrors
81
- a = @_ajaxSuccessParseArguments(arguments)
82
- Ultimate.debug(".Plugins.Flash.ajaxError", a) if _.isFunction(Ultimate.debug)
80
+ a = @_ajaxParseArguments(arguments)
83
81
  @ajaxError a.data, a.jqXHR
84
82
  # binding hook ajaxSuccess handler
85
83
  @$el.ajaxSuccess =>
86
84
  if @showAjaxSuccesses
87
- a = @_ajaxSuccessParseArguments(arguments)
88
- Ultimate.debug(".Plugins.Flash.ajaxSuccess", a) if _.isFunction(Ultimate.debug)
85
+ a = @_ajaxParseArguments(arguments)
89
86
  @ajaxSuccess a.data, a.jqXHR
90
87
 
91
88
  # delegate event for hide on click
92
89
  closeFlashClick: (event) ->
93
- if @hideOnClick
94
- @_hide $(event.currentTarget)
90
+ jFlash = $(event.currentTarget)
91
+ if @_getOptionOverFlash('hideOnClick', jFlash)
92
+ @hide jFlash
95
93
  false
96
94
 
97
95
  jFlashes: (filterSelector) ->
98
- _jFlashes = @$(".flash")
96
+ _jFlashes = @$(".#{@flashClass}")
99
97
  if filterSelector then _jFlashes.filter(filterSelector) else _jFlashes
100
98
 
101
- _prepareText: (text) ->
102
- text = _.clean(text)
99
+ _getOptionOverFlash: (optionName, jFlashOrOptions = {}) ->
100
+ option = if jFlashOrOptions instanceof jQuery then jFlashOrOptions.data(optionName) else jFlashOrOptions[optionName]
101
+ option ? @[optionName]
102
+
103
+ _prepareText: (text, jFlashOrOptions) ->
104
+ text = _.string.clean(text)
103
105
  # Add dot after last word (if word has minimum 3 characters)
104
- text += "." if @forceAddDotsAfterLastWord and @regExpLastWordWithoutDot.test(text)
105
- text = text.replace(@regExpLastWordWithDot, "$1") if @forceRemoveDotsAfterLastWord
106
+ if @_getOptionOverFlash('forceAddDotsAfterLastWord', jFlashOrOptions) and @_getOptionOverFlash('regExpLastWordWithoutDot', jFlashOrOptions).test(text)
107
+ text += '.'
108
+ # Remove dot after last word (if word has minimum 3 characters)
109
+ if @_getOptionOverFlash('forceRemoveDotsAfterLastWord', jFlashOrOptions)
110
+ text = text.replace(@_getOptionOverFlash('regExpLastWordWithDot', jFlashOrOptions), '$1')
106
111
  text
107
112
 
108
- _hide: (jFlash) ->
109
- clearTimeout jFlash.data("timeoutId")
110
- jFlash.slideUp @slideTime, =>
111
- jFlash.remove() if @removeOnHide
112
-
113
- _setTimeout: (jFlash, timeout = @showTime + jFlash.text().length * @showTimePerChar) ->
113
+ _setTimeout: (jFlash, timeout) ->
114
+ timeout ?= @_getOptionOverFlash('showTime', jFlash) + jFlash.text().length * @_getOptionOverFlash('showTimePerChar', jFlash)
114
115
  if timeout
115
- jFlash.data "timeoutId", setTimeout =>
116
- jFlash.removeData("timeoutId")
117
- @_hide jFlash
118
- , timeout
119
-
120
- show: (type, text, timeout = null) ->
121
- return false if not _.isString(text) or _.isBlank(text)
122
- jFlash = $("<div class=\"flash #{type}\" style=\"display: none;\">#{@_prepareText(text)}</div>")
123
- jFlash.appendTo(@$el).slideDown @slideTime
116
+ jFlash.data 'timeoutId', setTimeout =>
117
+ jFlash.removeData 'timeoutId'
118
+ @hide jFlash
119
+ , timeout
120
+
121
+ hide: (jFlashes = @jFlashes()) ->
122
+ jFlashes.each (index, element) =>
123
+ jFlash = $(element)
124
+ clearTimeout jFlash.data('timeoutId')
125
+ jFlash.slideUp @_getOptionOverFlash('slideTime', jFlash), =>
126
+ jFlash.remove() if @_getOptionOverFlash('removeOnHide', jFlash)
127
+
128
+ show: (type, text, timeout = null, perFlashOptions = null) ->
129
+ text = @_prepareText(text, perFlashOptions)
130
+ return false if not _.isString(text) or _.string.isBlank(text)
131
+ jFlash = $("<div class=\"#{@flashClass} #{type}\" style=\"display: none;\">#{text}</div>")
132
+ jFlash.appendTo(@$el).slideDown @_getOptionOverFlash('slideTime', perFlashOptions)
133
+ if perFlashOptions
134
+ jFlash.data(key, value) for key, value of perFlashOptions
124
135
  @_setTimeout jFlash, timeout
125
136
  jFlash
126
137
 
127
- notice: (text, timeout = null) -> @show "notice", text, timeout
138
+ notice: (text, timeout = null, perFlashOptions = null) -> @show 'notice', arguments...
128
139
 
129
- alert: (text, timeout = null) -> @show "alert", text, timeout
140
+ alert: (text, timeout = null, perFlashOptions = null) -> @show 'alert', arguments...
130
141
 
131
142
  auto: (obj) ->
132
143
  if _.isArray(obj)
133
144
  @show(pair[0], pair[1]) for pair in obj
134
- else if _.isObject(obj)
145
+ else if $.isPlainObject(obj)
135
146
  @show(key, text) for key, text of obj
136
147
  else false
137
148
 
138
- ###*
139
- * @param {Arguments} successArgs=[] аргументы колбэка jQuery.success()
140
- * @return {data: data, jqXHR: jqXHR}
141
- ###
142
- _ajaxSuccessParseArguments: (successArgs) ->
149
+ _ajaxParseArguments: (args) ->
143
150
  # detect event as first element
144
- if successArgs[0] instanceof jQuery.Event
151
+ if args[0] instanceof jQuery.Event
145
152
  # convert arguments to Array
146
- successArgs = _.toArray(successArgs)
153
+ args = _.toArray(args)
147
154
  # remove event
148
- successArgs.shift()
155
+ args.shift()
149
156
  # arrange arguments
150
- if _.isString(successArgs[0])
157
+ if _.isString(args[0])
151
158
  # from jQuery.ajax().success()
152
- [data, _textStatus, jqXHR] = successArgs
159
+ [data, _textStatus, jqXHR] = args
153
160
  else
154
161
  # from jQuery.ajaxSuccess() or jQuery.ajaxError()
155
- [jqXHR, _ajaxSettings, data] = successArgs
162
+ [jqXHR, _ajaxSettings, data] = args
156
163
  data: data
157
164
  jqXHR: jqXHR
158
165
 
@@ -169,15 +176,15 @@ class Ultimate.Plugins.Flash extends Ultimate.Plugin
169
176
  # detect notice
170
177
  if _.isString(data)
171
178
  # catch plain text message
172
- data = _.trim(data)
179
+ data = _.string.trim(data)
173
180
  return @notice(data) if data.length <= @detectPlainTextMaxLength and not $.isHTML(data)
174
181
  else if _.isObject(data)
175
182
  # catch json data with flash-notice
176
- return @auto(data["flash"]) if data["flash"]
183
+ return @auto(data['flash']) if data['flash']
177
184
  false
178
185
 
179
186
  ###*
180
- * @param {String} [text="Ошибка"] вступительный (либо полный) текст формируемой ошибки
187
+ * @param {String} [text='Ошибка'] вступительный (либо полный) текст формируемой ошибки
181
188
  * @param {String} thrownError some error from ajax response
182
189
  * @param {jqXHR} jqXHR jQuery XHR
183
190
  * @return {Boolean} статус выполнения показа сообщения
@@ -186,9 +193,9 @@ class Ultimate.Plugins.Flash extends Ultimate.Plugin
186
193
  unless _.isObject(jqXHR)
187
194
  jqXHR = thrownError
188
195
  thrownError = text
189
- text = @translations.defaultErrorText
196
+ text = @t('defaultErrorText')
190
197
  # prevent undefined responses
191
- return false if jqXHR.status < 100
198
+ #return false if jqXHR.status < 100
192
199
  # prevent recall
193
200
  return false if jqXHR.breakFlash
194
201
  jqXHR.breakFlash = true
@@ -196,14 +203,14 @@ class Ultimate.Plugins.Flash extends Ultimate.Plugin
196
203
  try
197
204
  # try parse respose as json
198
205
  if parsedJSON = $.parseJSON(jqXHR.responseText)
199
- # catch "flash" object and call auto() method with autodetecting flash-notice type
200
- return @auto(parsedJSON["flash"]) if parsedJSON["flash"]
201
- # catch "error" object and call alert() method
202
- return @alert(parsedJSON["error"]) if parsedJSON["error"]
206
+ # catch 'flash' object and call auto() method with autodetecting flash-notice type
207
+ return @auto(parsedJSON['flash']) if parsedJSON['flash']
208
+ # catch 'error' object and call alert() method
209
+ return @alert(parsedJSON['error']) if parsedJSON['error']
203
210
  # may be parsedJSON is form errors
204
211
  if @detectFormErrors is true
205
212
  # show message about form with errors
206
- return @alert(@translations.formFieldsError)
213
+ return @alert(@t('formFieldsError'))
207
214
  else if _.isFunction(@detectFormErrors)
208
215
  # using showFormError as callback
209
216
  return @detectFormErrors.apply(@, [parsedJSON])
@@ -212,24 +219,23 @@ class Ultimate.Plugins.Flash extends Ultimate.Plugin
212
219
  return false
213
220
  catch e
214
221
  # nop
215
- if jqXHR.status >= 400 and jqXHR.responseText
216
- # try detect Rails raise message
217
- if raiseMatches = jqXHR.responseText.match(/<\/h1>\n<pre>(.+?)<\/pre>/)
218
- Ultimate.debug("replace thrownError = \"#{thrownError}\" with raiseMatches[1] = \"#{raiseMatches[1]}\"") if _.isFunction(Ultimate.debug)
219
- thrownError = raiseMatches[1]
220
- else
221
- # try detect short text message as error
222
- if jqXHR.responseText.length <= @detectPlainTextMaxLength
223
- Ultimate.debug("replace thrownError = \"#{thrownError}\" with jqXHR.responseText = \"#{jqXHR.responseText}\"") if _.isFunction(Ultimate.debug)
224
- thrownError = jqXHR.responseText
222
+ if @productionMode
223
+ thrownError = @t('defaultThrownError')
225
224
  else
226
- if _.isString(thrownError) and not _.isBlank(thrownError)
227
- Ultimate.debug("replace thrownError = \"#{thrownError}\" with @translations.defaultThrownError = \"#{@translations.defaultThrownError}\"") if _.isFunction(Ultimate.debug)
228
- thrownError = @translations.defaultThrownError
229
- text += ": " if text
225
+ if jqXHR.status >= 400 and jqXHR.responseText
226
+ # try detect Rails raise message
227
+ if raiseMatches = jqXHR.responseText.match(/<\/h1>\n<pre>(.+?)<\/pre>/)
228
+ thrownError = raiseMatches[1]
229
+ else
230
+ # try detect short text message as error
231
+ if not _.string.isBlank(jqXHR.responseText) and jqXHR.responseText.length <= @detectPlainTextMaxLength
232
+ thrownError = jqXHR.responseText
233
+ else if _.string.isBlank(thrownError)
234
+ thrownError = @t('defaultThrownError')
235
+ text += ': ' if text
230
236
  text += "#{thrownError} [#{jqXHR.status}]"
231
- return @alert(text)
237
+ @alert(text)
232
238
 
233
239
 
234
240
 
235
- Ultimate.createJQueryPlugin "ultimateFlash", Ultimate.Plugins.Flash
241
+ Ultimate.createJQueryPlugin 'ultimateFlash', Ultimate.Plugins.Flash
@@ -40,6 +40,7 @@
40
40
  font-size: 24px;
41
41
  line-height: 30px;
42
42
  color: $text-color;
43
+ @include box-sizing;
43
44
  @include pie-bg($default-background);
44
45
  border-bottom: 2px solid $default-border-color;
45
46
  @if $opacity < 1 {
@@ -1,5 +1,5 @@
1
1
  module Ultimate
2
2
  module Flash
3
- VERSION = "0.6.1.1"
3
+ VERSION = "0.7.1"
4
4
  end
5
5
  end
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.rubyforge_project = "ultimate-flash"
15
15
 
16
- s.add_dependency "ultimate-base", "~> 0.3.1"
16
+ s.add_dependency "ultimate-base", "~> 0.3.3"
17
17
 
18
18
  s.files = `git ls-files`.split("\n")
19
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultimate-flash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1.1
4
+ version: 0.7.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-28 00:00:00.000000000 Z
12
+ date: 2012-10-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ultimate-base
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.3.1
21
+ version: 0.3.3
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.3.1
29
+ version: 0.3.3
30
30
  description: Ruby on Rails oriented jQuery plugin for smart notifications
31
31
  email:
32
32
  - koderfunk@gmail.com