ant-design/scripts/demo.js

268 lines
8.2 KiB
JavaScript
Raw Normal View History

function camelize(str) {
2016-01-15 20:10:46 +08:00
return str.replace(/(?:^|[-_])(\w)/g, function (_, c) {
return c ? c.toUpperCase() : '';
});
2015-11-30 14:41:01 +08:00
}
window.require = function (path) {
var result = window;
var namespaces = path.split('/');
namespaces.forEach(function (key, i) {
if (i === 2) {
key = camelize(key);
2015-11-30 14:41:01 +08:00
}
if (key !== 'lib') {
if (result[key]) {
result = result[key];
} else {
throw 'There should not have modules here: ' + path;
}
}
});
return result;
2015-11-28 16:34:20 +08:00
};
2015-11-30 14:41:01 +08:00
require('../style/index.less');
2015-07-07 15:39:21 +08:00
window['css-animation'] = require('css-animation');
window['react-router'] = require('react-router');
2016-01-14 19:15:21 +08:00
window['rc-form'] = require('rc-form');
2015-12-18 11:33:27 +08:00
window.CopyToClipboard = require('react-copy-to-clipboard');
2015-10-20 16:47:55 +08:00
var antd = require('../index');
2015-07-14 20:16:05 +08:00
var React = require('react');
2015-10-20 16:47:55 +08:00
var ReactDOM = require('react-dom');
2015-10-19 18:04:54 +08:00
var semver = require('semver');
2015-10-20 16:47:55 +08:00
window.antd = antd;
2016-01-15 20:10:46 +08:00
window.React = window.react = React;
2015-10-20 16:47:55 +08:00
window.ReactDOM = ReactDOM;
2015-11-16 16:12:39 +08:00
window['object-assign'] = require('object-assign');
window['classnames'] = require('classnames');
2015-12-09 21:49:32 +08:00
window['reqwest'] = require('reqwest');
2016-01-19 16:17:49 +08:00
window['Values'] = require('values.js');
var InstantClick = require('instantclick');
window['InstantClick'] = InstantClick;
2016-01-14 02:37:52 +08:00
require('./home')();
2015-07-14 20:16:05 +08:00
antd.DatePicker.locale = {
en_US: require('../components/date-picker/locale/en_US'),
zh_CN: require('../components/date-picker/locale/zh_CN'),
2015-11-16 20:24:37 +08:00
};
antd.Calendar.locale = {
en_US: require('../components/calendar/locale/en_US'),
zh_CN: require('../components/calendar/locale/zh_CN'),
};
antd.Pagination.locale = {
en_US: require('../components/pagination/locale/en_US'),
zh_CN: require('../components/pagination/locale/zh_CN'),
};
2015-09-11 14:57:32 +08:00
InstantClickChangeFns.push(function () {
// auto complete for components
2015-07-14 20:16:05 +08:00
var Select = antd.Select;
var Option = Select.Option;
// 获取搜索数据
2015-10-20 16:47:55 +08:00
var searchData = window.ANT_COMPONENTS.sort(function (a, b) {
2015-09-02 20:50:18 +08:00
return a.title.localeCompare(b.title);
});
2015-07-14 20:16:05 +08:00
var AutoComplete = React.createClass({
getOptions() {
return searchData.map(function (s) {
2015-07-22 20:57:27 +08:00
return <Option sData={s} key={s.title} text={'跳转到 ' + s.title}>
2015-07-14 20:16:05 +08:00
<strong>{s.title}</strong>
2015-10-20 16:47:55 +08:00
&nbsp;
<span className="ant-component-decs">{s.desc}</span>
2015-07-14 20:16:05 +08:00
</Option>;
});
},
handleSelect(value) {
2015-09-17 18:05:06 +08:00
location.href = rootUrl + '/components/' + value.replace(/([a-z])([A-Z])/g, function (m, m1, m2) {
2015-10-20 16:47:55 +08:00
return m1 + '-' + m2;
}).toLowerCase() + '/';
2015-07-14 20:16:05 +08:00
},
filterOption(input, option) {
return option.props.sData.title.toLowerCase().indexOf(input.toLowerCase()) !== -1 || option.props.sData.desc.indexOf(input) !== -1;
},
render() {
2015-08-26 22:16:20 +08:00
return <Select combobox style={{width: '100%'}}
2015-10-20 16:47:55 +08:00
onSelect={this.handleSelect}
optionLabelProp="text"
dropdownClassName="autoComplete"
searchPlaceholder="搜索组件..."
filterOption={this.filterOption}>{this.getOptions()}</Select>;
2015-07-14 20:16:05 +08:00
}
});
2015-10-21 14:53:48 +08:00
ReactDOM.render(<AutoComplete/>, document.getElementById('autoComplete'));
2015-07-14 20:16:05 +08:00
});
InstantClickChangeFns.push(function () {
2015-11-03 17:35:35 +08:00
var Select = antd.Select;
var Option = Select.Option;
var versionsHistory = {
2015-12-21 17:59:12 +08:00
'0.9.2': '09x.ant.design',
'0.10.4': '010x.ant.design'
};
versionsHistory[antdVersion.latest] =
2015-11-04 21:11:26 +08:00
versionsHistory[antdVersion.latest] || 'ant.design';
2015-10-20 16:47:55 +08:00
var versions = Object.keys(versionsHistory).sort(function (a, b) {
2015-10-19 18:04:54 +08:00
return semver.lt(a, b);
});
2015-10-20 16:47:55 +08:00
var options = versions.map(function (version) {
var link = versionsHistory[version];
2015-11-03 17:35:35 +08:00
return <Option key={version} value={version}>{version}</Option>;
});
2015-10-20 16:47:55 +08:00
2015-11-03 17:35:35 +08:00
function onChange(value) {
if (versionsHistory[value]) {
location.href = location.href.replace(location.host, versionsHistory[value]);
}
}
2015-10-20 16:47:55 +08:00
2015-11-03 17:35:35 +08:00
ReactDOM.render(
2015-12-22 12:18:01 +08:00
<Select defaultValue={antdVersion.latest} size="small"
dropdownMatchSelectWidth={false}
2015-11-03 17:35:35 +08:00
onChange={onChange}>{options}</Select>
2015-11-30 14:41:01 +08:00
, document.getElementById('versions-select'));
});
2015-11-09 21:00:30 +08:00
window.BrowserDemo = React.createClass({
render() {
return (
<article className="window-frame focus">
<header className="top-bar">
<div className="controls">
<div className="control close"></div>
<div className="control minify"></div>
<div className="control expand"></div>
</div>
2015-11-30 14:41:01 +08:00
<input className="address-bar" defaultValue="http://www.example.com"/>
2015-11-09 21:00:30 +08:00
</header>
<section className="window-content">
{this.props.children}
</section>
</article>
);
}
});
2016-01-09 16:04:01 +08:00
const { Modal, Carousel } = antd;
const PriviewImg = React.createClass({
2016-01-06 20:58:35 +08:00
getInitialState() {
return {
2016-01-07 17:00:42 +08:00
visible: false,
2016-01-09 16:04:01 +08:00
current: 0,
2016-01-06 20:58:35 +08:00
};
},
showImageModal() {
this.setState({
visible: true
});
},
handleCancel() {
this.setState({
visible: false
});
},
2016-01-09 16:04:01 +08:00
handleImgChange(current) {
2016-01-15 20:10:46 +08:00
this.setState({current});
2016-01-09 16:04:01 +08:00
},
2016-01-06 20:58:35 +08:00
render() {
2016-01-07 17:00:42 +08:00
const goodCls = this.props.good ? 'good' : '';
const badCls = this.props.bad ? 'bad' : '';
2016-01-09 16:04:01 +08:00
const imgsPack = this.props.imgsPack || [{
2016-01-15 20:10:46 +08:00
src: this.props.src,
alt: this.props.alt,
}];
2016-01-10 19:19:14 +08:00
const imgStyle = {};
if (this.props.noPadding) {
imgStyle.padding = '0';
imgStyle.background = 'none';
}
2016-01-09 16:04:01 +08:00
const current = this.state.current;
2016-01-12 15:51:44 +08:00
const arrows = imgsPack.length > 1;
2016-01-15 20:10:46 +08:00
const createMarkup = () => {
return {__html: this.props.description}
};
2016-01-06 20:58:35 +08:00
return (
2016-01-08 18:10:58 +08:00
<div className="preview-image-box" style={{ width: this.props.width }}>
2016-01-07 17:00:42 +08:00
<div className={`preview-image-wrapper ${goodCls} ${badCls}`}>
2016-01-15 20:10:46 +08:00
<img src={this.props.src} onClick={this.showImageModal} style={imgStyle} alt="Sample Picture"/>
2016-01-07 17:00:42 +08:00
</div>
2016-01-09 16:04:01 +08:00
<div className="preview-image-title">{this.props.alt}</div>
2016-01-15 20:10:46 +08:00
<div className="preview-image-description" dangerouslySetInnerHTML={createMarkup()}/>
<Modal className="image-modal" width="960" visible={this.state.visible} onCancel={this.handleCancel} footer=""
title="">
2016-01-12 15:51:44 +08:00
<Carousel afterChange={this.handleImgChange} adaptiveHeight arrows={arrows}>
2016-01-09 16:04:01 +08:00
{
imgsPack.map((img, i) =>
<div key={i}>
<div className="image-modal-container">
2016-01-15 20:10:46 +08:00
<img src={img.src}/>
2016-01-09 16:04:01 +08:00
</div>
</div>
)
}
</Carousel>
<div className="preview-image-title">{imgsPack[current].alt}</div>
2016-01-06 20:58:35 +08:00
</Modal>
2016-01-07 17:00:42 +08:00
</div>
2016-01-06 20:58:35 +08:00
);
}
});
2016-01-15 20:10:46 +08:00
InstantClickChangeFns.push(function () {
2016-01-07 17:00:42 +08:00
const previewImageBoxes = $('.preview-img').parent();
2016-01-15 20:10:46 +08:00
previewImageBoxes.each(function (i, box) {
2016-01-07 17:00:42 +08:00
box = $(box);
2016-01-09 16:04:01 +08:00
let priviewImgs = [];
2016-01-08 18:10:58 +08:00
const priviewImgNodes = box.find('.preview-img');
2016-01-09 16:04:01 +08:00
// 判断是否要做成图片集合
// 指定了封面图片就是
let coverImg;
2016-01-15 20:10:46 +08:00
priviewImgNodes.each(function (i, img) {
2016-01-09 16:04:01 +08:00
if (img.hasAttribute('as-cover')) {
coverImg = img;
return false;
2016-01-08 18:10:58 +08:00
}
2016-01-09 16:04:01 +08:00
});
if (coverImg) {
const imgs = [];
priviewImgNodes.each((i, img) => imgs.push(img));
2016-01-15 20:10:46 +08:00
priviewImgs = <PriviewImg src={coverImg.src} alt={coverImg.alt} imgsPack={imgs}/>;
2016-01-09 16:04:01 +08:00
} else {
2016-01-15 20:10:46 +08:00
priviewImgNodes.each(function (i, img) {
2016-01-09 16:04:01 +08:00
priviewImgs.push(
2016-01-10 19:19:14 +08:00
<PriviewImg key={i} src={img.src} width={100.0/priviewImgNodes.length + '%'} alt={img.alt}
2016-01-15 20:10:46 +08:00
noPadding={img.hasAttribute('noPadding')} description={img.getAttribute('description')}
good={!!img.hasAttribute('good')} bad={!!img.hasAttribute('bad')}/>
2016-01-09 16:04:01 +08:00
);
});
}
// 计算宽度
2016-01-09 17:31:03 +08:00
let width = '';
2016-01-09 16:04:01 +08:00
if (priviewImgs.length === 1) {
width = priviewImgNodes[0].getAttribute('width') || '';
} else if (coverImg) {
width = coverImg.getAttribute('width');
}
if (width && width.indexOf('%') < 0 && width !== 'auto') {
width += 'px';
2016-01-08 16:01:37 +08:00
}
2016-01-09 16:04:01 +08:00
2016-01-17 15:40:07 +08:00
let mountNode = $('<div class="preview-image-boxes cleafix ' + (coverImg ? 'pack' : '') + '" style="width: ' + width + '"></div>')[0];
2016-01-07 17:00:42 +08:00
box.replaceWith(mountNode);
2016-01-09 16:04:01 +08:00
ReactDOM.render(<span>{priviewImgs}</span>, mountNode);
2016-01-06 20:58:35 +08:00
});
});
2016-01-15 16:34:49 +08:00
antd.version = require('../package.json').version;
2015-07-21 16:05:13 +08:00
module.exports = antd;