ultimate-flash 0.6.1.1 → 0.7.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.
@@ -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