From a2ac7ff568dbb291a4cddf241a395c6ae4c64653 Mon Sep 17 00:00:00 2001 From: afc163 Date: Wed, 4 Nov 2015 14:59:55 +0800 Subject: [PATCH] update clip --- package.json | 4 +-- scripts/clip.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ scripts/demo.js | 3 +- spec/colors.md | 10 +++---- 4 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 scripts/clip.js diff --git a/package.json b/package.json index 9902d07d57..03154e6ab3 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "babel-loader": "^5.3.2", "busboy": "^0.2.9", "chalk": "^1.1.0", + "clipboard": "~1.5.3", "css-loader": "^0.14.1", "eslint": "^1.1.0", "eslint-config-airbnb": "^0.1.0", @@ -87,13 +88,11 @@ "jest-cli": "~0.6.1", "json-loader": "^0.5.1", "less-loader": "^2.2.0", - "lesslint": "^0.1.7", "lodash": "^3.10.0", "nico-jsx": "~0.6.0", "precommit-hook": "^1.0.7", "react": "~0.14.1", "react-addons-test-utils": "~0.14.1", - "react-clip": "^0.1.4", "react-dom": "~0.14.1", "react-router": "1.0.0-rc3", "webpack": "^1.10.1", @@ -107,7 +106,6 @@ "deploy": "rm -rf node_modules && node scripts/install.js && npm run just-deploy", "just-deploy": "npm run clean && webpack --config webpack.deploy.config.js && NODE_ENV=PRODUCTION nico build && node scripts/deploy.js", "lint": "eslint components index.js --ext '.js,.jsx'", - "lesslint": "lesslint style", "test": "npm run lint && webpack && npm run jest", "jest": "jest", "pub": "sh ./scripts/publish.sh", diff --git a/scripts/clip.js b/scripts/clip.js new file mode 100644 index 0000000000..a6b9f9f27a --- /dev/null +++ b/scripts/clip.js @@ -0,0 +1,75 @@ +import React from 'react'; +import Clipboard from 'clipboard'; + +let counter = 0; + +class Clip extends React.Component { + static propTypes: { + options: React.PropTypes.object, + } + + /* Returns a object with all props that fulfill a certain naming pattern + * + * @param {RegExp} regexp - Regular expression representing which pattern + * you'll be searching for. + * @param {Boolean} remove - Determines if the regular expression should be + * removed when transmitting the key from the props + * to the new object. + * + * e.g: + * + * // Considering: + * // this.props = {option-foo: 1, onBar: 2, data-foobar: 3 data-baz: 4}; + * + * // *RegExps not using // so that this comment doesn't break up + * this.propsWith(option-*, true); // returns {foo: 1} + * this.propsWith(on*, true); // returns {Bar: 2} + * this.propsWith(data-*); // returns {data-foobar: 1, data-baz: 4} + */ + propsWith(regexp, remove=false) { + let object = {}; + + Object.keys(this.props).forEach(function(key) { + if (key.search(regexp) !== -1) { + let objectKey = remove ? key.replace(regexp, '') : key; + object[objectKey] = this.props[key]; + } + }, this); + + return object; + } + + constructor(props) { + super(props); + this.id = `__react_clipboard_${counter++}__`; + } + + componentDidMount() { + // Support old API by trying to assign this.props.options first; + let options = this.props.options || this.propsWith(/^option-/, true); + this.clipboard = new Clipboard(`#${this.id}`, options); + + let callbacks = this.propsWith(/^on/, true); + Object.keys(callbacks).forEach(function(callback) { + this.clipboard.on(callback.toLowerCase(), this.props['on' + callback]); + }, this); + } + + render() { + let dataAttributes = this.propsWith(/^data-/); + let attributes = this.propsWith(/^span-/, true); + return ( + + {this.props.children} + + ); + } +} + +export default Clip; diff --git a/scripts/demo.js b/scripts/demo.js index eeaf59d85f..08e3594c2c 100644 --- a/scripts/demo.js +++ b/scripts/demo.js @@ -1,6 +1,7 @@ window['css-animation'] = require('css-animation'); window['react-router'] = require('react-router'); -window.Clip = require('react-clip'); +window.Clipboard = require('clipboard'); +window.Clip = require('./clip'); var antd = require('../index'); var React = require('react'); var ReactDOM = require('react-dom'); diff --git a/spec/colors.md b/spec/colors.md index 7a4f2e6471..3b90a58044 100644 --- a/spec/colors.md +++ b/spec/colors.md @@ -252,12 +252,12 @@ let TintShadeTool = React.createClass({ render() { return
- -
+ + +
+
- - {this.state.result} - + {this.state.result} % -- GitLab