UNPKG

asia-weex-vue-render4light

Version:

Web renderer for weex project written in Vue DSL.

131 lines (120 loc) 3.67 kB
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * @fileOverview Input component. * Support v-model only if vue version is larger than 2.2.0 */ import { getComponentInlineStyle } from '../../core' let mapFormEvents, appendCss const ID_PREFIX_PLACEHOLDER_COLOR = 'wipt_plc_' const ID_PREFIX_INPUT = 'wipt_' let idCount = 0 function setPlaceholderColor (inputVm, placeholderColor) { if (!placeholderColor) { return } const vendors = [ '::-webkit-input-placeholder', ':-moz-placeholder', '::-moz-placeholder', ':-ms-input-placeholder', ':placeholder-shown' ] const id = inputVm._id appendCss( vendors.map(function (vendor, idx) { return `#${ID_PREFIX_INPUT}${id}${vendors[idx]}{color:${placeholderColor};}` }).join(''), `${ID_PREFIX_PLACEHOLDER_COLOR}${id}`, true) } function processStyle (vm) { const styles = getComponentInlineStyle(vm) const phColor = styles.placeholderColor || styles['placeholder-color'] if (phColor) { setPlaceholderColor(vm, phColor) } return styles } function getInput (weex) { const { inputCommon } = weex.mixins return { name: 'weex-input', mixins: [inputCommon], props: { type: { type: String, default: 'text', validator (value) { return [ 'email', 'number', 'password', 'search', 'tel', 'text', 'url', 'date', 'datetime', 'time' // unsupported type: // button, checkbox, color, file, hidden, image, // month, radio, range, reset, submit, week, ].indexOf(value) !== -1 } }, value: String, placeholder: String, disabled: { type: [String, Boolean], default: false }, autofocus: { type: [String, Boolean], default: false }, maxlength: [String, Number], returnKeyType: String }, render (createElement) { if (!this._id) { this._id = idCount++ } const events = mapFormEvents(this) return createElement('html:input', { attrs: { 'weex-type': 'input', id: `${ID_PREFIX_INPUT}${this._id}`, type: this.type, value: this.value, disabled: (this.disabled !== 'false' && this.disabled !== false), autofocus: (this.autofocus !== 'false' && this.autofocus !== false), placeholder: this.placeholder, maxlength: this.maxlength, 'returnKeyType': this.returnKeyType }, domProps: { value: this.value }, on: this.createKeyboardEvent(events), staticClass: 'weex-input weex-el', staticStyle: processStyle(this) }) } } } export default { init (weex) { mapFormEvents = weex.utils.mapFormEvents appendCss = weex.utils.appendCss weex.registerComponent('input', getInput(weex)) } }