avalon-rails 1.4.6.0.20150915133100 → 1.4.7
Sign up to get free protection for your applications and to get access to all the features.
- 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+
|