Skip to content

Commit

Permalink
update to 1.3.6
Browse files Browse the repository at this point in the history
  • Loading branch information
RubyLouvre committed Oct 14, 2014
1 parent f0b399d commit 2c72e55
Show file tree
Hide file tree
Showing 7 changed files with 646 additions and 593 deletions.
12 changes: 10 additions & 2 deletions avalon.js
Original file line number Diff line number Diff line change
Expand Up @@ -3377,13 +3377,12 @@
case "boolean":
return val === "true"
case "number":
return isFinite(val) ? parseFloat(val) : val
return isFinite(val) || val === "" ? parseFloat(val) || 0 : val
default:
return val
}
}


var TimerID, ribbon = [],
launch = noop
function W3CFire(el, name, detail) {
Expand Down Expand Up @@ -3462,6 +3461,15 @@
var val = evaluator()
val = val && val.$model || val
//必须变成字符串后才能比较
if (Array.isArray(val)) {
if (!element.multiple) {
log("ms-duplex在<select multiple=true>上要求对应一个数组")
}
} else {
if (element.multiple) {
log("ms-duplex在<select multiple=false>不能对应一个数组")
}
}
val = Array.isArray(val) ? val.map(String) : val + ""
if (val + "" !== element.oldValue) {
$elem.val(val)
Expand Down
109 changes: 55 additions & 54 deletions avalon.min.js

Large diffs are not rendered by default.

13 changes: 11 additions & 2 deletions avalon.modern.js
Original file line number Diff line number Diff line change
Expand Up @@ -2712,9 +2712,9 @@
case "boolean":
return val === "true"
case "number":
return isFinite(val) ? parseFloat(val) : val
return isFinite(val) || val === "" ? parseFloat(val) || 0 : val
default:
return val + ""
return val
}
}

