ultimate-base 0.2.2 → 0.2.3
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.
- data/Gemfile.lock +1 -1
- data/app/assets/javascripts/ultimate/backbone/app.js.coffee +2 -1
- data/app/assets/javascripts/ultimate/backbone/base.js.coffee +15 -0
- data/app/assets/javascripts/ultimate/backbone/collection.js.coffee +5 -1
- data/app/assets/javascripts/ultimate/backbone/extra/jquery-ext.js.coffee +94 -0
- data/app/assets/javascripts/ultimate/backbone/extra/jquery-plugin-adapter.js.coffee +66 -0
- data/app/assets/javascripts/ultimate/backbone/model.js.coffee +5 -1
- data/app/assets/javascripts/ultimate/backbone/router.js.coffee +5 -1
- data/app/assets/javascripts/ultimate/backbone/view.js.coffee +20 -7
- data/app/assets/javascripts/ultimate/backbone/views/typed-fields.js.coffee +40 -0
- data/app/assets/javascripts/ultimate/improves/{typed-field.js.coffee → typed-fields.js.coffee} +0 -29
- data/lib/ultimate-base/version.rb +1 -1
- metadata +7 -3
data/Gemfile.lock
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
#= require ./base
|
2
2
|
|
3
3
|
class Ultimate.Backbone.App
|
4
4
|
@App: null
|
@@ -13,6 +13,7 @@ class Ultimate.Backbone.App
|
|
13
13
|
scopes: ["Models", "Collections", "Routers", "Views"]
|
14
14
|
|
15
15
|
constructor: (name = null) ->
|
16
|
+
Ultimate.Backbone.debug ".App.constructor()", @
|
16
17
|
if @constructor.App
|
17
18
|
throw new Error("Can't create new Ultimate.Backbone.App because the single instance has already been created");
|
18
19
|
else
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#= require ultimate/helpers
|
2
|
+
|
3
|
+
(@Ultimate ||= {}).Backbone =
|
4
|
+
|
5
|
+
debugMode: false
|
6
|
+
|
7
|
+
debug: ->
|
8
|
+
if @debugMode
|
9
|
+
a = ["info", "Ultimate.Backbone"]
|
10
|
+
Array::push.apply a, arguments if arguments.length > 0
|
11
|
+
cout.apply @, a
|
12
|
+
|
13
|
+
isView: (viewClass) -> viewClass instanceof Backbone.View
|
14
|
+
|
15
|
+
isViewClass: (viewClass) -> (viewClass::) instanceof Backbone.View
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
#= require ./base
|
2
2
|
|
3
3
|
class Ultimate.Backbone.Collection extends Backbone.Collection
|
4
4
|
|
5
|
+
constructor: ->
|
6
|
+
Ultimate.Backbone.debug ".Collection.constructor()", @
|
7
|
+
super
|
8
|
+
|
5
9
|
ready: (callback, context = @) ->
|
6
10
|
unless @length
|
7
11
|
@readyDeferred ||= $.Deferred()
|
@@ -0,0 +1,94 @@
|
|
1
|
+
#= require ../base
|
2
|
+
|
3
|
+
do ($ = jQuery) ->
|
4
|
+
|
5
|
+
# TODO arguments
|
6
|
+
$.fn.getViews = (viewClass = null, inheritance = false, domDeep = false) ->
|
7
|
+
if not @length
|
8
|
+
return []
|
9
|
+
else if @length is 1
|
10
|
+
views = @data("views") or []
|
11
|
+
else
|
12
|
+
# TODO check work and perf tests
|
13
|
+
views = _.flatten($(o).data("views") or [] for o in @, true)
|
14
|
+
#2: @map -> $(@).data("views") or []
|
15
|
+
#3: _.flatten ( @map -> $(@).data("views") or [] ), true
|
16
|
+
if viewClass?
|
17
|
+
_.filter views, if inheritance then (w) -> w instanceof viewClass else (w) -> w.costructor is viewClass
|
18
|
+
else
|
19
|
+
views
|
20
|
+
|
21
|
+
$.fn.getView = (viewClass, inheritance = false) ->
|
22
|
+
if _.isString(viewClass)
|
23
|
+
for o in @
|
24
|
+
views = $(o).data("views") or []
|
25
|
+
for view in views
|
26
|
+
return view if view.constructor.className is viewClass
|
27
|
+
else if Ultimate.Backbone.isViewClass(viewClass)
|
28
|
+
for o in @
|
29
|
+
views = $(o).data("views") or []
|
30
|
+
if inheritance
|
31
|
+
for view in views
|
32
|
+
return view if view instanceof viewClass
|
33
|
+
else
|
34
|
+
for view in views
|
35
|
+
return view if view.constructor is viewClass
|
36
|
+
false
|
37
|
+
|
38
|
+
$.fn.hasView = (viewClass) ->
|
39
|
+
if _.isString(viewClass)
|
40
|
+
for o in @
|
41
|
+
return true if _.any $(o).data("views") or [], (w) -> w.constructor.className is viewClass
|
42
|
+
else if Ultimate.Backbone.isViewClass(viewClass)
|
43
|
+
for o in @
|
44
|
+
return true if _.any $(o).data("views") or [], (w) -> w.constructor is viewClass
|
45
|
+
false
|
46
|
+
|
47
|
+
# $.fn.bindOneView = (viewClass, options = {}) ->
|
48
|
+
# Ultimate.gcViews()
|
49
|
+
# bindedView = null
|
50
|
+
# if @length
|
51
|
+
# selector = "#{viewClass.selector}:not(.prevent-binding)"
|
52
|
+
# jContainer = if @is(selector) then @filter(selector) else @find(selector)
|
53
|
+
# if (l = jContainer.length)
|
54
|
+
# if l is 1
|
55
|
+
# bindedView = Ultimate.createView viewClass, jContainer, options
|
56
|
+
# else
|
57
|
+
# warning "$.fn.bindOneView() found #{l} elements by #{selector}, when need only 1"
|
58
|
+
# else
|
59
|
+
# warning "$.fn.bindOneView() not found elements by #{selector}"
|
60
|
+
# else
|
61
|
+
# warning "$.fn.bindOneView() call from empty jQuery()"
|
62
|
+
# bindedView
|
63
|
+
#
|
64
|
+
# $.fn.bindView = (viewClass, options = {}) ->
|
65
|
+
# Ultimate.gcViews()
|
66
|
+
# bindedViews = []
|
67
|
+
# if @length
|
68
|
+
# ( if @is(viewClass.selector) then @ else @find(viewClass.selector) ).filter(":not(.prevent-binding)").each ->
|
69
|
+
# if viewClass.canCreateInstance()
|
70
|
+
# jContainer = $ @
|
71
|
+
# if view = Ultimate.createView viewClass, jContainer, options
|
72
|
+
# bindedViews.push view
|
73
|
+
# else
|
74
|
+
# false
|
75
|
+
# bindedViews
|
76
|
+
#
|
77
|
+
# $.fn.bindViews = (viewClasses = Ultimate.LazyViews, options = {}) ->
|
78
|
+
# cout "info", "bindViews begin"
|
79
|
+
# bindedViews = []
|
80
|
+
# if @length
|
81
|
+
# bindedViews = for viewName, viewClass of viewClasses when viewClass.canCreateInstance()
|
82
|
+
# viewClass.constructor.className ||= viewName
|
83
|
+
# @bindView viewClass, options
|
84
|
+
# _.flatten bindedViews, true
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
# # TODO filtering by viewClass
|
89
|
+
# # TODO enother algorithm with enother projection
|
90
|
+
# $.fn.closestViews = (viewClass = null) ->
|
91
|
+
# views = []
|
92
|
+
# jTry = @
|
93
|
+
# jTry = jTry.parent() while jTry.length and not (views = jTry.getViews()).length
|
94
|
+
# views
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#= require ./jquery-ext
|
2
|
+
|
3
|
+
do ($ = jQuery) ->
|
4
|
+
$.fn.ultimateBackboneViewPluginAdapter = (pluginName, viewClass, pluginArgs) ->
|
5
|
+
a = []
|
6
|
+
Array::push.apply a, pluginArgs if pluginArgs.length > 0
|
7
|
+
argsLength = a.length
|
8
|
+
# Shall return the View, if have arguments and last argument of the call is a Boolean true.
|
9
|
+
_returnView =
|
10
|
+
if argsLength and _.isBoolean(_.last(a))
|
11
|
+
argsLength--
|
12
|
+
a.pop()
|
13
|
+
else
|
14
|
+
false
|
15
|
+
unless @length
|
16
|
+
return if _returnView then undefined else @
|
17
|
+
# get the first TODO analize, maybe each?
|
18
|
+
jContainer = @first()
|
19
|
+
# try to get the View-object, controlling everything that happens in our magical container
|
20
|
+
view = jContainer.getView(viewClass)
|
21
|
+
if view and view.$el[0] is jContainer[0]
|
22
|
+
command = null
|
23
|
+
if argsLength and _.isString(a[0])
|
24
|
+
command = a.shift()
|
25
|
+
else
|
26
|
+
return view if _returnView
|
27
|
+
return jContainer unless argsLength
|
28
|
+
command = "updateSettings"
|
29
|
+
if view[command]
|
30
|
+
return getValue(view, command)
|
31
|
+
else
|
32
|
+
$.error "Command [#{command}] does not exist on jQuery.#{pluginName}()"
|
33
|
+
else
|
34
|
+
options = if argsLength then a[0] else {}
|
35
|
+
if $.isPlainObject(options)
|
36
|
+
view = new viewClass(_.extend({}, options, el: jContainer[0]))
|
37
|
+
else
|
38
|
+
$.error "First argument of jQuery.#{pluginName}() must be plain object"
|
39
|
+
if _returnView then view else jContainer
|
40
|
+
|
41
|
+
|
42
|
+
# TODO rewrite docs
|
43
|
+
###
|
44
|
+
* Invoke Ultimate Flash functionality for the first element in the set of matched elements.
|
45
|
+
* If last argument {Boolean} true, then returns {View}.
|
46
|
+
* @usage
|
47
|
+
*** standart actions ***
|
48
|
+
* construction .ultimateFlash([Object options = {}]) ~ {jQuery} jContainer
|
49
|
+
* show .ultimateFlash("show", String type, String text) ~ {jQuery} jFlash | {Boolean} false
|
50
|
+
* notice .ultimateFlash("notice", String text) ~ {jQuery} jFlash | {Boolean} false
|
51
|
+
* alert .ultimateFlash("alert", String text) ~ {jQuery} jFlash | {Boolean} false
|
52
|
+
*** extended actions ***
|
53
|
+
* getSettings .ultimateFlash("getSettings") ~ {Object} settings
|
54
|
+
* setSettings .ultimateFlash("setSettings", {Object} settings) ~ {jQuery} jContainer
|
55
|
+
* updateSettings .ultimateFlash({Object} options) ~ {Object} settings
|
56
|
+
* auto .ultimateFlash("auto", {ArrayOrObject} obj) ~ {Array} ajFlashes | {Boolean} false
|
57
|
+
* ajaxSuccess .ultimateFlash("ajaxSuccess"[, Arguments successArgs = []])
|
58
|
+
* ajaxError .ultimateFlash("ajaxError"[, String text = settings.translations.defaultErrorText][, Arguments errorArgs = []])
|
59
|
+
###
|
60
|
+
|
61
|
+
Ultimate.Backbone.createJQueryPlugin = (pluginName, viewClass) ->
|
62
|
+
cout "info", "Ultimate.Backbone.createJQueryPlugin", pluginName, viewClass
|
63
|
+
if Ultimate.Backbone.isViewClass(viewClass)
|
64
|
+
jQuery.fn[pluginName] = -> @ultimateBackboneViewPluginAdapter pluginName, viewClass, arguments
|
65
|
+
else
|
66
|
+
jQuery.error "Second argument of Ultimate.Backbone.createJQueryPlugin() must be View class inherited from Backbone.View"
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
#= require ./base
|
2
2
|
|
3
3
|
class Ultimate.Backbone.Model extends Backbone.Model
|
4
4
|
|
5
|
+
constructor: ->
|
6
|
+
Ultimate.Backbone.debug ".Model.constructor()", @
|
7
|
+
super
|
8
|
+
|
5
9
|
ready: (callback, context = @) ->
|
6
10
|
if _.isEmpty(@attributes)
|
7
11
|
@readyDeferred ||= $.Deferred()
|
@@ -1,7 +1,11 @@
|
|
1
|
-
|
1
|
+
#= require ./base
|
2
2
|
|
3
3
|
class Ultimate.Backbone.Router extends Backbone.Router
|
4
4
|
|
5
|
+
constructor: ->
|
6
|
+
Ultimate.Backbone.debug ".Router.constructor()", @
|
7
|
+
super
|
8
|
+
|
5
9
|
namedParam = /:\w+/g
|
6
10
|
splatParam = /\*\w+/g
|
7
11
|
escapeRegExp = /[-[\]{}()+?.,\\^$|#\s]/g
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
#= require ./base
|
2
2
|
|
3
3
|
class Ultimate.Backbone.View extends Backbone.View
|
4
4
|
|
@@ -11,13 +11,24 @@ class Ultimate.Backbone.View extends Backbone.View
|
|
11
11
|
loadingOverlayClass: "loading-overlay"
|
12
12
|
|
13
13
|
constructor: ->
|
14
|
+
Ultimate.Backbone.debug ".View.constructor()", @
|
14
15
|
super
|
15
16
|
|
16
17
|
|
17
18
|
|
18
|
-
# Overload parent method Backbone.View.setElement() as hook for findNodes().
|
19
|
-
setElement: (element, delegate) ->
|
19
|
+
# Overload parent method Backbone.View.setElement() as hook for findNodes() and trick for data("views").
|
20
|
+
setElement: (element, delegate, sideCall = false) ->
|
21
|
+
if @$el?.length and not sideCall
|
22
|
+
views = @$el.data("views")
|
23
|
+
for view in views when view isnt @
|
24
|
+
view.setElement element, delegate, true
|
25
|
+
@$el.data("views", [])
|
20
26
|
super
|
27
|
+
if @$el.length
|
28
|
+
if views = @$el.data("views")
|
29
|
+
views.push @
|
30
|
+
else
|
31
|
+
@$el.data "views", [@]
|
21
32
|
@findNodes()
|
22
33
|
@
|
23
34
|
|
@@ -53,9 +64,10 @@ class Ultimate.Backbone.View extends Backbone.View
|
|
53
64
|
normalizedEvents = {}
|
54
65
|
for key, method of events
|
55
66
|
[[], eventName, selector] = key.match(delegateEventSplitter)
|
56
|
-
|
57
|
-
if
|
58
|
-
|
67
|
+
selector = getValue(@, selector)
|
68
|
+
selector = selector.selector if selector instanceof jQuery
|
69
|
+
if _.isString(selector)
|
70
|
+
key = "#{eventName} #{selector}"
|
59
71
|
normalizedEvents[key] = method
|
60
72
|
events = normalizedEvents
|
61
73
|
events
|
@@ -67,7 +79,8 @@ class Ultimate.Backbone.View extends Backbone.View
|
|
67
79
|
super
|
68
80
|
@reflectOptions()
|
69
81
|
|
70
|
-
reflectOptions: (viewOptions
|
82
|
+
reflectOptions: (viewOptions, options = @options) ->
|
83
|
+
viewOptions = getValue(@, "viewOptions") unless viewOptions
|
71
84
|
@[attr] = options[attr] for attr in viewOptions when options[attr]
|
72
85
|
|
73
86
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#= require ultimate/improves/typed-fields
|
2
|
+
|
3
|
+
Ultimate.Backbone.Views ||= {}
|
4
|
+
|
5
|
+
class Ultimate.Backbone.Views.TypedFields extends Ultimate.Backbone.View
|
6
|
+
|
7
|
+
selector: "input:text[data-data-type], input:text[data-regexp-mask]"
|
8
|
+
|
9
|
+
events: ->
|
10
|
+
"keypress selector": "onKeyPress"
|
11
|
+
"change selector": "onChange"
|
12
|
+
"paste selector": "onPasteOrDrop"
|
13
|
+
"drop selector": "onPasteOrDrop"
|
14
|
+
|
15
|
+
viewOptions: ["selector"]
|
16
|
+
|
17
|
+
onKeyPress: (event) ->
|
18
|
+
if event.metaKey
|
19
|
+
@onPasteOrDrop event
|
20
|
+
return true
|
21
|
+
return true unless event.charCode
|
22
|
+
jField = $(event.currentTarget)
|
23
|
+
oldValue = jField.val()
|
24
|
+
newValue = oldValue.substring(0, @selectionStart) + String.fromCharCode(event.charCode) + oldValue.substring(@selectionEnd)
|
25
|
+
return false unless jField.getRegExpMask().test(newValue)
|
26
|
+
jField.data "value", newValue
|
27
|
+
|
28
|
+
onChange: (event) ->
|
29
|
+
jField = $(event.currentTarget)
|
30
|
+
if jField.getRegExpMask().test(jField.val())
|
31
|
+
jField.data "value", jField.val()
|
32
|
+
else
|
33
|
+
jField.val jField.data("value")
|
34
|
+
|
35
|
+
onPasteOrDrop: (event) ->
|
36
|
+
setTimeout ( -> $(event.currentTarget).trigger "change", arguments ), 100
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
Ultimate.Backbone.createJQueryPlugin? "typedFields", Ultimate.Backbone.Views.TypedFields
|
data/app/assets/javascripts/ultimate/improves/{typed-field.js.coffee → typed-fields.js.coffee}
RENAMED
@@ -70,33 +70,4 @@
|
|
70
70
|
.change()
|
71
71
|
@
|
72
72
|
|
73
|
-
#class Backbone.Ultimate.
|
74
|
-
|
75
|
-
$.fn.observeTypedFields = (selector = 'input:text[data-data-type], input:text[data-regexp-mask]') ->
|
76
|
-
|
77
|
-
|
78
|
-
return @ unless @length
|
79
|
-
|
80
|
-
@on 'keypress', selector, (event) ->
|
81
|
-
if event.metaKey
|
82
|
-
$(@).trigger 'paste', arguments
|
83
|
-
return true
|
84
|
-
return true unless event.charCode
|
85
|
-
jThis = $ @
|
86
|
-
oldValue = jThis.val()
|
87
|
-
newValue = oldValue.substring(0, @selectionStart) + String.fromCharCode(event.charCode) + oldValue.substring(@selectionEnd)
|
88
|
-
return false unless jThis.getRegExpMask().test(newValue)
|
89
|
-
jThis.data 'value', newValue
|
90
|
-
|
91
|
-
@on 'change', selector, ->
|
92
|
-
jThis = $ @
|
93
|
-
if jThis.getRegExpMask().test(jThis.val())
|
94
|
-
jThis.data 'value', jThis.val()
|
95
|
-
else
|
96
|
-
jThis.val jThis.data('value')
|
97
|
-
|
98
|
-
@on 'paste drop', selector, ->
|
99
|
-
jThis = $ @
|
100
|
-
setTimeout ( -> jThis.trigger 'change', arguments ), 100
|
101
|
-
|
102
73
|
)( jQuery )
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ultimate-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
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-08-
|
12
|
+
date: 2012-08-15 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ultimate UI core, base helpers and improves for Ruby on Rails Front-end
|
15
15
|
email:
|
@@ -27,12 +27,16 @@ files:
|
|
27
27
|
- README.md
|
28
28
|
- Rakefile
|
29
29
|
- app/assets/javascripts/ultimate/backbone/app.js.coffee
|
30
|
+
- app/assets/javascripts/ultimate/backbone/base.js.coffee
|
30
31
|
- app/assets/javascripts/ultimate/backbone/collection.js.coffee
|
32
|
+
- app/assets/javascripts/ultimate/backbone/extra/jquery-ext.js.coffee
|
33
|
+
- app/assets/javascripts/ultimate/backbone/extra/jquery-plugin-adapter.js.coffee
|
31
34
|
- app/assets/javascripts/ultimate/backbone/lib/backbone.js
|
32
35
|
- app/assets/javascripts/ultimate/backbone/model.js.coffee
|
33
36
|
- app/assets/javascripts/ultimate/backbone/router.js.coffee
|
34
37
|
- app/assets/javascripts/ultimate/backbone/view.js.coffee
|
35
38
|
- app/assets/javascripts/ultimate/backbone/views/slider.js.coffee
|
39
|
+
- app/assets/javascripts/ultimate/backbone/views/typed-fields.js.coffee
|
36
40
|
- app/assets/javascripts/ultimate/base.js.coffee
|
37
41
|
- app/assets/javascripts/ultimate/bus.js.coffee
|
38
42
|
- app/assets/javascripts/ultimate/devise.js.coffee
|
@@ -52,7 +56,7 @@ files:
|
|
52
56
|
- app/assets/javascripts/ultimate/improves/form.js.coffee
|
53
57
|
- app/assets/javascripts/ultimate/improves/magic-radios.js.coffee
|
54
58
|
- app/assets/javascripts/ultimate/improves/tablesorter.js
|
55
|
-
- app/assets/javascripts/ultimate/improves/typed-
|
59
|
+
- app/assets/javascripts/ultimate/improves/typed-fields.js.coffee
|
56
60
|
- app/assets/javascripts/ultimate/underscore/underscore.js
|
57
61
|
- app/assets/javascripts/ultimate/underscore/underscore.string.js
|
58
62
|
- app/assets/javascripts/ultimate/widgets/dock.js.coffee
|