diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 097b450..0000000 --- a/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*.{js,css}] -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*] -charset = utf-8 -trim_trailing_whitespace = true - -[*.md] -max_line_length = 0 -trim_trailing_whitespace = false \ No newline at end of file diff --git a/.gitignore b/.gitignore index bd0d2a5..372e187 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ _site sea-modules spm_modules .cache +.happypack dist build assets/**/*.css diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 872786e..0000000 --- a/.jshintrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "node": true, - "browser": true, - "bitwise": true, - "camelcase": true, - "curly": true, - "immed": true, - "newcap": true, - "noarg": true, - "undef": true, - "unused": "vars", - "esnext": true -} diff --git a/.npmignore b/.npmignore index dbbbd1e..8eee222 100644 --- a/.npmignore +++ b/.npmignore @@ -20,6 +20,7 @@ Thumbs.db *.swp out/ .build +.happypack node_modules _site sea-modules diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6fc0e4a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,37 @@ +language: node_js + +sudo: false + +notification: + email: + - wsj7552715@hotmail.com + +node_js: +- 4.0.0 + +before_install: +- | + if ! git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qve '(\.md$)|(\.html$)' + then + echo "Only docs were updated, stopping build process." + exit + fi + phantomjs --version + +script: +- | + if [ "$TEST_TYPE" = test ]; then + npm test + else + npm run $TEST_TYPE + fi + +env: + matrix: + - TEST_TYPE=test + - TEST_TYPE=coverage + - TEST_TYPE=saucelabs + +matrix: + allow_failures: + - env: "TEST_TYPE=saucelabs" diff --git a/HISTORY.md b/HISTORY.md index e69de29..a32fbb7 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -0,0 +1,5 @@ +# history + +## 0.1.3 + +`NEW` add new Prop `renderView` \ No newline at end of file diff --git a/demo/InputFormFieldDemo.js b/demo/InputFormFieldDemo.js index bbfbc8b..ba74469 100644 --- a/demo/InputFormFieldDemo.js +++ b/demo/InputFormFieldDemo.js @@ -6,12 +6,12 @@ * All rights reserved. */ -let classnames = require('classnames'); +const classnames = require('classnames'); -let InputFormField = require('../src'); -let {LeftAddon, RightAddon, Count} = InputFormField; -let Form = require('uxcore-form/build/Form'); -let Validators = require('uxcore-validator'); +const InputFormField = require('../src'); +const {LeftAddon, RightAddon, Count} = InputFormField; +const Form = require('uxcore-form/build/Form'); +const Validators = require('uxcore-validator'); class Demo extends React.Component { @@ -29,7 +29,9 @@ class Demo extends React.Component { let me = this; return (
-
+
+
); } diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index d5a9029..0000000 --- a/gulpfile.js +++ /dev/null @@ -1,196 +0,0 @@ -// https://github.com/gulpjs/gulp/tree/master/docs -var gulp = require('gulp'); -var fs = require('fs'); -var inquirer = require('inquirer'); -var spawn = require('cross-spawn'); -var file = require('html-wiring'); -var colors = require('colors/safe'); -var git = require('git-rev'); - -colors.setTheme({ - info: ['bold', 'green'] -}); - -var pkg = JSON.parse(file.readFileAsString('package.json')); - -var versionCompare = function(a, b) { - var aArr = a.split('.'); - var bArr = b.split('.'); - var larger = false; - for (var i = 0; i < 3; i++) { - if (parseInt(aArr[i]) === parseInt(bArr[i])) { - - } - else { - larger = parseInt(aArr[i]) > parseInt(bArr[i]); - break; - } - } - return larger; -} - -var webpack = require('webpack'); - -// http://browsersync.io/ -var browserSync = require('browser-sync'); -var reload = browserSync.reload; - -// https://www.npmjs.com/package/gulp-babel -var babel = require('gulp-babel'); - -// https://www.npmjs.com/package/gulp-less -var less = require('gulp-less'); - -// https://github.com/floridoo/gulp-sourcemaps -var sourcemaps = require('gulp-sourcemaps'); - -// https://github.com/wearefractal/gulp-concat -var concat = require('gulp-concat'); - -// https://www.npmjs.com/package/gulp-just-replace/ -var replace = require('gulp-just-replace'); - -// https://www.npmjs.com/package/gulp-es3ify -var es3ify = require("gulp-es3ify"); - -gulp.task('pack_demo', function(cb) { - webpack(require('./webpack.dev.js'), function (err, stats) { - // 重要 打包过程中的语法错误反映在stats中 - console.log('webpack log:' + stats); - if(err) cb(err); - console.info('###### pack_demo done ######'); - cb(); - }); -}); - -gulp.task('pack_build', function(cb) { - gulp.src(['./src/**/*.js']) - .pipe(babel({ - presets: ['react', 'es2015-loose', 'stage-1'], - plugins: ['add-module-exports'] - })) - .pipe(es3ify()) - .pipe(gulp.dest('build')) - .on('end', function() { - cb(); - }) -}); - -gulp.task('logo_build', function(cb) { - gulp.src(['./src/**/*.svg']) - .pipe(gulp.dest('build')) - .on('end', function() { - cb(); - }) -}) - -gulp.task('less_demo', function(cb) { - gulp.src(['./demo/**/*.less']) - .pipe(sourcemaps.init()) - .pipe(less()) - .pipe(concat('demo.css')) - .pipe(replace([{ - search: /\/\*#\ssourceMappingURL=([^\*\/]+)\.map\s\*\//g, - replacement: '/* end for `$1` */\n' - }])) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('./dist')); - console.info('###### less_demo done ######'); - cb(); -}); - -gulp.task('reload_by_js', ['pack_demo'], function () { - reload(); -}); - -gulp.task('reload_by_component_css', ['less_component'], function () { - reload(); -}); - -gulp.task('reload_by_demo_css', ['less_demo'], function () { - reload(); -}); - -gulp.task('server', [ - 'pack_demo', - 'less_demo' -], function() { - browserSync({ - server: { - baseDir: './' - }, - open: 'external' - }); - - gulp.watch(['src/**/*.js', 'demo/**/*.js'], ['reload_by_js']); - - gulp.watch('src/**/*.less', ['reload_by_demo_css']); - - gulp.watch('demo/**/*.less', ['reload_by_demo_css']); - -}); - -gulp.task('default', ['pack_build', 'logo_build'], function() { - -}); - -gulp.task('publish', ['pack_build', 'logo_build'], function() { - setTimeout(function() { - git.branch(function(branch) { - var defaultBranch = branch; - var defaultNpm = /@ali/.test(pkg.name) ? 'tnpm' : 'npm'; - var questions = [ - { - type: 'input', - name: 'version', - message: 'please enter the package version to publish (should be xx.xx.xx)', - default: pkg.version, - validate: function(input) { - if (/\d+\.\d+\.\d+/.test(input)) { - if (versionCompare(input, pkg.version)) { - return true; - } - else { - return "the version you entered should be larger than now" - } - } - else { - return "the version you entered is not valid" - } - } - }, - { - type: 'input', - name: 'branch', - message: 'which branch you want to push', - default: defaultBranch - }, - { - type: 'input', - name: 'npm', - message: 'which npm you want to publish', - default: defaultNpm, - validate: function(input) { - if (/npm/.test(input)) { - return true; - } - else { - return "it seems not a valid npm" - } - } - } - ]; - inquirer.prompt(questions, function(answers) { - pkg.version = answers.version; - file.writeFileFromString(JSON.stringify(pkg, null, ' '), 'package.json'); - console.log(colors.info('#### Git Info ####')); - spawn.sync('git', ['add', '.'], {stdio: 'inherit'}); - spawn.sync('git', ['commit', '-m', 'ver. ' + pkg.version], {stdio: 'inherit'}); - spawn.sync('git', ['push', 'origin', answers.branch], {stdio: 'inherit'}); - console.log(colors.info('#### Npm Info ####')); - spawn.sync(answers.npm, ['publish'], {stdio: 'inherit'}); - }) - }) - }, 0) - -}); diff --git a/package.json b/package.json index 5ee9432..cd0ac61 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,24 @@ { "name": "uxcore-input-form-field", - "version": "0.1.2", + "version": "0.1.3", "description": "uxcore-input-form-field component for uxcore.", "repository": "https://github.com/uxcore/uxcore-input-form-field.git", "author": "eternalsky", "main": "build/index.js", "scripts": { - "dev": "gulp server" + "start": "uxcore-tools run start", + "server": "uxcore-tools run server", + "lint": "uxcore-tools run lint", + "build": "uxcore-tools run build", + "test": "uxcore-tools run test", + "coverage": "uxcore-tools run coverage", + "pub": "uxcore-tools run pub", + "dep": "uxcore-tools run dep", + "tnpm-dep": "uxcore-tools run tnpm-dep", + "chrome": "uxcore-tools run chrome", + "browsers": "uxcore-tools run browsers", + "saucelabs": "uxcore-tools run saucelabs", + "update": "uxcore-tools run update" }, "bugs": { "url": "http://github.com/uxcore/uxcore-input-form-field/issues" @@ -19,36 +31,17 @@ "form" ], "devDependencies": { - "babel": "~6.3.26", - "babel-core": "~6.4.0", - "babel-loader": "~6.2.1", - "babel-plugin-add-module-exports": "~0.1.2", - "babel-preset-es2015-loose": "~7.0.0", - "babel-preset-react": "~6.3.13", - "babel-preset-stage-1": "~6.3.13", - "browser-sync": "~2.11.0", - "colors": "^1.1.2", - "console-polyfill": "~0.2.1", - "cross-spawn": "^2.1.5", - "es3ify-loader": "~0.1.0", - "es5-shim": "~4.1.10", - "git-rev": "~0.2.1", - "gulp": "~3.9.0", - "gulp-babel": "~6.1.1", - "gulp-concat": "~2.6.0", - "gulp-es3ify": "0.0.0", - "gulp-just-replace": "~1.0.2", - "gulp-less": "~3.0.3", - "gulp-sourcemaps": "~1.5.2", - "html-wiring": "~1.2.0", - "inquirer": "^0.12.0", - "kuma-base": "~1.0.1", - "react": "~0.14.0", - "react-dom": "~0.14.0", + "console-polyfill": "^0.2.2", + "es5-shim": "^4.5.8", + "expect.js": "~0.3.1", + "kuma-base": "1.x", + "react": "0.14.x", + "react-addons-test-utils": "0.14.x", + "react-dom": "0.14.x", "uxcore-form": "~1.3.11", - "uxcore-kuma": "~2.0.0", - "uxcore-validator": "~0.2.0", - "webpack": "^1.10.5" + "uxcore-kuma": "2.x", + "uxcore-tools": "0.2.x", + "uxcore-validator": "~0.2.0" }, "dependencies": { "classnames": "^2.1.2", diff --git a/src/InputFormField.js b/src/InputFormField.js index a824764..caba981 100644 --- a/src/InputFormField.js +++ b/src/InputFormField.js @@ -246,7 +246,9 @@ class InputFormField extends FormField { } } else if (mode == Constants.MODE.VIEW) { - arr.push({me.state.formatValue}) + arr.push( + {me.props.renderView(me.state.formatValue)} + ) } return arr; } @@ -259,6 +261,7 @@ InputFormField.propTypes = assign({}, FormField.propTypes, { onBlur: React.PropTypes.func, onFocus: React.PropTypes.func, onKeyDown: React.PropTypes.func, + renderView: React.PropTypes.func, validateOnBlur: React.PropTypes.bool, autoTrim: React.PropTypes.bool, inputType: React.PropTypes.string @@ -267,6 +270,7 @@ InputFormField.defaultProps = assign({}, FormField.defaultProps, { onBlur: () => {}, onFocus: () => {}, onKeyDown: () => {}, + renderView: (value) => {return value;}, validateOnBlur: false, inputType: 'text' }); diff --git a/tests/InputFormField.spec.js b/tests/InputFormField.spec.js new file mode 100644 index 0000000..70fa3fb --- /dev/null +++ b/tests/InputFormField.spec.js @@ -0,0 +1,9 @@ +import expect from 'expect.js'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import TestUtils, { Simulate } from 'react-addons-test-utils'; +import InputFormField from '../src'; + +describe('InputFormField', () => { + +}); \ No newline at end of file diff --git a/tests/index.js b/tests/index.js new file mode 100644 index 0000000..d671a52 --- /dev/null +++ b/tests/index.js @@ -0,0 +1,6 @@ +/** + * only require other specs here + */ + + const req = require.context('.', false, /\.spec\.js$/); + req.keys().forEach(req); \ No newline at end of file diff --git a/webpack.dev.js b/webpack.dev.js deleted file mode 100644 index c012da6..0000000 --- a/webpack.dev.js +++ /dev/null @@ -1,75 +0,0 @@ -var fs = require('fs'); -var webpack = require('webpack'); - -// 扫描uxcore组件目录下的所有module -function getUxcoreModuleAlias() { - var alias = {}; - - // 判断是否存在uxcore目录 - if (!fs.existsSync('./uxcore')) return alias; - - var modules = fs.readdirSync('./uxcore'); - modules.forEach(function (name) { - alias[name] = [process.cwd(), 'uxcore', name, 'src'].join('/'); - }); - return alias; -} - -module.exports = { - cache: false, - entry: { - demo: './demo/index' - }, - output: { - path: './dist', - filename: "[name].js", - sourceMapFilename: "[name].js.map" - }, - devtool: '#source-map', // 这个配置要和output.sourceMapFilename一起使用 - module: { - loaders: [ - { - test: /\.js(x)*$/, - // uxcore以外的modules都不需要经过babel解析 - exclude: function (path) { - var isNpmModule = !!path.match(/node_modules/); - var isUxcore = !!path.match(/node_modules[\/\\](@ali[\/\\])?uxcore/); - return isNpmModule & !isUxcore; - }, - loader: 'es3ify-loader' - }, - { - - test: /\.js(x)*$/, - // uxcore以外的modules都不需要经过babel解析 - exclude: function (path) { - var isNpmModule = !!path.match(/node_modules/); - var isUxcore = !!path.match(/node_modules[\/\\](@ali[\/\\])?uxcore/); - return isNpmModule & !isUxcore; - }, - loader: 'babel-loader', - query: { - presets: ['react', 'es2015-loose', 'stage-1'], - plugins: [ - 'add-module-exports' - ] - } - } - ] - }, - resolve: { - alias: getUxcoreModuleAlias() - }, - externals: { - react: 'var React', // 相当于把全局的React作为模块的返回 module.exports = React; - 'react-dom': 'var ReactDOM' - }, - plugins: [ - new webpack.DefinePlugin({ - __LOCAL__: true, // 本地环境 - __DEV__: true, // 日常环境 - __PRO__: false // 生产环境 - }), - new webpack.optimize.DedupePlugin() - ] -}; \ No newline at end of file