Expand Down Expand Up @@ -2831,6 +2831,15 @@
data.handler = function() {
var val = evaluator()
val = val && val.$model || val
if (Array.isArray(val)) {
if (!element.multiple) {
log("ms-duplex在<select multiple=true>上要求对应一个数组")
}
} else {
if (element.multiple) {
log("ms-duplex在<select multiple=false>不能对应一个数组")
}
}
//必须变成字符串后才能比较
val = Array.isArray(val) ? val.map(String) : val + ""
if (val + "" !== element.oldValue) {
Expand Down
119 changes: 60 additions & 59 deletions avalon.modern.min.js

Large diffs are not rendered by default.

162 changes: 66 additions & 96 deletions examples/avalon.$events.js
Original file line number Diff line number Diff line change
Expand Up @@ -1497,7 +1497,6 @@
} else {
var rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i
var rposition = /^(top|right|bottom|left)$/
var ralpha = /alpha\([^)]*\)/i
var ie8 = !!window.XDomainRequest
var salpha = "DXImageTransform.Microsoft.Alpha"
var border = {
Expand Down Expand Up @@ -3082,6 +3081,20 @@
if (form && form.msValidate) {
form.msValidate(elem)
}
data.msType = data.param || ""
if (data.msType === "bool") {
data.msType = "boolean"
log("ms-duplex-bool已经更名为ms-duplex-boolean")
} else if (data.msType === "text") {
data.msType = "string"
log("ms-duplex-text已经更名为ms-duplex-string")
}
if (data.msType === "radio") {
log("ms-duplex-radio将在2.0废掉,请尽量不要用")
}
if (!/boolean|string|number/.test(data.msType)) {
data.msType = ""
}
data.bound = function(type, callback) {
if (elem.addEventListener) {
elem.addEventListener(type, callback, false)
Expand Down Expand Up @@ -3288,74 +3301,63 @@
//如果一个input标签添加了model绑定。那么它对应的字段将与元素的value连结在一起
//字段变,value就变;value变,字段也跟着变。默认是绑定input事件,
duplexBinding.INPUT = function(element, evaluator, data) {
var fixType = data.param,
type = element.type,
var type = element.type,
bound = data.bound,
$elem = avalon(element),
firstTigger = false,
composing = false,
callback = function(value) {
firstTigger = true
data.changed.call(this, value)
},
compositionStart = function() {
composing = true
},
compositionEnd = function() {
composing = false
},
//当value变化时改变model的值
updateVModel = function() {
if (composing)//处理中文输入法在minlengh下引发的BUG
return
var val = element.oldValue = element.value //防止递归调用形成死循环
val = getTypeValue(data, val) //尝式转换为正确的格式
if ($elem.data("duplex-observe") !== false) {
evaluator(val)
callback.call(element, val)
if ($elem.data("duplex-focus")) {
avalon.nextTick(function() {
element.focus()
})
}
}
composing = false
function callback(value) {
firstTigger = true
data.changed.call(this, value)
}
function compositionStart() {
composing = true
}
function compositionEnd() {
composing = false
}
//当value变化时改变model的值
function updateVModel() {
if (composing)//处理中文输入法在minlengh下引发的BUG
return
var val = element.oldValue = element.value //防止递归调用形成死循环
var typedVal = getTypedValue(data, val) //尝式转换为正确的格式
if ($elem.data("duplex-observe") !== false) {
evaluator(typedVal)
callback.call(element, typedVal)
if ($elem.data("duplex-focus")) {
avalon.nextTick(function() {
element.focus()
})
}
}
}

//当model变化时,它就会改变value的值
data.handler = function() {
var val = evaluator()
val = val == null ? "" : val
setTypeValue(data, val)
val += ""
val = val == null ? "" : val + ""
if (val !== element.value) {
element.value = val
}
}

if (type === "checkbox" && fixType === "radio") {
if (type === "checkbox" && data.param === "radio") {
type = "radio"
}
if (type === "radio") {
var IE6 = !window.XMLHttpRequest
updateVModel = function() {
if ($elem.data("duplex-observe") !== false) {
var val = element.value
if (fixType === "text") {
evaluator(getTypeValue(data, val))
} else if (fixType === "bool") {
val = val === "true"
evaluator(val)
} else {
val = !element.oldValue
evaluator(val)
}
callback.call(element, val)
var typedValue = data.msType ? getTypedValue(data, val) : !element.oldValue
evaluator(typedValue)
callback.call(element, typedValue)
}
}
data.handler = function() {
var val = evaluator()
setTypeValue(data, val)
var checked = /bool|text/.test(fixType) ? val + "" === element.value : !!val
var checked = data.msType ? val + "" === element.value : !!val
element.oldValue = checked
if (IE6) {
setTimeout(function() {
Expand All @@ -3376,28 +3378,19 @@
var method = element.checked ? "ensure" : "remove"
var array = evaluator()
if (!Array.isArray(array)) {
log("ms-duplex应用于checkbox上要对应一个数组")
array = [array]
}
avalon.Array[method](array, getTypeValue(data, element.value))
var typedValue = getTypedValue(data, element.value)
avalon.Array[method](array, typedValue)
callback.call(element, array)
}
}

data.handler = function() {
var array = [].concat(evaluator()) //强制转换为数组
var types = array.map(function(val) {
var type = typeof val
return type === "number" || type === "boolean" ? type : "string"
})
var maybeType = types[0]
if (types.some(function(type) {
return type !== maybeType
})) {
maybeType = "string"
}
data.msType = maybeType
element.checked = array.indexOf(getTypeValue(data, element.value)) >= 0
element.checked = array.indexOf(getTypedValue(data, element.value)) >= 0
}

bound(W3C ? "change" : "click", updateVModel)
} else {
var event = element.attributes["data-duplex-event"] || element.attributes["data-event"] || {}
Expand Down Expand Up @@ -3472,20 +3465,15 @@
}
}
}
function getTypeValue(data, val) {

function getTypedValue(data, val) {
switch (data.msType) {
case "boolean":
return val === "true"
case "number":
return isFinite(val) ? Number(val) : val
return isFinite(val) || val === "" ? parseFloat(val) || 0 : val
default:
return val + ""
}
}
function setTypeValue(data, val) {
if (!data.msType) {
var type = typeof val
data.msType = type === "boolean" || type === "number" ? type : "string"
return val
}
}

Expand Down Expand Up @@ -3530,10 +3518,10 @@
var val = $elem.val() //字符串或字符串数组
if (Array.isArray(val)) {
val = val.map(function(v) {
return getTypeValue(data, v)
return getTypedValue(data, v)
})
} else {
val = getTypeValue(data, val)
val = getTypedValue(data, val)
}
if (val + "" !== element.oldValue) {
evaluator(val)
Expand All @@ -3544,34 +3532,16 @@
data.handler = function() {
var val = evaluator()
val = val && val.$model || val

if (!data.msType) {
var values = []
for (var i = 0, el; el = element.options[i++]; ) {
values.push(avalon(el).val())
}
var maybeType = "string"
if (values.every(function(val) {
return isFinite(val)
})) {
maybeType = "number"
} else if (values.every(function(val) {
return val === "true" || val === "false"
})) {
maybeType = "boolean"
}
if (!Array.isArray(val)) {
data.msType = typeof val === maybeType ? maybeType : "string"
} else {
var check0 = typeof val[0] === maybeType
var check1 = val.length > 1 ? typeof val[1] === maybeType : true
var check2 = val.length > 2 ? typeof val[2] === maybeType : true
var check3 = val.length > 3 ? typeof val[3] === maybeType : true
var check4 = val.length > 4 ? typeof val[4] === maybeType : true
data.msType = check0 && check1 && check2 && check3 && check4 ? maybeType : "string"
//必须变成字符串后才能比较
if (Array.isArray(val)) {
if (!element.multiple) {
log("ms-duplex在<select multiple=true>上要求对应一个数组")
}
} else {
if (element.multiple) {
log("ms-duplex在<select multiple=false>不能对应一个数组")
}
}
//必须变成字符串后才能比较
val = Array.isArray(val) ? val.map(String) : val + ""
if (val + "" !== element.oldValue) {
$elem.val(val)
Expand Down
Loading

0 comments on commit 2c72e55

Please sign in to comment.