diff --git a/src/js/anot-touch.js b/src/js/anot-touch.js
index c9c624c..0b4b11b 100644
--- a/src/js/anot-touch.js
+++ b/src/js/anot-touch.js
@@ -3784,6 +3784,14 @@ const _Anot = (function() {
return obj
}
+ function parseVmValue(vm, key, val) {
+ if (arguments.length === 2) {
+ return Function('o', 'return o.' + key)(vm)
+ } else if (arguments.length === 3) {
+ Function('o', 'v', 'return o.' + key + ' = v')(vm, val)
+ }
+ }
+
Anot.components = {}
Anot.component = function(name, opts) {
if (opts) {
@@ -3824,12 +3832,12 @@ const _Anot = (function() {
if (props.hasOwnProperty('hostPush')) {
elem.removeAttribute('host-push')
__willpush__ = props.hostPush
- props.hostPush = parentVm[__willpush__]
+ props.hostPush = parseVmValue(parentVm, __willpush__)
}
if (props.hasOwnProperty(':disabled')) {
var disabledKey = props[':disabled']
- state.disabled = parentVm[disabledKey]
+ state.disabled = parseVmValue(parentVm, disabledKey)
parentVm.$watch(disabledKey, function(val) {
parentVm.$fire('component!' + $id + '!disabled', val)
})
@@ -3838,7 +3846,7 @@ const _Anot = (function() {
}
if (props.hasOwnProperty(':loading')) {
var loadingKey = props[':loading']
- state.loading = parentVm[loadingKey]
+ state.loading = parseVmValue(parentVm, loadingKey)
parentVm.$watch(loadingKey, function(val) {
parentVm.$fire('component!' + $id + '!loading', val)
})
@@ -3848,7 +3856,7 @@ const _Anot = (function() {
// :value可实现双向同步值
if (props.hasOwnProperty(':value')) {
var valueKey = props[':value']
- state.value = parentVm[valueKey]
+ state.value = parseVmValue(parentVm, valueKey)
parentVm.$watch(valueKey, function(val) {
parentVm.$fire('component!' + $id + '!value', val)
})
@@ -3857,12 +3865,12 @@ const _Anot = (function() {
? [hooks.watch['value.length']]
: []
hooks.watch['value.length'].push(function(val) {
- parentVm[valueKey] = this.value.$model
+ parseVmValue(parentVm, valueKey, this.value.$model)
})
} else {
hooks.watch.value = hooks.watch.value ? [hooks.watch.value] : []
hooks.watch.value.push(function(val) {
- parentVm[valueKey] = val
+ parseVmValue(parentVm, valueKey, val)
})
}
@@ -3926,7 +3934,7 @@ const _Anot = (function() {
if (__willpush__) {
hideProperty(vmodel, '$push', function(val) {
- parentVm[__willpush__] = val
+ parseVmValue(parentVm, __willpush__, val)
})
}
@@ -4168,7 +4176,8 @@ const _Anot = (function() {
obj[i] = !!obj[i]
}
if (obj[i] === false) {
- return elem.removeAttribute(k)
+ elem.removeAttribute(k)
+ continue
}
}
diff --git a/src/js/anot-touch.shim.js b/src/js/anot-touch.shim.js
index c8edeeb..2aa5901 100644
--- a/src/js/anot-touch.shim.js
+++ b/src/js/anot-touch.shim.js
@@ -3799,6 +3799,14 @@
return obj
}
+ function parseVmValue(vm, key, val) {
+ if (arguments.length === 2) {
+ return Function('o', 'return o.' + key)(vm)
+ } else if (arguments.length === 3) {
+ Function('o', 'v', 'return o.' + key + ' = v')(vm, val)
+ }
+ }
+
Anot.components = {}
Anot.component = function(name, opts) {
if (opts) {
@@ -3839,12 +3847,12 @@
if (props.hasOwnProperty('hostPush')) {
elem.removeAttribute('host-push')
__willpush__ = props.hostPush
- props.hostPush = parentVm[__willpush__]
+ props.hostPush = parseVmValue(parentVm, __willpush__)
}
if (props.hasOwnProperty(':disabled')) {
var disabledKey = props[':disabled']
- state.disabled = parentVm[disabledKey]
+ state.disabled = parseVmValue(parentVm, disabledKey)
parentVm.$watch(disabledKey, function(val) {
parentVm.$fire('component!' + $id + '!disabled', val)
})
@@ -3853,7 +3861,7 @@
}
if (props.hasOwnProperty(':loading')) {
var loadingKey = props[':loading']
- state.loading = parentVm[loadingKey]
+ state.loading = parseVmValue(parentVm, loadingKey)
parentVm.$watch(loadingKey, function(val) {
parentVm.$fire('component!' + $id + '!loading', val)
})
@@ -3863,7 +3871,7 @@
// :value可实现双向同步值
if (props.hasOwnProperty(':value')) {
var valueKey = props[':value']
- state.value = parentVm[valueKey]
+ state.value = parseVmValue(parentVm, valueKey)
parentVm.$watch(valueKey, function(val) {
parentVm.$fire('component!' + $id + '!value', val)
})
@@ -3872,12 +3880,12 @@
? [hooks.watch['value.length']]
: []
hooks.watch['value.length'].push(function(val) {
- parentVm[valueKey] = this.value.$model
+ parseVmValue(parentVm, valueKey, this.value.$model)
})
} else {
hooks.watch.value = hooks.watch.value ? [hooks.watch.value] : []
hooks.watch.value.push(function(val) {
- parentVm[valueKey] = val
+ parseVmValue(parentVm, valueKey, val)
})
}
@@ -3941,7 +3949,7 @@
if (__willpush__) {
hideProperty(vmodel, '$push', function(val) {
- parentVm[__willpush__] = val
+ parseVmValue(parentVm, __willpush__, val)
})
}
@@ -4183,7 +4191,8 @@
obj[i] = !!obj[i]
}
if (obj[i] === false) {
- return elem.removeAttribute(k)
+ elem.removeAttribute(k)
+ continue
}
}
diff --git a/src/js/anot.js b/src/js/anot.js
index 322fb76..51874b7 100644
--- a/src/js/anot.js
+++ b/src/js/anot.js
@@ -3784,6 +3784,14 @@ const _Anot = (function() {
return obj
}
+ function parseVmValue(vm, key, val) {
+ if (arguments.length === 2) {
+ return Function('o', 'return o.' + key)(vm)
+ } else if (arguments.length === 3) {
+ Function('o', 'v', 'return o.' + key + ' = v')(vm, val)
+ }
+ }
+
Anot.components = {}
Anot.component = function(name, opts) {
if (opts) {
@@ -3824,12 +3832,12 @@ const _Anot = (function() {
if (props.hasOwnProperty('hostPush')) {
elem.removeAttribute('host-push')
__willpush__ = props.hostPush
- props.hostPush = parentVm[__willpush__]
+ props.hostPush = parseVmValue(parentVm, __willpush__)
}
if (props.hasOwnProperty(':disabled')) {
var disabledKey = props[':disabled']
- state.disabled = parentVm[disabledKey]
+ state.disabled = parseVmValue(parentVm, disabledKey)
parentVm.$watch(disabledKey, function(val) {
parentVm.$fire('component!' + $id + '!disabled', val)
})
@@ -3838,7 +3846,7 @@ const _Anot = (function() {
}
if (props.hasOwnProperty(':loading')) {
var loadingKey = props[':loading']
- state.loading = parentVm[loadingKey]
+ state.loading = parseVmValue(parentVm, loadingKey)
parentVm.$watch(loadingKey, function(val) {
parentVm.$fire('component!' + $id + '!loading', val)
})
@@ -3848,7 +3856,7 @@ const _Anot = (function() {
// :value可实现双向同步值
if (props.hasOwnProperty(':value')) {
var valueKey = props[':value']
- state.value = parentVm[valueKey]
+ state.value = parseVmValue(parentVm, valueKey)
parentVm.$watch(valueKey, function(val) {
parentVm.$fire('component!' + $id + '!value', val)
})
@@ -3857,12 +3865,12 @@ const _Anot = (function() {
? [hooks.watch['value.length']]
: []
hooks.watch['value.length'].push(function(val) {
- parentVm[valueKey] = this.value.$model
+ parseVmValue(parentVm, valueKey, this.value.$model)
})
} else {
hooks.watch.value = hooks.watch.value ? [hooks.watch.value] : []
hooks.watch.value.push(function(val) {
- parentVm[valueKey] = val
+ parseVmValue(parentVm, valueKey, val)
})
}
@@ -3926,7 +3934,7 @@ const _Anot = (function() {
if (__willpush__) {
hideProperty(vmodel, '$push', function(val) {
- parentVm[__willpush__] = val
+ parseVmValue(parentVm, __willpush__, val)
})
}
@@ -4168,7 +4176,8 @@ const _Anot = (function() {
obj[i] = !!obj[i]
}
if (obj[i] === false) {
- return elem.removeAttribute(k)
+ elem.removeAttribute(k)
+ continue
}
}
diff --git a/src/js/anot.shim.js b/src/js/anot.shim.js
index 1b6be2f..1638e8b 100644
--- a/src/js/anot.shim.js
+++ b/src/js/anot.shim.js
@@ -3799,6 +3799,14 @@
return obj
}
+ function parseVmValue(vm, key, val) {
+ if (arguments.length === 2) {
+ return Function('o', 'return o.' + key)(vm)
+ } else if (arguments.length === 3) {
+ Function('o', 'v', 'return o.' + key + ' = v')(vm, val)
+ }
+ }
+
Anot.components = {}
Anot.component = function(name, opts) {
if (opts) {
@@ -3839,12 +3847,12 @@
if (props.hasOwnProperty('hostPush')) {
elem.removeAttribute('host-push')
__willpush__ = props.hostPush
- props.hostPush = parentVm[__willpush__]
+ props.hostPush = parseVmValue(parentVm, __willpush__)
}
if (props.hasOwnProperty(':disabled')) {
var disabledKey = props[':disabled']
- state.disabled = parentVm[disabledKey]
+ state.disabled = parseVmValue(parentVm, disabledKey)
parentVm.$watch(disabledKey, function(val) {
parentVm.$fire('component!' + $id + '!disabled', val)
})
@@ -3853,7 +3861,7 @@
}
if (props.hasOwnProperty(':loading')) {
var loadingKey = props[':loading']
- state.loading = parentVm[loadingKey]
+ state.loading = parseVmValue(parentVm, loadingKey)
parentVm.$watch(loadingKey, function(val) {
parentVm.$fire('component!' + $id + '!loading', val)
})
@@ -3863,7 +3871,7 @@
// :value可实现双向同步值
if (props.hasOwnProperty(':value')) {
var valueKey = props[':value']
- state.value = parentVm[valueKey]
+ state.value = parseVmValue(parentVm, valueKey)
parentVm.$watch(valueKey, function(val) {
parentVm.$fire('component!' + $id + '!value', val)
})
@@ -3872,12 +3880,12 @@
? [hooks.watch['value.length']]
: []
hooks.watch['value.length'].push(function(val) {
- parentVm[valueKey] = this.value.$model
+ parseVmValue(parentVm, valueKey, this.value.$model)
})
} else {
hooks.watch.value = hooks.watch.value ? [hooks.watch.value] : []
hooks.watch.value.push(function(val) {
- parentVm[valueKey] = val
+ parseVmValue(parentVm, valueKey, val)
})
}
@@ -3941,7 +3949,7 @@
if (__willpush__) {
hideProperty(vmodel, '$push', function(val) {
- parentVm[__willpush__] = val
+ parseVmValue(parentVm, __willpush__, val)
})
}
@@ -4183,7 +4191,8 @@
obj[i] = !!obj[i]
}
if (obj[i] === false) {
- return elem.removeAttribute(k)
+ elem.removeAttribute(k)
+ continue
}
}
diff --git a/src/js/form/index.js b/src/js/form/index.js
index 47b3658..e6dbdd8 100644
--- a/src/js/form/index.js
+++ b/src/js/form/index.js
@@ -225,16 +225,14 @@ Anot.component('input', {
this.classList.add('icon-' + state.pos)
}
this.setAttribute(':class', '{disabled: disabled, active: active}')
- this.setAttribute(
- ':css',
- '{width: props.width, height: props.height, lineHeight: props.height + "px"}'
- )
+ this.setAttribute(':css', '{width: props.width}')
delete props.disabled
delete props.color
next()
},
render() {
+ // console.log(this.props)
let { icon, placeholder } = this.props
let holder = `
`
@@ -260,8 +258,8 @@ Anot.component('input', {
},
skip: ['pos'],
props: {
+ type: 'text',
width: 180,
- height: 30,
placeholder: '',
default: ''
},
diff --git a/src/js/layer/skin/default.scss b/src/js/layer/skin/default.scss
index 0b2b987..c0e9eb1 100644
--- a/src/js/layer/skin/default.scss
+++ b/src/js/layer/skin/default.scss
@@ -92,7 +92,7 @@
/* 特殊类弹层(toast弹层) */
- &.type-toast {min-width:10px;padding:0;background:transparent;
+ &.type-toast {position:fixed;min-width:10px;padding:0;background:transparent;
.layer-content {min-height:40px;height:40px;padding:0}
diff --git a/src/js/md5/index.js b/src/js/md5/index.js
index 28663a5..a4d8c2b 100644
--- a/src/js/md5/index.js
+++ b/src/js/md5/index.js
@@ -377,6 +377,7 @@ if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {
*/
function toUtf8(str) {
+ str += ''
if (/[\u0080-\uFFFF]/.test(str)) {
str = unescape(encodeURIComponent(str))
}
diff --git a/src/js/meditor/index.js b/src/js/meditor/index.js
index 212315f..72d4ebd 100644
--- a/src/js/meditor/index.js
+++ b/src/js/meditor/index.js
@@ -246,13 +246,13 @@ class MEObject {
}
getVal() {
- return this.vm.plainTxt.trim()
+ return this.vm.value.trim()
}
getHtml() {
return this.vm.__tmp__
}
setVal(txt) {
- this.vm.plainTxt = txt || ''
+ this.vm.value = txt || ''
}
}
@@ -296,7 +296,7 @@ Anot.component('meditor', {
class="editor-body"
spellcheck="false"
:attr="{disabled: disabled}"
- :duplex="plainTxt">
+ :duplex="value">
{
@@ -355,16 +355,20 @@ Anot.component('meditor', {
if (typeof this.props.created === 'function') {
this.props.created(new MEObject(this))
}
+ this.compile()
+ if (this.preview) {
+ this.htmlTxt = this.__tmp__
+ }
},
watch: {
- plainTxt: function(val) {
+ value: function(val) {
this.compile()
//只有开启实时预览,才会赋值给htmlTxt
if (this.preview) {
this.htmlTxt = this.__tmp__
}
if (typeof this.props.onUpdate === 'function') {
- this.props.onUpdate(this.plainTxt, this.__tmp__)
+ this.props.onUpdate(this.value, this.__tmp__)
}
}
},
@@ -374,7 +378,7 @@ Anot.component('meditor', {
fullscreen: false, //是否全屏
preview: true, //是否显示预览
htmlTxt: '', //用于预览渲染
- plainTxt: '', //纯md文本
+ value: '', //纯md文本
addon // 已有插件
},
props: {
@@ -383,7 +387,7 @@ Anot.component('meditor', {
onUpdate: Anot.PropsTypes.isFunction(),
onFullscreen: Anot.PropsTypes.isFunction()
},
- skip: ['addon', 'insert', 'selection'],
+ skip: ['addon', 'insert', 'selection', '__tmp__'],
methods: {
// 往文本框中插入内容
insert(val, isSelect) {
@@ -412,7 +416,7 @@ Anot.component('meditor', {
dom.value += val
dom.focus()
}
- this.plainTxt = dom.value
+ this.value = dom.value
},
/**
* [selection 获取选中的文本]
@@ -465,7 +469,7 @@ Anot.component('meditor', {
},
compile: function() {
- let txt = this.plainTxt.trim()
+ let txt = this.value.trim()
if (this.props.safelyCompile) {
txt = txt
diff --git a/src/js/store/index.js b/src/js/store/index.js
new file mode 100644
index 0000000..de0f9f8
--- /dev/null
+++ b/src/js/store/index.js
@@ -0,0 +1,276 @@
+/**
+ *
+ * @authors yutent (yutent@doui.cc)
+ * @date 2018-06-25 21:39:42
+ * @version $Id$
+ */
+
+const __STORE__ = {}
+// 解析and条件
+function parse$And(it) {
+ let result = ''
+ for (let k in it) {
+ let tmp = it[k]
+ switch (Anot.type(tmp)) {
+ case 'object':
+ if (tmp.$has) {
+ result += `it.${k}.indexOf(${JSON.stringify(tmp.$has)}) > -1`
+ break
+ }
+ if (tmp.$in) {
+ result += `${JSON.stringify(tmp.$in)}.indexOf(it.${k}) > -1`
+ break
+ }
+ if (tmp.$regex) {
+ result += `${tmp.$regex}.test(it.${k})`
+ break
+ }
+
+ // 区间解析
+ if (tmp.$lt || tmp.$lte) {
+ result += `it.${k} <${tmp.$lte ? '=' : ''} ${tmp.$lt || tmp.$lte}`
+ if (tmp.$gt || tmp.$gte) {
+ result += ` && it.${k} >${tmp.$gte ? '=' : ''} ${tmp.$gt ||
+ tmp.$gte}`
+ }
+ break
+ }
+ if (tmp.$gt || tmp.$gte) {
+ result += `it.${k} >${tmp.$gte ? '=' : ''} ${tmp.$gt || tmp.$gte}`
+ break
+ }
+ if (tmp.$eq) {
+ result += `it.${k} === ${tmp.$eq}`
+ break
+ }
+ default:
+ result += `it.${k} === ${JSON.stringify(it[k])}`
+ break
+ }
+ result += ' && '
+ }
+ result = result.slice(0, -4)
+
+ return result
+}
+
+// 解析or条件
+function parse$Or(arr) {
+ let result = ''
+
+ arr.forEach(it => {
+ result += '('
+
+ result += parse$And(it)
+ result += ') || '
+ })
+ return result.slice(0, -4)
+}
+
+class AnotStore {
+ constructor(name) {
+ Anot.hideProperty(this, '__name__', name)
+ Anot.hideProperty(this, '__LAST_QUERY__', '')
+ Anot.hideProperty(this, '__QUERY_HISTORY__', [])
+ if (!__STORE__[name]) {
+ __STORE__[name] = []
+ __STORE__[`${name}Dict`] = {}
+ }
+ }
+
+ static collection(name) {
+ return new this(name)
+ }
+
+ __MAKE_FN__(opt) {
+ let fnStr = `
+ let result = [];
+ let num = 0;
+ for (let it of arr) {
+ if(`
+
+ if (opt.$or) {
+ fnStr += parse$Or(opt.$or)
+ } else {
+ fnStr += parse$And(opt)
+ }
+ fnStr += `){
+ result.push(it)
+ num++
+ if(limit > 0 && num >= limit){
+ break
+ }
+ }
+ }
+ return result;`
+
+ return Function('arr', 'limit', fnStr)
+ }
+
+ // 清除当前集合的数据及缓存, 默认只清除缓存
+ clear(force) {
+ this.__QUERY_HISTORY__ = []
+ this.__LAST_QUERY__ = ''
+ if (force) {
+ __STORE__[this.__name__] = []
+ __STORE__[`${this.__name__}Dict`] = {}
+ }
+ }
+
+ // 查询多条记录,返回数组
+ getAll({ filter, limit = [] }) {
+ const collection = __STORE__[this.__name__]
+ let result = []
+ let forceLimited = false // 强制限制查询结果集
+ if (!collection || !collection.length) {
+ return result
+ }
+
+ if (limit.length < 1) {
+ limit = [0]
+ }
+
+ if (limit.length < 2 && filter) {
+ forceLimited = true
+ if (limit[0] > 0) {
+ limit.unshift(0)
+ }
+ }
+
+ if (filter) {
+ let query = JSON.stringify(filter)
+ if (this.__LAST_QUERY__ === query) {
+ result = this.__QUERY_HISTORY__.slice.apply(
+ this.__QUERY_HISTORY__,
+ limit
+ )
+ } else {
+ let tmpFn = this.__MAKE_FN__(filter)
+ result = tmpFn(collection, forceLimited ? limit[1] || 0 : 0)
+
+ // 非强制限制的查询, 缓存结果集
+ if (!forceLimited) {
+ this.__LAST_QUERY__ = query
+ this.__QUERY_HISTORY__ = result
+ result = this.__QUERY_HISTORY__.slice.apply(
+ this.__QUERY_HISTORY__,
+ limit
+ )
+ }
+ }
+ } else {
+ result = collection.slice.apply(collection, limit)
+ }
+ return Anot.deepCopy(result)
+ }
+
+ // 查询单条记录, 返回Object对象
+ get(_id) {
+ const collectionDict = __STORE__[`${this.__name__}Dict`]
+ return Anot.deepCopy(collectionDict[_id]) || null
+ }
+
+ // 查询总数
+ count({ filter }) {
+ if (filter) {
+ if (this.__LAST_QUERY__ === JSON.stringify(filter)) {
+ return this.__QUERY_HISTORY__.length
+ } else {
+ return this.getAll({ filter, limit: [0] }).length
+ }
+ }
+ return __STORE__[this.__name__].length
+ }
+
+ __INSERT__(item, primary) {
+ let collection = __STORE__[this.__name__]
+ let collectionDict = __STORE__[`${this.__name__}Dict`]
+ let _id = item[primary || `${this.__name__}_id`]
+ let tmp = collectionDict[_id]
+ // 已存在, 则直接更新
+ if (tmp) {
+ this.update(_id, item)
+ } else {
+ collection.push(item)
+ collectionDict[_id] = item
+ }
+ }
+
+ // 插入数据, 可以同时插入多条
+ insert(items, primary) {
+ if (!Array.isArray(items)) {
+ items = [items]
+ }
+ items.forEach(item => {
+ this.__INSERT__(item, primary)
+ })
+ this.clear()
+ }
+
+ // 按指定字段排序, 是否字符串排序, 是否逆序
+ sort(key, locale, desc) {
+ let fnStr = ''
+ if (locale && window.Intl) {
+ fnStr += `
+ let col = new Intl.Collator('zh')
+ `
+ }
+ if (desc) {
+ fnStr += 'return arr.sort((b, a) => {'
+ } else {
+ fnStr += 'return arr.sort((a, b) => {'
+ }
+
+ fnStr += `
+ let filter = function(val) {
+ try {
+ return val.${key} || ''
+ } catch (err) {
+ return ''
+ }
+ }
+ `
+
+ if (locale) {
+ if (window.Intl) {
+ fnStr += `return col.compare(filter(a), filter(b))`
+ } else {
+ fnStr += `return (filter(a) + '').localeCompare(filter(b), 'zh')`
+ }
+ } else {
+ fnStr += `return filter(a) - filter(b)`
+ }
+ fnStr += '\n})'
+ Function('arr', fnStr).call(this, __STORE__[this.__name__])
+ this.clear()
+ }
+
+ // 更新集合中的数据
+ update(_id, data) {
+ let collection = __STORE__[this.__name__]
+ let collectionDict = __STORE__[`${this.__name__}Dict`]
+
+ let tmp = collectionDict[_id]
+ let idx = collection.indexOf(tmp)
+
+ Object.assign(tmp, data)
+ collection.splice(idx, 1, tmp)
+ collectionDict[_id] = tmp
+ }
+
+ // 删除集合中单条数据
+ remove(id) {
+ let collection = __STORE__[this.__name__]
+ let collectionDict = __STORE__[`${this.__name__}Dict`]
+
+ let tmp = collectionDict[_id]
+ let idx = collection.indexOf(tmp)
+
+ collection.splice(idx, 1)
+ delete collectionDict[_id]
+ }
+}
+
+Anot.store = window.store = AnotStore
+
+export default AnotStore