avalon-rails 1.4.6.0.20150915133100 → 1.4.7
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 +5 -13
- data/lib/avalon-rails/version.rb +1 -1
- data/vendor/assets/javascripts/avalon.js +83 -76
- data/vendor/assets/javascripts/avalon.min.js +3 -3
- data/vendor/assets/javascripts/avalon.mobile.js +604 -229
- data/vendor/assets/javascripts/avalon.mobile.min.js +3 -3
- data/vendor/assets/javascripts/avalon.mobile.old.js +622 -243
- data/vendor/assets/javascripts/avalon.mobile.shim.js +592 -227
- data/vendor/assets/javascripts/avalon.modern.js +65 -62
- data/vendor/assets/javascripts/avalon.modern.min.js +2 -2
- data/vendor/assets/javascripts/avalon.modern.shim.js +53 -60
- data/vendor/assets/javascripts/avalon.shim.js +70 -74
- metadata +7 -7
@@ -5,7 +5,7 @@
|
|
5
5
|
http://weibo.com/jslouvre/
|
6
6
|
|
7
7
|
Released under the MIT license
|
8
|
-
avalon.shim.js(无加载器版本) 1.
|
8
|
+
avalon.shim.js(无加载器版本) 1.4.7 built in 2015.10.13
|
9
9
|
support IE6+ and other browsers
|
10
10
|
==================================================*/
|
11
11
|
(function(global, factory) {
|
@@ -51,9 +51,6 @@ function log() {
|
|
51
51
|
|
52
52
|
|
53
53
|
var subscribers = "$" + expose
|
54
|
-
var otherRequire = window.require
|
55
|
-
var otherDefine = window.define
|
56
|
-
var innerRequire
|
57
54
|
var stopRepeatAssign = false
|
58
55
|
var rword = /[^, ]+/g //切割字符串为一个个小块,以空格或豆号分开它们,结合replace实现字符串的forEach
|
59
56
|
var rcomplexType = /^(?:object|array)$/
|
@@ -301,10 +298,11 @@ function _number(a, len) { //用于模拟slice, splice的效果
|
|
301
298
|
a = Math.floor(a) || 0
|
302
299
|
return a < 0 ? Math.max(len + a, 0) : Math.min(a, len);
|
303
300
|
}
|
301
|
+
|
304
302
|
avalon.mix({
|
305
303
|
rword: rword,
|
306
304
|
subscribers: subscribers,
|
307
|
-
version: 1.
|
305
|
+
version: 1.47,
|
308
306
|
ui: {},
|
309
307
|
log: log,
|
310
308
|
slice: W3C ? function (nodes, start, end) {
|
@@ -357,38 +355,35 @@ avalon.mix({
|
|
357
355
|
},
|
358
356
|
eventHooks: [],
|
359
357
|
/*绑定事件*/
|
360
|
-
bind: function(el, type, fn, phase) {
|
358
|
+
bind: function (el, type, fn, phase) {
|
361
359
|
var hooks = avalon.eventHooks
|
362
360
|
var hook = hooks[type]
|
363
361
|
if (typeof hook === "object") {
|
364
|
-
type = hook.type
|
365
|
-
|
366
|
-
|
367
|
-
}
|
362
|
+
type = hook.type || type
|
363
|
+
phase = hook.phase || !!phase
|
364
|
+
fn = hook.fn ? hook.fn(el,fn): fn
|
368
365
|
}
|
369
|
-
var callback = W3C ? fn : function(e) {
|
366
|
+
var callback = W3C ? fn : function (e) {
|
370
367
|
fn.call(el, fixEvent(e));
|
371
368
|
}
|
372
369
|
if (W3C) {
|
373
|
-
el.addEventListener(type, callback,
|
370
|
+
el.addEventListener(type, callback, phase)
|
374
371
|
} else {
|
375
372
|
el.attachEvent("on" + type, callback)
|
376
373
|
}
|
377
374
|
return callback
|
378
375
|
},
|
379
376
|
/*卸载事件*/
|
380
|
-
unbind: function(el, type, fn, phase) {
|
377
|
+
unbind: function (el, type, fn, phase) {
|
381
378
|
var hooks = avalon.eventHooks
|
382
379
|
var hook = hooks[type]
|
383
380
|
var callback = fn || noop
|
384
381
|
if (typeof hook === "object") {
|
385
|
-
type = hook.type
|
386
|
-
|
387
|
-
fn = hook.deel(el, type, fn, false)
|
388
|
-
}
|
382
|
+
type = hook.type || type
|
383
|
+
phase = hook.phase || !!phase
|
389
384
|
}
|
390
385
|
if (W3C) {
|
391
|
-
el.removeEventListener(type, callback,
|
386
|
+
el.removeEventListener(type, callback, phase)
|
392
387
|
} else {
|
393
388
|
el.detachEvent("on" + type, callback)
|
394
389
|
}
|
@@ -830,7 +825,7 @@ if (!("onmouseenter" in root)) {
|
|
830
825
|
}, function (origType, fixType) {
|
831
826
|
eventHooks[origType] = {
|
832
827
|
type: fixType,
|
833
|
-
|
828
|
+
fn: function (elem, fn) {
|
834
829
|
return function (e) {
|
835
830
|
var t = e.relatedTarget
|
836
831
|
if (!t || (t !== elem && !(elem.compareDocumentPosition(t) & 16))) {
|
@@ -858,7 +853,7 @@ avalon.each({
|
|
858
853
|
if (!("oninput" in DOC.createElement("input"))) {
|
859
854
|
eventHooks.input = {
|
860
855
|
type: "propertychange",
|
861
|
-
|
856
|
+
fn: function (elem, fn) {
|
862
857
|
return function (e) {
|
863
858
|
if (e.propertyName === "value") {
|
864
859
|
e.type = "input"
|
@@ -878,7 +873,7 @@ if (DOC.onmousewheel === void 0) {
|
|
878
873
|
var fixWheelDelta = fixWheelType === "wheel" ? "deltaY" : "detail"
|
879
874
|
eventHooks.mousewheel = {
|
880
875
|
type: fixWheelType,
|
881
|
-
|
876
|
+
fn: function (elem, fn) {
|
882
877
|
return function (e) {
|
883
878
|
e.wheelDeltaY = e.wheelDelta = e[fixWheelDelta] > 0 ? -120 : 120
|
884
879
|
e.wheelDeltaX = 0
|
@@ -923,11 +918,7 @@ function escapeRegExp(target) {
|
|
923
918
|
}
|
924
919
|
|
925
920
|
var plugins = {
|
926
|
-
|
927
|
-
var flag = innerRequire && builtin
|
928
|
-
window.require = flag ? innerRequire : otherRequire
|
929
|
-
window.define = flag ? innerRequire.define : otherDefine
|
930
|
-
},
|
921
|
+
|
931
922
|
interpolate: function (array) {
|
932
923
|
openTag = array[0]
|
933
924
|
closeTag = array[1]
|
@@ -1909,7 +1900,7 @@ function injectDisposeQueue(data, list) {
|
|
1909
1900
|
var elem = data.element
|
1910
1901
|
if (!data.uuid) {
|
1911
1902
|
if (elem.nodeType !== 1) {
|
1912
|
-
data.uuid = data.type + (
|
1903
|
+
data.uuid = data.type + getUid(elem.parentNode)+ "-"+ (++disposeCount)
|
1913
1904
|
} else {
|
1914
1905
|
data.uuid = data.name + "-" + getUid(elem)
|
1915
1906
|
}
|
@@ -2567,7 +2558,8 @@ var rdisplayswap = /^(none|table(?!-c[ea]).+)/
|
|
2567
2558
|
var node = this[0]
|
2568
2559
|
if (arguments.length === 0) {
|
2569
2560
|
if (node.setTimeout) { //取得窗口尺寸,IE9后可以用node.innerWidth /innerHeight代替
|
2570
|
-
return node["inner" + name] || node.document.documentElement[clientProp]
|
2561
|
+
return node["inner" + name] || node.document.documentElement[clientProp] ||
|
2562
|
+
node.document.body[clientProp]//IE6下前两个分别为undefine,0
|
2571
2563
|
}
|
2572
2564
|
if (node.nodeType === 9) { //取得页面尺寸
|
2573
2565
|
var doc = node.documentElement
|
@@ -3277,7 +3269,7 @@ function scanExpr(str) {
|
|
3277
3269
|
}
|
3278
3270
|
value = str.slice(start, stop)
|
3279
3271
|
if (value) { //处理{{ }}插值表达式
|
3280
|
-
tokens.push(getToken(value
|
3272
|
+
tokens.push(getToken(value))
|
3281
3273
|
}
|
3282
3274
|
start = stop + closeTag.length
|
3283
3275
|
} while (1)
|
@@ -3292,11 +3284,10 @@ function scanExpr(str) {
|
|
3292
3284
|
return tokens
|
3293
3285
|
}
|
3294
3286
|
|
3295
|
-
function scanText(textNode, vmodels
|
3296
|
-
var bindings = []
|
3297
|
-
tokens = scanExpr(textNode.data)
|
3287
|
+
function scanText(textNode, vmodels) {
|
3288
|
+
var bindings = [], tokens = scanExpr(textNode.data)
|
3298
3289
|
if (tokens.length) {
|
3299
|
-
for (var i = 0; token = tokens[i++]; ) {
|
3290
|
+
for (var i = 0, token; token = tokens[i++]; ) {
|
3300
3291
|
var node = DOC.createTextNode(token.value) //将文本转换为文本节点,并替换原来的文本节点
|
3301
3292
|
if (token.expr) {
|
3302
3293
|
token.value = token.value.replace(roneTime, function () {
|
@@ -3309,7 +3300,6 @@ function scanText(textNode, vmodels, index) {
|
|
3309
3300
|
token.type = "html"
|
3310
3301
|
return ""
|
3311
3302
|
})// jshint ignore:line
|
3312
|
-
token.pos = index * 1000 + i
|
3313
3303
|
bindings.push(token) //收集带有插值表达式的文本
|
3314
3304
|
}
|
3315
3305
|
avalonFragment.appendChild(node)
|
@@ -3773,7 +3763,6 @@ var TimerID, ribbon = []
|
|
3773
3763
|
}
|
3774
3764
|
|
3775
3765
|
var watchValueInTimer = noop
|
3776
|
-
var rmsinput = /text|password|hidden/
|
3777
3766
|
new function() { // jshint ignore:line
|
3778
3767
|
try { //#272 IE9-IE11, firefox
|
3779
3768
|
var setters = {}
|
@@ -3781,7 +3770,7 @@ new function() { // jshint ignore:line
|
|
3781
3770
|
var bproto = HTMLTextAreaElement.prototype
|
3782
3771
|
function newSetter(value) { // jshint ignore:line
|
3783
3772
|
setters[this.tagName].call(this, value)
|
3784
|
-
if (
|
3773
|
+
if (!this.msFocus && this.avalonSetter && this.oldValue !== value) {
|
3785
3774
|
this.avalonSetter()
|
3786
3775
|
}
|
3787
3776
|
}
|
@@ -3804,7 +3793,7 @@ new function() { // jshint ignore:line
|
|
3804
3793
|
}
|
3805
3794
|
} // jshint ignore:line
|
3806
3795
|
if (IEVersion) {
|
3807
|
-
avalon.bind(DOC, "selectionchange", function(e) {
|
3796
|
+
avalon.bind(DOC, "selectionchange", function (e) {
|
3808
3797
|
var el = DOC.activeElement
|
3809
3798
|
if (el && typeof el.avalonSetter === "function") {
|
3810
3799
|
el.avalonSetter()
|
@@ -3813,25 +3802,25 @@ if (IEVersion) {
|
|
3813
3802
|
}
|
3814
3803
|
|
3815
3804
|
//处理radio, checkbox, text, textarea, password
|
3816
|
-
duplexBinding.INPUT = function(element, evaluator, data) {
|
3805
|
+
duplexBinding.INPUT = function (element, evaluator, data) {
|
3817
3806
|
var $type = element.type,
|
3818
|
-
|
3819
|
-
|
3820
|
-
|
3807
|
+
bound = data.bound,
|
3808
|
+
$elem = avalon(element),
|
3809
|
+
composing = false
|
3821
3810
|
|
3822
|
-
|
3823
|
-
|
3824
|
-
|
3811
|
+
function callback(value) {
|
3812
|
+
data.changed.call(this, value, data)
|
3813
|
+
}
|
3825
3814
|
|
3826
|
-
|
3827
|
-
|
3828
|
-
|
3815
|
+
function compositionStart() {
|
3816
|
+
composing = true
|
3817
|
+
}
|
3829
3818
|
|
3830
|
-
|
3831
|
-
|
3832
|
-
|
3833
|
-
|
3834
|
-
var updateVModel = function() {
|
3819
|
+
function compositionEnd() {
|
3820
|
+
composing = false
|
3821
|
+
}
|
3822
|
+
//当value变化时改变model的值
|
3823
|
+
var updateVModel = function () {
|
3835
3824
|
var val = element.value //防止递归调用形成死循环
|
3836
3825
|
if (composing || val === element.oldValue) //处理中文输入法在minlengh下引发的BUG
|
3837
3826
|
return
|
@@ -3842,27 +3831,27 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3842
3831
|
}
|
3843
3832
|
}
|
3844
3833
|
//当model变化时,它就会改变value的值
|
3845
|
-
data.handler = function() {
|
3846
|
-
var val = data.pipe(evaluator(), data, "set")
|
3834
|
+
data.handler = function () {
|
3835
|
+
var val = data.pipe(evaluator(), data, "set") //fix #673
|
3847
3836
|
if (val !== element.oldValue) {
|
3848
|
-
element.value = element.oldValue = val
|
3837
|
+
element.value = element.oldValue = val
|
3849
3838
|
}
|
3850
3839
|
}
|
3851
3840
|
if (data.isChecked || $type === "radio") {
|
3852
3841
|
var IE6 = IEVersion === 6
|
3853
|
-
updateVModel = function() {
|
3842
|
+
updateVModel = function () {
|
3854
3843
|
if ($elem.data("duplexObserve") !== false) {
|
3855
3844
|
var lastValue = data.pipe(element.value, data, "get")
|
3856
3845
|
evaluator(lastValue)
|
3857
3846
|
callback.call(element, lastValue)
|
3858
3847
|
}
|
3859
3848
|
}
|
3860
|
-
data.handler = function() {
|
3849
|
+
data.handler = function () {
|
3861
3850
|
var val = evaluator()
|
3862
|
-
var checked = data.isChecked ? !!
|
3851
|
+
var checked = data.isChecked ? !!val : val + "" === element.value
|
3863
3852
|
element.oldValue = checked
|
3864
3853
|
if (IE6) {
|
3865
|
-
setTimeout(function() {
|
3854
|
+
setTimeout(function () {
|
3866
3855
|
//IE8 checkbox, radio是使用defaultChecked控制选中状态,
|
3867
3856
|
//并且要先设置defaultChecked后设置checked
|
3868
3857
|
//并且必须设置延迟
|
@@ -3875,7 +3864,7 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3875
3864
|
}
|
3876
3865
|
bound("click", updateVModel)
|
3877
3866
|
} else if ($type === "checkbox") {
|
3878
|
-
updateVModel = function() {
|
3867
|
+
updateVModel = function () {
|
3879
3868
|
if ($elem.data("duplexObserve") !== false) {
|
3880
3869
|
var method = element.checked ? "ensure" : "remove"
|
3881
3870
|
var array = evaluator()
|
@@ -3889,7 +3878,7 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3889
3878
|
}
|
3890
3879
|
}
|
3891
3880
|
|
3892
|
-
data.handler = function() {
|
3881
|
+
data.handler = function () {
|
3893
3882
|
var array = [].concat(evaluator()) //强制转换为数组
|
3894
3883
|
var val = data.pipe(element.value, data, "get")
|
3895
3884
|
element.checked = array.indexOf(val) > -1
|
@@ -3902,11 +3891,11 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3902
3891
|
}
|
3903
3892
|
|
3904
3893
|
function delay(e) { // jshint ignore:line
|
3905
|
-
setTimeout(function() {
|
3894
|
+
setTimeout(function () {
|
3906
3895
|
updateVModel(e)
|
3907
3896
|
})
|
3908
3897
|
}
|
3909
|
-
events.replace(rword, function(name) {
|
3898
|
+
events.replace(rword, function (name) {
|
3910
3899
|
switch (name) {
|
3911
3900
|
case "input":
|
3912
3901
|
if (!IEVersion) { // W3C
|
@@ -3920,7 +3909,7 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3920
3909
|
if (IEVersion > 8) {
|
3921
3910
|
bound("input", updateVModel) //IE9使用propertychange无法监听中文输入改动
|
3922
3911
|
} else {
|
3923
|
-
bound("propertychange", function(e) { //IE6-8下第一次修改时不会触发,需要使用keydown或selectionchange修正
|
3912
|
+
bound("propertychange", function (e) { //IE6-8下第一次修改时不会触发,需要使用keydown或selectionchange修正
|
3924
3913
|
if (e.propertyName === "value") {
|
3925
3914
|
updateVModel()
|
3926
3915
|
}
|
@@ -3936,15 +3925,16 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3936
3925
|
break
|
3937
3926
|
}
|
3938
3927
|
})
|
3939
|
-
bound("focus", function() {
|
3928
|
+
bound("focus", function () {
|
3940
3929
|
element.msFocus = true
|
3941
3930
|
})
|
3942
|
-
bound("blur", function() {
|
3931
|
+
bound("blur", function () {
|
3943
3932
|
element.msFocus = false
|
3944
3933
|
})
|
3945
3934
|
|
3946
|
-
if (
|
3947
|
-
|
3935
|
+
if (!/^(file|button|reset|submit|checkbox|radio)$/.test(element.type)) {
|
3936
|
+
element.avalonSetter = updateVModel //#765
|
3937
|
+
watchValueInTimer(function () {
|
3948
3938
|
if (root.contains(element)) {
|
3949
3939
|
if (!element.msFocus && element.oldValue !== element.value) {
|
3950
3940
|
updateVModel()
|
@@ -3954,11 +3944,9 @@ duplexBinding.INPUT = function(element, evaluator, data) {
|
|
3954
3944
|
}
|
3955
3945
|
})
|
3956
3946
|
}
|
3957
|
-
|
3958
|
-
element.avalonSetter = updateVModel //#765
|
3947
|
+
|
3959
3948
|
}
|
3960
3949
|
|
3961
|
-
element.oldValue = element.value
|
3962
3950
|
avalon.injectBinding(data)
|
3963
3951
|
callback.call(element, element.value)
|
3964
3952
|
}
|
@@ -4170,6 +4158,9 @@ bindingHandlers.repeat = function (data, vmodels) {
|
|
4170
4158
|
}
|
4171
4159
|
}
|
4172
4160
|
|
4161
|
+
data.handler = noop
|
4162
|
+
avalon.injectBinding(data)
|
4163
|
+
|
4173
4164
|
var elem = data.element
|
4174
4165
|
if (elem.nodeType === 1) {
|
4175
4166
|
elem.removeAttribute(data.name)
|
@@ -4238,7 +4229,12 @@ bindingExecutors.repeat = function (method, pos, el) {
|
|
4238
4229
|
|
4239
4230
|
if (data.xtype === "array") {
|
4240
4231
|
if (old.length === neo.length) {
|
4241
|
-
|
4232
|
+
if (old !== neo && old.length > 0) {
|
4233
|
+
bindingExecutors.repeat.call(this, 'clear', pos, el)
|
4234
|
+
}
|
4235
|
+
else {
|
4236
|
+
return
|
4237
|
+
}
|
4242
4238
|
}
|
4243
4239
|
method = "add"
|
4244
4240
|
pos = 0
|
@@ -4750,9 +4746,9 @@ var filters = avalon.filters = {
|
|
4750
4746
|
$filter: function(val) {
|
4751
4747
|
for (var i = 1, n = arguments.length; i < n; i++) {
|
4752
4748
|
var array = arguments[i]
|
4753
|
-
var fn = avalon.filters[array
|
4749
|
+
var fn = avalon.filters[array[0]]
|
4754
4750
|
if (typeof fn === "function") {
|
4755
|
-
var arr = [val].concat(array)
|
4751
|
+
var arr = [val].concat(array.slice(1))
|
4756
4752
|
val = fn.apply(null, arr)
|
4757
4753
|
}
|
4758
4754
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avalon-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zj0713001
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem provides javascript framework Avalon for your Rails 3+ application.
|
14
14
|
email:
|
@@ -17,8 +17,8 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
-
- .DS_Store
|
21
|
-
- .gitignore
|
20
|
+
- ".DS_Store"
|
21
|
+
- ".gitignore"
|
22
22
|
- Gemfile
|
23
23
|
- LICENSE.txt
|
24
24
|
- README.md
|
@@ -48,17 +48,17 @@ require_paths:
|
|
48
48
|
- lib
|
49
49
|
required_ruby_version: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
|
-
- -
|
56
|
+
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: '0'
|
59
59
|
requirements: []
|
60
60
|
rubyforge_project:
|
61
|
-
rubygems_version: 2.4.
|
61
|
+
rubygems_version: 2.4.8
|
62
62
|
signing_key:
|
63
63
|
specification_version: 4
|
64
64
|
summary: Use javascript framework Avalon with Rails 3+
|