aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/platforms/weex/runtime/components/richtext.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue/src/platforms/weex/runtime/components/richtext.js')
-rw-r--r--node_modules/vue/src/platforms/weex/runtime/components/richtext.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/node_modules/vue/src/platforms/weex/runtime/components/richtext.js b/node_modules/vue/src/platforms/weex/runtime/components/richtext.js
new file mode 100644
index 00000000..a9164c7a
--- /dev/null
+++ b/node_modules/vue/src/platforms/weex/runtime/components/richtext.js
@@ -0,0 +1,82 @@
+/* @flow */
+
+function getVNodeType (vnode: VNode): string {
+ if (!vnode.tag) {
+ return ''
+ }
+ return vnode.tag.replace(/vue\-component\-(\d+\-)?/, '')
+}
+
+function isSimpleSpan (vnode: VNode): boolean {
+ return vnode.children &&
+ vnode.children.length === 1 &&
+ !vnode.children[0].tag
+}
+
+function parseStyle (vnode: VNode): Object | void {
+ if (!vnode || !vnode.data) {
+ return
+ }
+ const { staticStyle, staticClass } = vnode.data
+ if (vnode.data.style || vnode.data.class || staticStyle || staticClass) {
+ const styles = Object.assign({}, staticStyle, vnode.data.style)
+ const cssMap = vnode.context.$options.style || {}
+ const classList = [].concat(staticClass, vnode.data.class)
+ classList.forEach(name => {
+ if (name && cssMap[name]) {
+ Object.assign(styles, cssMap[name])
+ }
+ })
+ return styles
+ }
+}
+
+function convertVNodeChildren (children: Array<VNode>): Array<VNode> | void {
+ if (!children.length) {
+ return
+ }
+
+ return children.map(vnode => {
+ const type: string = getVNodeType(vnode)
+ const props: Object = { type }
+
+ // convert raw text node
+ if (!type) {
+ props.type = 'span'
+ props.attr = {
+ value: (vnode.text || '').trim()
+ }
+ } else {
+ props.style = parseStyle(vnode)
+ if (vnode.data) {
+ props.attr = vnode.data.attrs
+ if (vnode.data.on) {
+ props.events = vnode.data.on
+ }
+ }
+ if (type === 'span' && isSimpleSpan(vnode)) {
+ props.attr = props.attr || {}
+ props.attr.value = vnode.children[0].text.trim()
+ return props
+ }
+ }
+
+ if (vnode.children && vnode.children.length) {
+ props.children = convertVNodeChildren(vnode.children)
+ }
+
+ return props
+ })
+}
+
+export default {
+ name: 'richtext',
+ render (h: Function) {
+ return h('weex:richtext', {
+ on: this._events,
+ attrs: {
+ value: convertVNodeChildren(this.$options._renderChildren || [])
+ }
+ })
+ }
+}