vpages import { Animated, Button, StyleSheet, Text, View, Dimensions } from 'react-native';const {width, height} = Dimensions.get('window');const androidHeight = height-24var styles = { ul: { marginLeft: 0 }, html: { item: { width: width, m
import { Animated, Button, StyleSheet, Text, View, Dimensions } from 'react-native'; const {width, height} = Dimensions.get('window'); const androidHeight = height-24 var styles = { ul: { marginLeft: 0 }, html: { item: { width: width, marginTop: 24, }, ul: { height: androidHeight, backgroundColor: '#ffffff' } }, head: { item: { position: 'absolute', top: 0, left: 0, height: 50, width: width, backgroundColor: '#c9c9c9', }, itemText: { color: '#000000' } }, body: { item: { flex: 1, marginTop: 50 } }, foot: { item: { position: 'absolute', bottom: 0, left: 0, height: 70, width: width, backgroundColor: '#c9c9c9' }, itemText: { color: '#000000' } }, test: { item: { height: 80, backgroundColor: '#ae5273' }, itemText: { color: '#ffffff' } } } class Vpages extends React.Component { constructor(props){ super(props) this.state = { vpages: this.props.data || [] } } render(){ const stys = Aotoo.merge({}, styles, this.props.style) return Aotoo.tree( { data: this.state.vpages }, stys ) } } function findIndex(vpages, select, pre){ let index if (!pre) { vpages.forEach( (ele, ii) => { if (ele.parent == select) { index = ii } }); } if (!index) index = Aotoo.findIndex(vpages, o=>o.idf==select) return index } const Actions = { APPEND: function(ostate, opts){ var state = this.curState var vpages = state.vpages const select = opts.select const content = opts.content const className = opts.className const id = opts.id const index = findIndex(vpages, select) const wanner = {title: content, idf: id, parent: select, className} vpages.splice( (index+1), 0, wanner) return state }, PREPEND: function(ostate, opts){ var state = this.curState var vpages = state.vpages const select = opts.select const content = opts.content const className = opts.className const id = opts.id const index = findIndex(vpages, select, true) const wanner = {title: content, idf: id, parent: select, className} vpages.splice( (index+1), 0, wanner) return state }, REMOVE: function(ostate, opts){ var state = this.curState var vpages = state.vpages const select = opts.select const index = findIndex(vpages, select, true) vpages.splice( index, 1 ) return state }, UPDATE: function(ostate, opts){ var state = this.curState var vpages = state.vpages const content = opts.content const className = opts.className const index = findIndex(vpages, select, true) let resource = vpages[index] resource.title = content resource.className = className return state } } function myTemplate(newTmp){ const _tmp = { empty: [ {title: '', idf: 'html', className: 'html'}, ], html: [ {title: '', idf: 'html', className: 'html'}, {title: '', idf: 'head', parent: 'html', className: 'head'}, {title: '', idf: 'body', parent: 'html', className: 'body'}, {title: '', idf: 'foot', parent: 'html', className: 'foot'}, ] } if (newTmp) { return Aotoo.merge({}, _tmp, newTmp) } else { return _tmp } } module.exports = function(opts){ let template = myTemplate() if (typeof opts == 'string' || !opts) { const tmp = opts || 'empty' if (template[tmp]) { opts = { props: { data: template[tmp] } } } else { opts = {} } } if (!opts.props) { opts.props = { data: template.empty } } if (opts.props && !opts.props.data) { opts.props.data = template.empty } if (opts.props && typeof opts.props.data == 'string') { if (!template[opts.props.data]) { opts.props.data = 'empty' } opts.props.data = template[opts.props.data] } const Vp = Aotoo(Vpages, Actions) function visualPages(select){ return Vp.$(select) } visualPages.template = function(newTemplate){ template = myTemplate(newTemplate) } visualPages.render = function(id, fun){ Vp.setConfig(opts) Vp.rendered = visualPages.rendered return Vp.render(id, fun) } Vp.extend({ $: function(select){ const that = this const index = findIndex(opts.props.data, select, true) if (!index) return return { append: function(options){ let {content, id, className} = options if (!id) id = Aotoo.uniqueId('visualPage_') if (that.hasMounted()) { that.dispatch ('APPEND', { select, content, id, className }) } else { const index = findIndex(opts.props.data, select) const wanner = {title: content, idf: id, parent: select, className} opts.props.data.splice( (index+1), 0, wanner) } return visualPages(id) }, prepend: function(options){ let {content, id, className} = options if (!id) id = Aotoo.uniqueId('visualPage_') if (that.hasMounted()) { that.dispatch ('PREPEND', { select, content, id, className }) } else { const index = findIndex(opts.props.data, select, true) const wanner = {title: content, idf: id, parent: select, className} opts.props.data.splice( (index+1), 0, wanner) } return visualPages(id) }, remove: function(){ if (that.hasMounted()) { that.dispatch ('REMOVE', { select }) } else { const index = findIndex(opts.props.data, select, true) opts.props.data.splice( index, 1 ) } }, update: function(options){ let {content, className} = options if (that.hasMounted()) { that.dispatch ('UPDATE', { content, className }) } else { const index = findIndex(opts.props.data, select, true) if (index) { opts.props.data[index]['title'] = content opts.props.data[index]['className'] = className } } return visualPages(select) }, get: function(){ const index = findIndex(opts.props.data, select, true) if (index) { return opts.props.data[index] } }, animat: function(){} } } }) return visualPages }