v1.0.0.0727
1. 新增单选模式, {radio: true|false} 2. 新增重复选模式, {repeat: true|false} 3. 新增配置, 可以控制是否自动关闭下拉框, {clickClose: true|false} 4. 新增on方法, 可以监听已选择数据, data: {arr, item, selected}
This commit is contained in:
parent
ba563c67c4
commit
d54aa08565
2
dist/xm-select.js
vendored
2
dist/xm-select.js
vendored
File diff suppressed because one or more lines are too long
643
docs/data.js
Normal file
643
docs/data.js
Normal file
@ -0,0 +1,643 @@
|
||||
window.data = [
|
||||
{ html: `
|
||||
<a href='https://gitee.com/maplemei/xm-select'><img src='https://gitee.com/maplemei/xm-select/widgets/widget_6.svg' alt='Fork me on Gitee'></img></a>
|
||||
<p>xm-select始于layui, 前身formSelects, 此版本引入第三方preact库, 利用jsx渲染页面结构</p>
|
||||
<p>作者: 热爱前端的Java程序猿</p>
|
||||
<p>QQ号: 707200833</p>
|
||||
<p>QQ群: 769620939</p>
|
||||
<a target="_blank" class="qqicon" href="https://shang.qq.com/wpa/qunwpa?idkey=9f9d4de074f2cb4d13afb3f04b874742a5f400eac2c0648fcfd20afb5413fb0a"><img border="0" src="docs/group.png" alt="技术交流群" title="技术交流群"></a>
|
||||
<div class="example">
|
||||
<p>↓↓↓ 捐赠作者 ↓↓↓</p>
|
||||
<p>
|
||||
<img src="docs/wx.jpg" width="230px" style="border: 1px solid #009688">
|
||||
</p>
|
||||
<p>你们的支持, 是我们坚持的动力</p>
|
||||
</div>
|
||||
<div id="test01"></div>
|
||||
`, js: `
|
||||
xmSelect.render({
|
||||
// 这里是指定渲染的地方
|
||||
el: '#test01',
|
||||
// 这里是渲染的数据
|
||||
data: [{name: '水果', value: 1}, {name: '蔬菜', value: 2}]
|
||||
})
|
||||
`, comment: `
|
||||
简单的使用方法:
|
||||
1. 引入xm-select.js文件
|
||||
2. <div id="test01"></div>
|
||||
3. 使用js渲染指定元素
|
||||
`, brush: 'html', title: '简介'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<p>如果有bug欢迎提issues, 或者在群内@群主进行反馈</p>
|
||||
|
||||
<h3>更新日志</h3>
|
||||
`, js: ``, comment: `
|
||||
[2019-07-27] v1.0.0.0727
|
||||
1. 新增单选模式, {radio: true|false}
|
||||
2. 新增重复选模式, {repeat: true|false}
|
||||
3. 新增配置, 可以控制是否自动关闭下拉框, {clickClose: true|false}
|
||||
4. 新增on方法, 可以监听已选择数据, data: {arr, item, selected}
|
||||
|
||||
更新文档演示
|
||||
|
||||
[---] v1.0.0
|
||||
很久很久以前...
|
||||
|
||||
`, brush: 'html', title: '更新日志'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>默认配置项options</h3>
|
||||
`, comment: `
|
||||
{
|
||||
//多选数据
|
||||
data: [],
|
||||
//默认选中数据, 优先级大于selected
|
||||
initValue: null,
|
||||
//默认提示
|
||||
tips: '请选择', //please selected
|
||||
//空数据提示
|
||||
empty: '暂无数据', //no data
|
||||
//搜索延迟 ms
|
||||
delay: 500,
|
||||
//搜索默认提示
|
||||
searchTips: setting.searchTips,
|
||||
//是否开始本地搜索
|
||||
filterable: false,
|
||||
//本地搜索过滤方法
|
||||
filterMethod: function(val, item, index, prop){
|
||||
if(!val) return true;
|
||||
return item[prop.name].indexOf(val) != -1;
|
||||
},
|
||||
//下拉方向
|
||||
direction: 'auto',
|
||||
//自定义样式
|
||||
style: {},
|
||||
//是否开启单选模式
|
||||
radio: false,
|
||||
//是否开启重复选模式
|
||||
repeat: false,
|
||||
//是否点击选项后自动关闭下拉框
|
||||
clickClose: false,
|
||||
//自定义属性名称
|
||||
prop: {
|
||||
name: 'name',
|
||||
value: 'value',
|
||||
selected: 'selected',
|
||||
disabled: 'disabled',
|
||||
},
|
||||
//主题配置
|
||||
theme: {
|
||||
color: '#009688',
|
||||
},
|
||||
//模型
|
||||
model: {
|
||||
label: {
|
||||
type: 'block',
|
||||
text: {
|
||||
left: '',
|
||||
right: '',
|
||||
separator: ', ',
|
||||
},
|
||||
block: {
|
||||
showCount: 0,
|
||||
showIcon: true,
|
||||
},
|
||||
count: {
|
||||
template(data, sels){
|
||||
return '已选中 '+sels.length+' 项, 共 '+data.length+' 项'
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// 展开下拉框
|
||||
show(){
|
||||
|
||||
},
|
||||
// 隐藏下拉框
|
||||
hidn(){
|
||||
|
||||
},
|
||||
// 模板组成, 当前option数据, 已经选中的数据, name, value
|
||||
template({ item, sels, name, value }){
|
||||
return name;
|
||||
},
|
||||
//监听选中事件
|
||||
on({ arr, item, selected }){
|
||||
|
||||
}
|
||||
}
|
||||
`, brush: 'js', title: '默认配置项'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>所有的方法</h3>
|
||||
`, comment: `
|
||||
//更新组件
|
||||
xmSelect: update(options)
|
||||
|
||||
//重置组件
|
||||
xmSelect: reset()
|
||||
|
||||
//重新渲染
|
||||
xmSelect: render(options)
|
||||
|
||||
//主动关闭
|
||||
xmSelect: opened()
|
||||
|
||||
//主动关闭
|
||||
xmSelect: closed()
|
||||
|
||||
//获取已选中数据
|
||||
xmSelect: getValue()
|
||||
|
||||
//设置选中数据, array: 选中数据, show: 是否展开下拉框
|
||||
xmSelect: setValue(array, show)
|
||||
`, brush: 'js', title: '所有的方法method'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>这是一个国语版</h3>
|
||||
<div id="demo1"></div>
|
||||
`, js: `
|
||||
var demo1 = xmSelect.render({
|
||||
el: '#demo1',
|
||||
language: 'zn',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
})
|
||||
`, brush: 'js', title: '这是一个国语版'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>这是一个国际版(English)</h3>
|
||||
<div id="demo2"></div>
|
||||
`, js: `
|
||||
var demo02 = xmSelect.render({
|
||||
el: '#demo2',
|
||||
language: 'en',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
})
|
||||
`, brush: 'js', title: '这是一个国际版(English)'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>有基础数据</h3>
|
||||
<div id="demo3"></div>
|
||||
`, js: `
|
||||
var demo3 = xmSelect.render({
|
||||
el: '#demo3',
|
||||
data: [
|
||||
{name: '水果', value: 1},
|
||||
{name: '蔬菜', value: 2},
|
||||
{name: '桌子', value: 3},
|
||||
]
|
||||
})
|
||||
`, brush: 'js', title: '有基础数据'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>有选中, 禁用的</h3>
|
||||
<div id="demo4"></div>
|
||||
`, js: `
|
||||
var demo4 = xmSelect.render({
|
||||
el: '#demo4',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
]
|
||||
})
|
||||
`, brush: 'js', title: '有选中, 禁用的'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自定义key</h3>
|
||||
<div id="demo5"></div>
|
||||
`, js: `
|
||||
var demo5 = xmSelect.render({
|
||||
el: '#demo5',
|
||||
data: [
|
||||
{label: '水果', val: 1, sel: true, dis: true},
|
||||
{label: '蔬菜', val: 2, sel: true},
|
||||
{label: '桌子', val: 3, dis: true},
|
||||
{label: '北京', val: 4},
|
||||
],
|
||||
prop: {
|
||||
name: 'label',
|
||||
value: 'val',
|
||||
selected: 'sel',
|
||||
disabled: 'dis'
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '自定义key'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>使用template自己构建选项1</h3>
|
||||
<div id="demo6"></div>
|
||||
`, js: `
|
||||
var demo6 = xmSelect.render({
|
||||
el: '#demo6',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
template: function({item, arr, name, value}){
|
||||
return name + '<span style="color: red; margin-left: 20px;">'+value+'</span>'
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '使用template自己构建选项1'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>使用template自己构建选项2</h3>
|
||||
<div id="demo7"></div>
|
||||
`, js: `
|
||||
var demo7 = xmSelect.render({
|
||||
el: '#demo7',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
template: function({item, arr, name, value}){
|
||||
return name + '<span style="position: absolute; right: 10px; color: red">'+value+'</span>'
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '使用template自己构建选项2'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>简单的展示形式1</h3>
|
||||
<div id="demo8"></div>
|
||||
`, js: `
|
||||
var demo8 = xmSelect.render({
|
||||
el: '#demo8',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'text',
|
||||
text: {
|
||||
left: '<',
|
||||
right: '>',
|
||||
separator: ', ',
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '简单的展示形式1'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>简单的展示形式2</h3>
|
||||
<div id="demo9"></div>
|
||||
`, js: `
|
||||
var demo9 = xmSelect.render({
|
||||
el: '#demo9',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'count',
|
||||
count: {
|
||||
template: function({data, arr}){
|
||||
return "已选中 " + arr.length + " 项, 共 " + data.length + " 项"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '简单的展示形式2'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自定义展示</h3>
|
||||
<div id="demo10"></div>
|
||||
`, js: `
|
||||
var demo10 = xmSelect.render({
|
||||
el: '#demo10',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'count',
|
||||
count: {
|
||||
template: function({data, arr}){
|
||||
return "我是自定义的... 已选中 " + arr.length + " 项, 共 " + data.length + " 项"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '自定义展示'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>多余的用 +隐藏</h3>
|
||||
<div id="demo11"></div>
|
||||
`, js: `
|
||||
var demo11 = xmSelect.render({
|
||||
el: '#demo11',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'block',
|
||||
block: {
|
||||
showCount: 1,
|
||||
showIcon: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '多余的用 +隐藏'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>不显示删除图标</h3>
|
||||
<div id="demo12"></div>
|
||||
`, js: `
|
||||
var demo12 = xmSelect.render({
|
||||
el: '#demo12',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'block',
|
||||
block: {
|
||||
showCount: 1,
|
||||
showIcon: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '不显示删除图标'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>换一个主题</h3>
|
||||
<div id="demo13"></div>
|
||||
`, js: `
|
||||
var demo13 = xmSelect.render({
|
||||
el: '#demo13',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
theme: {
|
||||
color: 'red',
|
||||
},
|
||||
})
|
||||
`, brush: 'js', title: '换一个主题'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>开启搜索模式</h3>
|
||||
<div id="demo14"></div>
|
||||
`, js: `
|
||||
var demo14 = xmSelect.render({
|
||||
el: '#demo14',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
})
|
||||
`, brush: 'js', title: '开启搜索模式'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自定义搜索方法</h3>
|
||||
<div id="demo15"></div>
|
||||
`, js: `
|
||||
var demo15 = xmSelect.render({
|
||||
el: '#demo15',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
filterMethod: function(val, item, index, prop){
|
||||
if(!val) return true;
|
||||
return item[prop.name].indexOf(val) != -1;
|
||||
},
|
||||
})
|
||||
`, brush: 'js', title: '自定义搜索方法'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自定义搜索延迟 和 提示</h3>
|
||||
<div id="demo16"></div>
|
||||
`, js: `
|
||||
var demo16 = xmSelect.render({
|
||||
el: '#demo16',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
delay: 2000,
|
||||
searchTips: '搜索呀 搜索呀...',
|
||||
})
|
||||
`, brush: 'js', title: '自定义搜索延迟 和 提示'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>1000条数据测试</h3>
|
||||
<div id="demo17"></div>
|
||||
`, js: `
|
||||
var startTime = Date.now();
|
||||
var demo17 = xmSelect.render({
|
||||
el: '#demo17',
|
||||
data: ''.padEnd(1000, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
})
|
||||
console.log('1000条数据渲染耗时: ' + (Date.now() - startTime) + 'ms');
|
||||
`, brush: 'js', title: '1000条数据测试'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自动判断下拉方向</h3>
|
||||
<div id="demo18"></div>
|
||||
`, js: `
|
||||
var demo18 = xmSelect.render({
|
||||
el: '#demo18',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'auto',
|
||||
})
|
||||
`, brush: 'js', title: '自动判断下拉方向'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>只会往下</h3>
|
||||
<div id="demo19"></div>
|
||||
`, js: `
|
||||
var demo19 = xmSelect.render({
|
||||
el: '#demo19',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'down',
|
||||
})
|
||||
`, brush: 'js', title: '只会往下'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>只会往上</h3>
|
||||
<div id="demo20"></div>
|
||||
`, js: `
|
||||
var demo20 = xmSelect.render({
|
||||
el: '#demo20',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'up',
|
||||
})
|
||||
`, brush: 'js', title: '只会往上'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>自定义style样式</h3>
|
||||
<div id="demo21"></div>
|
||||
`, js: `
|
||||
var demo21 = xmSelect.render({
|
||||
el: '#demo21',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
style: {
|
||||
width: '200px',
|
||||
marginLeft: '20px',
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '自定义style样式'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>单选模式</h3>
|
||||
<div id="demo22"></div>
|
||||
`, js: `
|
||||
var demo22 = xmSelect.render({
|
||||
el: '#demo22',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
radio: true,
|
||||
clickClose: true,
|
||||
})
|
||||
`, brush: 'js', title: '单选模式'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>重复选模式</h3>
|
||||
<div id="demo23"></div>
|
||||
`, js: `
|
||||
var demo23 = xmSelect.render({
|
||||
el: '#demo23',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
repeat: true,
|
||||
})
|
||||
`, brush: 'js', title: '重复选模式'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>多选选完即关闭下拉选</h3>
|
||||
<div id="demo24"></div>
|
||||
`, js: `
|
||||
var demo24 = xmSelect.render({
|
||||
el: '#demo24',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
clickClose: true,
|
||||
})
|
||||
`, brush: 'js', title: '多选选完即关闭下拉选'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>监听已选择数据</h3>
|
||||
<div id="demo25"></div>
|
||||
`, js: `
|
||||
var demo25 = xmSelect.render({
|
||||
el: '#demo25',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
on: function({ arr, item, selected }){
|
||||
console.log('已选择: ', arr);
|
||||
console.log('点击选项: ', item);
|
||||
console.log('点击状态: ', selected);
|
||||
alert('选择: ' + JSON.stringify(item) + ', 状态: ' + selected);
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '监听已选择数据on'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>监听下拉框的打开与关闭</h3>
|
||||
<div id="demo26"></div>
|
||||
`, js: `
|
||||
var demo26 = xmSelect.render({
|
||||
el: '#demo26',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
show: function(){
|
||||
alert('打开了');
|
||||
},
|
||||
hidn: function(){
|
||||
alert('关闭了');
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '监听下拉框的打开与关闭'},
|
||||
|
||||
|
||||
{ html: `
|
||||
<h3>控制下拉框的打开与关闭</h3>
|
||||
<div id="demo27"></div>
|
||||
`, js: `
|
||||
var demo27 = xmSelect.render({
|
||||
el: '#demo27',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
show: function(){
|
||||
//这里也可以组件受控
|
||||
//return false;
|
||||
},
|
||||
hidn: function(){
|
||||
var arr = demo27.getValue();
|
||||
//如果已选择数据小于1, 则不会关闭下拉框
|
||||
if(arr.length < 1){
|
||||
return false;//组件受控
|
||||
}
|
||||
}
|
||||
})
|
||||
`, brush: 'js', title: '控制下拉框的打开与关闭'},
|
||||
|
||||
|
||||
];
|
315
docs/fathom/fathom.min.js
vendored
Executable file
315
docs/fathom/fathom.min.js
vendored
Executable file
@ -0,0 +1,315 @@
|
||||
(function($, window, undefined) {
|
||||
var Fathom = function(container, options) {
|
||||
this.container = container;
|
||||
this.options = options;
|
||||
return this.init()
|
||||
},
|
||||
$window = $(window),
|
||||
$document = $(document);
|
||||
Fathom.prototype = {
|
||||
defaults: {
|
||||
portable: undefined,
|
||||
portableTagName: "div",
|
||||
portableClass: "fathom-container",
|
||||
displayMode: "single",
|
||||
slideTagName: "div",
|
||||
slideClass: "slide",
|
||||
activeClass: "activeslide",
|
||||
inactiveClass: "inactiveslide",
|
||||
margin: 100,
|
||||
onScrollInterval: 300,
|
||||
scrollLength: 600,
|
||||
easing: "swing",
|
||||
timeline: undefined,
|
||||
video: undefined,
|
||||
onActivateSlide: undefined,
|
||||
onDeactivateSlide: undefined
|
||||
},
|
||||
init: function() {
|
||||
this.config = $.extend({}, this.defaults, this.options);
|
||||
this.$container = $(this.container);
|
||||
this.$slides = this.$container.find(this.config.slideTagName + (this.config.slideClass ? "." + this.config.slideClass :
|
||||
""));
|
||||
this.$firstSlide = this.$slides.filter(":first");
|
||||
this.$lastSlide = this.$slides.filter(":last");
|
||||
this.$activeSlide = this.activateSlide(this.$firstSlide);
|
||||
return this._detectPortable()._setStyles()._setClasses()._setMargins()._setupEvents()._setupTimeline()._setupVideo()
|
||||
._setupScrollHandler()
|
||||
},
|
||||
nextSlide: function() {
|
||||
return this.scrollToSlide(this.$activeSlide.next())
|
||||
},
|
||||
prevSlide: function() {
|
||||
return this.scrollToSlide(this.$activeSlide.prev())
|
||||
},
|
||||
scrollToSlide: function($elem) {
|
||||
var self = this,
|
||||
$scrollingElement = this.config.portable ? this.$portableContainer : $("html,body"),
|
||||
$container = this.config.portable ? this.$portableContainer : $window,
|
||||
portableScrollLeft = this.config.portable ? this.$portableContainer.scrollLeft() : 0;
|
||||
if ($elem.length !== 1) {
|
||||
return $elem
|
||||
}
|
||||
this.isAutoScrolling = true;
|
||||
$scrollingElement.stop().animate({
|
||||
scrollLeft: $elem.position().left + portableScrollLeft - ($container.width() - $elem.innerWidth()) / 2
|
||||
}, self.config.scrollLength, self.config.easing, function() {
|
||||
self.isAutoScrolling = false
|
||||
});
|
||||
return this.activateSlide($elem)
|
||||
},
|
||||
activateSlide: function($elem) {
|
||||
var elem = $elem.get(0),
|
||||
activeSlide;
|
||||
if (this.$activeSlide !== undefined) {
|
||||
activeSlide = this.$activeSlide.get(0);
|
||||
if (activeSlide === elem) {
|
||||
return $elem
|
||||
}
|
||||
this.$activeSlide.removeClass(this.config.activeClass).addClass(this.config.inactiveClass).trigger(
|
||||
"deactivateslide.fathom");
|
||||
if (typeof this.config.onDeactivateSlide === "function") {
|
||||
this.config.onDeactivateSlide.call(activeSlide)
|
||||
}
|
||||
}
|
||||
$elem.removeClass(this.config.inactiveClass).addClass(this.config.activeClass);
|
||||
this.$activeSlide = $elem;
|
||||
$elem.trigger("activateslide.fathom");
|
||||
if (typeof this.config.onActivateSlide === "function") {
|
||||
this.config.onActivateSlide.call(elem)
|
||||
}
|
||||
return $elem
|
||||
},
|
||||
setTime: function(t) {
|
||||
var times = this._timeline || [];
|
||||
for (var i = 0; i < times.length; i++) {
|
||||
if (times[i].time <= t && times[i + 1].time > t) {
|
||||
if (this.$activeSlide[0] !== times[i].slide[0]) {
|
||||
this.scrollToSlide(times[i].slide)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
_detectPortable: function() {
|
||||
if (this.config.portable === undefined) {
|
||||
if (this.$container.parent().is("body")) {
|
||||
this.config.portable = false
|
||||
} else {
|
||||
this.config.portable = true
|
||||
}
|
||||
}
|
||||
return this
|
||||
},
|
||||
_setupEvents: function() {
|
||||
var self = this;
|
||||
this.$container.delegate(this.config.slideTagName + "." + this.config.inactiveClass, "click", function(event) {
|
||||
event.preventDefault();
|
||||
self.scrollToSlide($(this))
|
||||
});
|
||||
$document.keydown(function(event) {
|
||||
var key = event.which;
|
||||
if (key === 39 || key === 32) {
|
||||
event.preventDefault();
|
||||
self.nextSlide()
|
||||
} else if (key === 37) {
|
||||
event.preventDefault();
|
||||
self.prevSlide()
|
||||
}
|
||||
});
|
||||
$window.resize(function() {
|
||||
self._setMargins()
|
||||
});
|
||||
return this
|
||||
},
|
||||
_setStyles: function() {
|
||||
this.$container.css("white-space", "nowrap");
|
||||
this.$slides.css({
|
||||
"white-space": "normal",
|
||||
display: "inline-block",
|
||||
"vertical-align": "top"
|
||||
});
|
||||
if (this.config.portable) {
|
||||
this.$portableContainer = $("<" + this.config.portableTagName + ' class="' + this.config.portableClass + '" />');
|
||||
this.$container.before(this.$portableContainer).appendTo(this.$portableContainer)
|
||||
}
|
||||
return this
|
||||
},
|
||||
_setClasses: function() {
|
||||
this.$slides.addClass(this.config.inactiveClass);
|
||||
this.$activeSlide.removeClass(this.config.inactiveClass).addClass(this.config.activeClass);
|
||||
return this
|
||||
},
|
||||
_setMargins: function() {
|
||||
var displayMode = this.config.displayMode,
|
||||
$container = this.config.portable ? this.$portableContainer : $window,
|
||||
containerWidth = $container.width(),
|
||||
verticalSpacing = Math.ceil(($container.height() - this.$firstSlide.innerHeight()) / 2),
|
||||
firstSlideSpacing = Math.ceil((containerWidth - this.$firstSlide.innerWidth()) / 2),
|
||||
lastSlideSpacing = Math.ceil((containerWidth - this.$lastSlide.innerWidth()) / 2),
|
||||
peekabooWidth = Math.ceil(containerWidth / 25);
|
||||
this.$container.css("margin-top", verticalSpacing);
|
||||
if (displayMode === "single") {
|
||||
this.$slides.css("margin-right", firstSlideSpacing)
|
||||
} else if (displayMode === "multi") {
|
||||
this.$slides.css("margin-right", this.config.margin)
|
||||
}
|
||||
this.$firstSlide.css("margin-left", firstSlideSpacing);
|
||||
this.$lastSlide.css("margin-right", lastSlideSpacing);
|
||||
if (this.config.portable) {
|
||||
var slidesWidth = parseInt(this.$container.css("padding-left")) + parseInt(this.$container.css("padding-right"));
|
||||
this.$slides.each(function() {
|
||||
slidesWidth += $(this).outerWidth(true)
|
||||
});
|
||||
this.$container.width(slidesWidth)
|
||||
}
|
||||
return this
|
||||
},
|
||||
_setupTimeline: function() {
|
||||
var slides = this.$slides;
|
||||
|
||||
function parseTime(point) {
|
||||
for (var m = (point.time || point).toString().match(/(((\d+):)?(\d+):)?(\d+)/), a = 0, i = 3; i <= 5; i++) {
|
||||
a = a * 60 + parseInt(m[i] || 0)
|
||||
}
|
||||
return a
|
||||
}
|
||||
var currentSlide = -1;
|
||||
|
||||
function parseSlide(point) {
|
||||
if (point.slide == null) {
|
||||
currentSlide++
|
||||
} else if ($.type(point.slide) === "number") {
|
||||
currentSlide = point.slide
|
||||
} else {
|
||||
for (var match = slides.filter(point.slide)[0], i = 0; i < slides.length; i++) {
|
||||
if (slides[i] === match) {
|
||||
currentSlide = i;
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return slides.eq(currentSlide)
|
||||
}
|
||||
if (!this.config.timeline) return this;
|
||||
this._timeline = [];
|
||||
for (var t = this.config.timeline, i = 0; i < t.length; i++) {
|
||||
this._timeline.push({
|
||||
time: parseTime(t[i]),
|
||||
slide: parseSlide(t[i])
|
||||
})
|
||||
}
|
||||
this._timeline.push({
|
||||
time: 99999,
|
||||
slide: t[0].slide
|
||||
});
|
||||
return this
|
||||
},
|
||||
_setupVideo: function() {
|
||||
if (!this.config.video) {
|
||||
this._setupDefaultTimeSource()
|
||||
} else if (this.config.video.source === "vimeo") {
|
||||
this._setupVimeoVideo(this.config.video)
|
||||
} else {
|
||||
throw "unknown video source, not supported"
|
||||
}
|
||||
return this
|
||||
},
|
||||
_setupDefaultTimeSource: function() {
|
||||
var self = this,
|
||||
t0 = (new Date).getTime();
|
||||
setInterval(function() {
|
||||
var t1 = (new Date).getTime();
|
||||
self.setTime((t1 - t0) / 1e3)
|
||||
}, 250)
|
||||
},
|
||||
_setupVimeoVideo: function(vid) {
|
||||
var self = this,
|
||||
vid = this.config.video,
|
||||
downgrade = false;
|
||||
if (window.location.protocol === "file:") {
|
||||
"console" in window && console.log(
|
||||
"vimeo video player api does not work with local files. Downgrading video support\nsee http://vimeo.com/api/docs/player-js"
|
||||
);
|
||||
downgrade = true
|
||||
}
|
||||
|
||||
function loadFrame() {
|
||||
var id = "p" + vid.id;
|
||||
var frameSrc = '<iframe id="' + id + '" width="' + (vid.width || 360) + '" height="' + (vid.height || 203) +
|
||||
'" frameborder="0" src="http://player.vimeo.com/video/' + vid.id + "?api=1&player_id=" + id + '">';
|
||||
return $(frameSrc).appendTo(vid.parent || "body")[0]
|
||||
}
|
||||
if (downgrade) {
|
||||
$(loadFrame()).bind("load", function() {
|
||||
self._setupDefaultTimeSource()
|
||||
})
|
||||
} else {
|
||||
$.getScript("http://a.vimeocdn.com/js/froogaloop2.min.js?", function() {
|
||||
$f(loadFrame()).addEvent("ready", function(player_id) {
|
||||
var vimeo = $f(player_id),
|
||||
timer = false;
|
||||
vimeo.addEvent("play", function(data) {
|
||||
if (timer === false) {
|
||||
timer = setInterval(function() {
|
||||
vimeo.api("getCurrentTime", function(value, player_id) {
|
||||
self.setTime(value)
|
||||
})
|
||||
}, 250)
|
||||
}
|
||||
});
|
||||
vimeo.addEvent("pause", function(data) {
|
||||
clearInterval(timer);
|
||||
timer = false
|
||||
});
|
||||
vid.autoplay && vimeo.api("play")
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
_setupScrollHandler: function() {
|
||||
var self = this,
|
||||
slideSelector = self.config.slideTagName + (self.config.slideClass ? "." + self.config.slideClass : ""),
|
||||
$scrollContainer = this.config.portable ? this.$portableContainer : $window,
|
||||
isIOS = navigator.userAgent.match(/like Mac OS X/i) === null ? false : true,
|
||||
$elem;
|
||||
self.scrolling = false;
|
||||
setInterval(function() {
|
||||
if (self.scrolling && (self.isAutoScrolling === false || self.isAutoScrolling === undefined)) {
|
||||
self.scrolling = false;
|
||||
if ($scrollContainer.scrollLeft() === 0) {
|
||||
self.activateSlide(self.$firstSlide)
|
||||
} else {
|
||||
var offsetX = self.config.portable ? $scrollContainer.position().left : 0,
|
||||
offsetY = self.config.portable ? $scrollContainer.position().top : 0,
|
||||
midpoint = {
|
||||
x: offsetX + $scrollContainer.width() / 2 + (isIOS ? $window.scrollLeft() : 0),
|
||||
y: offsetY + $scrollContainer.height() / 2 + (isIOS ? $window.scrollTop() : 0)
|
||||
};
|
||||
$elem = $(document.elementFromPoint(midpoint.x, midpoint.y));
|
||||
if ($elem.is(slideSelector)) {
|
||||
self.activateSlide($elem)
|
||||
} else {
|
||||
$elem = $elem.parents(slideSelector + ":first").each(function() {
|
||||
self.activateSlide($(this))
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}, self.config.onScrollInterval);
|
||||
$scrollContainer.scroll(function() {
|
||||
self.scrolling = true
|
||||
});
|
||||
return this
|
||||
}
|
||||
};
|
||||
$.fn.fathom = function(options) {
|
||||
new Fathom(this, options);
|
||||
return this
|
||||
};
|
||||
Fathom.defaults = Fathom.prototype.defaults;
|
||||
Fathom.setDefaults = function(options) {
|
||||
$.extend(Fathom.defaults, options)
|
||||
};
|
||||
window.Fathom = Fathom
|
||||
})(jQuery, window);
|
95
docs/fathom/fathom.sample.css
Executable file
95
docs/fathom/fathom.sample.css
Executable file
@ -0,0 +1,95 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
input:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
#presentation {
|
||||
vertical-align: top;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div.slide {
|
||||
-webkit-box-shadow: 0 0 50px #c0c0c0;
|
||||
-moz-box-shadow: 0 0 50px #c0c0c0;
|
||||
box-shadow: 0 0 50px #c0c0c0;
|
||||
-moz-border-radius: 20px;
|
||||
-webkit-border-radius: 20px;
|
||||
border-radius: 20px;
|
||||
-moz-background-clip: padding;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
display: inline-block;
|
||||
height: 700px;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
vertical-align: top;
|
||||
width: 900px;
|
||||
}
|
||||
div.inactiveslide {
|
||||
opacity: 0.4;
|
||||
}
|
||||
div.activeslide {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* iPad */
|
||||
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
|
||||
div.inactiveslide {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* iPhone */
|
||||
@media only screen and (max-device-width: 480px) {
|
||||
div.inactiveslide {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
BIN
docs/group.png
Normal file
BIN
docs/group.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
43
docs/highlighter/shBrushBash.js
vendored
Executable file
43
docs/highlighter/shBrushBash.js
vendored
Executable file
@ -0,0 +1,43 @@
|
||||
;(function()
|
||||
{
|
||||
// CommonJS
|
||||
typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
|
||||
|
||||
function Brush()
|
||||
{
|
||||
var keywords = 'if fi then elif else for do done until while break continue case function return in eq ne ge le';
|
||||
var commands = 'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +
|
||||
'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +
|
||||
'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +
|
||||
'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +
|
||||
'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +
|
||||
'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +
|
||||
'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +
|
||||
'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +
|
||||
'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +
|
||||
'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +
|
||||
'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +
|
||||
'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +
|
||||
'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +
|
||||
'vi watch wc whereis which who whoami Wget xargs yes'
|
||||
;
|
||||
|
||||
this.regexList = [
|
||||
{ regex: /^#!.*$/gm, css: 'preprocessor bold' },
|
||||
{ regex: /\/[\w-\/]+/gm, css: 'plain' },
|
||||
{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' }, // one line comments
|
||||
{ regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // double quoted strings
|
||||
{ regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // single quoted strings
|
||||
{ regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
|
||||
{ regex: new RegExp(this.getKeywords(commands), 'gm'), css: 'functions' } // commands
|
||||
];
|
||||
}
|
||||
|
||||
Brush.prototype = new SyntaxHighlighter.Highlighter();
|
||||
Brush.aliases = ['bash', 'shell'];
|
||||
|
||||
SyntaxHighlighter.brushes.Bash = Brush;
|
||||
|
||||
// CommonJS
|
||||
typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
|
||||
})();
|
52
docs/highlighter/shBrushJScript.js
vendored
Normal file
52
docs/highlighter/shBrushJScript.js
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
/**
|
||||
* SyntaxHighlighter
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter
|
||||
*
|
||||
* SyntaxHighlighter is donationware. If you are using it, please donate.
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
|
||||
*
|
||||
* @version
|
||||
* 3.0.83 (July 02 2010)
|
||||
*
|
||||
* @copyright
|
||||
* Copyright (C) 2004-2010 Alex Gorbatchev.
|
||||
*
|
||||
* @license
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
*/
|
||||
;(function()
|
||||
{
|
||||
// CommonJS
|
||||
typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
|
||||
|
||||
function Brush()
|
||||
{
|
||||
var keywords = 'break case catch continue ' +
|
||||
'default delete do else false ' +
|
||||
'for function if in instanceof ' +
|
||||
'new null return super switch ' +
|
||||
'this throw true try typeof var while with'
|
||||
;
|
||||
|
||||
var r = SyntaxHighlighter.regexLib;
|
||||
|
||||
this.regexList = [
|
||||
{ regex: r.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings
|
||||
{ regex: r.multiLineSingleQuotedString, css: 'string' }, // single quoted strings
|
||||
{ regex: r.singleLineCComments, css: 'comments' }, // one line comments
|
||||
{ regex: r.multiLineCComments, css: 'comments' }, // multiline comments
|
||||
{ regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion
|
||||
{ regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' } // keywords
|
||||
];
|
||||
|
||||
this.forHtmlScript(r.scriptScriptTags);
|
||||
};
|
||||
|
||||
Brush.prototype = new SyntaxHighlighter.Highlighter();
|
||||
Brush.aliases = ['js', 'jscript', 'javascript'];
|
||||
|
||||
SyntaxHighlighter.brushes.JScript = Brush;
|
||||
|
||||
// CommonJS
|
||||
typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
|
||||
})();
|
54
docs/highlighter/shBrushXml.js
vendored
Executable file
54
docs/highlighter/shBrushXml.js
vendored
Executable file
@ -0,0 +1,54 @@
|
||||
;(function()
|
||||
{
|
||||
// CommonJS
|
||||
typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null;
|
||||
|
||||
function Brush()
|
||||
{
|
||||
function process(match, regexInfo)
|
||||
{
|
||||
var constructor = SyntaxHighlighter.Match,
|
||||
code = match[0],
|
||||
tag = new XRegExp('(<|<)[\\s\\/\\?]*(?<name>[:\\w-\\.]+)', 'xg').exec(code),
|
||||
result = []
|
||||
;
|
||||
|
||||
if (match.attributes != null)
|
||||
{
|
||||
var attributes,
|
||||
regex = new XRegExp('(?<name> [\\w:\\-\\.]+)' +
|
||||
'\\s*=\\s*' +
|
||||
'(?<value> ".*?"|\'.*?\'|\\w+)',
|
||||
'xg');
|
||||
|
||||
while ((attributes = regex.exec(code)) != null)
|
||||
{
|
||||
result.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));
|
||||
result.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));
|
||||
}
|
||||
}
|
||||
|
||||
if (tag != null)
|
||||
result.push(
|
||||
new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')
|
||||
);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
this.regexList = [
|
||||
{ regex: new XRegExp('(\\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\\>|>)', 'gm'), css: 'color2' }, // <![ ... [ ... ]]>
|
||||
{ regex: SyntaxHighlighter.regexLib.xmlComments, css: 'comments' }, // <!-- ... -->
|
||||
{ regex: new XRegExp('(<|<)[\\s\\/\\?]*(\\w+)(?<attributes>.*?)[\\s\\/\\?]*(>|>)', 'sg'), func: process },
|
||||
{ regex: /^\[[0-9-]+\] [vV0-9\.]+$/gm, css: 'keyword value' }
|
||||
];
|
||||
};
|
||||
|
||||
Brush.prototype = new SyntaxHighlighter.Highlighter();
|
||||
Brush.aliases = ['xml', 'xhtml', 'xslt', 'html'];
|
||||
|
||||
SyntaxHighlighter.brushes.Xml = Brush;
|
||||
|
||||
// CommonJS
|
||||
typeof(exports) != 'undefined' ? exports.Brush = Brush : null;
|
||||
})();
|
226
docs/highlighter/shCore.css
Normal file
226
docs/highlighter/shCore.css
Normal file
@ -0,0 +1,226 @@
|
||||
/**
|
||||
* SyntaxHighlighter
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter
|
||||
*
|
||||
* SyntaxHighlighter is donationware. If you are using it, please donate.
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
|
||||
*
|
||||
* @version
|
||||
* 3.0.83 (July 02 2010)
|
||||
*
|
||||
* @copyright
|
||||
* Copyright (C) 2004-2010 Alex Gorbatchev.
|
||||
*
|
||||
* @license
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
*/
|
||||
.syntaxhighlighter a,
|
||||
.syntaxhighlighter div,
|
||||
.syntaxhighlighter code,
|
||||
.syntaxhighlighter table,
|
||||
.syntaxhighlighter table td,
|
||||
.syntaxhighlighter table tr,
|
||||
.syntaxhighlighter table tbody,
|
||||
.syntaxhighlighter table thead,
|
||||
.syntaxhighlighter table caption,
|
||||
.syntaxhighlighter textarea {
|
||||
-moz-border-radius: 0 0 0 0 !important;
|
||||
-webkit-border-radius: 0 0 0 0 !important;
|
||||
background: none !important;
|
||||
border: 0 !important;
|
||||
bottom: auto !important;
|
||||
float: none !important;
|
||||
height: auto !important;
|
||||
left: auto !important;
|
||||
line-height: 1.1em !important;
|
||||
margin: 0 !important;
|
||||
outline: 0 !important;
|
||||
overflow: visible !important;
|
||||
padding: 0 !important;
|
||||
position: static !important;
|
||||
right: auto !important;
|
||||
text-align: left !important;
|
||||
top: auto !important;
|
||||
vertical-align: baseline !important;
|
||||
width: auto !important;
|
||||
box-sizing: content-box !important;
|
||||
font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
|
||||
font-weight: normal !important;
|
||||
font-style: normal !important;
|
||||
font-size: 1em !important;
|
||||
min-height: inherit !important;
|
||||
min-height: auto !important;
|
||||
}
|
||||
|
||||
.syntaxhighlighter {
|
||||
width: 100% !important;
|
||||
margin: 1em 0 1em 0 !important;
|
||||
position: relative !important;
|
||||
overflow: auto !important;
|
||||
font-size: 1em !important;
|
||||
}
|
||||
.syntaxhighlighter.source {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
.syntaxhighlighter .bold {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
.syntaxhighlighter .italic {
|
||||
font-style: italic !important;
|
||||
}
|
||||
.syntaxhighlighter .line {
|
||||
white-space: pre !important;
|
||||
}
|
||||
.syntaxhighlighter table {
|
||||
width: 100% !important;
|
||||
}
|
||||
.syntaxhighlighter table caption {
|
||||
text-align: left !important;
|
||||
padding: .5em 0 0.5em 1em !important;
|
||||
}
|
||||
.syntaxhighlighter table td.code {
|
||||
width: 100% !important;
|
||||
}
|
||||
.syntaxhighlighter table td.code .container {
|
||||
position: relative !important;
|
||||
}
|
||||
.syntaxhighlighter table td.code .container textarea {
|
||||
box-sizing: border-box !important;
|
||||
position: absolute !important;
|
||||
left: 0 !important;
|
||||
top: 0 !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
border: none !important;
|
||||
background: white !important;
|
||||
padding-left: 1em !important;
|
||||
overflow: hidden !important;
|
||||
white-space: pre !important;
|
||||
}
|
||||
.syntaxhighlighter table td.gutter .line {
|
||||
text-align: right !important;
|
||||
padding: 0 0.5em 0 1em !important;
|
||||
}
|
||||
.syntaxhighlighter table td.code .line {
|
||||
padding: 0 1em !important;
|
||||
}
|
||||
.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
|
||||
padding-left: 0em !important;
|
||||
}
|
||||
.syntaxhighlighter.show {
|
||||
display: block !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed table {
|
||||
display: none !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar {
|
||||
padding: 0.1em 0.8em 0em 0.8em !important;
|
||||
font-size: 1em !important;
|
||||
position: static !important;
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar span {
|
||||
display: inline !important;
|
||||
margin-right: 1em !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar span a {
|
||||
padding: 0 !important;
|
||||
display: none !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar span a.expandSource {
|
||||
display: inline !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar {
|
||||
position: absolute !important;
|
||||
right: 1px !important;
|
||||
top: 1px !important;
|
||||
width: 11px !important;
|
||||
height: 11px !important;
|
||||
font-size: 10px !important;
|
||||
z-index: 10 !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar span.title {
|
||||
display: inline !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar a {
|
||||
display: block !important;
|
||||
text-align: center !important;
|
||||
text-decoration: none !important;
|
||||
padding-top: 1px !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar a.expandSource {
|
||||
display: none !important;
|
||||
}
|
||||
.syntaxhighlighter.ie {
|
||||
font-size: .9em !important;
|
||||
padding: 1px 0 1px 0 !important;
|
||||
}
|
||||
.syntaxhighlighter.ie .toolbar {
|
||||
line-height: 8px !important;
|
||||
}
|
||||
.syntaxhighlighter.ie .toolbar a {
|
||||
padding-top: 0px !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .line.alt1 .content,
|
||||
.syntaxhighlighter.printing .line.alt2 .content,
|
||||
.syntaxhighlighter.printing .line.highlighted .number,
|
||||
.syntaxhighlighter.printing .line.highlighted.alt1 .content,
|
||||
.syntaxhighlighter.printing .line.highlighted.alt2 .content {
|
||||
background: none !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .line .number {
|
||||
color: #bbbbbb !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .line .content {
|
||||
color: black !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .toolbar {
|
||||
display: none !important;
|
||||
}
|
||||
.syntaxhighlighter.printing a {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
|
||||
color: black !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
|
||||
color: #008200 !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
|
||||
color: blue !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .keyword {
|
||||
color: #006699 !important;
|
||||
font-weight: bold !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .preprocessor {
|
||||
color: gray !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .variable {
|
||||
color: #aa7700 !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .value {
|
||||
color: #009900 !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .functions {
|
||||
color: #ff1493 !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .constants {
|
||||
color: #0066cc !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .script {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
|
||||
color: gray !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
|
||||
color: #ff1493 !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
|
||||
color: red !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
|
||||
color: black !important;
|
||||
}
|
17
docs/highlighter/shCore.js
vendored
Normal file
17
docs/highlighter/shCore.js
vendored
Normal file
File diff suppressed because one or more lines are too long
128
docs/highlighter/shThemeEclipse.css
Normal file
128
docs/highlighter/shThemeEclipse.css
Normal file
@ -0,0 +1,128 @@
|
||||
/**
|
||||
* SyntaxHighlighter
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter
|
||||
*
|
||||
* SyntaxHighlighter is donationware. If you are using it, please donate.
|
||||
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html
|
||||
*
|
||||
* @version
|
||||
* 3.0.83 (July 02 2010)
|
||||
*
|
||||
* @copyright
|
||||
* Copyright (C) 2004-2010 Alex Gorbatchev.
|
||||
*
|
||||
* @license
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
*/
|
||||
.syntaxhighlighter {
|
||||
background-color: white !important;
|
||||
}
|
||||
.syntaxhighlighter .line.alt1 {
|
||||
background-color: white !important;
|
||||
}
|
||||
.syntaxhighlighter .line.alt2 {
|
||||
background-color: white !important;
|
||||
}
|
||||
.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
|
||||
background-color: #c3defe !important;
|
||||
}
|
||||
.syntaxhighlighter .line.highlighted.number {
|
||||
color: white !important;
|
||||
}
|
||||
.syntaxhighlighter table caption {
|
||||
color: black !important;
|
||||
}
|
||||
.syntaxhighlighter .gutter {
|
||||
color: #787878 !important;
|
||||
}
|
||||
.syntaxhighlighter .gutter .line {
|
||||
border-right: 3px solid #d4d0c8 !important;
|
||||
}
|
||||
.syntaxhighlighter .gutter .line.highlighted {
|
||||
background-color: #d4d0c8 !important;
|
||||
color: white !important;
|
||||
}
|
||||
.syntaxhighlighter.printing .line .content {
|
||||
border: none !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed {
|
||||
overflow: visible !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar {
|
||||
color: #3f5fbf !important;
|
||||
background: white !important;
|
||||
border: 1px solid #d4d0c8 !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar a {
|
||||
color: #3f5fbf !important;
|
||||
}
|
||||
.syntaxhighlighter.collapsed .toolbar a:hover {
|
||||
color: #aa7700 !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar {
|
||||
color: #a0a0a0 !important;
|
||||
background: #d4d0c8 !important;
|
||||
border: none !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar a {
|
||||
color: #a0a0a0 !important;
|
||||
}
|
||||
.syntaxhighlighter .toolbar a:hover {
|
||||
color: red !important;
|
||||
}
|
||||
.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
|
||||
color: black !important;
|
||||
}
|
||||
.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
|
||||
color: #3f5fbf !important;
|
||||
}
|
||||
.syntaxhighlighter .string, .syntaxhighlighter .string a {
|
||||
color: #2a00ff !important;
|
||||
}
|
||||
.syntaxhighlighter .keyword {
|
||||
color: #7f0055 !important;
|
||||
}
|
||||
.syntaxhighlighter .preprocessor {
|
||||
color: #646464 !important;
|
||||
}
|
||||
.syntaxhighlighter .variable {
|
||||
color: #aa7700 !important;
|
||||
}
|
||||
.syntaxhighlighter .value {
|
||||
color: #009900 !important;
|
||||
}
|
||||
.syntaxhighlighter .functions {
|
||||
color: #ff1493 !important;
|
||||
}
|
||||
.syntaxhighlighter .constants {
|
||||
color: #0066cc !important;
|
||||
}
|
||||
.syntaxhighlighter .script {
|
||||
font-weight: bold !important;
|
||||
color: #7f0055 !important;
|
||||
background-color: none !important;
|
||||
}
|
||||
.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
|
||||
color: gray !important;
|
||||
}
|
||||
.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
|
||||
color: #ff1493 !important;
|
||||
}
|
||||
.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
|
||||
color: red !important;
|
||||
}
|
||||
|
||||
.syntaxhighlighter .keyword {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
.syntaxhighlighter .xml .keyword {
|
||||
color: #3f7f7f !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
.syntaxhighlighter .xml .color1, .syntaxhighlighter .xml .color1 a {
|
||||
color: #7f007f !important;
|
||||
}
|
||||
.syntaxhighlighter .xml .string {
|
||||
font-style: italic !important;
|
||||
color: #2a00ff !important;
|
||||
}
|
13
docs/index.css
Normal file
13
docs/index.css
Normal file
@ -0,0 +1,13 @@
|
||||
.syntaxhighlighter a, .syntaxhighlighter div, .syntaxhighlighter code, .syntaxhighlighter table, .syntaxhighlighter table td, .syntaxhighlighter table tr, .syntaxhighlighter table tbody, .syntaxhighlighter table thead, .syntaxhighlighter table caption, .syntaxhighlighter textarea{line-height: 1.3em !important;}
|
||||
.syntaxhighlighter {overflow-y: hidden !important;}
|
||||
.syntaxhighlighter .toolbar{background: none!important;}
|
||||
.syntaxhighlighter .toolbar a{display: none!important;}
|
||||
.syntaxhighlighter .line.alt1,.syntaxhighlighter .line.alt2{background-color: #FAFAFA !important;}
|
||||
.syntaxhighlighter{background-color: #FAFAFA !important; padding: 10px; width: calc(100% - 20px) !important; border-radius: 5px;}
|
||||
div.slide{width: 90vw; overflow: auto;}
|
||||
h3{font-size: 20px; font-weight: bold; margin-bottom: 20px;}
|
||||
.dcode{margin-top: 100px;}
|
||||
.mt10{margin-top: 10px;}
|
||||
#header{left: 5vw; right: 5vw; top: 20px; position: fixed;}
|
||||
p{font-size: 14px; color: #5e6d82; line-height: 1.5em;margin: 15px 0 10px;}
|
||||
a{color: #409eff; text-decoration: none;}
|
58
docs/index.js
Normal file
58
docs/index.js
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
var htmls = [], js = [];
|
||||
data.forEach(function(item){
|
||||
htmls.push([
|
||||
'<div class="slide">',
|
||||
item.html,
|
||||
'<div class="dcode mt10"><script type="syntaxhighlighter" class="brush:html"><![CDATA[',
|
||||
item.comment ? item.comment.replace(/</g, '<') : item.html.replace(/</g, '<'),
|
||||
']]></script></div>',
|
||||
item.js && ['<div class="dcode mt10"><script type="syntaxhighlighter" class="brush:js"><![CDATA[',
|
||||
item.js.replace(/</g, '<'),
|
||||
']]></script></div>'].join(''),
|
||||
'</div>',
|
||||
].join(''));
|
||||
js.push(item.js);
|
||||
});
|
||||
|
||||
var box = $('#content');
|
||||
box.append($(htmls.join('')));
|
||||
|
||||
js.forEach(function(item){
|
||||
eval(item);
|
||||
});
|
||||
|
||||
SyntaxHighlighter.defaults["quick-code"] = false;
|
||||
SyntaxHighlighter.defaults["gutter"] = false;
|
||||
SyntaxHighlighter.all();
|
||||
|
||||
var ele = new Fathom('#content')
|
||||
|
||||
xmSelect.render({
|
||||
el: '#header',
|
||||
data: data.map(function(item, index){
|
||||
return {
|
||||
name: (index + 1) + '. ' + item.title,
|
||||
value: index,
|
||||
empty: !!item.title
|
||||
}
|
||||
}).filter(function(item){
|
||||
return item.empty;
|
||||
}),
|
||||
filterable: true,
|
||||
model: {
|
||||
label: {
|
||||
type: 'text',
|
||||
text: {
|
||||
left: '',
|
||||
right: '',
|
||||
separator: ', ',
|
||||
},
|
||||
},
|
||||
},
|
||||
radio: true,
|
||||
clickClose: true,
|
||||
on: function(data){
|
||||
data.selected && ele.scrollToSlide($('.slide:nth-child('+(data.item.value + 1)+')'));
|
||||
}
|
||||
});
|
3
docs/jquery.min.js
vendored
Normal file
3
docs/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
docs/vue.min.js
vendored
Normal file
7
docs/vue.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/wx.jpg
Normal file
BIN
docs/wx.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
351
index.html
351
index.html
@ -2,347 +2,26 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title></title>
|
||||
<title>xm-select</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
|
||||
<style>
|
||||
body{padding-bottom: 300px;}
|
||||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="docs/highlighter/shCore.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="docs/highlighter/shThemeEclipse.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="docs/fathom/fathom.sample.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="docs/index.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content"></div>
|
||||
<div id="header"></div>
|
||||
|
||||
<h1>
|
||||
源码地址
|
||||
<a href="https://gitee.com/maplemei/xm-select">https://gitee.com/maplemei/xm-select</a>
|
||||
</h1>
|
||||
|
||||
<h3>这是一个多选</h3>
|
||||
<div id="demo1"></div>
|
||||
|
||||
<h3>这是一个国际版多选</h3>
|
||||
<div id="demo2"></div>
|
||||
|
||||
<h3>有基础数据</h3>
|
||||
<div id="demo3"></div>
|
||||
|
||||
<h3>有选中, 禁用的</h3>
|
||||
<div id="demo4"></div>
|
||||
|
||||
<h3>自定义key</h3>
|
||||
<div id="demo5"></div>
|
||||
|
||||
<h3>使用template自己构建选项1</h3>
|
||||
<div id="demo6"></div>
|
||||
|
||||
<h3>使用template自己构建选项2</h3>
|
||||
<div id="demo7"></div>
|
||||
|
||||
<h3>简单的展示形式1</h3>
|
||||
<div id="demo8"></div>
|
||||
|
||||
<h3>简单的展示形式2</h3>
|
||||
<div id="demo9"></div>
|
||||
|
||||
<h3>自定义展示</h3>
|
||||
<div id="demo10"></div>
|
||||
|
||||
<h3>多余的用 +隐藏</h3>
|
||||
<div id="demo11"></div>
|
||||
|
||||
<h3>不显示删除图标</h3>
|
||||
<div id="demo12"></div>
|
||||
|
||||
<h3>换一个主题</h3>
|
||||
<div id="demo13"></div>
|
||||
|
||||
<h3>开启搜索模式</h3>
|
||||
<div id="demo14"></div>
|
||||
|
||||
<h3>自定义搜索方法</h3>
|
||||
<div id="demo15"></div>
|
||||
|
||||
<h3>自定义搜索延迟 和 提示</h3>
|
||||
<div id="demo16"></div>
|
||||
|
||||
<h3>1000条数据测试</h3>
|
||||
<div id="demo17"></div>
|
||||
|
||||
<h3>自动判断下拉方向</h3>
|
||||
<div id="demo18"></div>
|
||||
|
||||
<h3>只会往下</h3>
|
||||
<div id="demo19"></div>
|
||||
|
||||
<h3>只会往上</h3>
|
||||
<div id="demo20"></div>
|
||||
|
||||
<h3>自定义style样式</h3>
|
||||
<div id="demo21"></div>
|
||||
|
||||
<script src="./dist/xm-select.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var demo1 = xmSelect.render({
|
||||
el: '#demo1',
|
||||
language: 'zn',
|
||||
isShow: true,
|
||||
})
|
||||
|
||||
var demo2 = xmSelect.render({
|
||||
el: '#demo2',
|
||||
language: 'en'
|
||||
})
|
||||
|
||||
var demo3 = xmSelect.render({
|
||||
el: '#demo3',
|
||||
data: [
|
||||
{name: '水果', value: 1},
|
||||
{name: '蔬菜', value: 2},
|
||||
{name: '桌子', value: 3},
|
||||
]
|
||||
})
|
||||
|
||||
var demo4 = xmSelect.render({
|
||||
el: '#demo4',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
]
|
||||
})
|
||||
|
||||
var demo5 = xmSelect.render({
|
||||
el: '#demo5',
|
||||
data: [
|
||||
{label: '水果', val: 1, sel: true, dis: true},
|
||||
{label: '蔬菜', val: 2, sel: true},
|
||||
{label: '桌子', val: 3, dis: true},
|
||||
{label: '北京', val: 4},
|
||||
],
|
||||
prop: {
|
||||
name: 'label',
|
||||
value: 'val',
|
||||
selected: 'sel',
|
||||
disabled: 'dis'
|
||||
}
|
||||
})
|
||||
|
||||
var demo6 = xmSelect.render({
|
||||
el: '#demo6',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
template: function(item, sels, name, value){
|
||||
return name + '<span style="color: red; margin-left: 20px;">'+value+'</span>'
|
||||
}
|
||||
})
|
||||
|
||||
var demo7 = xmSelect.render({
|
||||
el: '#demo7',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
template: function(item, sels, name, value){
|
||||
return name + '<span style="position: absolute; right: 10px; color: red">'+value+'</span>'
|
||||
}
|
||||
})
|
||||
|
||||
var demo8 = xmSelect.render({
|
||||
el: '#demo8',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'text',
|
||||
text: {
|
||||
left: '<',
|
||||
right: '>',
|
||||
separator: ', ',
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var demo9 = xmSelect.render({
|
||||
el: '#demo9',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'count',
|
||||
count: {
|
||||
template: function(data, sels){
|
||||
return "已选中 " + sels.length + " 项, 共 " + data.length + " 项"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var demo10 = xmSelect.render({
|
||||
el: '#demo10',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'count',
|
||||
count: {
|
||||
template: function(data, sels){
|
||||
return "我是自定义的... 已选中 " + sels.length + " 项, 共 " + data.length + " 项"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var demo11 = xmSelect.render({
|
||||
el: '#demo11',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'block',
|
||||
block: {
|
||||
showCount: 1,
|
||||
showIcon: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var demo12 = xmSelect.render({
|
||||
el: '#demo12',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
model: {
|
||||
label: {
|
||||
type: 'block',
|
||||
block: {
|
||||
showCount: 1,
|
||||
showIcon: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
var demo13 = xmSelect.render({
|
||||
el: '#demo13',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
theme: {
|
||||
color: 'red',
|
||||
},
|
||||
})
|
||||
|
||||
var demo14 = xmSelect.render({
|
||||
el: '#demo14',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
})
|
||||
|
||||
var demo15 = xmSelect.render({
|
||||
el: '#demo15',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
filterMethod: function(val, item, index, prop){
|
||||
if(!val) return true;
|
||||
return item[prop.name].indexOf(val) != -1;
|
||||
},
|
||||
})
|
||||
|
||||
var demo16 = xmSelect.render({
|
||||
el: '#demo16',
|
||||
data: [
|
||||
{name: '水果', value: 1, selected: true, disabled: true},
|
||||
{name: '蔬菜', value: 2, selected: true},
|
||||
{name: '桌子', value: 3, disabled: true},
|
||||
{name: '北京', value: 4},
|
||||
],
|
||||
filterable: true, //开启搜索
|
||||
delay: 2000,
|
||||
searchTips: '搜索呀 搜索呀...',
|
||||
})
|
||||
|
||||
var startTime = Date.now();
|
||||
var demo17 = xmSelect.render({
|
||||
el: '#demo17',
|
||||
data: ''.padEnd(1000, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
})
|
||||
console.log('1000条数据渲染耗时: ' + (Date.now() - startTime) + 'ms');
|
||||
|
||||
var demo18 = xmSelect.render({
|
||||
el: '#demo18',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'auto',
|
||||
})
|
||||
|
||||
var demo19 = xmSelect.render({
|
||||
el: '#demo19',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'down',
|
||||
})
|
||||
|
||||
var demo20 = xmSelect.render({
|
||||
el: '#demo20',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
direction: 'up',
|
||||
})
|
||||
|
||||
var demo21 = xmSelect.render({
|
||||
el: '#demo21',
|
||||
data: ''.padEnd(100, ' ').split('').map((a, i) => ( {name: 'name' + i, value: i} )),
|
||||
filterable: true, //开启搜索
|
||||
style: {
|
||||
width: '200px',
|
||||
marginLeft: '20px',
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
<script src="docs/jquery.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/highlighter/shCore.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/highlighter/shBrushJScript.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/highlighter/shBrushXml.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/fathom/fathom.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
|
||||
<script src="dist/xm-select.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/data.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/index.js" type="text/javascript" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -30,6 +30,12 @@ export default function (lan = 'zn') {
|
||||
direction: 'auto',
|
||||
//自定义样式
|
||||
style: {},
|
||||
//是否开启单选模式
|
||||
radio: false,
|
||||
//是否开启重复选模式
|
||||
repeat: false,
|
||||
//是否点击选项后自动关闭下拉框
|
||||
clickClose: false,
|
||||
//自定义属性名称
|
||||
prop: {
|
||||
name: 'name',
|
||||
@ -71,8 +77,12 @@ export default function (lan = 'zn') {
|
||||
|
||||
},
|
||||
// 模板组成, 当前option数据, 已经选中的数据, name, value
|
||||
template(item, sels, name, value){
|
||||
template({ item, sels, name, value }){
|
||||
return name;
|
||||
},
|
||||
//监听选中事件
|
||||
on({ arr, item, selected }){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -38,7 +38,7 @@ class xmOptions {
|
||||
*/
|
||||
update(options = {}, isNew){
|
||||
//记录最新的配置项
|
||||
this.options = {...this.options, ...options};
|
||||
this.options = Object.assign(this.options, options);
|
||||
|
||||
//如果dom不存在, 则不进行渲染事项
|
||||
let dom = selector(this.options.el);
|
||||
|
@ -76,7 +76,7 @@ class Framework extends Component{
|
||||
}
|
||||
|
||||
render(config, { sels, show }) {
|
||||
const { tips, theme, data, prop, template, model, empty, style } = config;
|
||||
const { tips, theme, data, prop, template, model, empty, style, radio, repeat, clickClose, on } = config;
|
||||
const borderStyle = { borderColor: theme.color };
|
||||
//最外层边框的属性
|
||||
const xmSelectProps = {
|
||||
@ -97,22 +97,31 @@ class Framework extends Component{
|
||||
//普通多选数据
|
||||
const valueProp = prop.value;
|
||||
|
||||
const ck = (item, selected, disabled) => {
|
||||
//选项, 选中状态, 禁用状态, 是否强制删除:在label上点击删除
|
||||
const ck = (item, selected, disabled, mandatoryDelete) => {
|
||||
//如果是禁用状态, 不能进行操作
|
||||
if(disabled) return;
|
||||
|
||||
//如果现在是选中状态
|
||||
if(selected){
|
||||
if(selected && (!repeat || mandatoryDelete)){
|
||||
let index = sels.findIndex(sel => sel[valueProp] == item[valueProp])
|
||||
if(index != -1){
|
||||
sels.splice(index, 1);
|
||||
this.setState(sels);
|
||||
}
|
||||
}else{
|
||||
this.setState({
|
||||
sels: [...sels, item]
|
||||
})
|
||||
//如果是单选模式
|
||||
if(radio){
|
||||
this.setState({ sels: [item] });
|
||||
}else{
|
||||
this.setState({ sels: [...sels, item] });
|
||||
}
|
||||
}
|
||||
|
||||
on && on({ arr: sels, item, selected: !selected });
|
||||
|
||||
//检查是否为选择即关闭状态, 强制删除情况下不做处理
|
||||
clickClose && !mandatoryDelete && this.onClick();
|
||||
};
|
||||
|
||||
const labelProps = { ...config, sels, ck, title: sels.map(sel => sel[prop.name]).join(',') }
|
||||
|
@ -10,7 +10,7 @@ class Label extends Component{
|
||||
}
|
||||
|
||||
iconClick(item, selected, disabled, e){
|
||||
this.props.ck(item, selected, disabled);
|
||||
this.props.ck(item, selected, disabled, true);
|
||||
//阻止父组件上的事件冒泡
|
||||
e.stopPropagation();
|
||||
}
|
||||
@ -58,7 +58,7 @@ class Label extends Component{
|
||||
}
|
||||
}else{
|
||||
if(sels.length && conf && conf.template){
|
||||
html = conf.template(data, sels);
|
||||
html = conf.template({data, arr: sels});
|
||||
}else{
|
||||
html = sels.map(sel => sel[name]).join(',')
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ class General extends Component{
|
||||
<div class="xm-option-icon" style={ { borderColor: theme.color, } }>
|
||||
<i class="xm-iconfont xm-icon-duox" style={ iconStyle }></i>
|
||||
</div>
|
||||
<div class='xm-option-content' dangerouslySetInnerHTML={{ __html: template(item, sels, item[name], item[value]) }}></div>
|
||||
<div class='xm-option-content' dangerouslySetInnerHTML={{ __html: template({ data, item, arr: sels, name: item[name], value: item[value] }) }}></div>
|
||||
</div>
|
||||
)
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user