提交
This commit is contained in:
44
src/components/Avatar/index.vue
Normal file
44
src/components/Avatar/index.vue
Normal file
@@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<span class="avater">
|
||||
{{ avater }}
|
||||
</span>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
avater() {
|
||||
const length = this.name.length
|
||||
if (length >= 3) {
|
||||
return this.name.substring(length - 2)
|
||||
} else {
|
||||
return this.name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.avater {
|
||||
display: inline-block;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
font-size: 12px;
|
||||
line-height: 30px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
text-shadow: transparent 0 0 0;
|
||||
vertical-align: middle;
|
||||
background: $themeColor;
|
||||
border-radius: 30px;
|
||||
zoom: 1;
|
||||
flex: none;
|
||||
}
|
||||
</style>
|
||||
60
src/components/Charts/index.vue
Normal file
60
src/components/Charts/index.vue
Normal file
@@ -0,0 +1,60 @@
|
||||
<template>
|
||||
<div :style="{height:height,width:width}" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import echarts from 'echarts'
|
||||
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
|
||||
export default {
|
||||
name: 'charts',
|
||||
props: {
|
||||
options: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: '100%'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
options: {
|
||||
handler(options) {
|
||||
this.chart.setOption(this.options)
|
||||
window.echartsArr.push(this.chart)
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initChart()
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (!this.chart) {
|
||||
return
|
||||
}
|
||||
this.chart.dispose()
|
||||
this.chart = null
|
||||
removeResizeListener(this.$el, this.doResize)
|
||||
},
|
||||
methods: {
|
||||
initChart() {
|
||||
this.chart = echarts.init(this.$el)
|
||||
this.chart.setOption(this.options)
|
||||
window.echartsArr.push(this.chart)
|
||||
addResizeListener(this.$el, this.doResize)
|
||||
},
|
||||
doResize() {
|
||||
this.chart && this.chart.resize()
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
155
src/components/Coordinate/coordinate.vue
Normal file
155
src/components/Coordinate/coordinate.vue
Normal file
@@ -0,0 +1,155 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<svg-icon class="map" icon-class="map" @click="open" />
|
||||
<span v-if="value">经度:{{ value.lng }} 纬度:{{ value.lat }}</span>
|
||||
</div>
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
v-el-drag-dialog
|
||||
title="位置标注"
|
||||
:visible.sync="visible"
|
||||
append-to-body
|
||||
custom-class="coordinate-map-dialog"
|
||||
>
|
||||
<div
|
||||
id="coordinate-map"
|
||||
v-loading="$loadingPlugin.initMap"
|
||||
class="map-content"
|
||||
/>
|
||||
<div slot="footer">
|
||||
<el-button @click="visible = false"> 取消 </el-button>
|
||||
<el-button type="primary" @click="success"> 确定 </el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "coordinate",
|
||||
props: {
|
||||
center: {
|
||||
type: Object,
|
||||
// 北京
|
||||
default: () => ({ lng: 116.404, lat: 39.915 }),
|
||||
},
|
||||
value: {
|
||||
required: true,
|
||||
},
|
||||
ak: {
|
||||
type: String,
|
||||
default: "tBPMcunBdcz7bgG26l7LydiV",
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
position: null,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
open() {
|
||||
this.visible = true;
|
||||
this.position = this.value;
|
||||
this.initMap(this.position);
|
||||
},
|
||||
success() {
|
||||
if (this.position) {
|
||||
this.$emit("input", this.position);
|
||||
}
|
||||
this.visible = false;
|
||||
},
|
||||
async initMap(position) {
|
||||
const BMap = await this.getMapScript();
|
||||
const map = new BMap.Map("coordinate-map");
|
||||
const center = new BMap.Point(this.center.lng, this.center.lat);
|
||||
map.centerAndZoom(center, 15);
|
||||
map.enableScrollWheelZoom();
|
||||
map.enableInertialDragging();
|
||||
map.enableContinuousZoom();
|
||||
const control = new BMap.ScaleControl({
|
||||
anchor: window.BMAP_ANCHOR_TOP_RIGHT,
|
||||
}); // 右上角,添加比例尺控件
|
||||
const navigation = new BMap.NavigationControl({
|
||||
anchor: window.BMAP_ANCHOR_TOP_RIGHT,
|
||||
}); // 右上角,添加缩放平移控件
|
||||
const city = new BMap.CityListControl({
|
||||
anchor: window.BMAP_ANCHOR_TOP_LEFT,
|
||||
offset: new BMap.Size(10, 20),
|
||||
}); // 左上角,添加城市选择控件
|
||||
const geolocationControl = new BMap.GeolocationControl(); // 左下角添加定位控件
|
||||
map.addControl(control);
|
||||
map.addControl(navigation);
|
||||
map.addControl(city);
|
||||
map.addControl(geolocationControl);
|
||||
// 定位失败事件
|
||||
geolocationControl.addEventListener("locationError", (e) => {
|
||||
this.$message.error("定位失败:" + e.message);
|
||||
});
|
||||
let marker;
|
||||
if (position) {
|
||||
const point = new BMap.Point(position.lng, position.lat);
|
||||
marker = new BMap.Marker(point);
|
||||
map.addOverlay(marker);
|
||||
marker.enableDragging();
|
||||
map.panTo(point);
|
||||
}
|
||||
map.addEventListener("click", (e) => {
|
||||
if (marker) {
|
||||
map.removeOverlay(marker);
|
||||
marker = null;
|
||||
}
|
||||
const point = new BMap.Point(e.point.lng, e.point.lat);
|
||||
marker = new BMap.Marker(point);
|
||||
map.addOverlay(marker);
|
||||
marker.enableDragging();
|
||||
map.panTo(point);
|
||||
this.position = { lng: e.point.lng, lat: e.point.lat };
|
||||
});
|
||||
},
|
||||
getMapScript() {
|
||||
if (!window.BMap) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const $script = document.createElement("script");
|
||||
global.document.body.appendChild($script);
|
||||
$script.src = `https://api.map.baidu.com/api?v=2.0&ak=${this.ak}&callback=_initBaiduMap`;
|
||||
window._initBaiduMap = () => {
|
||||
resolve(window.BMap);
|
||||
global.document.body.removeChild($script);
|
||||
};
|
||||
$script.onerror = (e) => {
|
||||
reject();
|
||||
this.$message.error("百度地图控件加载失败,请检查网络并重试!");
|
||||
};
|
||||
});
|
||||
} else {
|
||||
return Promise.resolve(window.BMap);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.map {
|
||||
margin-right: 10px;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
color: $themeColor;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.coordinate-map-dialog {
|
||||
min-width: 700px;
|
||||
.el-dialog__body {
|
||||
height: 70vh;
|
||||
padding: 0;
|
||||
.map-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
7
src/components/Coordinate/index.js
Normal file
7
src/components/Coordinate/index.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import Coordinate from './coordinate'
|
||||
|
||||
/* istanbul ignore next */
|
||||
Coordinate.install = function(Vue) {
|
||||
Vue.component(Coordinate.name, Coordinate)
|
||||
}
|
||||
export default Coordinate
|
||||
156
src/components/ELTableForm/el-table-form.vue
Normal file
156
src/components/ELTableForm/el-table-form.vue
Normal file
@@ -0,0 +1,156 @@
|
||||
|
||||
<script>
|
||||
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
|
||||
|
||||
export default {
|
||||
name: 'el-table-form',
|
||||
props: {
|
||||
maxCols: { // 大屏下一行最多显示几列,遵循24栅格布局
|
||||
type: Number,
|
||||
default: 6
|
||||
},
|
||||
defaultOpen: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
inline: true,
|
||||
open: this.defaultOpen,
|
||||
span: 6,
|
||||
cols: 4
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
maxCols: {
|
||||
handler(val) {
|
||||
if (24 % val) {
|
||||
throw new Error('遵循24栅格布局,请保证maxCols能被24整除')
|
||||
}
|
||||
this.$nextTick(this.resize)
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
addResizeListener(this.$el, this.resize)
|
||||
// window.addEventListener('resize',this.resize)
|
||||
},
|
||||
beforeDestroy() {
|
||||
removeResizeListener(this.$el, this.resize)
|
||||
// window.removeEventListener('resize',this.resize)
|
||||
},
|
||||
methods: {
|
||||
resize() {
|
||||
const { maxCols } = this
|
||||
const width = this.$el.offsetWidth
|
||||
let cols
|
||||
if (width > 1400) {
|
||||
cols = maxCols
|
||||
} else if (width >= 996) {
|
||||
cols = maxCols < 4 ? maxCols : 4
|
||||
} else if (width >= 768) {
|
||||
cols = maxCols < 3 ? maxCols : 3
|
||||
} else if (width >= 660) {
|
||||
cols = maxCols < 2 ? maxCols : 2
|
||||
} else {
|
||||
cols = 1
|
||||
}
|
||||
this.cols = cols
|
||||
this.span = 24 / cols
|
||||
},
|
||||
// 支持el-from的方法
|
||||
validate(...arg) {
|
||||
this.$refs.elForm.resetFields(...arg)
|
||||
},
|
||||
validateField(...arg) {
|
||||
this.$refs.elForm.resetFields(...arg)
|
||||
},
|
||||
resetFields() {
|
||||
this.$refs.elForm.resetFields()
|
||||
},
|
||||
clearValidate() {
|
||||
this.$refs.elForm.clearValidate()
|
||||
}
|
||||
},
|
||||
render(h) {
|
||||
const childrens = this.$slots.default.filter(item => item.tag)
|
||||
const getMerge = (vnode) => {
|
||||
let merge = 1
|
||||
if (vnode.data && vnode.data.attrs && vnode.data.attrs['table-form-merge']) {
|
||||
merge = vnode.data.attrs['table-form-merge']
|
||||
}
|
||||
return merge ? Number(merge) : 1
|
||||
}
|
||||
let idx = 0
|
||||
const vnodes = childrens.map(item => {
|
||||
idx += getMerge(item)
|
||||
const newVnode = {
|
||||
...item,
|
||||
span: getMerge(item) * this.span > 24 ? 24 : getMerge(item) * this.span,
|
||||
idx: idx
|
||||
}
|
||||
return newVnode
|
||||
})
|
||||
return (
|
||||
<div>
|
||||
<el-form ref='elForm' class='el-table-form' inline={this.inline} on={this.$listeners} attrs={this.$attrs}>
|
||||
<el-row type='flex'>
|
||||
{
|
||||
vnodes.map((item, index) => (
|
||||
<el-col class='item' key={index} span={item.span} v-show={this.open || item.idx < this.cols}>
|
||||
{item}
|
||||
</el-col>
|
||||
))
|
||||
}
|
||||
<el-col span={this.span}>
|
||||
<el-form-item class='right'>
|
||||
{this.$slots.btns}
|
||||
<el-link v-show={vnodes[vnodes.length - 1] && vnodes[vnodes.length - 1].idx >= this.cols} style='margin-left: 10px;' type='primary' underline={false} onClick={() => this.open = !this.open}>
|
||||
{this.open ? '收起' : '展开'} <i class={this.open ? 'el-icon-arrow-up' : 'el-icon-arrow-down'}/>
|
||||
</el-link>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.el-table-form {
|
||||
& ::v-deep .el-row {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.item ::v-deep .el-form-item {
|
||||
display: flex;
|
||||
.el-form-item__label {
|
||||
flex-shrink: 0;
|
||||
&,
|
||||
& > label {
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
.el-form-item__content {
|
||||
flex: 1;
|
||||
& > *:not(.el-col) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.right {
|
||||
|
||||
& ::v-deep .el-form-item__content {
|
||||
display: flex;
|
||||
.el-link {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
7
src/components/ELTableForm/index.js
Normal file
7
src/components/ELTableForm/index.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import ElTableForm from './el-table-form'
|
||||
|
||||
/* istanbul ignore next */
|
||||
ElTableForm.install = function(Vue) {
|
||||
Vue.component(ElTableForm.name, ElTableForm)
|
||||
}
|
||||
export default ElTableForm
|
||||
430
src/components/ELTreeSelect/ElTreeSelect.vue
Normal file
430
src/components/ELTreeSelect/ElTreeSelect.vue
Normal file
@@ -0,0 +1,430 @@
|
||||
<!--
|
||||
* @moduleName: 下拉树组件
|
||||
-->
|
||||
<template>
|
||||
<div class="el-tree-select">
|
||||
<!-- 下拉文本 -->
|
||||
<el-select :clearable="clearable" style="width:100%" :style="styles" class="el-tree-select-input" v-model="labels" :disabled="disabled" popper-class="select-option" ref="select" v-bind="selectParams" :popper-append-to-body="false" :filterable="false" v-popover:popover @remove-tag="_selectRemoveTag" @clear="_selectClearFun" @focus="_popoverShowFun"></el-select>
|
||||
<!-- 弹出框 -->
|
||||
<el-popover :disabled="disabled" ref="popover" :placement="placement" popper-class="el-tree-select-popper" :width="width" v-model="visible" trigger="click">
|
||||
<!-- 是否显示搜索框 -->
|
||||
<el-input v-if="treeParams.filterable" v-model="keywords" size="mini" class="input-with-select mb10" @change="_searchFun">
|
||||
<el-button slot="append" icon="el-icon-search"></el-button>
|
||||
</el-input>
|
||||
<el-scrollbar tag="div" wrap-class="el-select-dropdown__wrap" view-class="el-select-dropdown__list" class="is-empty">
|
||||
<!-- 树列表 -->
|
||||
<el-tree ref="tree" v-show="data.length>0" v-bind="treeParams" :data="data" :node-key="propsValue" :draggable="false" :current-node-key="ids.length>0?ids[0]:''" :show-checkbox="selectParams.multiple" :filter-node-method="_filterFun" @node-click="_treeNodeClickFun" @check="_treeCheckFun"></el-tree>
|
||||
<!-- 暂无数据 -->
|
||||
<div v-if="data.length===0" class="no-data">暂无数据</div>
|
||||
</el-scrollbar>
|
||||
</el-popover>
|
||||
</div>
|
||||
</template>
|
||||
<style>
|
||||
.el-tree-select .select-option {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.el-tree-select-popper {
|
||||
max-height: 400px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.el-tree-select-popper .el-button--small {
|
||||
width: 25px !important;
|
||||
min-width: 25px !important;
|
||||
}
|
||||
|
||||
.el-tree-select-popper[x-placement^='bottom-start'] {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.mb10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.no-data {
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
font-size: 14px;
|
||||
color: #cccccc;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
import { on, off } from './utils/dom';
|
||||
import { each } from './utils/utils';
|
||||
// @group api
|
||||
export default {
|
||||
name: 'ElTreeSelect',
|
||||
props: {
|
||||
// v-model,存储的是treeParams.data里面的id
|
||||
value: {
|
||||
// `String` / `Array`
|
||||
type: [String, Number, Array],
|
||||
// `''`
|
||||
default() {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
// el-select样式
|
||||
styles: {
|
||||
type: Object,
|
||||
// {}
|
||||
default() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
// 是否禁用文本框
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
// false
|
||||
default() {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
clearable: {
|
||||
type: Boolean,
|
||||
// false
|
||||
default() {
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// 弹出框位置
|
||||
placement: {
|
||||
type: String,
|
||||
// bottom
|
||||
default() {
|
||||
return 'bottom-start';
|
||||
}
|
||||
},
|
||||
popoverWidth: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
},
|
||||
/*
|
||||
文本框参数,几乎支持el-select所有的API<br>
|
||||
取消参数:<br>
|
||||
设定下拉框的弹出框隐藏:<br>
|
||||
`:popper-append-to-body="false"` <br>
|
||||
搜索从弹出框里面执行: <br>
|
||||
`:filterable="false"`
|
||||
*/
|
||||
selectParams: {
|
||||
type: Object,
|
||||
/*
|
||||
Object默认参数:<br><br>
|
||||
是否多选:<br>
|
||||
`multiple: true`<br><br>
|
||||
是否可以清空选项:<br>
|
||||
`clearable: true,`<br><br>
|
||||
是否禁用:<br>
|
||||
`disabled: false,`<br><br>
|
||||
搜索框placeholder文字:<br>
|
||||
`placeholder: '请选择',`<br><br>
|
||||
*/
|
||||
default() {
|
||||
return {
|
||||
multiple: true,
|
||||
clearable: true,
|
||||
disabled: false,
|
||||
placeholder: '请选择'
|
||||
};
|
||||
}
|
||||
},
|
||||
/*
|
||||
下拉树参数,几乎支持el-tree所有的API<br>
|
||||
取消参数:<br>
|
||||
`:show-checkbox="selectParams.multiple"`<br>
|
||||
使用下拉框参数multiple判断是否对树进行多选<br>
|
||||
取消对el-tree的人为传参show-checkbox<br>
|
||||
`:node-key="propsValue"` 自动获取treeParams.props.value<br>
|
||||
`:draggable="false"` 屏蔽拖动
|
||||
*/
|
||||
treeParams: {
|
||||
type: Object,
|
||||
/*
|
||||
Object默认参数:<br><br>
|
||||
在有子级的情况下是否点击父级关闭弹出框,false 只能点击子级关闭弹出框:`clickParent: false`<br><br>
|
||||
是否显示搜索框:<br>
|
||||
`filterable: false`<br><br>
|
||||
下拉树的数据:<br>
|
||||
`data:[]`<br><br>
|
||||
下拉树的props:<br>
|
||||
`props: {`<br>
|
||||
`children: 'children',`<br>
|
||||
`label: 'name',`<br>
|
||||
`value: 'flowId',`<br>
|
||||
`disabled: 'disabled'`<br>
|
||||
`}`
|
||||
*/
|
||||
default() {
|
||||
return {
|
||||
clickParent: false,
|
||||
filterable: false,
|
||||
data: [],
|
||||
props: {
|
||||
children: 'children',
|
||||
label: 'name',
|
||||
value: 'flowId',
|
||||
disabled: 'disabled'
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
propsValue: 'flowId',
|
||||
propsLabel: 'name',
|
||||
propsDisabled: 'disabled',
|
||||
propsChildren: 'children',
|
||||
data: [],
|
||||
keywords: '',
|
||||
labels: '', // 存储名称,用于下拉框显示内容
|
||||
ids: [''], // 存储id
|
||||
selectNodes: [''], // 选中数据
|
||||
visible: false, // popover v-model
|
||||
width: 150
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
ids: function(val) {
|
||||
if (val !== undefined) {
|
||||
this._setSelectNodeFun(val)
|
||||
}
|
||||
},
|
||||
value: function(val) {
|
||||
if (this.ids !== val) {
|
||||
if (this.selectParams.multiple) {
|
||||
this.ids = val;
|
||||
} else {
|
||||
this.ids = val === '' ? [] : [val];
|
||||
}
|
||||
}
|
||||
},
|
||||
treeParams: {
|
||||
handler(val) {
|
||||
const { props, data } = val;
|
||||
this.propsValue = props.value;
|
||||
this.propsLabel = props.label;
|
||||
this.propsDisabled = props.disabled;
|
||||
this.propsChildren = props.children;
|
||||
this.data = data.length > 0 ? [...data] : [];
|
||||
if (props.defaultValue === 'orgSN' && data.length > 0) {
|
||||
this.ids.push(data[0].orgSN)
|
||||
}
|
||||
},
|
||||
deep: true,
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const { multiple } = this.selectParams;
|
||||
if (multiple) {
|
||||
this.labels = [];
|
||||
this.ids = this.value;
|
||||
} else {
|
||||
this.labels = '';
|
||||
this.ids = this.value instanceof Array ? this.value : [this.value];
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this._updateH();
|
||||
this.$nextTick(() => {
|
||||
on(document, 'mouseup', this._popoverHideFun);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
// 输入文本框输入内容抛出
|
||||
_searchFun() {
|
||||
/*
|
||||
对外抛出搜索方法,自行判断是走后台查询,还是前端过滤<br>
|
||||
前端过滤:this.$refs.treeSelect.$refs.tree.filter(value);<br>
|
||||
后台查询:this.$refs.treeSelect.treeDataUpdateFun(data);
|
||||
*/
|
||||
this.$emit('searchFun', this.keywords);
|
||||
},
|
||||
// 根据id筛选当前树名称,以及选中树列表
|
||||
_setSelectNodeFun(ids) {
|
||||
const el = this.$refs.tree;
|
||||
if (!el) {
|
||||
throw new Error('找不到tree dom');
|
||||
}
|
||||
const { multiple } = this.selectParams;
|
||||
// 长度为0,清空选择
|
||||
if (ids.length === 0 || this.data.length === 0) {
|
||||
this.labels = multiple ? [] : '';
|
||||
if (multiple) {
|
||||
el.setCheckedKeys([]);
|
||||
} else {
|
||||
el.setCurrentKey('');
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (multiple) {
|
||||
el.setCheckedKeys(ids);
|
||||
this.labels = el.getCheckedNodes().map(item => item[this.propsLabel]) || [];
|
||||
} else {
|
||||
el.setCurrentKey(ids[0]);
|
||||
if (el.getCurrentNode()) {
|
||||
this.labels = el.getCurrentNode()[this.propsLabel];
|
||||
} else {
|
||||
this.labels = '';
|
||||
}
|
||||
}
|
||||
this._updatePopoverLocationFun();
|
||||
},
|
||||
// 更新popover位置
|
||||
_updatePopoverLocationFun() {
|
||||
// dom高度还没有更新,做一个延迟
|
||||
setTimeout(() => {
|
||||
this.$refs.popover.updatePopper();
|
||||
}, 50);
|
||||
},
|
||||
// 树过滤
|
||||
_filterFun(value, data, node) {
|
||||
if (!value) return true;
|
||||
return data[this.propsLabel].indexOf(value) !== -1;
|
||||
},
|
||||
// 树点击
|
||||
_treeNodeClickFun(data, node, vm) {
|
||||
const { multiple } = this.selectParams;
|
||||
const { clickParent } = this.treeParams;
|
||||
const { propsValue, propsChildren, propsDisabled } = this;
|
||||
if (data[propsDisabled]) {
|
||||
// 禁用
|
||||
return;
|
||||
}
|
||||
if (node.checked) {
|
||||
const value = data[this.propsValue];
|
||||
this.ids = this.ids.filter(id => id !== value);
|
||||
} else {
|
||||
if (!multiple) {
|
||||
// 多选,不关闭,单选,判断是否允许点击父级关闭弹出框
|
||||
if (!clickParent) {
|
||||
const children = data[propsChildren];
|
||||
// 如果不允许点击父级,自身为末级,允许点击之后关闭
|
||||
if (!children || children.length === 0) {
|
||||
this.ids = [data[propsValue]];
|
||||
this.visible = false;
|
||||
} else {
|
||||
// 不允许父级,阻止继续派发
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
this.ids = [data[propsValue]];
|
||||
this.visible = false;
|
||||
}
|
||||
} else {
|
||||
this.ids.push(data[propsValue]);
|
||||
}
|
||||
}
|
||||
this._emitFun();
|
||||
/*
|
||||
点击节点,对外抛出 `data, node, vm`<br>
|
||||
`data:` 当前点击的节点数据<br>
|
||||
`node:` 当前点击的node<br>
|
||||
`vm:` 当前组件的vm
|
||||
*/
|
||||
this.$emit('node-click', data, node, vm);
|
||||
},
|
||||
// 树勾选
|
||||
_treeCheckFun(data, node, vm) {
|
||||
this.ids = [];
|
||||
const { propsValue } = this;
|
||||
node.checkedNodes.forEach(item => {
|
||||
this.ids.push(item[propsValue]);
|
||||
});
|
||||
/*
|
||||
点击复选框,对外抛出 `data, node, vm`<br>
|
||||
`data:` 当前点击的节点数据<br>
|
||||
`node:` 当前点击的node<br>
|
||||
`vm:` 当前组件的vm
|
||||
*/
|
||||
this.$emit('check', data, node, vm);
|
||||
this._emitFun();
|
||||
},
|
||||
// 下拉框移除tag时触发
|
||||
_selectRemoveTag(tag) {
|
||||
const { data, propsValue, propsLabel, propsChildren } = this;
|
||||
each(
|
||||
data,
|
||||
item => {
|
||||
if (item[propsLabel] === tag) {
|
||||
const value = item[propsValue];
|
||||
this.ids = this.ids.filter(id => id !== value);
|
||||
}
|
||||
},
|
||||
propsChildren
|
||||
);
|
||||
this.$refs.tree.setCheckedKeys(this.ids);
|
||||
this._emitFun();
|
||||
},
|
||||
// 下拉框清空数据
|
||||
_selectClearFun() {
|
||||
this.ids = [];
|
||||
const { multiple } = this.selectParams;
|
||||
// 下拉框清空,对外抛出``this.$emit('input', multiple ? [] : '');`
|
||||
this.$emit('input', multiple ? [] : '');
|
||||
// 下拉框清空,对外抛出``this.$emit('select-clear');`
|
||||
this.$emit('select-clear');
|
||||
this._updatePopoverLocationFun();
|
||||
},
|
||||
// 判断类型,抛出当前选中id
|
||||
_emitFun() {
|
||||
const { multiple } = this.selectParams;
|
||||
this.$emit('input', multiple ? this.ids : this.ids.length > 0 ? this.ids[0] : '');
|
||||
this._updatePopoverLocationFun();
|
||||
},
|
||||
// 更新宽度
|
||||
_updateH() {
|
||||
this.$nextTick(() => {
|
||||
if (this.popoverWidth) {
|
||||
this.width = this.popoverWidth
|
||||
} else {
|
||||
this.width = this.$refs.select.$el.getBoundingClientRect().width;
|
||||
}
|
||||
});
|
||||
},
|
||||
// 显示弹出框的时候容错,查看是否和el宽度一致
|
||||
_popoverShowFun() {
|
||||
this._updateH();
|
||||
},
|
||||
// 判断是否隐藏弹出框
|
||||
_popoverHideFun(e) {
|
||||
let isInter = e.path.some(list => {
|
||||
return list.className && list.className.indexOf('el-tree-select') !== -1;
|
||||
});
|
||||
if (!isInter) {
|
||||
this.visible = false;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @vuese
|
||||
* 树列表更新数据
|
||||
* @arg Array
|
||||
*/
|
||||
treeDataUpdateFun(data) {
|
||||
this.data = data;
|
||||
// 数据更新完成之后,判断是否回显内容
|
||||
setTimeout(() => {
|
||||
this._setSelectNodeFun(this.ids);
|
||||
}, 300);
|
||||
},
|
||||
|
||||
/**
|
||||
* @vuese
|
||||
* 本地过滤方法
|
||||
* @arg String
|
||||
*/
|
||||
filterFun(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
}
|
||||
},
|
||||
components: {},
|
||||
beforeDestroy() {
|
||||
off(document, 'mouseup', this._popoverHideFun);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
13
src/components/ELTreeSelect/index.js
Normal file
13
src/components/ELTreeSelect/index.js
Normal file
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* @moduleName:
|
||||
* @Author: dawdler
|
||||
* @LastModifiedBy: dawdler
|
||||
* @Date: 2019-03-22 14:57:21
|
||||
* @LastEditTime: 2019-03-25 14:48:43
|
||||
*/
|
||||
import ElTreeSelect from './ElTreeSelect.vue';
|
||||
// 为组件添加 install 方法,用于按需引入
|
||||
ElTreeSelect.install = function(Vue) {
|
||||
Vue.component(ElTreeSelect.name, ElTreeSelect);
|
||||
};
|
||||
export default ElTreeSelect;
|
||||
37
src/components/ELTreeSelect/utils/dom.js
Normal file
37
src/components/ELTreeSelect/utils/dom.js
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* @moduleName:
|
||||
* @Author: dawdler
|
||||
* @LastModifiedBy: dawdler
|
||||
* @Date: 2019-03-22 14:47:35
|
||||
* @LastEditTime: 2019-03-22 16:31:38
|
||||
*/
|
||||
export const on = (function() {
|
||||
if (document.addEventListener) {
|
||||
return function(element, event, handler) {
|
||||
if (element && event && handler) {
|
||||
element.addEventListener(event, handler, false);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return function(element, event, handler) {
|
||||
if (element && event && handler) {
|
||||
element.attachEvent('on' + event, handler);
|
||||
}
|
||||
};
|
||||
}
|
||||
})();
|
||||
export const off = (function() {
|
||||
if (document.removeEventListener) {
|
||||
return function(element, event, handler) {
|
||||
if (element && event) {
|
||||
element.removeEventListener(event, handler, false);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return function(element, event, handler) {
|
||||
if (element && event) {
|
||||
element.detachEvent('on' + event, handler);
|
||||
}
|
||||
};
|
||||
}
|
||||
})();
|
||||
78
src/components/ELTreeSelect/utils/utils.js
Normal file
78
src/components/ELTreeSelect/utils/utils.js
Normal file
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* @moduleName:通用工具类
|
||||
* @Author: dawdler
|
||||
* @Date: 2019-01-09 15:30:18
|
||||
* @LastModifiedBy: dawdler
|
||||
* @LastEditTime: 2019-03-22 16:31:42
|
||||
*/
|
||||
export default {
|
||||
getTreeData,
|
||||
each
|
||||
};
|
||||
/*
|
||||
each(arr, (item, children) => {
|
||||
item.value = xx;
|
||||
// 该item 包含children,因此直接赋值,不需要单独处理children里面的值
|
||||
});
|
||||
* [_each description] 倒查、展平、数据回调返回回当前一条数据和子集
|
||||
* @param {[Array]} data [description]
|
||||
* @param {Function} callback [description]
|
||||
* @param {String} childName[description]
|
||||
* @return {[Array]} [description]
|
||||
* 默认使用副本,在callback处理数据,如果不使用副本,那么需要重新对treeData赋值
|
||||
treeData = each(treeData, (item, children) => {
|
||||
item.value = xx;
|
||||
});
|
||||
*/
|
||||
export function each(data, callback, childName = 'children') {
|
||||
let current;
|
||||
let children;
|
||||
for (let i = 0, len = data.length; i < len; i++) {
|
||||
current = data[i];
|
||||
children = [];
|
||||
if (current[childName] && current[childName].length > 0) {
|
||||
children = current[childName];
|
||||
}
|
||||
callback && callback(current, children);
|
||||
if (children.length > 0) {
|
||||
each(children, callback, childName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @Author yihuang",
|
||||
* @param data 数据
|
||||
* @param id 要比对的名称
|
||||
* @param val 要比对的值
|
||||
* @param name 要返回的名称
|
||||
* @param children 子集名称
|
||||
* @param isRow 是否返回这一行的数据
|
||||
* @注 迭代判断多层
|
||||
* //=======================
|
||||
* 返回这一条数据的中文名
|
||||
* let name=utils.getTreeData(arr, 'flowId', item.decategoryId, 'name');
|
||||
* //=======================
|
||||
* 返回所有匹配的数据
|
||||
* let arr=utils.getTreeData(arr, 'flowId', item.decategoryId, 'name','children',true);
|
||||
*/
|
||||
export function getTreeData(
|
||||
data,
|
||||
id = 'id',
|
||||
val = '',
|
||||
name = 'name',
|
||||
children = 'children',
|
||||
isRow = false
|
||||
) {
|
||||
let arr = [];
|
||||
each(
|
||||
data,
|
||||
item => {
|
||||
if (item[id] === val) {
|
||||
arr.push(item);
|
||||
}
|
||||
},
|
||||
children
|
||||
);
|
||||
return arr.length > 0 ? (isRow ? arr : arr[0][name]) : null;
|
||||
}
|
||||
126
src/components/Editor.vue
Normal file
126
src/components/Editor.vue
Normal file
@@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<div>
|
||||
<editor
|
||||
:value="content"
|
||||
@input="handleInput"
|
||||
@init="editorInit"
|
||||
:lang="aceConfig.selectLang"
|
||||
:theme="aceConfig.selectTheme"
|
||||
:options="aceConfig.options"
|
||||
width="100%"
|
||||
height="400px"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// 编辑器主题
|
||||
const themes = [
|
||||
'xcode',
|
||||
'eclipse',
|
||||
'monokai',
|
||||
'cobalt'
|
||||
]
|
||||
// 编辑器语言
|
||||
const langs = [
|
||||
'c_cpp',
|
||||
'java',
|
||||
'javascript',
|
||||
'golang'
|
||||
]
|
||||
// tabs
|
||||
const tabs = [2, 4, 8]
|
||||
// 字体大小
|
||||
const fontSizes = [14, 15, 16, 17, 18, 19, 20, 21, 22]
|
||||
// 编辑器选项
|
||||
const options = {
|
||||
tabSize: 4, // tab默认大小
|
||||
showPrintMargin: false, // 去除编辑器里的竖线
|
||||
fontSize: 20, // 字体大小
|
||||
highlightActiveLine: true, // 高亮配置
|
||||
enableBasicAutocompletion: true, //启用基本自动完成
|
||||
enableSnippets: true, // 启用代码段
|
||||
enableLiveAutocompletion: true, // 启用实时自动完成
|
||||
}
|
||||
export default {
|
||||
name: "CodeEdit",
|
||||
components: {
|
||||
editor: require('vue2-ace-editor'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
visible: false, // 模态窗口显示控制
|
||||
aceConfig: { // 代码块配置
|
||||
langs, // 语言
|
||||
themes, // 主题
|
||||
tabs, // tab空格
|
||||
fontSizes,
|
||||
options, // 编辑器属性设置
|
||||
selectTheme: 'xcode', // 默认选择的主题
|
||||
selectLang: 'c_cpp', // 默认选择的语言
|
||||
readOnly: false, // 是否只读
|
||||
},
|
||||
}
|
||||
},
|
||||
// 接收父组件v-model传来的值
|
||||
model: {
|
||||
prop: 'content',
|
||||
event: 'change'
|
||||
},
|
||||
props: {
|
||||
content: String // content就是上面prop中声明的值,要保持一致
|
||||
},
|
||||
methods: {
|
||||
// 当该组件中的值改变时,通过该方法将该组件值传给父组件,实现组件间双向绑定
|
||||
handleInput(e) {
|
||||
this.$emit('change', e) // 这里e是每次子组件修改的值,change就是上面event中声明的,不要变
|
||||
},
|
||||
// 显示'编辑器设置'模态窗口
|
||||
showSettingModal() {
|
||||
this.visible = true
|
||||
},
|
||||
// '编辑器设置'模态窗口确认按钮回调
|
||||
handleOk() {
|
||||
this.visible = false
|
||||
// this.editorInit()
|
||||
},
|
||||
// 代码块主题切换
|
||||
handleThemeChange(value) {
|
||||
this.aceConfig.selectTheme = value
|
||||
this.editorInit()
|
||||
},
|
||||
// 代码块语言切换
|
||||
handleLangChange(value) {
|
||||
this.aceConfig.selectLang = value
|
||||
this.editorInit()
|
||||
},
|
||||
// tab切换
|
||||
handleTabChange(value) {
|
||||
this.aceConfig.options.tabSize = value
|
||||
this.editorInit()
|
||||
},
|
||||
// 字体大小切换
|
||||
handleFontChange(value) {
|
||||
this.aceConfig.options.tabSize = value
|
||||
this.editorInit()
|
||||
},
|
||||
// 代码块初始化
|
||||
editorInit () {
|
||||
require('brace/ext/language_tools') // language extension prerequsite...
|
||||
require(`brace/mode/${this.aceConfig.selectLang}`) // 语言
|
||||
require(`brace/theme/${this.aceConfig.selectTheme}`) // 主题
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.settingTitle{
|
||||
font-size: larger;
|
||||
}
|
||||
.settingDescription{
|
||||
font-size: small;
|
||||
color: #a8a8af
|
||||
}
|
||||
</style>
|
||||
|
||||
63
src/components/ElInputGroup/el-input-group.vue
Normal file
63
src/components/ElInputGroup/el-input-group.vue
Normal file
@@ -0,0 +1,63 @@
|
||||
<template>
|
||||
<div class="fu-el-input-group">
|
||||
<div class="fu-el-input-flex">
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'el-input-group'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.fu-el-input-group {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
vertical-align: bottom;
|
||||
.fu-el-input-flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
& > div {
|
||||
position: relative;
|
||||
input,
|
||||
&.el-range-editor {
|
||||
border-right: none;
|
||||
border-radius: 0;
|
||||
&:focus {
|
||||
border: 1px solid #409EFF;
|
||||
}
|
||||
}
|
||||
&.el-range-editor.is-active {
|
||||
border: 1px solid #409EFF;
|
||||
}
|
||||
&:first-child {
|
||||
input,
|
||||
&.el-range-editor {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
input,
|
||||
&.el-range-editor {
|
||||
border: 1px solid #DCDFE6;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
// 支持input append
|
||||
&.el-input-group--append input {
|
||||
border-radius: 0;
|
||||
}
|
||||
.el-input-group__append > *:active {
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
// 日期选择框
|
||||
input.el-range-input {
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
7
src/components/ElInputGroup/index.js
Normal file
7
src/components/ElInputGroup/index.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import ElInputGroup from './el-input-group'
|
||||
|
||||
/* istanbul ignore next */
|
||||
ElInputGroup.install = function(Vue) {
|
||||
Vue.component(ElInputGroup.name, ElInputGroup)
|
||||
}
|
||||
export default ElInputGroup
|
||||
13
src/components/ElMenu/index.js
Normal file
13
src/components/ElMenu/index.js
Normal file
@@ -0,0 +1,13 @@
|
||||
import ElMenu from './src/menu';
|
||||
import ElMenuItem from './src/menu-item';
|
||||
import ElMenuItemGroup from './src/menu-item-group';
|
||||
import ElSubmenu from './src/submenu';
|
||||
|
||||
/* istanbul ignore next */
|
||||
ElMenu.install = function(Vue) {
|
||||
Vue.component(ElMenu.name, ElMenu);
|
||||
Vue.component(ElMenuItem.name, ElMenuItem);
|
||||
Vue.component(ElMenuItemGroup.name, ElMenuItemGroup);
|
||||
Vue.component(ElSubmenu.name, ElSubmenu);
|
||||
};
|
||||
export default ElMenu
|
||||
33
src/components/ElMenu/mixins/emitter.js
Normal file
33
src/components/ElMenu/mixins/emitter.js
Normal file
@@ -0,0 +1,33 @@
|
||||
function broadcast(componentName, eventName, params) {
|
||||
this.$children.forEach(child => {
|
||||
var name = child.$options.componentName;
|
||||
|
||||
if (name === componentName) {
|
||||
child.$emit.apply(child, [eventName].concat(params));
|
||||
} else {
|
||||
broadcast.apply(child, [componentName, eventName].concat([params]));
|
||||
}
|
||||
});
|
||||
}
|
||||
export default {
|
||||
methods: {
|
||||
dispatch(componentName, eventName, params) {
|
||||
var parent = this.$parent || this.$root;
|
||||
var name = parent.$options.componentName;
|
||||
|
||||
while (parent && (!name || name !== componentName)) {
|
||||
parent = parent.$parent;
|
||||
|
||||
if (parent) {
|
||||
name = parent.$options.componentName;
|
||||
}
|
||||
}
|
||||
if (parent) {
|
||||
parent.$emit.apply(parent, [eventName].concat(params));
|
||||
}
|
||||
},
|
||||
broadcast(componentName, eventName, params) {
|
||||
broadcast.call(this, componentName, eventName, params);
|
||||
}
|
||||
}
|
||||
};
|
||||
9
src/components/ElMenu/mixins/focus.js
Normal file
9
src/components/ElMenu/mixins/focus.js
Normal file
@@ -0,0 +1,9 @@
|
||||
export default function(ref) {
|
||||
return {
|
||||
methods: {
|
||||
focus() {
|
||||
this.$refs[ref].focus();
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
9
src/components/ElMenu/mixins/locale.js
Normal file
9
src/components/ElMenu/mixins/locale.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import { t } from 'element-ui/src/locale';
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
t(...args) {
|
||||
return t.apply(this, args);
|
||||
}
|
||||
}
|
||||
};
|
||||
54
src/components/ElMenu/mixins/migrating.js
Normal file
54
src/components/ElMenu/mixins/migrating.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import { kebabCase } from '../utils/util';
|
||||
/**
|
||||
* Show migrating guide in browser console.
|
||||
*
|
||||
* Usage:
|
||||
* import Migrating from 'element-ui/src/mixins/migrating';
|
||||
*
|
||||
* mixins: [Migrating]
|
||||
*
|
||||
* add getMigratingConfig method for your component.
|
||||
* getMigratingConfig() {
|
||||
* return {
|
||||
* props: {
|
||||
* 'allow-no-selection': 'allow-no-selection is removed.',
|
||||
* 'selection-mode': 'selection-mode is removed.'
|
||||
* },
|
||||
* events: {
|
||||
* selectionchange: 'selectionchange is renamed to selection-change.'
|
||||
* }
|
||||
* };
|
||||
* },
|
||||
*/
|
||||
export default {
|
||||
mounted() {
|
||||
if (process.env.NODE_ENV === 'production') return;
|
||||
if (!this.$vnode) return;
|
||||
const { props = {}, events = {} } = this.getMigratingConfig();
|
||||
const { data, componentOptions } = this.$vnode;
|
||||
const definedProps = data.attrs || {};
|
||||
const definedEvents = componentOptions.listeners || {};
|
||||
|
||||
for (let propName in definedProps) {
|
||||
propName = kebabCase(propName); // compatible with camel case
|
||||
if (props[propName]) {
|
||||
console.warn(`[Element Migrating][${this.$options.name}][Attribute]: ${props[propName]}`);
|
||||
}
|
||||
}
|
||||
|
||||
for (let eventName in definedEvents) {
|
||||
eventName = kebabCase(eventName); // compatible with camel case
|
||||
if (events[eventName]) {
|
||||
console.warn(`[Element Migrating][${this.$options.name}][Event]: ${events[eventName]}`);
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getMigratingConfig() {
|
||||
return {
|
||||
props: {},
|
||||
events: {}
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
45
src/components/ElMenu/src/menu-item-group.vue
Normal file
45
src/components/ElMenu/src/menu-item-group.vue
Normal file
@@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<li class="el-menu-item-group">
|
||||
<div class="el-menu-item-group__title" :style="{paddingLeft: levelPadding + 'px'}">
|
||||
<template v-if="!$slots.title">{{title}}</template>
|
||||
<slot v-else name="title"></slot>
|
||||
</div>
|
||||
<ul>
|
||||
<slot></slot>
|
||||
</ul>
|
||||
</li>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'ElMenuItemGroup',
|
||||
|
||||
componentName: 'ElMenuItemGroup',
|
||||
|
||||
inject: ['rootMenu'],
|
||||
props: {
|
||||
title: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
paddingLeft: 20
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
levelPadding() {
|
||||
let padding = 20;
|
||||
let parent = this.$parent;
|
||||
if (this.rootMenu.collapse) return 20;
|
||||
while (parent && parent.$options.componentName !== 'ElMenu') {
|
||||
if (parent.$options.componentName === 'ElSubmenu') {
|
||||
padding += 20;
|
||||
}
|
||||
parent = parent.$parent;
|
||||
}
|
||||
return padding;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
112
src/components/ElMenu/src/menu-item.vue
Normal file
112
src/components/ElMenu/src/menu-item.vue
Normal file
@@ -0,0 +1,112 @@
|
||||
<template>
|
||||
<li class="el-menu-item"
|
||||
role="menuitem"
|
||||
tabindex="-1"
|
||||
:style="[paddingStyle, itemStyle, { backgroundColor }]"
|
||||
:class="{
|
||||
'is-active': active,
|
||||
'is-disabled': disabled
|
||||
}"
|
||||
@click="handleClick"
|
||||
@mouseenter="onMouseEnter"
|
||||
@focus="onMouseEnter"
|
||||
@blur="onMouseLeave"
|
||||
@mouseleave="onMouseLeave"
|
||||
>
|
||||
<el-tooltip
|
||||
v-if="parentMenu.$options.componentName === 'ElMenu' && rootMenu.collapse && $slots.title"
|
||||
effect="dark"
|
||||
placement="right">
|
||||
<div slot="content"><slot name="title"></slot></div>
|
||||
<div style="position: absolute;left: 0;top: 0;height: 100%;width: 100%;display: inline-block;box-sizing: border-box;padding: 0 20px;">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
<template v-else>
|
||||
<slot></slot>
|
||||
<slot name="title"></slot>
|
||||
</template>
|
||||
</li>
|
||||
</template>
|
||||
<script>
|
||||
import Menu from './menu-mixin';
|
||||
import ElTooltip from '../tooltip';
|
||||
import Emitter from '../mixins/emitter';
|
||||
|
||||
export default {
|
||||
name: 'ElMenuItem',
|
||||
|
||||
componentName: 'ElMenuItem',
|
||||
|
||||
mixins: [Menu, Emitter],
|
||||
|
||||
components: { ElTooltip },
|
||||
|
||||
props: {
|
||||
index: {
|
||||
default: null,
|
||||
validator: val => typeof val === 'string' || val === null
|
||||
},
|
||||
route: [String, Object],
|
||||
disabled: Boolean
|
||||
},
|
||||
computed: {
|
||||
active() {
|
||||
return this.index === this.rootMenu.activeIndex;
|
||||
},
|
||||
hoverBackground() {
|
||||
return this.rootMenu.hoverBackground;
|
||||
},
|
||||
backgroundColor() {
|
||||
return this.rootMenu.backgroundColor || '';
|
||||
},
|
||||
activeTextColor() {
|
||||
return this.rootMenu.activeTextColor || '';
|
||||
},
|
||||
textColor() {
|
||||
return this.rootMenu.textColor || '';
|
||||
},
|
||||
mode() {
|
||||
return this.rootMenu.mode;
|
||||
},
|
||||
itemStyle() {
|
||||
const style = {
|
||||
color: this.active ? this.activeTextColor : this.textColor
|
||||
};
|
||||
if (this.mode === 'horizontal' && !this.isNested) {
|
||||
style.borderBottomColor = this.active
|
||||
? (this.rootMenu.activeTextColor ? this.activeTextColor : '')
|
||||
: 'transparent';
|
||||
}
|
||||
return style;
|
||||
},
|
||||
isNested() {
|
||||
return this.parentMenu !== this.rootMenu;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onMouseEnter() {
|
||||
if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
|
||||
this.$el.style.backgroundColor = this.hoverBackground;
|
||||
},
|
||||
onMouseLeave() {
|
||||
if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
|
||||
this.$el.style.backgroundColor = this.backgroundColor;
|
||||
},
|
||||
handleClick() {
|
||||
if (!this.disabled) {
|
||||
this.dispatch('ElMenu', 'item-click', this);
|
||||
this.$emit('click', this);
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.parentMenu.addItem(this);
|
||||
this.rootMenu.addItem(this);
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.parentMenu.removeItem(this);
|
||||
this.rootMenu.removeItem(this);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
44
src/components/ElMenu/src/menu-mixin.js
Normal file
44
src/components/ElMenu/src/menu-mixin.js
Normal file
@@ -0,0 +1,44 @@
|
||||
export default {
|
||||
inject: ['rootMenu'],
|
||||
computed: {
|
||||
indexPath() {
|
||||
const path = [this.index];
|
||||
let parent = this.$parent;
|
||||
while (parent.$options.componentName !== 'ElMenu') {
|
||||
if (parent.index) {
|
||||
path.unshift(parent.index);
|
||||
}
|
||||
parent = parent.$parent;
|
||||
}
|
||||
return path;
|
||||
},
|
||||
parentMenu() {
|
||||
let parent = this.$parent;
|
||||
while (
|
||||
parent &&
|
||||
['ElMenu', 'ElSubmenu'].indexOf(parent.$options.componentName) === -1
|
||||
) {
|
||||
parent = parent.$parent;
|
||||
}
|
||||
return parent;
|
||||
},
|
||||
paddingStyle() {
|
||||
if (this.rootMenu.mode !== 'vertical') return {};
|
||||
|
||||
let padding = 20;
|
||||
let parent = this.$parent;
|
||||
|
||||
if (this.rootMenu.collapse) {
|
||||
padding = 20;
|
||||
} else {
|
||||
while (parent && parent.$options.componentName !== 'ElMenu') {
|
||||
if (parent.$options.componentName === 'ElSubmenu') {
|
||||
padding += 20;
|
||||
}
|
||||
parent = parent.$parent;
|
||||
}
|
||||
}
|
||||
return {paddingLeft: padding + 'px'};
|
||||
}
|
||||
}
|
||||
};
|
||||
320
src/components/ElMenu/src/menu.vue
Normal file
320
src/components/ElMenu/src/menu.vue
Normal file
@@ -0,0 +1,320 @@
|
||||
<script type="text/jsx">
|
||||
import emitter from '../mixins/emitter';
|
||||
import Migrating from '../mixins/migrating';
|
||||
import Menubar from '../utils/menu/aria-menubar';
|
||||
import { addClass, removeClass, hasClass } from '../utils/dom';
|
||||
|
||||
export default {
|
||||
name: 'ElMenu',
|
||||
|
||||
render (h) {
|
||||
const component = (
|
||||
<ul
|
||||
role="menubar"
|
||||
key={ +this.collapse }
|
||||
style={{ backgroundColor: this.backgroundColor || '' }}
|
||||
class={{
|
||||
'el-menu--horizontal': this.mode === 'horizontal',
|
||||
'el-menu--collapse': this.collapse,
|
||||
"el-menu": true
|
||||
}}
|
||||
>
|
||||
{ this.$slots.default }
|
||||
</ul>
|
||||
);
|
||||
|
||||
if (this.collapseTransition) {
|
||||
return (
|
||||
<el-menu-collapse-transition>
|
||||
{ component }
|
||||
</el-menu-collapse-transition>
|
||||
);
|
||||
} else {
|
||||
return component;
|
||||
}
|
||||
},
|
||||
|
||||
componentName: 'ElMenu',
|
||||
|
||||
mixins: [emitter, Migrating],
|
||||
|
||||
provide() {
|
||||
return {
|
||||
rootMenu: this
|
||||
};
|
||||
},
|
||||
|
||||
components: {
|
||||
'el-menu-collapse-transition': {
|
||||
functional: true,
|
||||
render(createElement, context) {
|
||||
const data = {
|
||||
props: {
|
||||
mode: 'out-in'
|
||||
},
|
||||
on: {
|
||||
beforeEnter(el) {
|
||||
el.style.opacity = 0.2;
|
||||
},
|
||||
|
||||
enter(el) {
|
||||
addClass(el, 'el-opacity-transition');
|
||||
el.style.opacity = 1;
|
||||
},
|
||||
|
||||
afterEnter(el) {
|
||||
removeClass(el, 'el-opacity-transition');
|
||||
el.style.opacity = '';
|
||||
},
|
||||
|
||||
beforeLeave(el) {
|
||||
if (!el.dataset) el.dataset = {};
|
||||
|
||||
if (hasClass(el, 'el-menu--collapse')) {
|
||||
removeClass(el, 'el-menu--collapse');
|
||||
el.dataset.oldOverflow = el.style.overflow;
|
||||
el.dataset.scrollWidth = el.clientWidth;
|
||||
addClass(el, 'el-menu--collapse');
|
||||
} else {
|
||||
addClass(el, 'el-menu--collapse');
|
||||
el.dataset.oldOverflow = el.style.overflow;
|
||||
el.dataset.scrollWidth = el.clientWidth;
|
||||
removeClass(el, 'el-menu--collapse');
|
||||
}
|
||||
|
||||
el.style.width = el.scrollWidth + 'px';
|
||||
el.style.overflow = 'hidden';
|
||||
},
|
||||
|
||||
leave(el) {
|
||||
addClass(el, 'horizontal-collapse-transition');
|
||||
el.style.width = el.dataset.scrollWidth + 'px';
|
||||
}
|
||||
}
|
||||
};
|
||||
return createElement('transition', data, context.children);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
props: {
|
||||
mode: {
|
||||
type: String,
|
||||
default: 'vertical'
|
||||
},
|
||||
defaultActive: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
defaultOpeneds: Array,
|
||||
uniqueOpened: Boolean,
|
||||
router: Boolean,
|
||||
menuTrigger: {
|
||||
type: String,
|
||||
default: 'hover'
|
||||
},
|
||||
collapse: Boolean,
|
||||
backgroundColor: String,
|
||||
textColor: String,
|
||||
activeTextColor: String,
|
||||
collapseTransition: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeIndex: this.defaultActive,
|
||||
openedMenus: (this.defaultOpeneds && !this.collapse) ? this.defaultOpeneds.slice(0) : [],
|
||||
items: {},
|
||||
submenus: {}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
hoverBackground() {
|
||||
return this.backgroundColor ? this.mixColor(this.backgroundColor, 0.2) : '';
|
||||
},
|
||||
isMenuPopup() {
|
||||
return this.mode === 'horizontal' || (this.mode === 'vertical' && this.collapse);
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
defaultActive(value){
|
||||
if(!this.items[value]){
|
||||
this.activeIndex = null
|
||||
}
|
||||
this.updateActiveIndex(value)
|
||||
},
|
||||
|
||||
defaultOpeneds(value) {
|
||||
if (!this.collapse) {
|
||||
this.openedMenus = value;
|
||||
}
|
||||
},
|
||||
|
||||
collapse(value) {
|
||||
if (value) this.openedMenus = [];
|
||||
this.broadcast('ElSubmenu', 'toggle-collapse', value);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
updateActiveIndex(val) {
|
||||
const item = this.items[val] || this.items[this.activeIndex] || this.items[this.defaultActive];
|
||||
if (item) {
|
||||
this.activeIndex = item.index;
|
||||
this.initOpenedMenu();
|
||||
} else {
|
||||
this.activeIndex = null;
|
||||
}
|
||||
},
|
||||
|
||||
getMigratingConfig() {
|
||||
return {
|
||||
props: {
|
||||
'theme': 'theme is removed.'
|
||||
}
|
||||
};
|
||||
},
|
||||
getColorChannels(color) {
|
||||
color = color.replace('#', '');
|
||||
if (/^[0-9a-fA-F]{3}$/.test(color)) {
|
||||
color = color.split('');
|
||||
for (let i = 2; i >= 0; i--) {
|
||||
color.splice(i, 0, color[i]);
|
||||
}
|
||||
color = color.join('');
|
||||
}
|
||||
if (/^[0-9a-fA-F]{6}$/.test(color)) {
|
||||
return {
|
||||
red: parseInt(color.slice(0, 2), 16),
|
||||
green: parseInt(color.slice(2, 4), 16),
|
||||
blue: parseInt(color.slice(4, 6), 16)
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
red: 255,
|
||||
green: 255,
|
||||
blue: 255
|
||||
};
|
||||
}
|
||||
},
|
||||
mixColor(color, percent) {
|
||||
let { red, green, blue } = this.getColorChannels(color);
|
||||
if (percent > 0) { // shade given color
|
||||
red *= 1 - percent;
|
||||
green *= 1 - percent;
|
||||
blue *= 1 - percent;
|
||||
} else { // tint given color
|
||||
red += (255 - red) * percent;
|
||||
green += (255 - green) * percent;
|
||||
blue += (255 - blue) * percent;
|
||||
}
|
||||
return `rgb(${ Math.round(red) }, ${ Math.round(green) }, ${ Math.round(blue) })`;
|
||||
},
|
||||
addItem(item) {
|
||||
this.$set(this.items, item.index, item);
|
||||
},
|
||||
removeItem(item) {
|
||||
delete this.items[item.index];
|
||||
},
|
||||
addSubmenu(item) {
|
||||
this.$set(this.submenus, item.index, item);
|
||||
},
|
||||
removeSubmenu(item) {
|
||||
delete this.submenus[item.index];
|
||||
},
|
||||
openMenu(index, indexPath) {
|
||||
let openedMenus = this.openedMenus;
|
||||
if (openedMenus.indexOf(index) !== -1) return;
|
||||
// 将不在该菜单路径下的其余菜单收起
|
||||
// collapse all menu that are not under current menu item
|
||||
if (this.uniqueOpened) {
|
||||
this.openedMenus = openedMenus.filter(index => {
|
||||
return indexPath.indexOf(index) !== -1;
|
||||
});
|
||||
}
|
||||
this.openedMenus.push(index);
|
||||
},
|
||||
closeMenu(index) {
|
||||
const i = this.openedMenus.indexOf(index);
|
||||
if (i !== -1) {
|
||||
this.openedMenus.splice(i, 1);
|
||||
}
|
||||
},
|
||||
handleSubmenuClick(submenu) {
|
||||
const { index, indexPath } = submenu;
|
||||
let isOpened = this.openedMenus.indexOf(index) !== -1;
|
||||
|
||||
if (isOpened) {
|
||||
this.closeMenu(index);
|
||||
this.$emit('close', index, indexPath);
|
||||
} else {
|
||||
this.openMenu(index, indexPath);
|
||||
this.$emit('open', index, indexPath);
|
||||
}
|
||||
},
|
||||
handleItemClick(item) {
|
||||
const { index, indexPath } = item;
|
||||
const oldActiveIndex = this.activeIndex;
|
||||
const hasIndex = item.index !== null;
|
||||
|
||||
if (hasIndex) {
|
||||
this.activeIndex = item.index;
|
||||
}
|
||||
|
||||
this.$emit('select', index, indexPath, item);
|
||||
|
||||
if (this.mode === 'horizontal' || this.collapse) {
|
||||
this.openedMenus = [];
|
||||
}
|
||||
|
||||
if (this.router && hasIndex) {
|
||||
this.routeToItem(item, (error) => {
|
||||
this.activeIndex = oldActiveIndex;
|
||||
//if (error) console.error(error);
|
||||
});
|
||||
}
|
||||
},
|
||||
// 初始化展开菜单
|
||||
// initialize opened menu
|
||||
initOpenedMenu() {
|
||||
const index = this.activeIndex;
|
||||
const activeItem = this.items[index];
|
||||
if (!activeItem || this.mode === 'horizontal' || this.collapse) return;
|
||||
|
||||
let indexPath = activeItem.indexPath;
|
||||
|
||||
// 展开该菜单项的路径上所有子菜单
|
||||
// expand all submenus of the menu item
|
||||
indexPath.forEach(index => {
|
||||
let submenu = this.submenus[index];
|
||||
submenu && this.openMenu(index, submenu.indexPath);
|
||||
});
|
||||
},
|
||||
routeToItem(item, onError) {
|
||||
let route = item.route || item.index;
|
||||
try {
|
||||
this.$router.push(route, () => {}, onError);
|
||||
} catch (e) {
|
||||
// console.error(e);
|
||||
}
|
||||
},
|
||||
open(index) {
|
||||
const { indexPath } = this.submenus[index.toString()];
|
||||
indexPath.forEach(i => this.openMenu(i, indexPath));
|
||||
},
|
||||
close(index) {
|
||||
this.closeMenu(index);
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initOpenedMenu();
|
||||
this.$on('item-click', this.handleItemClick);
|
||||
this.$on('submenu-click', this.handleSubmenuClick);
|
||||
if (this.mode === 'horizontal') {
|
||||
new Menubar(this.$el); // eslint-disable-line
|
||||
}
|
||||
this.$watch('items', this.updateActiveIndex);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
349
src/components/ElMenu/src/submenu.vue
Normal file
349
src/components/ElMenu/src/submenu.vue
Normal file
@@ -0,0 +1,349 @@
|
||||
<script>
|
||||
import ElCollapseTransition from '../transitions/collapse-transition';
|
||||
import menuMixin from './menu-mixin';
|
||||
import Emitter from '../mixins/emitter';
|
||||
import Popper from '../utils/vue-popper';
|
||||
|
||||
const poperMixins = {
|
||||
props: {
|
||||
transformOrigin: {
|
||||
type: [Boolean, String],
|
||||
default: false
|
||||
},
|
||||
offset: Popper.props.offset,
|
||||
boundariesPadding: Popper.props.boundariesPadding,
|
||||
popperOptions: Popper.props.popperOptions
|
||||
},
|
||||
data: Popper.data,
|
||||
methods: Popper.methods,
|
||||
beforeDestroy: Popper.beforeDestroy,
|
||||
deactivated: Popper.deactivated
|
||||
};
|
||||
|
||||
export default {
|
||||
name: 'ElSubmenu',
|
||||
|
||||
componentName: 'ElSubmenu',
|
||||
|
||||
mixins: [menuMixin, Emitter, poperMixins],
|
||||
|
||||
components: { ElCollapseTransition },
|
||||
|
||||
props: {
|
||||
index: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
showTimeout: {
|
||||
type: Number,
|
||||
default: 300
|
||||
},
|
||||
hideTimeout: {
|
||||
type: Number,
|
||||
default: 300
|
||||
},
|
||||
popperClass: String,
|
||||
disabled: Boolean,
|
||||
popperAppendToBody: {
|
||||
type: Boolean,
|
||||
default: undefined
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
popperJS: null,
|
||||
timeout: null,
|
||||
items: {},
|
||||
submenus: {},
|
||||
mouseInChild: false
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
opened(val) {
|
||||
if (this.isMenuPopup) {
|
||||
this.$nextTick(_ => {
|
||||
this.updatePopper();
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
// popper option
|
||||
appendToBody() {
|
||||
return this.popperAppendToBody === undefined
|
||||
? this.isFirstLevel
|
||||
: this.popperAppendToBody;
|
||||
},
|
||||
menuTransitionName() {
|
||||
return this.rootMenu.collapse ? 'el-zoom-in-left' : 'el-zoom-in-top';
|
||||
},
|
||||
opened() {
|
||||
return this.rootMenu.openedMenus.indexOf(this.index) > -1;
|
||||
},
|
||||
active() {
|
||||
let isActive = false;
|
||||
const submenus = this.submenus;
|
||||
const items = this.items;
|
||||
|
||||
Object.keys(items).forEach(index => {
|
||||
if (items[index].active) {
|
||||
isActive = true;
|
||||
}
|
||||
});
|
||||
|
||||
Object.keys(submenus).forEach(index => {
|
||||
if (submenus[index].active) {
|
||||
isActive = true;
|
||||
}
|
||||
});
|
||||
|
||||
return isActive;
|
||||
},
|
||||
hoverBackground() {
|
||||
return this.rootMenu.hoverBackground;
|
||||
},
|
||||
backgroundColor() {
|
||||
return this.rootMenu.backgroundColor || '';
|
||||
},
|
||||
activeTextColor() {
|
||||
return this.rootMenu.activeTextColor || '';
|
||||
},
|
||||
textColor() {
|
||||
return this.rootMenu.textColor || '';
|
||||
},
|
||||
mode() {
|
||||
return this.rootMenu.mode;
|
||||
},
|
||||
isMenuPopup() {
|
||||
return this.rootMenu.isMenuPopup;
|
||||
},
|
||||
titleStyle() {
|
||||
if (this.mode !== 'horizontal') {
|
||||
return {
|
||||
color: this.textColor
|
||||
};
|
||||
}
|
||||
return {
|
||||
borderBottomColor: this.active
|
||||
? (this.rootMenu.activeTextColor ? this.activeTextColor : '')
|
||||
: 'transparent',
|
||||
color: this.active
|
||||
? this.activeTextColor
|
||||
: this.textColor
|
||||
};
|
||||
},
|
||||
isFirstLevel() {
|
||||
let isFirstLevel = true;
|
||||
let parent = this.$parent;
|
||||
while (parent && parent !== this.rootMenu) {
|
||||
if (['ElSubmenu', 'ElMenuItemGroup'].indexOf(parent.$options.componentName) > -1) {
|
||||
isFirstLevel = false;
|
||||
break;
|
||||
} else {
|
||||
parent = parent.$parent;
|
||||
}
|
||||
}
|
||||
return isFirstLevel;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleCollapseToggle(value) {
|
||||
if (value) {
|
||||
this.initPopper();
|
||||
} else {
|
||||
this.doDestroy();
|
||||
}
|
||||
},
|
||||
addItem(item) {
|
||||
this.$set(this.items, item.index, item);
|
||||
},
|
||||
removeItem(item) {
|
||||
delete this.items[item.index];
|
||||
},
|
||||
addSubmenu(item) {
|
||||
this.$set(this.submenus, item.index, item);
|
||||
},
|
||||
removeSubmenu(item) {
|
||||
delete this.submenus[item.index];
|
||||
},
|
||||
handleClick() {
|
||||
const { rootMenu, disabled } = this;
|
||||
if (
|
||||
(rootMenu.menuTrigger === 'hover' && rootMenu.mode === 'horizontal') ||
|
||||
(rootMenu.collapse && rootMenu.mode === 'vertical') ||
|
||||
disabled
|
||||
) {
|
||||
return;
|
||||
}
|
||||
this.dispatch('ElMenu', 'submenu-click', this);
|
||||
},
|
||||
handleMouseenter(event, showTimeout = this.showTimeout) {
|
||||
|
||||
if (!('ActiveXObject' in window) && event.type === 'focus' && !event.relatedTarget) {
|
||||
return;
|
||||
}
|
||||
const { rootMenu, disabled } = this;
|
||||
if (
|
||||
(rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal') ||
|
||||
(!rootMenu.collapse && rootMenu.mode === 'vertical') ||
|
||||
disabled
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: 更下一级菜单显示问题暂时无法解决
|
||||
const windowWidth = document.documentElement.clientWidth
|
||||
const { width, right } = this.$el.getBoundingClientRect()
|
||||
if (right + width + 40 > windowWidth) {
|
||||
this.$refs.menu.style.transform = 'translateX(-410px)'
|
||||
}
|
||||
|
||||
this.dispatch('ElSubmenu', 'mouse-enter-child');
|
||||
clearTimeout(this.timeout);
|
||||
this.timeout = setTimeout(() => {
|
||||
this.rootMenu.openMenu(this.index, this.indexPath);
|
||||
}, showTimeout);
|
||||
},
|
||||
handleMouseleave() {
|
||||
const {rootMenu} = this;
|
||||
if (
|
||||
(rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal') ||
|
||||
(!rootMenu.collapse && rootMenu.mode === 'vertical')
|
||||
) {
|
||||
return;
|
||||
}
|
||||
this.dispatch('ElSubmenu', 'mouse-leave-child');
|
||||
clearTimeout(this.timeout);
|
||||
this.timeout = setTimeout(() => {
|
||||
if (this.appendToBody) {
|
||||
this.rootMenu.openedMenus = [];
|
||||
}
|
||||
!this.mouseInChild && this.rootMenu.closeMenu(this.index);
|
||||
}, this.hideTimeout);
|
||||
},
|
||||
handleTitleMouseenter() {
|
||||
if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
|
||||
const title = this.$refs['submenu-title'];
|
||||
title && (title.style.backgroundColor = this.rootMenu.hoverBackground);
|
||||
},
|
||||
handleTitleMouseleave() {
|
||||
if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;
|
||||
const title = this.$refs['submenu-title'];
|
||||
title && (title.style.backgroundColor = this.rootMenu.backgroundColor || '');
|
||||
},
|
||||
updatePlacement() {
|
||||
this.currentPlacement = this.mode === 'horizontal' && this.isFirstLevel
|
||||
? 'bottom-start'
|
||||
: 'right-start';
|
||||
},
|
||||
initPopper() {
|
||||
this.referenceElm = this.$el;
|
||||
this.popperElm = this.$refs.menu;
|
||||
this.updatePlacement();
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$on('toggle-collapse', this.handleCollapseToggle);
|
||||
this.$on('mouse-enter-child', () => {
|
||||
this.mouseInChild = true;
|
||||
clearTimeout(this.timeout);
|
||||
});
|
||||
this.$on('mouse-leave-child', () => {
|
||||
this.mouseInChild = false;
|
||||
clearTimeout(this.timeout);
|
||||
});
|
||||
},
|
||||
mounted() {
|
||||
this.parentMenu.addSubmenu(this);
|
||||
this.rootMenu.addSubmenu(this);
|
||||
this.initPopper();
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.parentMenu.removeSubmenu(this);
|
||||
this.rootMenu.removeSubmenu(this);
|
||||
},
|
||||
render(h) {
|
||||
const {
|
||||
active,
|
||||
opened,
|
||||
paddingStyle,
|
||||
titleStyle,
|
||||
backgroundColor,
|
||||
rootMenu,
|
||||
currentPlacement,
|
||||
menuTransitionName,
|
||||
mode,
|
||||
disabled,
|
||||
popperClass,
|
||||
$slots,
|
||||
isFirstLevel
|
||||
} = this;
|
||||
const popupMenu = (
|
||||
<transition name={menuTransitionName}>
|
||||
<div
|
||||
ref="menu"
|
||||
v-show={opened}
|
||||
class={[`el-menu--${mode}`, popperClass]}
|
||||
on-mouseenter={($event) => this.handleMouseenter($event, 100)}
|
||||
on-mouseleave={this.handleMouseleave}
|
||||
on-focus={($event) => this.handleMouseenter($event, 100)}>
|
||||
<ul
|
||||
role="menu"
|
||||
class={['el-menu el-menu--popup', `el-menu--popup-${currentPlacement}`]}
|
||||
style={{ backgroundColor: rootMenu.backgroundColor || '' }}>
|
||||
{$slots.default}
|
||||
</ul>
|
||||
</div>
|
||||
</transition>
|
||||
);
|
||||
|
||||
const inlineMenu = (
|
||||
<el-collapse-transition>
|
||||
<ul
|
||||
role="menu"
|
||||
class="el-menu el-menu--inline"
|
||||
v-show={opened}
|
||||
style={{ backgroundColor: rootMenu.backgroundColor || '' }}>
|
||||
{$slots.default}
|
||||
</ul>
|
||||
</el-collapse-transition>
|
||||
);
|
||||
|
||||
const submenuTitleIcon = (
|
||||
rootMenu.mode === 'horizontal' && isFirstLevel ||
|
||||
rootMenu.mode === 'vertical' && !rootMenu.collapse
|
||||
) ? 'el-icon-arrow-down' : 'el-icon-arrow-right';
|
||||
|
||||
return (
|
||||
<li
|
||||
class={{
|
||||
'el-submenu': true,
|
||||
'is-active': active,
|
||||
'is-opened': opened,
|
||||
'is-disabled': disabled
|
||||
}}
|
||||
role="menuitem"
|
||||
aria-haspopup="true"
|
||||
aria-expanded={opened}
|
||||
on-mouseenter={this.handleMouseenter}
|
||||
on-mouseleave={this.handleMouseleave}
|
||||
on-focus={this.handleMouseenter}
|
||||
>
|
||||
<div
|
||||
class="el-submenu__title"
|
||||
ref="submenu-title"
|
||||
on-click={this.handleClick}
|
||||
on-mouseenter={this.handleTitleMouseenter}
|
||||
on-mouseleave={this.handleTitleMouseleave}
|
||||
style={[paddingStyle, titleStyle, { backgroundColor }]}
|
||||
>
|
||||
{$slots.title}
|
||||
<i class={[ 'el-submenu__icon-arrow', submenuTitleIcon ]}></i>
|
||||
</div>
|
||||
{this.isMenuPopup ? popupMenu : inlineMenu}
|
||||
</li>
|
||||
);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
8
src/components/ElMenu/tooltip/index.js
Normal file
8
src/components/ElMenu/tooltip/index.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import Tooltip from './src/main';
|
||||
|
||||
/* istanbul ignore next */
|
||||
Tooltip.install = function(Vue) {
|
||||
Vue.component(Tooltip.name, Tooltip);
|
||||
};
|
||||
|
||||
export default Tooltip;
|
||||
241
src/components/ElMenu/tooltip/src/main.js
Normal file
241
src/components/ElMenu/tooltip/src/main.js
Normal file
@@ -0,0 +1,241 @@
|
||||
import Popper from '../../utils/vue-popper';
|
||||
import debounce from './throttle-debounce/debounce';
|
||||
import { addClass, removeClass, on, off } from '../../utils/dom';
|
||||
import { generateId } from '../../utils/util';
|
||||
import Vue from 'vue';
|
||||
|
||||
export default {
|
||||
name: 'ElTooltip',
|
||||
|
||||
mixins: [Popper],
|
||||
|
||||
props: {
|
||||
openDelay: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
disabled: Boolean,
|
||||
manual: Boolean,
|
||||
effect: {
|
||||
type: String,
|
||||
default: 'dark'
|
||||
},
|
||||
arrowOffset: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
popperClass: String,
|
||||
content: String,
|
||||
visibleArrow: {
|
||||
default: true
|
||||
},
|
||||
transition: {
|
||||
type: String,
|
||||
default: 'el-fade-in-linear'
|
||||
},
|
||||
popperOptions: {
|
||||
default() {
|
||||
return {
|
||||
boundariesPadding: 10,
|
||||
gpuAcceleration: false
|
||||
};
|
||||
}
|
||||
},
|
||||
enterable: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
hideAfter: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
tabindex: {
|
||||
type: Number,
|
||||
default: 0
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
tooltipId: `el-tooltip-${generateId()}`,
|
||||
timeoutPending: null,
|
||||
focusing: false
|
||||
};
|
||||
},
|
||||
beforeCreate() {
|
||||
if (this.$isServer) return;
|
||||
|
||||
this.popperVM = new Vue({
|
||||
data: { node: '' },
|
||||
render(h) {
|
||||
return this.node;
|
||||
}
|
||||
}).$mount();
|
||||
|
||||
this.debounceClose = debounce(200, () => this.handleClosePopper());
|
||||
},
|
||||
|
||||
render(h) {
|
||||
if (this.popperVM) {
|
||||
this.popperVM.node = (
|
||||
<transition
|
||||
name={ this.transition }
|
||||
onAfterLeave={ this.doDestroy }>
|
||||
<div
|
||||
onMouseleave={ () => { this.setExpectedState(false); this.debounceClose(); } }
|
||||
onMouseenter= { () => { this.setExpectedState(true); } }
|
||||
ref="popper"
|
||||
role="tooltip"
|
||||
id={this.tooltipId}
|
||||
aria-hidden={ (this.disabled || !this.showPopper) ? 'true' : 'false' }
|
||||
v-show={!this.disabled && this.showPopper}
|
||||
class={
|
||||
['el-tooltip__popper', 'is-' + this.effect, this.popperClass]
|
||||
}>
|
||||
{ this.$slots.content || this.content }
|
||||
</div>
|
||||
</transition>);
|
||||
}
|
||||
|
||||
const firstElement = this.getFirstElement();
|
||||
if (!firstElement) return null;
|
||||
|
||||
const data = firstElement.data = firstElement.data || {};
|
||||
data.staticClass = this.addTooltipClass(data.staticClass);
|
||||
|
||||
return firstElement;
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.referenceElm = this.$el;
|
||||
if (this.$el.nodeType === 1) {
|
||||
this.$el.setAttribute('aria-describedby', this.tooltipId);
|
||||
this.$el.setAttribute('tabindex', this.tabindex);
|
||||
on(this.referenceElm, 'mouseenter', this.show);
|
||||
on(this.referenceElm, 'mouseleave', this.hide);
|
||||
on(this.referenceElm, 'focus', () => {
|
||||
if (!this.$slots.default || !this.$slots.default.length) {
|
||||
this.handleFocus();
|
||||
return;
|
||||
}
|
||||
const instance = this.$slots.default[0].componentInstance;
|
||||
if (instance && instance.focus) {
|
||||
instance.focus();
|
||||
} else {
|
||||
this.handleFocus();
|
||||
}
|
||||
});
|
||||
on(this.referenceElm, 'blur', this.handleBlur);
|
||||
on(this.referenceElm, 'click', this.removeFocusing);
|
||||
}
|
||||
// fix issue https://github.com/ElemeFE/element/issues/14424
|
||||
if (this.value && this.popperVM) {
|
||||
this.popperVM.$nextTick(() => {
|
||||
if (this.value) {
|
||||
this.updatePopper();
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
focusing(val) {
|
||||
if (val) {
|
||||
addClass(this.referenceElm, 'focusing');
|
||||
} else {
|
||||
removeClass(this.referenceElm, 'focusing');
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show() {
|
||||
this.setExpectedState(true);
|
||||
this.handleShowPopper();
|
||||
},
|
||||
|
||||
hide() {
|
||||
this.setExpectedState(false);
|
||||
this.debounceClose();
|
||||
},
|
||||
handleFocus() {
|
||||
this.focusing = true;
|
||||
this.show();
|
||||
},
|
||||
handleBlur() {
|
||||
this.focusing = false;
|
||||
this.hide();
|
||||
},
|
||||
removeFocusing() {
|
||||
this.focusing = false;
|
||||
},
|
||||
|
||||
addTooltipClass(prev) {
|
||||
if (!prev) {
|
||||
return 'el-tooltip';
|
||||
} else {
|
||||
return 'el-tooltip ' + prev.replace('el-tooltip', '');
|
||||
}
|
||||
},
|
||||
|
||||
handleShowPopper() {
|
||||
if (!this.expectedState || this.manual) return;
|
||||
clearTimeout(this.timeout);
|
||||
this.timeout = setTimeout(() => {
|
||||
this.showPopper = true;
|
||||
}, this.openDelay);
|
||||
|
||||
if (this.hideAfter > 0) {
|
||||
this.timeoutPending = setTimeout(() => {
|
||||
this.showPopper = false;
|
||||
}, this.hideAfter);
|
||||
}
|
||||
},
|
||||
|
||||
handleClosePopper() {
|
||||
if (this.enterable && this.expectedState || this.manual) return;
|
||||
clearTimeout(this.timeout);
|
||||
|
||||
if (this.timeoutPending) {
|
||||
clearTimeout(this.timeoutPending);
|
||||
}
|
||||
this.showPopper = false;
|
||||
|
||||
if (this.disabled) {
|
||||
this.doDestroy();
|
||||
}
|
||||
},
|
||||
|
||||
setExpectedState(expectedState) {
|
||||
if (expectedState === false) {
|
||||
clearTimeout(this.timeoutPending);
|
||||
}
|
||||
this.expectedState = expectedState;
|
||||
},
|
||||
|
||||
getFirstElement() {
|
||||
const slots = this.$slots.default;
|
||||
if (!Array.isArray(slots)) return null;
|
||||
let element = null;
|
||||
for (let index = 0; index < slots.length; index++) {
|
||||
if (slots[index] && slots[index].tag) {
|
||||
element = slots[index];
|
||||
};
|
||||
}
|
||||
return element;
|
||||
}
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.popperVM && this.popperVM.$destroy();
|
||||
},
|
||||
|
||||
destroyed() {
|
||||
const reference = this.referenceElm;
|
||||
if (reference.nodeType === 1) {
|
||||
off(reference, 'mouseenter', this.show);
|
||||
off(reference, 'mouseleave', this.hide);
|
||||
off(reference, 'focus', this.handleFocus);
|
||||
off(reference, 'blur', this.handleBlur);
|
||||
off(reference, 'click', this.removeFocusing);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[package.json]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": [
|
||||
"niksy"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- '4'
|
||||
325
src/components/ElMenu/tooltip/src/throttle-debounce/LICENSE.md
Normal file
325
src/components/ElMenu/tooltip/src/throttle-debounce/LICENSE.md
Normal file
@@ -0,0 +1,325 @@
|
||||
Copyright (c) Ivan Nikolić <http://ivannikolic.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
Copyright (c) 2010 "Cowboy" Ben Alman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
102
src/components/ElMenu/tooltip/src/throttle-debounce/README.md
Normal file
102
src/components/ElMenu/tooltip/src/throttle-debounce/README.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# throttle-debounce
|
||||
|
||||
[![Build Status][ci-img]][ci]
|
||||
|
||||
Throttle/debounce your functions.
|
||||
|
||||
This module is the same as [jquery-throttle-debounce][jquery-throttle-debounce] ([with some differences](#differences-with-original-module)), but it’s transferred to CommonJS so it can be easily used with tools like Browserify or Webpack.
|
||||
|
||||
## Install
|
||||
|
||||
```sh
|
||||
npm install throttle-debounce --save
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var throttle = require('throttle-debounce/throttle');
|
||||
var debounce = require('throttle-debounce/debounce');
|
||||
|
||||
throttle(300, function () {
|
||||
// Throttled function
|
||||
});
|
||||
|
||||
debounce(300, function () {
|
||||
// Debounced function
|
||||
});
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
### throttle(delay, noTrailing, callback, debounceMode)
|
||||
|
||||
Returns: `Function`
|
||||
|
||||
Throttle execution of a function. Especially useful for rate limiting execution of handlers on events like resize and scroll.
|
||||
|
||||
#### delay
|
||||
|
||||
Type: `Number`
|
||||
|
||||
A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
|
||||
|
||||
#### noTrailing
|
||||
|
||||
Type: `Boolean`
|
||||
|
||||
Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset)
|
||||
|
||||
#### callback
|
||||
|
||||
Type: `Function`
|
||||
|
||||
A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is, to `callback` when the throttled-function is executed.
|
||||
|
||||
#### debounceMode
|
||||
|
||||
Type: `Boolean`
|
||||
|
||||
If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end), schedule `callback` to execute after `delay` ms.
|
||||
|
||||
### debounce(delay, atBegin, callback)
|
||||
|
||||
Returns: `Function`
|
||||
|
||||
Debounce execution of a function. Debouncing, unlike throttling, guarantees that a function is only executed a single time, either at the very beginning of a series of calls, or at the very end.
|
||||
|
||||
#### delay
|
||||
|
||||
Type: `Number`
|
||||
|
||||
A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
|
||||
|
||||
#### atBegin
|
||||
|
||||
Type: `Boolean`
|
||||
|
||||
Optional, defaults to false. If `atBegin` is false or unspecified, callback will only be executed `delay` milliseconds after the last debounced-function call. If `atBegin` is true, callback will be executed only at the first debounced-function call. (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).
|
||||
|
||||
#### callback
|
||||
|
||||
Type: `Function`
|
||||
|
||||
A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is, to `callback` when the debounced-function is executed.
|
||||
|
||||
## Differences with original module
|
||||
|
||||
* Dependancy on jQuery is removed, so if you rely on GUIDs set by jQuery, plan accordingly
|
||||
* There is no standalone version available, so don’t rely on `$.throttle` and `$.debounce` to be available
|
||||
|
||||
## Browser support
|
||||
|
||||
Tested in IE8+ and all modern browsers.
|
||||
|
||||
## License
|
||||
|
||||
**Original module license:** Copyright (c) 2010 "Cowboy" Ben Alman (Dual licensed under the MIT and GPL licenses. http://benalman.com/about/license/)
|
||||
**This module license:** MIT © [Ivan Nikolić](http://ivannikolic.com)
|
||||
|
||||
[ci]: https://travis-ci.org/niksy/throttle-debounce
|
||||
[ci-img]: https://img.shields.io/travis/niksy/throttle-debounce/master.svg
|
||||
[jquery-throttle-debounce]: https://github.com/cowboy/jquery-throttle-debounce
|
||||
@@ -0,0 +1,21 @@
|
||||
/* eslint-disable no-undefined */
|
||||
|
||||
var throttle = require('./throttle');
|
||||
|
||||
/**
|
||||
* Debounce execution of a function. Debouncing, unlike throttling,
|
||||
* guarantees that a function is only executed a single time, either at the
|
||||
* very beginning of a series of calls, or at the very end.
|
||||
*
|
||||
* @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
|
||||
* @param {Boolean} [atBegin] Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds
|
||||
* after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.
|
||||
* (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).
|
||||
* @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
|
||||
* to `callback` when the debounced-function is executed.
|
||||
*
|
||||
* @return {Function} A new, debounced function.
|
||||
*/
|
||||
module.exports = function ( delay, atBegin, callback ) {
|
||||
return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);
|
||||
};
|
||||
17
src/components/ElMenu/tooltip/src/throttle-debounce/index.d.ts
vendored
Normal file
17
src/components/ElMenu/tooltip/src/throttle-debounce/index.d.ts
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
declare module 'throttle-debounce' {
|
||||
type throttleFn = (
|
||||
delay: number,
|
||||
noTrailing: boolean,
|
||||
callback?: Function,
|
||||
debounceMode?: boolean
|
||||
) => Function;
|
||||
|
||||
type debounceFn = (
|
||||
delay: number,
|
||||
atBegin: boolean,
|
||||
callback?: Function
|
||||
) => Function;
|
||||
|
||||
const throttle: throttleFn;
|
||||
const debounce: debounceFn;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
var throttle = require('./throttle');
|
||||
var debounce = require('./debounce');
|
||||
|
||||
module.exports = {
|
||||
throttle: throttle,
|
||||
debounce: debounce
|
||||
};
|
||||
@@ -0,0 +1,70 @@
|
||||
// Karma configuration
|
||||
// Generated on Sun May 01 2016 16:50:20 GMT+0200 (CEST)
|
||||
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
|
||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||
basePath: '',
|
||||
|
||||
|
||||
// frameworks to use
|
||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||
frameworks: ['browserify', 'qunit'],
|
||||
|
||||
|
||||
// list of files / patterns to load in the browser
|
||||
files: [
|
||||
'test/**/*.js'
|
||||
],
|
||||
|
||||
|
||||
// list of files to exclude
|
||||
exclude: [
|
||||
],
|
||||
|
||||
|
||||
// preprocess matching files before serving them to the browser
|
||||
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||
preprocessors: {
|
||||
'test/**/*.js': 'browserify'
|
||||
},
|
||||
|
||||
|
||||
// test results reporter to use
|
||||
// possible values: 'dots', 'progress'
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['mocha'],
|
||||
|
||||
|
||||
// web server port
|
||||
port: 9876,
|
||||
|
||||
|
||||
// enable / disable colors in the output (reporters and logs)
|
||||
colors: true,
|
||||
|
||||
|
||||
// level of logging
|
||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||
logLevel: config.LOG_INFO,
|
||||
|
||||
|
||||
// enable / disable watching file and executing tests whenever any file changes
|
||||
autoWatch: false,
|
||||
|
||||
|
||||
// start these browsers
|
||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||
browsers: ['Chrome', 'Firefox'],
|
||||
|
||||
|
||||
// Continuous Integration mode
|
||||
// if true, Karma captures browsers, runs the tests and exits
|
||||
singleRun: false,
|
||||
|
||||
// Concurrency level
|
||||
// how many browser should be started simultaneous
|
||||
concurrency: Infinity
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"name": "throttle-debounce",
|
||||
"version": "1.1.0",
|
||||
"description": "Throttle/debounce your functions.",
|
||||
"main": "index.js",
|
||||
"typings": "index.d.ts",
|
||||
"author": "Ivan Nikolić <niksy5@gmail.com> (http://ivannikolic.com/)",
|
||||
"contributors": [
|
||||
"Ben Alman (http://benalman.com)"
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
},
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "eslint {index,test/*}.js && karma start --single-run --browsers PhantomJS"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"browserify": "^13.0.0",
|
||||
"eslint": "^1.10.3",
|
||||
"eslint-config-niksy": "^1.0.6",
|
||||
"karma": "^0.13.22",
|
||||
"karma-browserify": "^5.0.4",
|
||||
"karma-chrome-launcher": "^0.2.3",
|
||||
"karma-firefox-launcher": "^0.1.7",
|
||||
"karma-mocha-reporter": "^2.0.2",
|
||||
"karma-phantomjs-launcher": "^1.0.0",
|
||||
"karma-qunit": "^0.1.9",
|
||||
"mocha": "^2.4.5",
|
||||
"phantomjs-prebuilt": "^2.1.7",
|
||||
"qunitjs": "^1.23.1",
|
||||
"watchify": "^3.7.0"
|
||||
},
|
||||
"keywords": [
|
||||
"throttle",
|
||||
"debounce",
|
||||
"browserify"
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/niksy/throttle-debounce.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/niksy/throttle-debounce/issues"
|
||||
},
|
||||
"homepage": "https://github.com/niksy/throttle-debounce#readme",
|
||||
"__npminstall_done": "Fri Mar 20 2020 20:34:55 GMT+0800 (GMT+08:00)",
|
||||
"_from": "throttle-debounce@1.1.0",
|
||||
"_resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz"
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
/* jshint ignore:start */
|
||||
/* eslint-disable */
|
||||
|
||||
/* Original QUnit test: https://github.com/cowboy/jquery-throttle-debounce/blob/master/unit/unit.js */
|
||||
|
||||
var module = require('qunitjs').module;
|
||||
var test = require('qunitjs').test;
|
||||
var expect = require('qunitjs').expect;
|
||||
var ok = require('qunitjs').ok;
|
||||
var equals = require('qunitjs').equal;
|
||||
var start = require('qunitjs').start;
|
||||
var stop = require('qunitjs').stop;
|
||||
|
||||
var throttle = require('../throttle');
|
||||
var debounce = require('../debounce');
|
||||
|
||||
QUnit.config.autostart = false;
|
||||
|
||||
var pause = 500,
|
||||
delay = 100;
|
||||
|
||||
function exec_many_times(each, complete) {
|
||||
var i = 0,
|
||||
repeated,
|
||||
id;
|
||||
|
||||
function start() {
|
||||
id = setInterval(function() {
|
||||
each();
|
||||
if (++i === 50) {
|
||||
clearInterval(id);
|
||||
complete(repeated ? null : function() {
|
||||
i = 0;
|
||||
repeated = true;
|
||||
setTimeout(start, pause);
|
||||
});
|
||||
}
|
||||
}, 20);
|
||||
}
|
||||
|
||||
setTimeout(start, pause);
|
||||
};
|
||||
|
||||
module('throttle');
|
||||
|
||||
test('delay, callback', function() {
|
||||
expect(7);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function(now) {
|
||||
arr.push(now - this)
|
||||
},
|
||||
throttled = throttle(delay, fn);
|
||||
|
||||
equals(throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
var now = +new Date();
|
||||
start_time = start_time || now;
|
||||
i++;
|
||||
throttled.call(start_time, now);
|
||||
}, function(callback) {
|
||||
var len = arr.length;
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr, arr.length, len, i );
|
||||
ok(arr.length < i, 'callback should be executed less # of times than throttled-callback');
|
||||
equals(arr[0], 0, 'callback should be executed immediately');
|
||||
equals(arr.length - len, 1, 'callback should be executed one more time after finish');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
|
||||
test('delay, false, callback', function() {
|
||||
expect(7);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function(now) {
|
||||
arr.push(now - this)
|
||||
},
|
||||
throttled = throttle(delay, false, fn);
|
||||
|
||||
equals(throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
var now = +new Date();
|
||||
start_time = start_time || now;
|
||||
i++;
|
||||
throttled.call(start_time, now);
|
||||
}, function(callback) {
|
||||
var len = arr.length;
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr, arr.length, len, i );
|
||||
ok(arr.length < i, 'callback should be executed less # of times than throttled-callback');
|
||||
equals(arr[0], 0, 'callback should be executed immediately');
|
||||
equals(arr.length - len, 1, 'callback should be executed one more time after finish');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
|
||||
test('delay, true, callback', function() {
|
||||
expect(7);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function(now) {
|
||||
arr.push(now - this)
|
||||
},
|
||||
throttled = throttle(delay, true, fn);
|
||||
|
||||
equals(throttled.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
var now = +new Date();
|
||||
start_time = start_time || now;
|
||||
i++;
|
||||
throttled.call(start_time, now);
|
||||
}, function(callback) {
|
||||
var len = arr.length;
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr, arr.length, len, i );
|
||||
ok(arr.length < i, 'callback should be executed less # of times than throttled-callback');
|
||||
equals(arr[0], 0, 'callback should be executed immediately');
|
||||
equals(arr.length - len, 0, 'callback should NOT be executed one more time after finish');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
module('debounce');
|
||||
|
||||
test('delay, callback', function() {
|
||||
expect(5);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function() {
|
||||
arr.push(+new Date())
|
||||
},
|
||||
debounced = debounce(delay, fn);
|
||||
|
||||
equals(debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
start_time = start_time || +new Date();
|
||||
i++;
|
||||
debounced.call();
|
||||
}, function(callback) {
|
||||
var len = arr.length,
|
||||
done_time = +new Date();
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr[0] - done_time );
|
||||
equals(arr.length, 1, 'callback was executed once');
|
||||
ok(arr[0] >= done_time, 'callback should be executed after the finish');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
|
||||
test('delay, false, callback', function() {
|
||||
expect(5);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function() {
|
||||
arr.push(+new Date())
|
||||
},
|
||||
debounced = debounce(delay, false, fn);
|
||||
|
||||
equals(debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
start_time = start_time || +new Date();
|
||||
i++;
|
||||
debounced.call();
|
||||
}, function(callback) {
|
||||
var len = arr.length,
|
||||
done_time = +new Date();
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr[0] - done_time );
|
||||
equals(arr.length, 1, 'callback was executed once');
|
||||
ok(arr[0] >= done_time, 'callback should be executed after the finish');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
|
||||
test('delay, true, callback', function() {
|
||||
expect(5);
|
||||
stop();
|
||||
|
||||
var start_time,
|
||||
i = 0,
|
||||
arr = [],
|
||||
fn = function() {
|
||||
arr.push(+new Date())
|
||||
},
|
||||
debounced = debounce(delay, true, fn);
|
||||
|
||||
equals(debounced.guid, fn.guid, 'throttled-callback and callback should have the same .guid');
|
||||
|
||||
exec_many_times(function() {
|
||||
start_time = start_time || +new Date();
|
||||
i++;
|
||||
debounced.call();
|
||||
}, function(callback) {
|
||||
var len = arr.length;
|
||||
|
||||
setTimeout(function() {
|
||||
////console.log( arr[0] - start_time );
|
||||
equals(arr.length, 1, 'callback was executed once');
|
||||
ok(arr[0] - start_time <= 5, 'callback should be executed at the start');
|
||||
|
||||
start_time = null;
|
||||
arr = [];
|
||||
i = 0;
|
||||
|
||||
callback ? callback() : start();
|
||||
|
||||
}, delay * 2);
|
||||
})
|
||||
});
|
||||
@@ -0,0 +1,91 @@
|
||||
/* eslint-disable no-undefined,no-param-reassign,no-shadow */
|
||||
|
||||
/**
|
||||
* Throttle execution of a function. Especially useful for rate limiting
|
||||
* execution of handlers on events like resize and scroll.
|
||||
*
|
||||
* @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
|
||||
* @param {Boolean} [noTrailing] Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the
|
||||
* throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time
|
||||
* after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,
|
||||
* the internal counter is reset)
|
||||
* @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
|
||||
* to `callback` when the throttled-function is executed.
|
||||
* @param {Boolean} [debounceMode] If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),
|
||||
* schedule `callback` to execute after `delay` ms.
|
||||
*
|
||||
* @return {Function} A new, throttled, function.
|
||||
*/
|
||||
module.exports = function ( delay, noTrailing, callback, debounceMode ) {
|
||||
|
||||
// After wrapper has stopped being called, this timeout ensures that
|
||||
// `callback` is executed at the proper times in `throttle` and `end`
|
||||
// debounce modes.
|
||||
var timeoutID;
|
||||
|
||||
// Keep track of the last time `callback` was executed.
|
||||
var lastExec = 0;
|
||||
|
||||
// `noTrailing` defaults to falsy.
|
||||
if ( typeof noTrailing !== 'boolean' ) {
|
||||
debounceMode = callback;
|
||||
callback = noTrailing;
|
||||
noTrailing = undefined;
|
||||
}
|
||||
|
||||
// The `wrapper` function encapsulates all of the throttling / debouncing
|
||||
// functionality and when executed will limit the rate at which `callback`
|
||||
// is executed.
|
||||
function wrapper () {
|
||||
|
||||
var self = this;
|
||||
var elapsed = Number(new Date()) - lastExec;
|
||||
var args = arguments;
|
||||
|
||||
// Execute `callback` and update the `lastExec` timestamp.
|
||||
function exec () {
|
||||
lastExec = Number(new Date());
|
||||
callback.apply(self, args);
|
||||
}
|
||||
|
||||
// If `debounceMode` is true (at begin) this is used to clear the flag
|
||||
// to allow future `callback` executions.
|
||||
function clear () {
|
||||
timeoutID = undefined;
|
||||
}
|
||||
|
||||
if ( debounceMode && !timeoutID ) {
|
||||
// Since `wrapper` is being called for the first time and
|
||||
// `debounceMode` is true (at begin), execute `callback`.
|
||||
exec();
|
||||
}
|
||||
|
||||
// Clear any existing timeout.
|
||||
if ( timeoutID ) {
|
||||
clearTimeout(timeoutID);
|
||||
}
|
||||
|
||||
if ( debounceMode === undefined && elapsed > delay ) {
|
||||
// In throttle mode, if `delay` time has been exceeded, execute
|
||||
// `callback`.
|
||||
exec();
|
||||
|
||||
} else if ( noTrailing !== true ) {
|
||||
// In trailing throttle mode, since `delay` time has not been
|
||||
// exceeded, schedule `callback` to execute `delay` ms after most
|
||||
// recent execution.
|
||||
//
|
||||
// If `debounceMode` is true (at begin), schedule `clear` to execute
|
||||
// after `delay` ms.
|
||||
//
|
||||
// If `debounceMode` is false (at end), schedule `callback` to
|
||||
// execute after `delay` ms.
|
||||
timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Return the wrapper function.
|
||||
return wrapper;
|
||||
|
||||
};
|
||||
76
src/components/ElMenu/transitions/collapse-transition.js
Normal file
76
src/components/ElMenu/transitions/collapse-transition.js
Normal file
@@ -0,0 +1,76 @@
|
||||
import { addClass, removeClass } from '../utils/dom';
|
||||
|
||||
const Transition = ()=> ({
|
||||
beforeEnter(el) {
|
||||
addClass(el, 'collapse-transition');
|
||||
if (!el.dataset) el.dataset = {};
|
||||
|
||||
el.dataset.oldPaddingTop = el.style.paddingTop;
|
||||
el.dataset.oldPaddingBottom = el.style.paddingBottom;
|
||||
|
||||
el.style.height = '0';
|
||||
el.style.paddingTop = 0;
|
||||
el.style.paddingBottom = 0;
|
||||
},
|
||||
|
||||
enter(el) {
|
||||
el.dataset.oldOverflow = el.style.overflow;
|
||||
if (el.scrollHeight !== 0) {
|
||||
el.style.height = el.scrollHeight + 'px';
|
||||
el.style.paddingTop = el.dataset.oldPaddingTop;
|
||||
el.style.paddingBottom = el.dataset.oldPaddingBottom;
|
||||
} else {
|
||||
el.style.height = '';
|
||||
el.style.paddingTop = el.dataset.oldPaddingTop;
|
||||
el.style.paddingBottom = el.dataset.oldPaddingBottom;
|
||||
}
|
||||
|
||||
el.style.overflow = 'hidden';
|
||||
},
|
||||
|
||||
afterEnter(el) {
|
||||
// for safari: remove class then reset height is necessary
|
||||
removeClass(el, 'collapse-transition');
|
||||
el.style.height = '';
|
||||
el.style.overflow = el.dataset.oldOverflow;
|
||||
},
|
||||
|
||||
beforeLeave(el) {
|
||||
if (!el.dataset) el.dataset = {};
|
||||
el.dataset.oldPaddingTop = el.style.paddingTop;
|
||||
el.dataset.oldPaddingBottom = el.style.paddingBottom;
|
||||
el.dataset.oldOverflow = el.style.overflow;
|
||||
|
||||
el.style.height = el.scrollHeight + 'px';
|
||||
el.style.overflow = 'hidden';
|
||||
},
|
||||
|
||||
leave(el) {
|
||||
if (el.scrollHeight !== 0) {
|
||||
// for safari: add class after set height, or it will jump to zero height suddenly, weired
|
||||
addClass(el, 'collapse-transition');
|
||||
el.style.height = 0;
|
||||
el.style.paddingTop = 0;
|
||||
el.style.paddingBottom = 0;
|
||||
}
|
||||
},
|
||||
|
||||
afterLeave(el) {
|
||||
removeClass(el, 'collapse-transition');
|
||||
el.style.height = '';
|
||||
el.style.overflow = el.dataset.oldOverflow;
|
||||
el.style.paddingTop = el.dataset.oldPaddingTop;
|
||||
el.style.paddingBottom = el.dataset.oldPaddingBottom;
|
||||
}
|
||||
})
|
||||
|
||||
export default {
|
||||
name: 'ElCollapseTransition',
|
||||
functional: true,
|
||||
render(h, { children }) {
|
||||
const data = {
|
||||
on: Transition()
|
||||
};
|
||||
return h('transition', data, children);
|
||||
}
|
||||
};
|
||||
27
src/components/ElMenu/utils/after-leave.js
Normal file
27
src/components/ElMenu/utils/after-leave.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Bind after-leave event for vue instance. Make sure after-leave is called in any browsers.
|
||||
*
|
||||
* @param {Vue} instance Vue instance.
|
||||
* @param {Function} callback callback of after-leave event
|
||||
* @param {Number} speed the speed of transition, default value is 300ms
|
||||
* @param {Boolean} once weather bind after-leave once. default value is false.
|
||||
*/
|
||||
export default function(instance, callback, speed = 300, once = false) {
|
||||
if (!instance || !callback) throw new Error('instance & callback is required');
|
||||
let called = false;
|
||||
const afterLeaveCallback = function() {
|
||||
if (called) return;
|
||||
called = true;
|
||||
if (callback) {
|
||||
callback.apply(null, arguments);
|
||||
}
|
||||
};
|
||||
if (once) {
|
||||
instance.$once('after-leave', afterLeaveCallback);
|
||||
} else {
|
||||
instance.$on('after-leave', afterLeaveCallback);
|
||||
}
|
||||
setTimeout(() => {
|
||||
afterLeaveCallback();
|
||||
}, speed + 100);
|
||||
};
|
||||
90
src/components/ElMenu/utils/aria-dialog.js
Normal file
90
src/components/ElMenu/utils/aria-dialog.js
Normal file
@@ -0,0 +1,90 @@
|
||||
import Utils from './aria-utils';
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @desc Dialog object providing modal focus management.
|
||||
*
|
||||
* Assumptions: The element serving as the dialog container is present in the
|
||||
* DOM and hidden. The dialog container has role='dialog'.
|
||||
*
|
||||
* @param dialogId
|
||||
* The ID of the element serving as the dialog container.
|
||||
* @param focusAfterClosed
|
||||
* Either the DOM node or the ID of the DOM node to focus when the
|
||||
* dialog closes.
|
||||
* @param focusFirst
|
||||
* Optional parameter containing either the DOM node or the ID of the
|
||||
* DOM node to focus when the dialog opens. If not specified, the
|
||||
* first focusable element in the dialog will receive focus.
|
||||
*/
|
||||
var aria = aria || {};
|
||||
var tabEvent;
|
||||
|
||||
aria.Dialog = function(dialog, focusAfterClosed, focusFirst) {
|
||||
this.dialogNode = dialog;
|
||||
if (this.dialogNode === null || this.dialogNode.getAttribute('role') !== 'dialog') {
|
||||
throw new Error('Dialog() requires a DOM element with ARIA role of dialog.');
|
||||
}
|
||||
|
||||
if (typeof focusAfterClosed === 'string') {
|
||||
this.focusAfterClosed = document.getElementById(focusAfterClosed);
|
||||
} else if (typeof focusAfterClosed === 'object') {
|
||||
this.focusAfterClosed = focusAfterClosed;
|
||||
} else {
|
||||
this.focusAfterClosed = null;
|
||||
}
|
||||
|
||||
if (typeof focusFirst === 'string') {
|
||||
this.focusFirst = document.getElementById(focusFirst);
|
||||
} else if (typeof focusFirst === 'object') {
|
||||
this.focusFirst = focusFirst;
|
||||
} else {
|
||||
this.focusFirst = null;
|
||||
}
|
||||
|
||||
if (this.focusFirst) {
|
||||
this.focusFirst.focus();
|
||||
} else {
|
||||
Utils.focusFirstDescendant(this.dialogNode);
|
||||
}
|
||||
|
||||
this.lastFocus = document.activeElement;
|
||||
tabEvent = (e) => {
|
||||
this.trapFocus(e);
|
||||
};
|
||||
this.addListeners();
|
||||
};
|
||||
|
||||
aria.Dialog.prototype.addListeners = function() {
|
||||
document.addEventListener('focus', tabEvent, true);
|
||||
};
|
||||
|
||||
aria.Dialog.prototype.removeListeners = function() {
|
||||
document.removeEventListener('focus', tabEvent, true);
|
||||
};
|
||||
|
||||
aria.Dialog.prototype.closeDialog = function() {
|
||||
this.removeListeners();
|
||||
if (this.focusAfterClosed) {
|
||||
setTimeout(() => {
|
||||
this.focusAfterClosed.focus();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
aria.Dialog.prototype.trapFocus = function(event) {
|
||||
if (Utils.IgnoreUtilFocusChanges) {
|
||||
return;
|
||||
}
|
||||
if (this.dialogNode.contains(event.target)) {
|
||||
this.lastFocus = event.target;
|
||||
} else {
|
||||
Utils.focusFirstDescendant(this.dialogNode);
|
||||
if (this.lastFocus === document.activeElement) {
|
||||
Utils.focusLastDescendant(this.dialogNode);
|
||||
}
|
||||
this.lastFocus = document.activeElement;
|
||||
}
|
||||
};
|
||||
|
||||
export default aria.Dialog;
|
||||
122
src/components/ElMenu/utils/aria-utils.js
Normal file
122
src/components/ElMenu/utils/aria-utils.js
Normal file
@@ -0,0 +1,122 @@
|
||||
var aria = aria || {};
|
||||
|
||||
aria.Utils = aria.Utils || {};
|
||||
|
||||
/**
|
||||
* @desc Set focus on descendant nodes until the first focusable element is
|
||||
* found.
|
||||
* @param element
|
||||
* DOM node for which to find the first focusable descendant.
|
||||
* @returns
|
||||
* true if a focusable element is found and focus is set.
|
||||
*/
|
||||
aria.Utils.focusFirstDescendant = function(element) {
|
||||
for (var i = 0; i < element.childNodes.length; i++) {
|
||||
var child = element.childNodes[i];
|
||||
if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* @desc Find the last descendant node that is focusable.
|
||||
* @param element
|
||||
* DOM node for which to find the last focusable descendant.
|
||||
* @returns
|
||||
* true if a focusable element is found and focus is set.
|
||||
*/
|
||||
|
||||
aria.Utils.focusLastDescendant = function(element) {
|
||||
for (var i = element.childNodes.length - 1; i >= 0; i--) {
|
||||
var child = element.childNodes[i];
|
||||
if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* @desc Set Attempt to set focus on the current node.
|
||||
* @param element
|
||||
* The node to attempt to focus on.
|
||||
* @returns
|
||||
* true if element is focused.
|
||||
*/
|
||||
aria.Utils.attemptFocus = function(element) {
|
||||
if (!aria.Utils.isFocusable(element)) {
|
||||
return false;
|
||||
}
|
||||
aria.Utils.IgnoreUtilFocusChanges = true;
|
||||
try {
|
||||
element.focus();
|
||||
} catch (e) {
|
||||
}
|
||||
aria.Utils.IgnoreUtilFocusChanges = false;
|
||||
return (document.activeElement === element);
|
||||
};
|
||||
|
||||
aria.Utils.isFocusable = function(element) {
|
||||
if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (element.disabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (element.nodeName) {
|
||||
case 'A':
|
||||
return !!element.href && element.rel !== 'ignore';
|
||||
case 'INPUT':
|
||||
return element.type !== 'hidden' && element.type !== 'file';
|
||||
case 'BUTTON':
|
||||
case 'SELECT':
|
||||
case 'TEXTAREA':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 触发一个事件
|
||||
* mouseenter, mouseleave, mouseover, keyup, change, click 等
|
||||
* @param {Element} elm
|
||||
* @param {String} name
|
||||
* @param {*} opts
|
||||
*/
|
||||
aria.Utils.triggerEvent = function(elm, name, ...opts) {
|
||||
let eventName;
|
||||
|
||||
if (/^mouse|click/.test(name)) {
|
||||
eventName = 'MouseEvents';
|
||||
} else if (/^key/.test(name)) {
|
||||
eventName = 'KeyboardEvent';
|
||||
} else {
|
||||
eventName = 'HTMLEvents';
|
||||
}
|
||||
const evt = document.createEvent(eventName);
|
||||
|
||||
evt.initEvent(name, ...opts);
|
||||
elm.dispatchEvent
|
||||
? elm.dispatchEvent(evt)
|
||||
: elm.fireEvent('on' + name, evt);
|
||||
|
||||
return elm;
|
||||
};
|
||||
|
||||
aria.Utils.keys = {
|
||||
tab: 9,
|
||||
enter: 13,
|
||||
space: 32,
|
||||
left: 37,
|
||||
up: 38,
|
||||
right: 39,
|
||||
down: 40,
|
||||
esc: 27
|
||||
};
|
||||
|
||||
export default aria.Utils;
|
||||
76
src/components/ElMenu/utils/clickoutside.js
Normal file
76
src/components/ElMenu/utils/clickoutside.js
Normal file
@@ -0,0 +1,76 @@
|
||||
import Vue from 'vue';
|
||||
import { on } from 'element-ui/src/utils/dom';
|
||||
|
||||
const nodeList = [];
|
||||
const ctx = '@@clickoutsideContext';
|
||||
|
||||
let startClick;
|
||||
let seed = 0;
|
||||
|
||||
!Vue.prototype.$isServer && on(document, 'mousedown', e => (startClick = e));
|
||||
|
||||
!Vue.prototype.$isServer && on(document, 'mouseup', e => {
|
||||
nodeList.forEach(node => node[ctx].documentHandler(e, startClick));
|
||||
});
|
||||
|
||||
function createDocumentHandler(el, binding, vnode) {
|
||||
return function(mouseup = {}, mousedown = {}) {
|
||||
if (!vnode ||
|
||||
!vnode.context ||
|
||||
!mouseup.target ||
|
||||
!mousedown.target ||
|
||||
el.contains(mouseup.target) ||
|
||||
el.contains(mousedown.target) ||
|
||||
el === mouseup.target ||
|
||||
(vnode.context.popperElm &&
|
||||
(vnode.context.popperElm.contains(mouseup.target) ||
|
||||
vnode.context.popperElm.contains(mousedown.target)))) return;
|
||||
|
||||
if (binding.expression &&
|
||||
el[ctx].methodName &&
|
||||
vnode.context[el[ctx].methodName]) {
|
||||
vnode.context[el[ctx].methodName]();
|
||||
} else {
|
||||
el[ctx].bindingFn && el[ctx].bindingFn();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* v-clickoutside
|
||||
* @desc 点击元素外面才会触发的事件
|
||||
* @example
|
||||
* ```vue
|
||||
* <div v-element-clickoutside="handleClose">
|
||||
* ```
|
||||
*/
|
||||
export default {
|
||||
bind(el, binding, vnode) {
|
||||
nodeList.push(el);
|
||||
const id = seed++;
|
||||
el[ctx] = {
|
||||
id,
|
||||
documentHandler: createDocumentHandler(el, binding, vnode),
|
||||
methodName: binding.expression,
|
||||
bindingFn: binding.value
|
||||
};
|
||||
},
|
||||
|
||||
update(el, binding, vnode) {
|
||||
el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
|
||||
el[ctx].methodName = binding.expression;
|
||||
el[ctx].bindingFn = binding.value;
|
||||
},
|
||||
|
||||
unbind(el) {
|
||||
let len = nodeList.length;
|
||||
|
||||
for (let i = 0; i < len; i++) {
|
||||
if (nodeList[i][ctx].id === el[ctx].id) {
|
||||
nodeList.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete el[ctx];
|
||||
}
|
||||
};
|
||||
292
src/components/ElMenu/utils/date-util.js
Normal file
292
src/components/ElMenu/utils/date-util.js
Normal file
@@ -0,0 +1,292 @@
|
||||
import fecha from 'element-ui/src/utils/date';
|
||||
import { t } from 'element-ui/src/locale';
|
||||
|
||||
const weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
|
||||
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
|
||||
|
||||
const newArray = function(start, end) {
|
||||
let result = [];
|
||||
for (let i = start; i <= end; i++) {
|
||||
result.push(i);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
export const getI18nSettings = () => {
|
||||
return {
|
||||
dayNamesShort: weeks.map(week => t(`el.datepicker.weeks.${ week }`)),
|
||||
dayNames: weeks.map(week => t(`el.datepicker.weeks.${ week }`)),
|
||||
monthNamesShort: months.map(month => t(`el.datepicker.months.${ month }`)),
|
||||
monthNames: months.map((month, index) => t(`el.datepicker.month${ index + 1 }`)),
|
||||
amPm: ['am', 'pm']
|
||||
};
|
||||
};
|
||||
|
||||
export const toDate = function(date) {
|
||||
return isDate(date) ? new Date(date) : null;
|
||||
};
|
||||
|
||||
export const isDate = function(date) {
|
||||
if (date === null || date === undefined) return false;
|
||||
if (isNaN(new Date(date).getTime())) return false;
|
||||
if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`
|
||||
return true;
|
||||
};
|
||||
|
||||
export const isDateObject = function(val) {
|
||||
return val instanceof Date;
|
||||
};
|
||||
|
||||
export const formatDate = function(date, format) {
|
||||
date = toDate(date);
|
||||
if (!date) return '';
|
||||
return fecha.format(date, format || 'yyyy-MM-dd', getI18nSettings());
|
||||
};
|
||||
|
||||
export const parseDate = function(string, format) {
|
||||
return fecha.parse(string, format || 'yyyy-MM-dd', getI18nSettings());
|
||||
};
|
||||
|
||||
export const getDayCountOfMonth = function(year, month) {
|
||||
if (month === 3 || month === 5 || month === 8 || month === 10) {
|
||||
return 30;
|
||||
}
|
||||
|
||||
if (month === 1) {
|
||||
if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
|
||||
return 29;
|
||||
} else {
|
||||
return 28;
|
||||
}
|
||||
}
|
||||
|
||||
return 31;
|
||||
};
|
||||
|
||||
export const getDayCountOfYear = function(year) {
|
||||
const isLeapYear = year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0);
|
||||
return isLeapYear ? 366 : 365;
|
||||
};
|
||||
|
||||
export const getFirstDayOfMonth = function(date) {
|
||||
const temp = new Date(date.getTime());
|
||||
temp.setDate(1);
|
||||
return temp.getDay();
|
||||
};
|
||||
|
||||
// see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript
|
||||
// {prev, next} Date should work for Daylight Saving Time
|
||||
// Adding 24 * 60 * 60 * 1000 does not work in the above scenario
|
||||
export const prevDate = function(date, amount = 1) {
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);
|
||||
};
|
||||
|
||||
export const nextDate = function(date, amount = 1) {
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);
|
||||
};
|
||||
|
||||
export const getStartDateOfMonth = function(year, month) {
|
||||
const result = new Date(year, month, 1);
|
||||
const day = result.getDay();
|
||||
|
||||
if (day === 0) {
|
||||
return prevDate(result, 7);
|
||||
} else {
|
||||
return prevDate(result, day);
|
||||
}
|
||||
};
|
||||
|
||||
export const getWeekNumber = function(src) {
|
||||
if (!isDate(src)) return null;
|
||||
const date = new Date(src.getTime());
|
||||
date.setHours(0, 0, 0, 0);
|
||||
// Thursday in current week decides the year.
|
||||
date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
|
||||
// January 4 is always in week 1.
|
||||
const week1 = new Date(date.getFullYear(), 0, 4);
|
||||
// Adjust to Thursday in week 1 and count number of weeks from date to week 1.
|
||||
// Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.
|
||||
return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);
|
||||
};
|
||||
|
||||
export const getRangeHours = function(ranges) {
|
||||
const hours = [];
|
||||
let disabledHours = [];
|
||||
|
||||
(ranges || []).forEach(range => {
|
||||
const value = range.map(date => date.getHours());
|
||||
|
||||
disabledHours = disabledHours.concat(newArray(value[0], value[1]));
|
||||
});
|
||||
|
||||
if (disabledHours.length) {
|
||||
for (let i = 0; i < 24; i++) {
|
||||
hours[i] = disabledHours.indexOf(i) === -1;
|
||||
}
|
||||
} else {
|
||||
for (let i = 0; i < 24; i++) {
|
||||
hours[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
return hours;
|
||||
};
|
||||
|
||||
export const getPrevMonthLastDays = (date, amount) => {
|
||||
if (amount <= 0) return [];
|
||||
const temp = new Date(date.getTime());
|
||||
temp.setDate(0);
|
||||
const lastDay = temp.getDate();
|
||||
return range(amount).map((_, index) => lastDay - (amount - index - 1));
|
||||
};
|
||||
|
||||
export const getMonthDays = (date) => {
|
||||
const temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
||||
const days = temp.getDate();
|
||||
return range(days).map((_, index) => index + 1);
|
||||
};
|
||||
|
||||
function setRangeData(arr, start, end, value) {
|
||||
for (let i = start; i < end; i++) {
|
||||
arr[i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
export const getRangeMinutes = function(ranges, hour) {
|
||||
const minutes = new Array(60);
|
||||
|
||||
if (ranges.length > 0) {
|
||||
ranges.forEach(range => {
|
||||
const start = range[0];
|
||||
const end = range[1];
|
||||
const startHour = start.getHours();
|
||||
const startMinute = start.getMinutes();
|
||||
const endHour = end.getHours();
|
||||
const endMinute = end.getMinutes();
|
||||
if (startHour === hour && endHour !== hour) {
|
||||
setRangeData(minutes, startMinute, 60, true);
|
||||
} else if (startHour === hour && endHour === hour) {
|
||||
setRangeData(minutes, startMinute, endMinute + 1, true);
|
||||
} else if (startHour !== hour && endHour === hour) {
|
||||
setRangeData(minutes, 0, endMinute + 1, true);
|
||||
} else if (startHour < hour && endHour > hour) {
|
||||
setRangeData(minutes, 0, 60, true);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
setRangeData(minutes, 0, 60, true);
|
||||
}
|
||||
return minutes;
|
||||
};
|
||||
|
||||
export const range = function(n) {
|
||||
// see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n
|
||||
return Array.apply(null, {length: n}).map((_, n) => n);
|
||||
};
|
||||
|
||||
export const modifyDate = function(date, y, m, d) {
|
||||
return new Date(y, m, d, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
||||
};
|
||||
|
||||
export const modifyTime = function(date, h, m, s) {
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds());
|
||||
};
|
||||
|
||||
export const modifyWithTimeString = (date, time) => {
|
||||
if (date == null || !time) {
|
||||
return date;
|
||||
}
|
||||
time = parseDate(time, 'HH:mm:ss');
|
||||
return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());
|
||||
};
|
||||
|
||||
export const clearTime = function(date) {
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
||||
};
|
||||
|
||||
export const clearMilliseconds = function(date) {
|
||||
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);
|
||||
};
|
||||
|
||||
export const limitTimeRange = function(date, ranges, format = 'HH:mm:ss') {
|
||||
// TODO: refactory a more elegant solution
|
||||
if (ranges.length === 0) return date;
|
||||
const normalizeDate = date => fecha.parse(fecha.format(date, format), format);
|
||||
const ndate = normalizeDate(date);
|
||||
const nranges = ranges.map(range => range.map(normalizeDate));
|
||||
if (nranges.some(nrange => ndate >= nrange[0] && ndate <= nrange[1])) return date;
|
||||
|
||||
let minDate = nranges[0][0];
|
||||
let maxDate = nranges[0][0];
|
||||
|
||||
nranges.forEach(nrange => {
|
||||
minDate = new Date(Math.min(nrange[0], minDate));
|
||||
maxDate = new Date(Math.max(nrange[1], minDate));
|
||||
});
|
||||
|
||||
const ret = ndate < minDate ? minDate : maxDate;
|
||||
// preserve Year/Month/Date
|
||||
return modifyDate(
|
||||
ret,
|
||||
date.getFullYear(),
|
||||
date.getMonth(),
|
||||
date.getDate()
|
||||
);
|
||||
};
|
||||
|
||||
export const timeWithinRange = function(date, selectableRange, format) {
|
||||
const limitedDate = limitTimeRange(date, selectableRange, format);
|
||||
return limitedDate.getTime() === date.getTime();
|
||||
};
|
||||
|
||||
export const changeYearMonthAndClampDate = function(date, year, month) {
|
||||
// clamp date to the number of days in `year`, `month`
|
||||
// eg: (2010-1-31, 2010, 2) => 2010-2-28
|
||||
const monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));
|
||||
return modifyDate(date, year, month, monthDate);
|
||||
};
|
||||
|
||||
export const prevMonth = function(date) {
|
||||
const year = date.getFullYear();
|
||||
const month = date.getMonth();
|
||||
return month === 0
|
||||
? changeYearMonthAndClampDate(date, year - 1, 11)
|
||||
: changeYearMonthAndClampDate(date, year, month - 1);
|
||||
};
|
||||
|
||||
export const nextMonth = function(date) {
|
||||
const year = date.getFullYear();
|
||||
const month = date.getMonth();
|
||||
return month === 11
|
||||
? changeYearMonthAndClampDate(date, year + 1, 0)
|
||||
: changeYearMonthAndClampDate(date, year, month + 1);
|
||||
};
|
||||
|
||||
export const prevYear = function(date, amount = 1) {
|
||||
const year = date.getFullYear();
|
||||
const month = date.getMonth();
|
||||
return changeYearMonthAndClampDate(date, year - amount, month);
|
||||
};
|
||||
|
||||
export const nextYear = function(date, amount = 1) {
|
||||
const year = date.getFullYear();
|
||||
const month = date.getMonth();
|
||||
return changeYearMonthAndClampDate(date, year + amount, month);
|
||||
};
|
||||
|
||||
export const extractDateFormat = function(format) {
|
||||
return format
|
||||
.replace(/\W?m{1,2}|\W?ZZ/g, '')
|
||||
.replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, '')
|
||||
.trim();
|
||||
};
|
||||
|
||||
export const extractTimeFormat = function(format) {
|
||||
return format
|
||||
.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?y{2,4}/g, '')
|
||||
.trim();
|
||||
};
|
||||
|
||||
export const validateRangeInOneMonth = function(start, end) {
|
||||
return (start.getMonth() === end.getMonth()) && (start.getFullYear() === end.getFullYear());
|
||||
};
|
||||
368
src/components/ElMenu/utils/date.js
Normal file
368
src/components/ElMenu/utils/date.js
Normal file
@@ -0,0 +1,368 @@
|
||||
/* Modified from https://github.com/taylorhakes/fecha
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2015 Taylor Hakes
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/*eslint-disable*/
|
||||
// 把 YYYY-MM-DD 改成了 yyyy-MM-dd
|
||||
(function (main) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Parse or format dates
|
||||
* @class fecha
|
||||
*/
|
||||
var fecha = {};
|
||||
var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g;
|
||||
var twoDigits = '\\d\\d?';
|
||||
var threeDigits = '\\d{3}';
|
||||
var fourDigits = '\\d{4}';
|
||||
var word = '[^\\s]+';
|
||||
var literal = /\[([^]*?)\]/gm;
|
||||
var noop = function () {
|
||||
};
|
||||
|
||||
function regexEscape(str) {
|
||||
return str.replace( /[|\\{()[^$+*?.-]/g, '\\$&');
|
||||
}
|
||||
|
||||
function shorten(arr, sLen) {
|
||||
var newArr = [];
|
||||
for (var i = 0, len = arr.length; i < len; i++) {
|
||||
newArr.push(arr[i].substr(0, sLen));
|
||||
}
|
||||
return newArr;
|
||||
}
|
||||
|
||||
function monthUpdate(arrName) {
|
||||
return function (d, v, i18n) {
|
||||
var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());
|
||||
if (~index) {
|
||||
d.month = index;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function pad(val, len) {
|
||||
val = String(val);
|
||||
len = len || 2;
|
||||
while (val.length < len) {
|
||||
val = '0' + val;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
||||
var monthNamesShort = shorten(monthNames, 3);
|
||||
var dayNamesShort = shorten(dayNames, 3);
|
||||
fecha.i18n = {
|
||||
dayNamesShort: dayNamesShort,
|
||||
dayNames: dayNames,
|
||||
monthNamesShort: monthNamesShort,
|
||||
monthNames: monthNames,
|
||||
amPm: ['am', 'pm'],
|
||||
DoFn: function DoFn(D) {
|
||||
return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];
|
||||
}
|
||||
};
|
||||
|
||||
var formatFlags = {
|
||||
D: function(dateObj) {
|
||||
return dateObj.getDay();
|
||||
},
|
||||
DD: function(dateObj) {
|
||||
return pad(dateObj.getDay());
|
||||
},
|
||||
Do: function(dateObj, i18n) {
|
||||
return i18n.DoFn(dateObj.getDate());
|
||||
},
|
||||
d: function(dateObj) {
|
||||
return dateObj.getDate();
|
||||
},
|
||||
dd: function(dateObj) {
|
||||
return pad(dateObj.getDate());
|
||||
},
|
||||
ddd: function(dateObj, i18n) {
|
||||
return i18n.dayNamesShort[dateObj.getDay()];
|
||||
},
|
||||
dddd: function(dateObj, i18n) {
|
||||
return i18n.dayNames[dateObj.getDay()];
|
||||
},
|
||||
M: function(dateObj) {
|
||||
return dateObj.getMonth() + 1;
|
||||
},
|
||||
MM: function(dateObj) {
|
||||
return pad(dateObj.getMonth() + 1);
|
||||
},
|
||||
MMM: function(dateObj, i18n) {
|
||||
return i18n.monthNamesShort[dateObj.getMonth()];
|
||||
},
|
||||
MMMM: function(dateObj, i18n) {
|
||||
return i18n.monthNames[dateObj.getMonth()];
|
||||
},
|
||||
yy: function(dateObj) {
|
||||
return pad(String(dateObj.getFullYear()), 4).substr(2);
|
||||
},
|
||||
yyyy: function(dateObj) {
|
||||
return pad(dateObj.getFullYear(), 4);
|
||||
},
|
||||
h: function(dateObj) {
|
||||
return dateObj.getHours() % 12 || 12;
|
||||
},
|
||||
hh: function(dateObj) {
|
||||
return pad(dateObj.getHours() % 12 || 12);
|
||||
},
|
||||
H: function(dateObj) {
|
||||
return dateObj.getHours();
|
||||
},
|
||||
HH: function(dateObj) {
|
||||
return pad(dateObj.getHours());
|
||||
},
|
||||
m: function(dateObj) {
|
||||
return dateObj.getMinutes();
|
||||
},
|
||||
mm: function(dateObj) {
|
||||
return pad(dateObj.getMinutes());
|
||||
},
|
||||
s: function(dateObj) {
|
||||
return dateObj.getSeconds();
|
||||
},
|
||||
ss: function(dateObj) {
|
||||
return pad(dateObj.getSeconds());
|
||||
},
|
||||
S: function(dateObj) {
|
||||
return Math.round(dateObj.getMilliseconds() / 100);
|
||||
},
|
||||
SS: function(dateObj) {
|
||||
return pad(Math.round(dateObj.getMilliseconds() / 10), 2);
|
||||
},
|
||||
SSS: function(dateObj) {
|
||||
return pad(dateObj.getMilliseconds(), 3);
|
||||
},
|
||||
a: function(dateObj, i18n) {
|
||||
return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];
|
||||
},
|
||||
A: function(dateObj, i18n) {
|
||||
return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();
|
||||
},
|
||||
ZZ: function(dateObj) {
|
||||
var o = dateObj.getTimezoneOffset();
|
||||
return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);
|
||||
}
|
||||
};
|
||||
|
||||
var parseFlags = {
|
||||
d: [twoDigits, function (d, v) {
|
||||
d.day = v;
|
||||
}],
|
||||
Do: [twoDigits + word, function (d, v) {
|
||||
d.day = parseInt(v, 10);
|
||||
}],
|
||||
M: [twoDigits, function (d, v) {
|
||||
d.month = v - 1;
|
||||
}],
|
||||
yy: [twoDigits, function (d, v) {
|
||||
var da = new Date(), cent = +('' + da.getFullYear()).substr(0, 2);
|
||||
d.year = '' + (v > 68 ? cent - 1 : cent) + v;
|
||||
}],
|
||||
h: [twoDigits, function (d, v) {
|
||||
d.hour = v;
|
||||
}],
|
||||
m: [twoDigits, function (d, v) {
|
||||
d.minute = v;
|
||||
}],
|
||||
s: [twoDigits, function (d, v) {
|
||||
d.second = v;
|
||||
}],
|
||||
yyyy: [fourDigits, function (d, v) {
|
||||
d.year = v;
|
||||
}],
|
||||
S: ['\\d', function (d, v) {
|
||||
d.millisecond = v * 100;
|
||||
}],
|
||||
SS: ['\\d{2}', function (d, v) {
|
||||
d.millisecond = v * 10;
|
||||
}],
|
||||
SSS: [threeDigits, function (d, v) {
|
||||
d.millisecond = v;
|
||||
}],
|
||||
D: [twoDigits, noop],
|
||||
ddd: [word, noop],
|
||||
MMM: [word, monthUpdate('monthNamesShort')],
|
||||
MMMM: [word, monthUpdate('monthNames')],
|
||||
a: [word, function (d, v, i18n) {
|
||||
var val = v.toLowerCase();
|
||||
if (val === i18n.amPm[0]) {
|
||||
d.isPm = false;
|
||||
} else if (val === i18n.amPm[1]) {
|
||||
d.isPm = true;
|
||||
}
|
||||
}],
|
||||
ZZ: ['[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z', function (d, v) {
|
||||
var parts = (v + '').match(/([+-]|\d\d)/gi), minutes;
|
||||
|
||||
if (parts) {
|
||||
minutes = +(parts[1] * 60) + parseInt(parts[2], 10);
|
||||
d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;
|
||||
}
|
||||
}]
|
||||
};
|
||||
parseFlags.dd = parseFlags.d;
|
||||
parseFlags.dddd = parseFlags.ddd;
|
||||
parseFlags.DD = parseFlags.D;
|
||||
parseFlags.mm = parseFlags.m;
|
||||
parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;
|
||||
parseFlags.MM = parseFlags.M;
|
||||
parseFlags.ss = parseFlags.s;
|
||||
parseFlags.A = parseFlags.a;
|
||||
|
||||
|
||||
// Some common format strings
|
||||
fecha.masks = {
|
||||
default: 'ddd MMM dd yyyy HH:mm:ss',
|
||||
shortDate: 'M/D/yy',
|
||||
mediumDate: 'MMM d, yyyy',
|
||||
longDate: 'MMMM d, yyyy',
|
||||
fullDate: 'dddd, MMMM d, yyyy',
|
||||
shortTime: 'HH:mm',
|
||||
mediumTime: 'HH:mm:ss',
|
||||
longTime: 'HH:mm:ss.SSS'
|
||||
};
|
||||
|
||||
/***
|
||||
* Format a date
|
||||
* @method format
|
||||
* @param {Date|number} dateObj
|
||||
* @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'
|
||||
*/
|
||||
fecha.format = function (dateObj, mask, i18nSettings) {
|
||||
var i18n = i18nSettings || fecha.i18n;
|
||||
|
||||
if (typeof dateObj === 'number') {
|
||||
dateObj = new Date(dateObj);
|
||||
}
|
||||
|
||||
if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {
|
||||
throw new Error('Invalid Date in fecha.format');
|
||||
}
|
||||
|
||||
mask = fecha.masks[mask] || mask || fecha.masks['default'];
|
||||
|
||||
var literals = [];
|
||||
|
||||
// Make literals inactive by replacing them with ??
|
||||
mask = mask.replace(literal, function($0, $1) {
|
||||
literals.push($1);
|
||||
return '@@@';
|
||||
});
|
||||
// Apply formatting rules
|
||||
mask = mask.replace(token, function ($0) {
|
||||
return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);
|
||||
});
|
||||
// Inline literal values back into the formatted value
|
||||
return mask.replace(/@@@/g, function() {
|
||||
return literals.shift();
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse a date string into an object, changes - into /
|
||||
* @method parse
|
||||
* @param {string} dateStr Date string
|
||||
* @param {string} format Date parse format
|
||||
* @returns {Date|boolean}
|
||||
*/
|
||||
fecha.parse = function (dateStr, format, i18nSettings) {
|
||||
var i18n = i18nSettings || fecha.i18n;
|
||||
|
||||
if (typeof format !== 'string') {
|
||||
throw new Error('Invalid format in fecha.parse');
|
||||
}
|
||||
|
||||
format = fecha.masks[format] || format;
|
||||
|
||||
// Avoid regular expression denial of service, fail early for really long strings
|
||||
// https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
|
||||
if (dateStr.length > 1000) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var dateInfo = {};
|
||||
var parseInfo = [];
|
||||
var literals = [];
|
||||
format = format.replace(literal, function($0, $1) {
|
||||
literals.push($1);
|
||||
return '@@@';
|
||||
});
|
||||
var newFormat = regexEscape(format).replace(token, function ($0) {
|
||||
if (parseFlags[$0]) {
|
||||
var info = parseFlags[$0];
|
||||
parseInfo.push(info[1]);
|
||||
return '(' + info[0] + ')';
|
||||
}
|
||||
|
||||
return $0;
|
||||
});
|
||||
newFormat = newFormat.replace(/@@@/g, function() {
|
||||
return literals.shift();
|
||||
});
|
||||
var matches = dateStr.match(new RegExp(newFormat, 'i'));
|
||||
if (!matches) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = 1; i < matches.length; i++) {
|
||||
parseInfo[i - 1](dateInfo, matches[i], i18n);
|
||||
}
|
||||
|
||||
var today = new Date();
|
||||
if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {
|
||||
dateInfo.hour = +dateInfo.hour + 12;
|
||||
} else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
|
||||
dateInfo.hour = 0;
|
||||
}
|
||||
|
||||
var date;
|
||||
if (dateInfo.timezoneOffset != null) {
|
||||
dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;
|
||||
date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
|
||||
dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));
|
||||
} else {
|
||||
date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1,
|
||||
dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);
|
||||
}
|
||||
return date;
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
module.exports = fecha;
|
||||
} else if (typeof define === 'function' && define.amd) {
|
||||
define(function () {
|
||||
return fecha;
|
||||
});
|
||||
} else {
|
||||
main.fecha = fecha;
|
||||
}
|
||||
})(this);
|
||||
227
src/components/ElMenu/utils/dom.js
Normal file
227
src/components/ElMenu/utils/dom.js
Normal file
@@ -0,0 +1,227 @@
|
||||
/* istanbul ignore next */
|
||||
|
||||
import Vue from 'vue';
|
||||
|
||||
const isServer = Vue.prototype.$isServer;
|
||||
const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
|
||||
const MOZ_HACK_REGEXP = /^moz([A-Z])/;
|
||||
const ieVersion = isServer ? 0 : Number(document.documentMode);
|
||||
|
||||
/* istanbul ignore next */
|
||||
const trim = function(string) {
|
||||
return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
|
||||
};
|
||||
/* istanbul ignore next */
|
||||
const camelCase = function(name) {
|
||||
return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
|
||||
return offset ? letter.toUpperCase() : letter;
|
||||
}).replace(MOZ_HACK_REGEXP, 'Moz$1');
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const on = (function() {
|
||||
if (!isServer && document.addEventListener) {
|
||||
return function(element, event, handler) {
|
||||
if (element && event && handler) {
|
||||
element.addEventListener(event, handler, false);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return function(element, event, handler) {
|
||||
if (element && event && handler) {
|
||||
element.attachEvent('on' + event, handler);
|
||||
}
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const off = (function() {
|
||||
if (!isServer && document.removeEventListener) {
|
||||
return function(element, event, handler) {
|
||||
if (element && event) {
|
||||
element.removeEventListener(event, handler, false);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
return function(element, event, handler) {
|
||||
if (element && event) {
|
||||
element.detachEvent('on' + event, handler);
|
||||
}
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const once = function(el, event, fn) {
|
||||
var listener = function() {
|
||||
if (fn) {
|
||||
fn.apply(this, arguments);
|
||||
}
|
||||
off(el, event, listener);
|
||||
};
|
||||
on(el, event, listener);
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export function hasClass(el, cls) {
|
||||
if (!el || !cls) return false;
|
||||
if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
|
||||
if (el.classList) {
|
||||
return el.classList.contains(cls);
|
||||
} else {
|
||||
return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
|
||||
}
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export function addClass(el, cls) {
|
||||
if (!el) return;
|
||||
var curClass = el.className;
|
||||
var classes = (cls || '').split(' ');
|
||||
|
||||
for (var i = 0, j = classes.length; i < j; i++) {
|
||||
var clsName = classes[i];
|
||||
if (!clsName) continue;
|
||||
|
||||
if (el.classList) {
|
||||
el.classList.add(clsName);
|
||||
} else if (!hasClass(el, clsName)) {
|
||||
curClass += ' ' + clsName;
|
||||
}
|
||||
}
|
||||
if (!el.classList) {
|
||||
el.className = curClass;
|
||||
}
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export function removeClass(el, cls) {
|
||||
if (!el || !cls) return;
|
||||
var classes = cls.split(' ');
|
||||
var curClass = ' ' + el.className + ' ';
|
||||
|
||||
for (var i = 0, j = classes.length; i < j; i++) {
|
||||
var clsName = classes[i];
|
||||
if (!clsName) continue;
|
||||
|
||||
if (el.classList) {
|
||||
el.classList.remove(clsName);
|
||||
} else if (hasClass(el, clsName)) {
|
||||
curClass = curClass.replace(' ' + clsName + ' ', ' ');
|
||||
}
|
||||
}
|
||||
if (!el.classList) {
|
||||
el.className = trim(curClass);
|
||||
}
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const getStyle = ieVersion < 9 ? function(element, styleName) {
|
||||
if (isServer) return;
|
||||
if (!element || !styleName) return null;
|
||||
styleName = camelCase(styleName);
|
||||
if (styleName === 'float') {
|
||||
styleName = 'styleFloat';
|
||||
}
|
||||
try {
|
||||
switch (styleName) {
|
||||
case 'opacity':
|
||||
try {
|
||||
return element.filters.item('alpha').opacity / 100;
|
||||
} catch (e) {
|
||||
return 1.0;
|
||||
}
|
||||
default:
|
||||
return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);
|
||||
}
|
||||
} catch (e) {
|
||||
return element.style[styleName];
|
||||
}
|
||||
} : function(element, styleName) {
|
||||
if (isServer) return;
|
||||
if (!element || !styleName) return null;
|
||||
styleName = camelCase(styleName);
|
||||
if (styleName === 'float') {
|
||||
styleName = 'cssFloat';
|
||||
}
|
||||
try {
|
||||
var computed = document.defaultView.getComputedStyle(element, '');
|
||||
return element.style[styleName] || computed ? computed[styleName] : null;
|
||||
} catch (e) {
|
||||
return element.style[styleName];
|
||||
}
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export function setStyle(element, styleName, value) {
|
||||
if (!element || !styleName) return;
|
||||
|
||||
if (typeof styleName === 'object') {
|
||||
for (var prop in styleName) {
|
||||
if (styleName.hasOwnProperty(prop)) {
|
||||
setStyle(element, prop, styleName[prop]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
styleName = camelCase(styleName);
|
||||
if (styleName === 'opacity' && ieVersion < 9) {
|
||||
element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
|
||||
} else {
|
||||
element.style[styleName] = value;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const isScroll = (el, vertical) => {
|
||||
if (isServer) return;
|
||||
|
||||
const determinedDirection = vertical !== null || vertical !== undefined;
|
||||
const overflow = determinedDirection
|
||||
? vertical
|
||||
? getStyle(el, 'overflow-y')
|
||||
: getStyle(el, 'overflow-x')
|
||||
: getStyle(el, 'overflow');
|
||||
|
||||
return overflow.match(/(scroll|auto)/);
|
||||
};
|
||||
|
||||
export const getScrollContainer = (el, vertical) => {
|
||||
if (isServer) return;
|
||||
|
||||
let parent = el;
|
||||
while (parent) {
|
||||
if ([window, document, document.documentElement].includes(parent)) {
|
||||
return window;
|
||||
}
|
||||
if (isScroll(parent, vertical)) {
|
||||
return parent;
|
||||
}
|
||||
parent = parent.parentNode;
|
||||
}
|
||||
|
||||
return parent;
|
||||
};
|
||||
|
||||
export const isInContainer = (el, container) => {
|
||||
if (isServer || !el || !container) return false;
|
||||
|
||||
const elRect = el.getBoundingClientRect();
|
||||
let containerRect;
|
||||
|
||||
if ([window, document, document.documentElement, null, undefined].includes(container)) {
|
||||
containerRect = {
|
||||
top: 0,
|
||||
right: window.innerWidth,
|
||||
bottom: window.innerHeight,
|
||||
left: 0
|
||||
};
|
||||
} else {
|
||||
containerRect = container.getBoundingClientRect();
|
||||
}
|
||||
|
||||
return elRect.top < containerRect.bottom &&
|
||||
elRect.bottom > containerRect.top &&
|
||||
elRect.right > containerRect.left &&
|
||||
elRect.left < containerRect.right;
|
||||
};
|
||||
14
src/components/ElMenu/utils/menu/aria-menubar.js
Normal file
14
src/components/ElMenu/utils/menu/aria-menubar.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import MenuItem from './aria-menuitem';
|
||||
|
||||
const Menu = function(domNode) {
|
||||
this.domNode = domNode;
|
||||
this.init();
|
||||
};
|
||||
|
||||
Menu.prototype.init = function() {
|
||||
let menuChildren = this.domNode.childNodes;
|
||||
[].filter.call(menuChildren, child => child.nodeType === 1).forEach(child => {
|
||||
new MenuItem(child); // eslint-disable-line
|
||||
});
|
||||
};
|
||||
export default Menu;
|
||||
49
src/components/ElMenu/utils/menu/aria-menuitem.js
Normal file
49
src/components/ElMenu/utils/menu/aria-menuitem.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import Utils from '../aria-utils';
|
||||
import SubMenu from './aria-submenu';
|
||||
|
||||
const MenuItem = function(domNode) {
|
||||
this.domNode = domNode;
|
||||
this.submenu = null;
|
||||
this.init();
|
||||
};
|
||||
|
||||
MenuItem.prototype.init = function() {
|
||||
this.domNode.setAttribute('tabindex', '0');
|
||||
let menuChild = this.domNode.querySelector('.el-menu');
|
||||
if (menuChild) {
|
||||
this.submenu = new SubMenu(this, menuChild);
|
||||
}
|
||||
this.addListeners();
|
||||
};
|
||||
|
||||
MenuItem.prototype.addListeners = function() {
|
||||
const keys = Utils.keys;
|
||||
this.domNode.addEventListener('keydown', event => {
|
||||
let prevDef = false;
|
||||
switch (event.keyCode) {
|
||||
case keys.down:
|
||||
Utils.triggerEvent(event.currentTarget, 'mouseenter');
|
||||
this.submenu && this.submenu.gotoSubIndex(0);
|
||||
prevDef = true;
|
||||
break;
|
||||
case keys.up:
|
||||
Utils.triggerEvent(event.currentTarget, 'mouseenter');
|
||||
this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1);
|
||||
prevDef = true;
|
||||
break;
|
||||
case keys.tab:
|
||||
Utils.triggerEvent(event.currentTarget, 'mouseleave');
|
||||
break;
|
||||
case keys.enter:
|
||||
case keys.space:
|
||||
prevDef = true;
|
||||
event.currentTarget.click();
|
||||
break;
|
||||
}
|
||||
if (prevDef) {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export default MenuItem;
|
||||
59
src/components/ElMenu/utils/menu/aria-submenu.js
Normal file
59
src/components/ElMenu/utils/menu/aria-submenu.js
Normal file
@@ -0,0 +1,59 @@
|
||||
import Utils from '../aria-utils';
|
||||
|
||||
const SubMenu = function(parent, domNode) {
|
||||
this.domNode = domNode;
|
||||
this.parent = parent;
|
||||
this.subMenuItems = [];
|
||||
this.subIndex = 0;
|
||||
this.init();
|
||||
};
|
||||
|
||||
SubMenu.prototype.init = function() {
|
||||
this.subMenuItems = this.domNode.querySelectorAll('li');
|
||||
this.addListeners();
|
||||
};
|
||||
|
||||
SubMenu.prototype.gotoSubIndex = function(idx) {
|
||||
if (idx === this.subMenuItems.length) {
|
||||
idx = 0;
|
||||
} else if (idx < 0) {
|
||||
idx = this.subMenuItems.length - 1;
|
||||
}
|
||||
this.subMenuItems[idx].focus();
|
||||
this.subIndex = idx;
|
||||
};
|
||||
|
||||
SubMenu.prototype.addListeners = function() {
|
||||
const keys = Utils.keys;
|
||||
const parentNode = this.parent.domNode;
|
||||
Array.prototype.forEach.call(this.subMenuItems, el => {
|
||||
el.addEventListener('keydown', event => {
|
||||
let prevDef = false;
|
||||
switch (event.keyCode) {
|
||||
case keys.down:
|
||||
this.gotoSubIndex(this.subIndex + 1);
|
||||
prevDef = true;
|
||||
break;
|
||||
case keys.up:
|
||||
this.gotoSubIndex(this.subIndex - 1);
|
||||
prevDef = true;
|
||||
break;
|
||||
case keys.tab:
|
||||
Utils.triggerEvent(parentNode, 'mouseleave');
|
||||
break;
|
||||
case keys.enter:
|
||||
case keys.space:
|
||||
prevDef = true;
|
||||
event.currentTarget.click();
|
||||
break;
|
||||
}
|
||||
if (prevDef) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
return false;
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
export default SubMenu;
|
||||
15
src/components/ElMenu/utils/merge.js
Normal file
15
src/components/ElMenu/utils/merge.js
Normal file
@@ -0,0 +1,15 @@
|
||||
export default function(target) {
|
||||
for (let i = 1, j = arguments.length; i < j; i++) {
|
||||
let source = arguments[i] || {};
|
||||
for (let prop in source) {
|
||||
if (source.hasOwnProperty(prop)) {
|
||||
let value = source[prop];
|
||||
if (value !== undefined) {
|
||||
target[prop] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
1276
src/components/ElMenu/utils/popper.js
Normal file
1276
src/components/ElMenu/utils/popper.js
Normal file
File diff suppressed because it is too large
Load Diff
218
src/components/ElMenu/utils/popup/index.js
Normal file
218
src/components/ElMenu/utils/popup/index.js
Normal file
@@ -0,0 +1,218 @@
|
||||
import Vue from 'vue';
|
||||
import merge from '../merge';
|
||||
import PopupManager from './popup-manager';
|
||||
import getScrollBarWidth from '../scrollbar-width';
|
||||
import { getStyle, addClass, removeClass, hasClass } from '../dom';
|
||||
|
||||
let idSeed = 1;
|
||||
|
||||
let scrollBarWidth;
|
||||
|
||||
export default {
|
||||
props: {
|
||||
visible: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
openDelay: {},
|
||||
closeDelay: {},
|
||||
zIndex: {},
|
||||
modal: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
modalFade: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
modalClass: {},
|
||||
modalAppendToBody: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
lockScroll: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
closeOnPressEscape: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
closeOnClickModal: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
|
||||
beforeMount() {
|
||||
this._popupId = 'popup-' + idSeed++;
|
||||
PopupManager.register(this._popupId, this);
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
PopupManager.deregister(this._popupId);
|
||||
PopupManager.closeModal(this._popupId);
|
||||
|
||||
this.restoreBodyStyle();
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
opened: false,
|
||||
bodyPaddingRight: null,
|
||||
computedBodyPaddingRight: 0,
|
||||
withoutHiddenClass: true,
|
||||
rendered: false
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
visible(val) {
|
||||
if (val) {
|
||||
if (this._opening) return;
|
||||
if (!this.rendered) {
|
||||
this.rendered = true;
|
||||
Vue.nextTick(() => {
|
||||
this.open();
|
||||
});
|
||||
} else {
|
||||
this.open();
|
||||
}
|
||||
} else {
|
||||
this.close();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
open(options) {
|
||||
if (!this.rendered) {
|
||||
this.rendered = true;
|
||||
}
|
||||
|
||||
const props = merge({}, this.$props || this, options);
|
||||
|
||||
if (this._closeTimer) {
|
||||
clearTimeout(this._closeTimer);
|
||||
this._closeTimer = null;
|
||||
}
|
||||
clearTimeout(this._openTimer);
|
||||
|
||||
const openDelay = Number(props.openDelay);
|
||||
if (openDelay > 0) {
|
||||
this._openTimer = setTimeout(() => {
|
||||
this._openTimer = null;
|
||||
this.doOpen(props);
|
||||
}, openDelay);
|
||||
} else {
|
||||
this.doOpen(props);
|
||||
}
|
||||
},
|
||||
|
||||
doOpen(props) {
|
||||
if (this.$isServer) return;
|
||||
if (this.willOpen && !this.willOpen()) return;
|
||||
if (this.opened) return;
|
||||
|
||||
this._opening = true;
|
||||
|
||||
const dom = this.$el;
|
||||
|
||||
const modal = props.modal;
|
||||
|
||||
const zIndex = props.zIndex;
|
||||
if (zIndex) {
|
||||
PopupManager.zIndex = zIndex;
|
||||
}
|
||||
|
||||
if (modal) {
|
||||
if (this._closing) {
|
||||
PopupManager.closeModal(this._popupId);
|
||||
this._closing = false;
|
||||
}
|
||||
PopupManager.openModal(this._popupId, PopupManager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);
|
||||
if (props.lockScroll) {
|
||||
this.withoutHiddenClass = !hasClass(document.body, 'el-popup-parent--hidden');
|
||||
if (this.withoutHiddenClass) {
|
||||
this.bodyPaddingRight = document.body.style.paddingRight;
|
||||
this.computedBodyPaddingRight = parseInt(getStyle(document.body, 'paddingRight'), 10);
|
||||
}
|
||||
scrollBarWidth = getScrollBarWidth();
|
||||
let bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
|
||||
let bodyOverflowY = getStyle(document.body, 'overflowY');
|
||||
if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {
|
||||
document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';
|
||||
}
|
||||
addClass(document.body, 'el-popup-parent--hidden');
|
||||
}
|
||||
}
|
||||
|
||||
if (getComputedStyle(dom).position === 'static') {
|
||||
dom.style.position = 'absolute';
|
||||
}
|
||||
|
||||
dom.style.zIndex = PopupManager.nextZIndex();
|
||||
this.opened = true;
|
||||
|
||||
this.onOpen && this.onOpen();
|
||||
|
||||
this.doAfterOpen();
|
||||
},
|
||||
|
||||
doAfterOpen() {
|
||||
this._opening = false;
|
||||
},
|
||||
|
||||
close() {
|
||||
if (this.willClose && !this.willClose()) return;
|
||||
|
||||
if (this._openTimer !== null) {
|
||||
clearTimeout(this._openTimer);
|
||||
this._openTimer = null;
|
||||
}
|
||||
clearTimeout(this._closeTimer);
|
||||
|
||||
const closeDelay = Number(this.closeDelay);
|
||||
|
||||
if (closeDelay > 0) {
|
||||
this._closeTimer = setTimeout(() => {
|
||||
this._closeTimer = null;
|
||||
this.doClose();
|
||||
}, closeDelay);
|
||||
} else {
|
||||
this.doClose();
|
||||
}
|
||||
},
|
||||
|
||||
doClose() {
|
||||
this._closing = true;
|
||||
|
||||
this.onClose && this.onClose();
|
||||
|
||||
if (this.lockScroll) {
|
||||
setTimeout(this.restoreBodyStyle, 200);
|
||||
}
|
||||
|
||||
this.opened = false;
|
||||
|
||||
this.doAfterClose();
|
||||
},
|
||||
|
||||
doAfterClose() {
|
||||
PopupManager.closeModal(this._popupId);
|
||||
this._closing = false;
|
||||
},
|
||||
|
||||
restoreBodyStyle() {
|
||||
if (this.modal && this.withoutHiddenClass) {
|
||||
document.body.style.paddingRight = this.bodyPaddingRight;
|
||||
removeClass(document.body, 'el-popup-parent--hidden');
|
||||
}
|
||||
this.withoutHiddenClass = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export {
|
||||
PopupManager
|
||||
};
|
||||
194
src/components/ElMenu/utils/popup/popup-manager.js
Normal file
194
src/components/ElMenu/utils/popup/popup-manager.js
Normal file
@@ -0,0 +1,194 @@
|
||||
import Vue from 'vue';
|
||||
import { addClass, removeClass } from '../dom';
|
||||
|
||||
let hasModal = false;
|
||||
let hasInitZIndex = false;
|
||||
let zIndex;
|
||||
|
||||
const getModal = function() {
|
||||
if (Vue.prototype.$isServer) return;
|
||||
let modalDom = PopupManager.modalDom;
|
||||
if (modalDom) {
|
||||
hasModal = true;
|
||||
} else {
|
||||
hasModal = false;
|
||||
modalDom = document.createElement('div');
|
||||
PopupManager.modalDom = modalDom;
|
||||
|
||||
modalDom.addEventListener('touchmove', function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
modalDom.addEventListener('click', function() {
|
||||
PopupManager.doOnModalClick && PopupManager.doOnModalClick();
|
||||
});
|
||||
}
|
||||
|
||||
return modalDom;
|
||||
};
|
||||
|
||||
const instances = {};
|
||||
|
||||
const PopupManager = {
|
||||
modalFade: true,
|
||||
|
||||
getInstance: function(id) {
|
||||
return instances[id];
|
||||
},
|
||||
|
||||
register: function(id, instance) {
|
||||
if (id && instance) {
|
||||
instances[id] = instance;
|
||||
}
|
||||
},
|
||||
|
||||
deregister: function(id) {
|
||||
if (id) {
|
||||
instances[id] = null;
|
||||
delete instances[id];
|
||||
}
|
||||
},
|
||||
|
||||
nextZIndex: function() {
|
||||
return PopupManager.zIndex++;
|
||||
},
|
||||
|
||||
modalStack: [],
|
||||
|
||||
doOnModalClick: function() {
|
||||
const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];
|
||||
if (!topItem) return;
|
||||
|
||||
const instance = PopupManager.getInstance(topItem.id);
|
||||
if (instance && instance.closeOnClickModal) {
|
||||
instance.close();
|
||||
}
|
||||
},
|
||||
|
||||
openModal: function(id, zIndex, dom, modalClass, modalFade) {
|
||||
if (Vue.prototype.$isServer) return;
|
||||
if (!id || zIndex === undefined) return;
|
||||
this.modalFade = modalFade;
|
||||
|
||||
const modalStack = this.modalStack;
|
||||
|
||||
for (let i = 0, j = modalStack.length; i < j; i++) {
|
||||
const item = modalStack[i];
|
||||
if (item.id === id) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const modalDom = getModal();
|
||||
|
||||
addClass(modalDom, 'v-modal');
|
||||
if (this.modalFade && !hasModal) {
|
||||
addClass(modalDom, 'v-modal-enter');
|
||||
}
|
||||
if (modalClass) {
|
||||
let classArr = modalClass.trim().split(/\s+/);
|
||||
classArr.forEach(item => addClass(modalDom, item));
|
||||
}
|
||||
setTimeout(() => {
|
||||
removeClass(modalDom, 'v-modal-enter');
|
||||
}, 200);
|
||||
|
||||
if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {
|
||||
dom.parentNode.appendChild(modalDom);
|
||||
} else {
|
||||
document.body.appendChild(modalDom);
|
||||
}
|
||||
|
||||
if (zIndex) {
|
||||
modalDom.style.zIndex = zIndex;
|
||||
}
|
||||
modalDom.tabIndex = 0;
|
||||
modalDom.style.display = '';
|
||||
|
||||
this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });
|
||||
},
|
||||
|
||||
closeModal: function(id) {
|
||||
const modalStack = this.modalStack;
|
||||
const modalDom = getModal();
|
||||
|
||||
if (modalStack.length > 0) {
|
||||
const topItem = modalStack[modalStack.length - 1];
|
||||
if (topItem.id === id) {
|
||||
if (topItem.modalClass) {
|
||||
let classArr = topItem.modalClass.trim().split(/\s+/);
|
||||
classArr.forEach(item => removeClass(modalDom, item));
|
||||
}
|
||||
|
||||
modalStack.pop();
|
||||
if (modalStack.length > 0) {
|
||||
modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
|
||||
}
|
||||
} else {
|
||||
for (let i = modalStack.length - 1; i >= 0; i--) {
|
||||
if (modalStack[i].id === id) {
|
||||
modalStack.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (modalStack.length === 0) {
|
||||
if (this.modalFade) {
|
||||
addClass(modalDom, 'v-modal-leave');
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (modalStack.length === 0) {
|
||||
if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);
|
||||
modalDom.style.display = 'none';
|
||||
PopupManager.modalDom = undefined;
|
||||
}
|
||||
removeClass(modalDom, 'v-modal-leave');
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Object.defineProperty(PopupManager, 'zIndex', {
|
||||
configurable: true,
|
||||
get() {
|
||||
if (!hasInitZIndex) {
|
||||
zIndex = zIndex || (Vue.prototype.$ELEMENT || {}).zIndex || 2000;
|
||||
hasInitZIndex = true;
|
||||
}
|
||||
return zIndex;
|
||||
},
|
||||
set(value) {
|
||||
zIndex = value;
|
||||
}
|
||||
});
|
||||
|
||||
const getTopPopup = function() {
|
||||
if (Vue.prototype.$isServer) return;
|
||||
if (PopupManager.modalStack.length > 0) {
|
||||
const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];
|
||||
if (!topPopup) return;
|
||||
const instance = PopupManager.getInstance(topPopup.id);
|
||||
|
||||
return instance;
|
||||
}
|
||||
};
|
||||
|
||||
if (!Vue.prototype.$isServer) {
|
||||
// handle `esc` key when the popup is shown
|
||||
window.addEventListener('keydown', function(event) {
|
||||
if (event.keyCode === 27) {
|
||||
const topPopup = getTopPopup();
|
||||
|
||||
if (topPopup && topPopup.closeOnPressEscape) {
|
||||
topPopup.handleClose
|
||||
? topPopup.handleClose()
|
||||
: (topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export default PopupManager;
|
||||
35
src/components/ElMenu/utils/resize-event.js
Normal file
35
src/components/ElMenu/utils/resize-event.js
Normal file
@@ -0,0 +1,35 @@
|
||||
import ResizeObserver from 'resize-observer-polyfill';
|
||||
|
||||
const isServer = typeof window === 'undefined';
|
||||
|
||||
/* istanbul ignore next */
|
||||
const resizeHandler = function(entries) {
|
||||
for (let entry of entries) {
|
||||
const listeners = entry.target.__resizeListeners__ || [];
|
||||
if (listeners.length) {
|
||||
listeners.forEach(fn => {
|
||||
fn();
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const addResizeListener = function(element, fn) {
|
||||
if (isServer) return;
|
||||
if (!element.__resizeListeners__) {
|
||||
element.__resizeListeners__ = [];
|
||||
element.__ro__ = new ResizeObserver(resizeHandler);
|
||||
element.__ro__.observe(element);
|
||||
}
|
||||
element.__resizeListeners__.push(fn);
|
||||
};
|
||||
|
||||
/* istanbul ignore next */
|
||||
export const removeResizeListener = function(element, fn) {
|
||||
if (!element || !element.__resizeListeners__) return;
|
||||
element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
|
||||
if (!element.__resizeListeners__.length) {
|
||||
element.__ro__.disconnect();
|
||||
}
|
||||
};
|
||||
27
src/components/ElMenu/utils/scroll-into-view.js
Normal file
27
src/components/ElMenu/utils/scroll-into-view.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
export default function scrollIntoView(container, selected) {
|
||||
if (Vue.prototype.$isServer) return;
|
||||
|
||||
if (!selected) {
|
||||
container.scrollTop = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
const offsetParents = [];
|
||||
let pointer = selected.offsetParent;
|
||||
while (pointer && container !== pointer && container.contains(pointer)) {
|
||||
offsetParents.push(pointer);
|
||||
pointer = pointer.offsetParent;
|
||||
}
|
||||
const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);
|
||||
const bottom = top + selected.offsetHeight;
|
||||
const viewRectTop = container.scrollTop;
|
||||
const viewRectBottom = viewRectTop + container.clientHeight;
|
||||
|
||||
if (top < viewRectTop) {
|
||||
container.scrollTop = top;
|
||||
} else if (bottom > viewRectBottom) {
|
||||
container.scrollTop = bottom - container.clientHeight;
|
||||
}
|
||||
}
|
||||
29
src/components/ElMenu/utils/scrollbar-width.js
Normal file
29
src/components/ElMenu/utils/scrollbar-width.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import Vue from 'vue';
|
||||
|
||||
let scrollBarWidth;
|
||||
|
||||
export default function() {
|
||||
if (Vue.prototype.$isServer) return 0;
|
||||
if (scrollBarWidth !== undefined) return scrollBarWidth;
|
||||
|
||||
const outer = document.createElement('div');
|
||||
outer.className = 'el-scrollbar__wrap';
|
||||
outer.style.visibility = 'hidden';
|
||||
outer.style.width = '100px';
|
||||
outer.style.position = 'absolute';
|
||||
outer.style.top = '-9999px';
|
||||
document.body.appendChild(outer);
|
||||
|
||||
const widthNoScroll = outer.offsetWidth;
|
||||
outer.style.overflow = 'scroll';
|
||||
|
||||
const inner = document.createElement('div');
|
||||
inner.style.width = '100%';
|
||||
outer.appendChild(inner);
|
||||
|
||||
const widthWithScroll = inner.offsetWidth;
|
||||
outer.parentNode.removeChild(outer);
|
||||
scrollBarWidth = widthNoScroll - widthWithScroll;
|
||||
|
||||
return scrollBarWidth;
|
||||
};
|
||||
7
src/components/ElMenu/utils/shared.js
Normal file
7
src/components/ElMenu/utils/shared.js
Normal file
@@ -0,0 +1,7 @@
|
||||
export function isDef(val) {
|
||||
return val !== undefined && val !== null;
|
||||
}
|
||||
export function isKorean(text) {
|
||||
const reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;
|
||||
return reg.test(text);
|
||||
}
|
||||
24
src/components/ElMenu/utils/types.js
Normal file
24
src/components/ElMenu/utils/types.js
Normal file
@@ -0,0 +1,24 @@
|
||||
export function isString(obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object String]';
|
||||
}
|
||||
|
||||
export function isObject(obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object Object]';
|
||||
}
|
||||
|
||||
export function isHtmlElement(node) {
|
||||
return node && node.nodeType === Node.ELEMENT_NODE;
|
||||
}
|
||||
|
||||
export const isFunction = (functionToCheck) => {
|
||||
var getType = {};
|
||||
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
||||
};
|
||||
|
||||
export const isUndefined = (val)=> {
|
||||
return val === void 0;
|
||||
};
|
||||
|
||||
export const isDefined = (val) => {
|
||||
return val !== undefined && val !== null;
|
||||
};
|
||||
218
src/components/ElMenu/utils/util.js
Normal file
218
src/components/ElMenu/utils/util.js
Normal file
@@ -0,0 +1,218 @@
|
||||
import Vue from 'vue';
|
||||
import { isString, isObject } from './types';
|
||||
|
||||
const hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
|
||||
export function noop() {};
|
||||
|
||||
export function hasOwn(obj, key) {
|
||||
return hasOwnProperty.call(obj, key);
|
||||
};
|
||||
|
||||
function extend(to, _from) {
|
||||
for (let key in _from) {
|
||||
to[key] = _from[key];
|
||||
}
|
||||
return to;
|
||||
};
|
||||
|
||||
export function toObject(arr) {
|
||||
var res = {};
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
if (arr[i]) {
|
||||
extend(res, arr[i]);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
export const getValueByPath = function(object, prop) {
|
||||
prop = prop || '';
|
||||
const paths = prop.split('.');
|
||||
let current = object;
|
||||
let result = null;
|
||||
for (let i = 0, j = paths.length; i < j; i++) {
|
||||
const path = paths[i];
|
||||
if (!current) break;
|
||||
|
||||
if (i === j - 1) {
|
||||
result = current[path];
|
||||
break;
|
||||
}
|
||||
current = current[path];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
export function getPropByPath(obj, path, strict) {
|
||||
let tempObj = obj;
|
||||
path = path.replace(/\[(\w+)\]/g, '.$1');
|
||||
path = path.replace(/^\./, '');
|
||||
|
||||
let keyArr = path.split('.');
|
||||
let i = 0;
|
||||
for (let len = keyArr.length; i < len - 1; ++i) {
|
||||
if (!tempObj && !strict) break;
|
||||
let key = keyArr[i];
|
||||
if (key in tempObj) {
|
||||
tempObj = tempObj[key];
|
||||
} else {
|
||||
if (strict) {
|
||||
throw new Error('please transfer a valid prop path to form item!');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return {
|
||||
o: tempObj,
|
||||
k: keyArr[i],
|
||||
v: tempObj ? tempObj[keyArr[i]] : null
|
||||
};
|
||||
};
|
||||
|
||||
export const generateId = function() {
|
||||
return Math.floor(Math.random() * 10000);
|
||||
};
|
||||
|
||||
export const valueEquals = (a, b) => {
|
||||
// see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
|
||||
if (a === b) return true;
|
||||
if (!(a instanceof Array)) return false;
|
||||
if (!(b instanceof Array)) return false;
|
||||
if (a.length !== b.length) return false;
|
||||
for (let i = 0; i !== a.length; ++i) {
|
||||
if (a[i] !== b[i]) return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
export const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
|
||||
|
||||
// TODO: use native Array.find, Array.findIndex when IE support is dropped
|
||||
export const arrayFindIndex = function(arr, pred) {
|
||||
for (let i = 0; i !== arr.length; ++i) {
|
||||
if (pred(arr[i])) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
|
||||
export const arrayFind = function(arr, pred) {
|
||||
const idx = arrayFindIndex(arr, pred);
|
||||
return idx !== -1 ? arr[idx] : undefined;
|
||||
};
|
||||
|
||||
// coerce truthy value to array
|
||||
export const coerceTruthyValueToArray = function(val) {
|
||||
if (Array.isArray(val)) {
|
||||
return val;
|
||||
} else if (val) {
|
||||
return [val];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
export const isIE = function() {
|
||||
return !Vue.prototype.$isServer && !isNaN(Number(document.documentMode));
|
||||
};
|
||||
|
||||
export const isEdge = function() {
|
||||
return !Vue.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
|
||||
};
|
||||
|
||||
export const autoprefixer = function(style) {
|
||||
if (typeof style !== 'object') return style;
|
||||
const rules = ['transform', 'transition', 'animation'];
|
||||
const prefixes = ['ms-', 'webkit-'];
|
||||
rules.forEach(rule => {
|
||||
const value = style[rule];
|
||||
if (rule && value) {
|
||||
prefixes.forEach(prefix => {
|
||||
style[prefix + rule] = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
return style;
|
||||
};
|
||||
|
||||
export const kebabCase = function(str) {
|
||||
const hyphenateRE = /([^-])([A-Z])/g;
|
||||
return str
|
||||
.replace(hyphenateRE, '$1-$2')
|
||||
.replace(hyphenateRE, '$1-$2')
|
||||
.toLowerCase();
|
||||
};
|
||||
|
||||
export const capitalize = function(str) {
|
||||
if (!isString(str)) return str;
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
};
|
||||
|
||||
export const looseEqual = function(a, b) {
|
||||
const isObjectA = isObject(a);
|
||||
const isObjectB = isObject(b);
|
||||
if (isObjectA && isObjectB) {
|
||||
return JSON.stringify(a) === JSON.stringify(b);
|
||||
} else if (!isObjectA && !isObjectB) {
|
||||
return String(a) === String(b);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export const arrayEquals = function(arrayA, arrayB) {
|
||||
arrayA = arrayA || [];
|
||||
arrayB = arrayB || [];
|
||||
|
||||
if (arrayA.length !== arrayB.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0; i < arrayA.length; i++) {
|
||||
if (!looseEqual(arrayA[i], arrayB[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
export const isEqual = function(value1, value2) {
|
||||
if (Array.isArray(value1) && Array.isArray(value2)) {
|
||||
return arrayEquals(value1, value2);
|
||||
}
|
||||
return looseEqual(value1, value2);
|
||||
};
|
||||
|
||||
export const isEmpty = function(val) {
|
||||
// null or undefined
|
||||
if (val == null) return true;
|
||||
|
||||
if (typeof val === 'boolean') return false;
|
||||
|
||||
if (typeof val === 'number') return !val;
|
||||
|
||||
if (val instanceof Error) return val.message === '';
|
||||
|
||||
switch (Object.prototype.toString.call(val)) {
|
||||
// String or Array
|
||||
case '[object String]':
|
||||
case '[object Array]':
|
||||
return !val.length;
|
||||
|
||||
// Map or Set or File
|
||||
case '[object File]':
|
||||
case '[object Map]':
|
||||
case '[object Set]': {
|
||||
return !val.size;
|
||||
}
|
||||
// Plain Object
|
||||
case '[object Object]': {
|
||||
return !Object.keys(val).length;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
5
src/components/ElMenu/utils/vdom.js
Normal file
5
src/components/ElMenu/utils/vdom.js
Normal file
@@ -0,0 +1,5 @@
|
||||
import { hasOwn } from 'element-ui/src/utils/util';
|
||||
|
||||
export function isVNode(node) {
|
||||
return node !== null && typeof node === 'object' && hasOwn(node, 'componentOptions');
|
||||
};
|
||||
199
src/components/ElMenu/utils/vue-popper.js
Normal file
199
src/components/ElMenu/utils/vue-popper.js
Normal file
@@ -0,0 +1,199 @@
|
||||
import Vue from 'vue';
|
||||
import {
|
||||
PopupManager
|
||||
} from './popup';
|
||||
import popper from './popper';
|
||||
|
||||
const PopperJS = Vue.prototype.$isServer ? function() {} : popper;
|
||||
const stop = e => e.stopPropagation();
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.
|
||||
* @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.
|
||||
* @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)
|
||||
* @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).
|
||||
* @param {Boolean} [visible=false] Visibility of the popup element.
|
||||
* @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.
|
||||
*/
|
||||
export default {
|
||||
props: {
|
||||
transformOrigin: {
|
||||
type: [Boolean, String],
|
||||
default: true
|
||||
},
|
||||
placement: {
|
||||
type: String,
|
||||
default: 'bottom'
|
||||
},
|
||||
boundariesPadding: {
|
||||
type: Number,
|
||||
default: 5
|
||||
},
|
||||
reference: {},
|
||||
popper: {},
|
||||
offset: {
|
||||
default: 0
|
||||
},
|
||||
value: Boolean,
|
||||
visibleArrow: Boolean,
|
||||
arrowOffset: {
|
||||
type: Number,
|
||||
default: 35
|
||||
},
|
||||
appendToBody: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
popperOptions: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {
|
||||
gpuAcceleration: false
|
||||
};
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
showPopper: false,
|
||||
currentPlacement: ''
|
||||
};
|
||||
},
|
||||
|
||||
watch: {
|
||||
value: {
|
||||
immediate: true,
|
||||
handler(val) {
|
||||
this.showPopper = val;
|
||||
this.$emit('input', val);
|
||||
}
|
||||
},
|
||||
|
||||
showPopper(val) {
|
||||
if (this.disabled) return;
|
||||
val ? this.updatePopper() : this.destroyPopper();
|
||||
this.$emit('input', val);
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
createPopper() {
|
||||
if (this.$isServer) return;
|
||||
this.currentPlacement = this.currentPlacement || this.placement;
|
||||
if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const options = this.popperOptions;
|
||||
const popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;
|
||||
let reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;
|
||||
|
||||
if (!reference &&
|
||||
this.$slots.reference &&
|
||||
this.$slots.reference[0]) {
|
||||
reference = this.referenceElm = this.$slots.reference[0].elm;
|
||||
}
|
||||
|
||||
if (!popper || !reference) return;
|
||||
if (this.visibleArrow) this.appendArrow(popper);
|
||||
if (this.appendToBody) document.body.appendChild(this.popperElm);
|
||||
if (this.popperJS && this.popperJS.destroy) {
|
||||
this.popperJS.destroy();
|
||||
}
|
||||
|
||||
options.placement = this.currentPlacement;
|
||||
options.offset = this.offset;
|
||||
options.arrowOffset = this.arrowOffset;
|
||||
this.popperJS = new PopperJS(reference, popper, options);
|
||||
this.popperJS.onCreate(_ => {
|
||||
this.$emit('created', this);
|
||||
this.resetTransformOrigin();
|
||||
this.$nextTick(this.updatePopper);
|
||||
});
|
||||
if (typeof options.onUpdate === 'function') {
|
||||
this.popperJS.onUpdate(options.onUpdate);
|
||||
}
|
||||
this.popperJS._popper.style.zIndex = PopupManager.nextZIndex();
|
||||
this.popperElm.addEventListener('click', stop);
|
||||
},
|
||||
|
||||
updatePopper() {
|
||||
const popperJS = this.popperJS;
|
||||
if (popperJS) {
|
||||
popperJS.update();
|
||||
if (popperJS._popper) {
|
||||
popperJS._popper.style.zIndex = PopupManager.nextZIndex();
|
||||
}
|
||||
} else {
|
||||
this.createPopper();
|
||||
}
|
||||
},
|
||||
|
||||
doDestroy(forceDestroy) {
|
||||
/* istanbul ignore if */
|
||||
if (!this.popperJS || (this.showPopper && !forceDestroy)) return;
|
||||
this.popperJS.destroy();
|
||||
this.popperJS = null;
|
||||
},
|
||||
|
||||
destroyPopper() {
|
||||
if (this.popperJS) {
|
||||
this.resetTransformOrigin();
|
||||
}
|
||||
},
|
||||
|
||||
resetTransformOrigin() {
|
||||
if (!this.transformOrigin) return;
|
||||
let placementMap = {
|
||||
top: 'bottom',
|
||||
bottom: 'top',
|
||||
left: 'right',
|
||||
right: 'left'
|
||||
};
|
||||
let placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];
|
||||
let origin = placementMap[placement];
|
||||
this.popperJS._popper.style.transformOrigin = typeof this.transformOrigin === 'string'
|
||||
? this.transformOrigin
|
||||
: ['top', 'bottom'].indexOf(placement) > -1 ? `center ${ origin }` : `${ origin } center`;
|
||||
},
|
||||
|
||||
appendArrow(element) {
|
||||
let hash;
|
||||
if (this.appended) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.appended = true;
|
||||
|
||||
for (let item in element.attributes) {
|
||||
if (/^_v-/.test(element.attributes[item].name)) {
|
||||
hash = element.attributes[item].name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const arrow = document.createElement('div');
|
||||
|
||||
if (hash) {
|
||||
arrow.setAttribute(hash, '');
|
||||
}
|
||||
arrow.setAttribute('x-arrow', '');
|
||||
arrow.className = 'popper__arrow';
|
||||
element.appendChild(arrow);
|
||||
}
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.doDestroy(true);
|
||||
if (this.popperElm && this.popperElm.parentNode === document.body) {
|
||||
this.popperElm.removeEventListener('click', stop);
|
||||
document.body.removeChild(this.popperElm);
|
||||
}
|
||||
},
|
||||
|
||||
// call destroy in keep-alive mode
|
||||
deactivated() {
|
||||
this.$options.beforeDestroy[0].call(this);
|
||||
}
|
||||
};
|
||||
46
src/components/FuCkEditor/ckeditor5-style.js
Normal file
46
src/components/FuCkEditor/ckeditor5-style.js
Normal file
@@ -0,0 +1,46 @@
|
||||
const imageStyle = `
|
||||
.ck-content .image.image_resized { max-width: 100%;display: block; box-sizing: border-box;}
|
||||
.ck-content .image.image_resized img { width: 100%;}
|
||||
.ck-content .image.image_resized > figcaption { display: block;}
|
||||
.ck-content .image { display: table; clear: both; text-align: center; margin: 1em auto;}
|
||||
.ck-content .image > img { display: block; margin: 0 auto; max-width: 100%; min-width: 50px; }
|
||||
.ck-content .image-style-side,.ck-content .image-style-align-left,.ck-content .image-style-align-center,.ck-content .image-style-align-right {max-width: 50%;}
|
||||
.ck-content .image-style-side {float: right;margin-left: var(--ck-image-style-spacing);}
|
||||
.ck-content .image-style-align-left {float: left;margin-right: var(--ck-image-style-spacing);}
|
||||
.ck-content .image-style-align-center {margin-left: auto;margin-right: auto;}
|
||||
.ck-content .image-style-align-right {float: right;margin-left: var(--ck-image-style-spacing);}
|
||||
.ck-content .image > figcaption {display: table-caption;caption-side: bottom;word-break: break-word;color: hsl(0, 0%, 20%);background-color: hsl(0, 0%, 97%);padding: .6em;font-size: .75em;outline-offset: -1px;}
|
||||
`
|
||||
|
||||
const codeStyle = `.ck-content code {background-color: hsla(0, 0%, 78%, 0.3);padding: .15em;border-radius: 2px;}`
|
||||
|
||||
const pageBreakStyle = `
|
||||
.ck-content .page-break {position: relative;clear: both;padding: 5px 0;display: flex;align-items: center;justify-content: center;}
|
||||
.ck-content .page-break::after {content: '';position: absolute;border-bottom: 2px dashed hsl(0, 0%, 77%);width: 100%;}
|
||||
.ck-content .page-break__label {position: relative;z-index: 1;padding: .3em .6em;display: block;text-transform: uppercase;border: 1px solid hsl(0, 0%, 77%);border-radius: 2px;font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;font-size: 0.75em;font-weight: bold;color: hsl(0, 0%, 20%);background: #fff;box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;}
|
||||
@media print {.ck-content .page-break {padding: 0;}.ck-content .page-break::after {display: none;}}
|
||||
`
|
||||
|
||||
const blockquoteStyle = `
|
||||
.ck-content blockquote {overflow: hidden;padding-right: 1.5em;padding-left: 1.5em;margin-left: 0;margin-right: 0;font-style: italic;border-left: solid 5px hsl(0, 0%, 80%);}
|
||||
.ck-content[dir="rtl"] blockquote {border-left: 0;border-right: solid 5px hsl(0, 0%, 80%);}
|
||||
`
|
||||
const mediaStyle = `
|
||||
.ck-content .media {clear: both;margin: 1em 0;display: block;min-width: 15em;}
|
||||
`
|
||||
const tableStyle = `
|
||||
.ck-content .table {margin: 1em auto;display: table;}
|
||||
.ck-content .table table {border-collapse: collapse;border-spacing: 0;width: 100%;height: 100%;border: 1px double hsl(0, 0%, 70%);}
|
||||
.ck-content .table table td,.ck-content .table table th {min-width: 2em;padding: .4em;border: 1px solid hsl(0, 0%, 75%);}
|
||||
.ck-content .table table th {font-weight: bold;background: hsla(0, 0%, 0%, 5%);}
|
||||
`
|
||||
const hrStyle = `
|
||||
.ck-content hr {border-width: 1px 0 0;border-style: solid;border-color: hsl(0, 0%, 37%);margin: 0;}
|
||||
`
|
||||
const preStyle = `
|
||||
.ck-content pre {padding: 1em;color: #353535;background: hsla(0, 0%, 78%, 0.3);border: 1px solid hsl(0, 0%, 77%);border-radius: 2px;text-align: left;direction: ltr;tab-size: 4;white-space: pre-wrap;font-style: normal;min-width: 200px;}
|
||||
.ck-content pre code {background: unset;padding: 0;border-radius: 0;}
|
||||
`
|
||||
|
||||
|
||||
export default {imageStyle, codeStyle, pageBreakStyle, blockquoteStyle, mediaStyle, tableStyle, hrStyle, preStyle}
|
||||
150
src/components/FuCkEditor/index.vue
Normal file
150
src/components/FuCkEditor/index.vue
Normal file
@@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<div class="ckeditor">
|
||||
<ckeditor
|
||||
:editor="editor"
|
||||
@ready="onReady"
|
||||
:value="contentData"
|
||||
@input="onInput"
|
||||
:config="editorConfig"
|
||||
></ckeditor>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CKEditor from '@ckeditor/ckeditor5-vue';
|
||||
/*
|
||||
* (my-ckeditor5-build-classic)是参考文档自行配置的工具插件,官方默认是(@ckeditor/ckeditor5-build-classic)
|
||||
* https://ckeditor.com/docs/ckeditor5/latest/builds/guides/development/custom-builds.html#customizing-a-build
|
||||
* */
|
||||
import ClassicEditor from './my-ckeditor5-build-classic/ckeditor'
|
||||
import './my-ckeditor5-build-classic/translations/zh-cn' //中文包
|
||||
import styles from './ckeditor5-style'
|
||||
|
||||
export default {
|
||||
name: "fu-ck-editor",
|
||||
components:{
|
||||
ckeditor: CKEditor.component
|
||||
},
|
||||
model: {
|
||||
prop: "content",
|
||||
event: "input"
|
||||
},
|
||||
props: {
|
||||
content: {
|
||||
required: true,
|
||||
type: String
|
||||
},
|
||||
uploadImgHook: {
|
||||
type: Function,
|
||||
default() {
|
||||
return () => {
|
||||
console.error("undefined uploadImg Hook")
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
watch:{
|
||||
content:{
|
||||
handler(val){
|
||||
if(val !== this.styleContent){
|
||||
this.contentData = this.removeStyle(val)
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
editor: ClassicEditor,
|
||||
//contentData:this.content,
|
||||
editorConfig: {
|
||||
placeholder: '请输入',
|
||||
language: "zh-cn",
|
||||
fontSize: {
|
||||
options: [8, 10, 'default', 14, 16, 18, 20, 22, 24, 26, 28, 32, 48]
|
||||
},
|
||||
fontFamily: {
|
||||
options: ["宋体", "仿宋", "微软雅黑", "黑体", "仿宋_GB2312", "楷体", "隶书", "幼圆"]
|
||||
},
|
||||
},
|
||||
contentData: '',
|
||||
styleContent:''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onReady(editor) {
|
||||
editor.plugins.get('FileRepository').createUploadAdapter = loader => {
|
||||
//let val = editor.getData();
|
||||
return {
|
||||
upload: async () => {
|
||||
return await loader.file.then(f => {
|
||||
const F = new FileReader();
|
||||
F.readAsArrayBuffer(f);
|
||||
return new Promise(resolve => {
|
||||
F.onload = function () {
|
||||
resolve({bufAsArray: F.result, file: f})
|
||||
};
|
||||
})
|
||||
}).then(v => {
|
||||
//执行上传上传
|
||||
return this.uploadImgHook(v)
|
||||
//返回标准格式
|
||||
/*return {
|
||||
default: 'http://mmcl.maoming.gov.cn/ys/css/img/BG.png'
|
||||
}*/
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
},
|
||||
onInput(content){
|
||||
this.styleContent = this.addStyle(content);
|
||||
this.$emit('input',this.styleContent);
|
||||
},
|
||||
//ckeditor生成的html默认没有样式,需要自行添加
|
||||
addStyle(content){
|
||||
const classReg = (cls)=> new RegExp("<[^>]+ class=['\"]([\\s\\S]*?\\s)?" + cls + "[^'\"]*['\"][\\s\\S]*?");
|
||||
const tagReg = (tag)=> new RegExp("(<" + tag + "[\\s\\S]*?)((/>)|([\\s\\S]*?<\/" + tag + ">))");
|
||||
const styleTests = [
|
||||
{ key: 'img', reg: tagReg('img'), style: styles.imageStyle },
|
||||
{ key: 'code', reg: tagReg('code'), style: styles.codeStyle },
|
||||
{ key: 'page-break', reg: classReg('page-break'), style: styles.pageBreakStyle },
|
||||
{ key: 'blockquote', reg: tagReg('blockquote'), style: styles.blockquoteStyle },
|
||||
{ key: 'media', reg: classReg('media'), style: styles.mediaStyle },
|
||||
{ key: 'table', reg: tagReg('table'), style: styles.tableStyle },
|
||||
{ key: 'hr', reg: tagReg('hr'), style: styles.hrStyle },
|
||||
{ key: 'pre', reg: tagReg('pre'), style: styles.preStyle },
|
||||
];
|
||||
const styleWrap = (item)=> `<style data-key="__STYLE_KEY_${item.key}" type="text/css">${item.style}</style>`;
|
||||
styleTests.forEach(item=>{
|
||||
//匹配对应标签和类名然后自动添加对应style
|
||||
if(item.reg.test(content) && !content.includes(`data-key="__STYLE_KEY_${item.key}"`)){
|
||||
content += styleWrap(item);
|
||||
}
|
||||
});
|
||||
if(!content.includes(`data-key="__STYLE_KEY_ck-content"`)){
|
||||
content = `<div data-key="__STYLE_KEY_ck-content" class="ck-content">${content}</div>`
|
||||
}
|
||||
return content;
|
||||
},
|
||||
//删除添加的style
|
||||
removeStyle(content){
|
||||
const styleReg = new RegExp("<style data-key=\"__STYLE_KEY_[\\s\\S]*?>[\\s\\S]*?<\/style>",'g');
|
||||
return content.replace(styleReg,'')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.ckeditor{
|
||||
/*overflow: hidden;*/
|
||||
& ::v-deep .ck.ck-content{
|
||||
min-height: 200px;
|
||||
}
|
||||
& ::v-deep .ck-splitbutton{
|
||||
min-width: 50px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
6
src/components/FuCkEditor/my-ckeditor5-build-classic/ckeditor.js
vendored
Normal file
6
src/components/FuCkEditor/my-ckeditor5-build-classic/ckeditor.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
(function(d){d['af']=Object.assign(d['af']||{},{a:"Lêer nie opgelaai nie:",b:"Image toolbar",c:"Table toolbar",d:"Skuinsgedruk",e:"Deurgetrek",f:"Onderstreep",g:"Vetgedruk",h:"Voeg beeld of lêer in",i:"Kode",j:"Blok-aanhaling",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Belyn links",av:"Belyn regs",aw:"Belyn in die middel",ax:"Belyn beide kante",ay:"Teksbelyning",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Beeld kan nie in die posisie toegevoeg word nie.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Berg",cd:"Kanselleer",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ar']=Object.assign(d['ar']||{},{a:"لا يمكن رفع الملف:",b:"Image toolbar",c:"Table toolbar",d:"مائل",e:"يتوسطه خط",f:"تحته خط",g:"عريض",h:"Insert image or file",i:"شفرة برمجية",j:"اقتباس",k:"Increase indent",l:"Decrease indent",m:"اختر عنوان",n:"عنوان",o:"عنصر الصورة",p:"صورة بحجم كامل",q:"صورة جانبية",r:"صورة بمحاذاة لليسار",s:"صورة بالوسط",t:"صورة بمحاذاة لليمين",u:"ادخل عنوان الصورة",v:"فشل الرفع",w:"رابط",x:"ادراج صورة",y:"قائمة رقمية",z:"قائمة نقطية",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"تحديد اصفر",af:"تحديد اخضر",ag:"تحديد وردي",ah:"تحديد ازرق",ai:"تحديد احمر",aj:"قلم اخضر",ak:"إزالة التحديد",al:"تحديد",am:"Text highlight toolbar",an:"Font Background Color",ao:"جاري الرفع",ap:"Widget toolbar",aq:"Font Color",ar:"نوع الخط",as:"افتراضي",at:"Insert code block",au:"محاذاة لليسار",av:"محاذاة لليمين",aw:"محاذاة في المنتصف",ax:"ضبط",ay:"محاذاة النص",az:"Text alignment toolbar",ba:"حجم الخط",bb:"ضئيل",bc:"صغير",bd:"كبير",be:"ضخم",bf:"إدراج جدول",bg:"عمود عنوان",bh:"Insert column left",bi:"Insert column right",bj:"حذف العمود",bk:"عمود",bl:"صف عنوان",bm:"ادراج صف بعد",bn:"ادراج صف قبل",bo:"حذف الصف",bp:"صف",bq:"دمج الخلايا للأعلى",br:"دمج الخلايا لليمين",bs:"دمج الخلايا للأسفل",bt:"دمج الخلايا لليسار",bu:"فصل الخلايا بشكل عمودي",bv:"فصل الخلايا بشكل افقي",bw:"دمج الخلايا",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"غير النص البديل للصورة",cc:"حفظ",cd:"إلغاء",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"تراجع",ck:"إعادة",cl:"Dropdown toolbar",cm:"معالج نصوص",cn:"النص البديل",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"إلغاء الرابط",dm:"تحرير الرابط",dn:"فتح الرابط في تبويب جديد",do:"لا يحتوي هذا الرابط على عنوان",dp:"رابط عنوان",dq:"فقرة",dr:"عنوان 1",ds:"عنوان 2",dt:"عنوان 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"معالج نصوص، 0%"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ast']=Object.assign(d['ast']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Cursiva",e:"Strikethrough",f:"Underline",g:"Negrina",h:"Insert image or file",i:"Code",j:"Block quote",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"complementu d'imaxen",p:"Imaxen a tamañu completu",q:"Imaxen llateral",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Enllazar",x:"Insert image",y:"Llista numberada",z:"Llista con viñetes",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Guardar",cd:"Encaboxar",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Desfacer",ck:"Refacer",cl:"Dropdown toolbar",cm:"Editor de testu arriquecíu",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Desenllazar",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"URL del enllaz",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Editor de testu arriquecíu, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['az']=Object.assign(d['az']||{},{a:"Fayl yüklənə bilmir",b:"Şəkil paneli",c:"Cədvəl paneli",d:"Maili",e:"Qaralanmış",f:"Altdan xətt",g:"Yarıqalın",h:"Şəkil və ya fayl əlavə ed",i:"Kod",j:"Sitat bloku",k:"Boş yeri böyüt",l:"Boş yeri kiçilt",m:"Başlıqı seç",n:"Başlıq",o:"Şəkil vidgetı",p:"Tam ölçülü şəkili",q:"Yan şəkil",r:"Soldan düzləndir",s:"Mərkəzə düzləndir",t:"Sağdan düzləndir",u:"Şəkil başlığı daxil edin",v:"Şəkili serverə yüklə",w:"Əlaqələndir",x:"Şəkili əlavə et",y:"Nömrələnmiş siyahı",z:"Markerlənmiş siyahı",aa:"media vidgeti",ab:"Media əlavə ed",ac:"URL boş olmamalıdır.",ad:"Bu media URL dəstəklənmir.",ae:"Sarı marker",af:"Yaşıl marker",ag:"Çəhrayı marker",ah:"Mavi marker",ai:"Qırmızı qələm",aj:"Yaşıl qələm",ak:"Vurgulanı sil",al:"Vurğulamaq",am:"Vurğulamaq paneli",an:"Şrift Fonunun Rəngi",ao:"Yüklənir",ap:"Vidgetin paneli",aq:"Şrift Rəngi",ar:"Şrift ailəsi",as:"Default",at:"Kod blokunu əlavə et",au:"Soldan düzləndir",av:"Sağdan düzləndir",aw:"Mərkəzə düzləndir",ax:"Eninə görə",ay:"Mətn düzləndirməsi",az:"Mətnin düzləndirmə paneli",ba:"Şrift ölçüsü",bb:"Miniatür",bc:"Kiçik",bd:"Böyük",be:"Nəhəng",bf:"Cədvəli əlavə et",bg:"Başlıqlı sütun",bh:"Sola sütun əlavə et",bi:"Sağa sütun əlavə et",bj:"Sütunları sil",bk:"Sütun",bl:"Başlıqlı sətir",bm:"Yuxarıya sətir əlavə et",bn:"Aşağıya sətir əlavə et",bo:"Sətirləri sil",bp:"Sətir",bq:"Xanaları yuxarı birləşdir",br:"Xanaları sağa birləşdir",bs:"Xanaları aşağı birləşdir",bt:"Xanaları sola birləşdir",bu:"Xanaları şaquli böl",bv:"Xanaları üfüqi böl",bw:"Xanaları birləşdir",bx:"Ölçüsü dəyişmiş təsvirin URL-ni əldə etmək mümkün olmadı",by:"Ölçüsü dəyişmiş təsvirin seçilməsi uğursuz oldu",bz:"Şəkili əlavə etmək mümkün deyil",ca:"Şəkili əlavə edilmədi",cb:"Alternativ mətni redaktə et",cc:"Yadda saxla",cd:"İmtina et",ce:"Media URL-ni xanaya əlavə edin",cf:"Məsləhət: Sürətli qoşma üçün URL-i kontentə əlavə edin",cg:"Media URL",ch:"Rəngi ləğv et",ci:"Rənglər",cj:"İmtina et",ck:"Təkrar et",cl:"Açılan paneli",cm:"Rich Text Redaktoru",cn:"Alternativ mətn",co:"%1-dən %0",cp:"Əvvəlki",cq:"Növbəti",cr:"Qara",cs:"Tünd boz",ct:"Boz",cu:"Açıq boz",cv:"Ağ",cw:"Qırmızı",cx:"Narıncı",cy:"Sarı",cz:"Açıq yaşıl",da:"Yaşıl",db:"Akvamarin",dc:"Firuzəyi",dd:"Açıq mavi",de:"Mavi",df:"Bənövşəyi",dg:"Sadə mətn",dh:"Redaktorun paneli",di:"Daha çox əşyanı göstərin",dj:"Yeni pəncərədə aç",dk:"Yüklənə bilər",dl:"Linki sil",dm:"Linki redaktə et",dn:"Linki yeni pəncərədə aç",do:"Bu linkdə URL yoxdur",dp:"Linkin URL",dq:"Abzas",dr:"Başlıq 1",ds:"Başlıq 2",dt:"Başlıq 3",du:"Başlıq 4",dv:"Başlıq 5",dw:"Başlıq 6",dx:"Rich Text Redaktoru, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['bg']=Object.assign(d['bg']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Курсив",e:"Strikethrough",f:"Underline",g:"Удебелен",h:"Insert image or file",i:"Code",j:"Цитат",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Запазване",cd:"Отказ",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Параграф",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ca']=Object.assign(d['ca']||{},{a:"No es pot pujar l'arxiu:",b:"Image toolbar",c:"Table toolbar",d:"Cursiva",e:"Marcat",f:"Subrallat",g:"Negreta",h:"Insert image or file",i:"Codi",j:"Cita de bloc",k:"Increase indent",l:"Decrease indent",m:"Escull capçalera",n:"Capçalera",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Marcador groc",af:"Marcador verd",ag:"Marcador rosa",ah:"Marcador blau",ai:"Marcador vermell",aj:"Bolígraf verd",ak:"Esborrar destacat",al:"Destacat",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font",as:"Predeterminada",at:"Insert code block",au:"Alineació esquerra",av:"Alineació dreta",aw:"Alineació centre",ax:"Justificar",ay:"Alineació text",az:"Text alignment toolbar",ba:"Mida de la font",bb:"Molt petita",bc:"Peita",bd:"Gran",be:"Molt gran",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Desar",cd:"Cancel·lar",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Pàrraf",dr:"Capçalera 1",ds:"Capçalera 2",dt:"Capçalera 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['cs']=Object.assign(d['cs']||{},{a:"Soubor nelze nahrát:",b:"Panel nástrojů obrázku",c:"Panel nástrojů tabulky",d:"Kurzíva",e:"Přeškrtnuté",f:"Podtržené",g:"Tučné",h:"Vložit obrázek nebo soubor",i:"Kódový blok",j:"Citace",k:"Zvětšit odsazení",l:"Zmenšit odsazení",m:"Zvolte nadpis",n:"Nadpis",o:"ovládací prvek obrázku",p:"Obrázek v plné velikosti",q:"Postranní obrázek",r:"Obrázek zarovnaný vlevo",s:"Obrázek zarovnaný na střed",t:"Obrázek zarovnaný vpravo",u:"Zadejte popis obrázku",v:"Nahrání selhalo",w:"Odkaz",x:"Vložit obrázek",y:"Číslování",z:"Odrážky",aa:"ovládací prvek médií",ab:"Vložit média",ac:"URL adresa musí být vyplněna.",ad:"Tato adresa bohužel není podporována.",ae:"Žlutý fix",af:"Zelený fix",ag:"Růžový fix",ah:"Modrý fix",ai:"Červený fix",aj:"Zelené pero",ak:"Odstranit zvýraznění",al:"Zvýraznění",am:"Panel nástrojů zvýraznění textu",an:"Barva pozadí písma",ao:"Probíhá nahrávání",ap:"Panel nástrojů ovládacího prvku",aq:"Barva písma",ar:"Typ písma",as:"Výchozí",at:"Vložit blok zdrojového kódu",au:"Zarovnat vlevo",av:"Zarovnat vpravo",aw:"Zarovnat na střed",ax:"Zarovnat do bloku",ay:"Zarovnání textu",az:"Panel nástrojů zarovnání textu",ba:"Velikost písma",bb:"Drobné",bc:"Malé",bd:"Velké",be:"Obrovské",bf:"Vložit tabulku",bg:"Sloupec záhlaví",bh:"Vložit sloupec vlevo",bi:"Vložit sloupec vpravo",bj:"Smazat sloupec",bk:"Sloupec",bl:"Řádek záhlaví",bm:"Vložit řádek pod",bn:"Vložit řádek před",bo:"Smazat řádek",bp:"Řádek",bq:"Sloučit s buňkou nad",br:"Sloučit s buňkou vpravo",bs:"Sloučit s buňkou pod",bt:"Sloučit s buňkou vlevo",bu:"Rozdělit buňky vertikálně",bv:"Rozdělit buňky horizontálně",bw:"Sloučit buňky",bx:"Nelze získat URL obrázku se změněnou velikostí.",by:"Výběr obrázku se změněnou velikostí selhal",bz:"Na současnou pozici nelze vložit obrázek.",ca:"Vložení obrázku selhalo",cb:"Změnit alternativní text obrázku",cc:"Uložit",cd:"Zrušit",ce:"Vložte URL média do vstupního pole.",cf:"Rada: Vložte URL přímo do editoru pro rychlejší vnoření.",cg:"URL adresa",ch:"Odstranit barvu",ci:"Barvy dokumentu",cj:"Zpět",ck:"Znovu",cl:"Rozbalovací panel nástrojů",cm:"Textový editor",cn:"Alternativní text",co:"%0 z %1",cp:"Předchozí",cq:"Další",cr:"Černá",cs:"Tmavě šedá",ct:"Šedá",cu:"Světle šedá",cv:"Bílá",cw:"Červená",cx:"Oranžová",cy:"Žlutá",cz:"Světle zelená",da:"Zelená",db:"Akvamarínová",dc:"Tyrkysová",dd:"Světle modrá",de:"Modrá",df:"Fialová",dg:"Prostý text",dh:"Panel nástrojů editoru",di:"Zobrazit další položky",dj:"Otevřít v nové kartě",dk:"Ke stažení",dl:"Odstranit odkaz",dm:"Upravit odkaz",dn:"Otevřít odkaz v nové kartě",do:"Tento odkaz nemá žádnou URL",dp:"URL odkazu",dq:"Odstavec",dr:"Nadpis 1",ds:"Nadpis 2",dt:"Nadpis 3",du:"Nadpis 4",dv:"Nadpis 5",dw:"Nadpis 6",dx:"Textový editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['da']=Object.assign(d['da']||{},{a:"Kan ikke uploade fil:",b:"Billedværktøjslinje",c:"Tabel værktøjslinje",d:"Kursiv",e:"Gennemstreg",f:"Understreget",g:"Fed",h:"Indsæt billede eller fil",i:"Kode",j:"Blot citat",k:"Forøg indrykning",l:"Formindsk indrykning",m:"Vælg overskrift",n:"Overskrift",o:"billed widget",p:"Fuld billedstørrelse",q:"Sidebillede",r:"Venstrestillet billede",s:"Centreret billede",t:"Højrestillet billede",u:"Indtast billedoverskrift",v:"Upload fejlede",w:"Link",x:"Indsæt billede",y:"Opstilling med tal",z:"Punktopstilling",aa:"mediewidget",ab:"Indsæt medie",ac:"URLen kan ikke være tom.",ad:"Denne medie URL understøttes ikke.",ae:"Gul markør",af:"Grøn markør",ag:"Lyserød markør",ah:"Blå markør",ai:"Rød pen",aj:"Grøn pen",ak:"Fjern fremhævning",al:"Fremhæv",am:"Tekstfremhævning værktøjslinje",an:"Skrift baggrundsfarve",ao:"Upload i gang",ap:"Widget værktøjslinje",aq:"Skriftfarve",ar:"Skriftfamilie",as:"Standard",at:"Indsæt kodeblok",au:"Justér venstre",av:"Justér højre",aw:"Justér center",ax:"Justér",ay:"Tekstjustering",az:"Tekstjustering værktøjslinje",ba:"Skriftstørrelse",bb:"Lillebitte",bc:"Lille",bd:"Stor",be:"Kæmpe",bf:"Indsæt tabel",bg:"Headerkolonne",bh:"Indsæt kolonne venstre",bi:"Indsæt kolonne højre",bj:"Slet kolonne",bk:"Kolonne",bl:"Headerrække",bm:"Indsæt header under",bn:"Indsæt header over",bo:"Slet række",bp:"Række",bq:"Flet celler op",br:"Flet celler højre",bs:"Flet celler ned",bt:"Flet celler venstre",bu:"Del celle vertikalt",bv:"Del celle horisontalt",bw:"Flet celler",bx:"Kunne ikke hente URL på ændret billede.",by:"Valg af ændret billede fejlede",bz:"Kunne ikke indsætte billede på aktuel position.",ca:"Indsætning af billede fejlede",cb:"Skift alternativ billedtekst",cc:"Gem",cd:"Annullér",ce:"Indsæt medie URLen i feltet.",cf:"Tip: Indsæt URLen i indholdet for at indlejre hurtigere.",cg:"Medie URL",ch:"Fjern farve",ci:"Dokumentfarve",cj:"Fortryd",ck:"Gentag",cl:"Dropdown værktøjslinje",cm:"Wysiwyg editor",cn:"Alternativ tekst",co:"%0 af %1",cp:"Forrige",cq:"Næste",cr:"Sort",cs:"Dunkel grå",ct:"Grå",cu:"Lys grå",cv:"Hvid",cw:"Rød",cx:"Orange",cy:"Gyl",cz:"Lys grøn",da:"Grøn",db:"Marineblå",dc:"Turkis",dd:"Lys blå",de:"Blå",df:"Lilla",dg:"Plain tekst",dh:"Editor værktøjslinje",di:"Vis flere emner",dj:"Åben i ny fane",dk:"Kan downloades",dl:"Fjern link",dm:"Redigér link",dn:"Åben link i ny fane",do:"Dette link har ingen URL",dp:"Link URL",dq:"Afsnit",dr:"Overskrift 1",ds:"Overskrift 2",dt:"Overskrift 3",du:"Overskrift 4",dv:"Overskrift 5",dw:"Overskrift 6",dx:"Wysiwyg editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['de-ch']=Object.assign(d['de-ch']||{},{a:"Datei kann nicht hochgeladen werden:",b:"Image toolbar",c:"Table toolbar",d:"Italic",e:"Strikethrough",f:"Underline",g:"Bold",h:"Insert image or file",i:"Code",j:"Blockzitat",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload läuft",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Tabelle einfügen",bg:"Kopfspalte",bh:"Insert column left",bi:"Insert column right",bj:"Spalte löschen",bk:"Spalte",bl:"Kopfspalte",bm:"Zeile unten einfügen",bn:"Zeile oben einfügen",bo:"Zeile löschen",bp:"Zeile",bq:"Zelle oben verbinden",br:"Zele rechts verbinden",bs:"Zelle unten verbinden",bt:"Zelle links verbinden",bu:"Zelle vertikal teilen",bv:"Zelle horizontal teilen",bw:"Zellen verbinden",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Save",cd:"Cancel",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Rückgängig",ck:"Wiederherstellen",cl:"Dropdown toolbar",cm:"Rich-Text-Edito",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich-Text-Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['de']=Object.assign(d['de']||{},{a:"Datei kann nicht hochgeladen werden:",b:"Bild Werkzeugleiste",c:"Tabelle Werkzeugleiste",d:"Kursiv",e:"Durchgestrichen",f:"Unterstrichen",g:"Fett",h:"Bild oder Datei einfügen",i:"Code",j:"Blockzitat",k:"Einzug vergrößern",l:"Einzug verkleinern",m:"Überschrift auswählen",n:"Überschrift",o:"Bild-Steuerelement",p:"Bild in voller Größe",q:"Seitenbild",r:"linksbündiges Bild",s:"zentriertes Bild",t:"rechtsbündiges Bild",u:"Bildunterschrift eingeben",v:"Hochladen fehlgeschlagen",w:"Link",x:"Bild einfügen",y:"Nummerierte Liste",z:"Aufzählungsliste",aa:"Medien-Widget",ab:"Medium einfügen",ac:"Die Url darf nicht leer sein",ad:"Diese Medien-Url wird nicht unterstützt",ae:"Gelber Marker",af:"Grüner Marker",ag:"Pinker Marker",ah:"Blauer Marker",ai:"Rote Schriftfarbe",aj:"Grüne Schriftfarbe",ak:"Texthervorhebung entfernen",al:"Texthervorhebung",am:"Text hervorheben Werkzeugleiste",an:"Hintergrundfarbe",ao:"Upload läuft",ap:"Widget Werkzeugleiste",aq:"Schriftfarbe",ar:"Schriftart",as:"Standard",at:"Block einfügen",au:"Linksbündig",av:"Rechtsbündig",aw:"Zentriert",ax:"Blocksatz",ay:"Textausrichtung",az:"Text-Ausrichtung Toolbar",ba:"Schriftgröße",bb:"Sehr klein",bc:"Klein",bd:"Groß",be:"Sehr groß",bf:"Tabelle einfügen",bg:"Kopfspalte",bh:"Spalte links einfügen",bi:"Spalte rechts einfügen",bj:"Spalte löschen",bk:"Spalte",bl:"Kopfzeile",bm:"Zeile unten einfügen",bn:"Zeile oben einfügen",bo:"Zeile löschen",bp:"Zeile",bq:"Zelle verbinden",br:"Zelle rechts verbinden",bs:"Zelle unten verbinden",bt:"Zelle links verbinden",bu:"Zelle vertikal teilen",bv:"Zelle horizontal teilen",bw:"Zellen verbinden",bx:"Die URL des angepassten Bildes konnte nicht abgerufen werden.",by:"Das angepasste Bild konnte nicht ausgewählt werden.",bz:"Das Bild konnte an der aktuellen Position nicht eingefügt werden.",ca:"Einfügen des Bildes fehlgeschlagen",cb:"Alternativ Text ändern",cc:"Speichern",cd:"Abbrechen",ce:"Medien-URL in das Eingabefeld einfügen.",cf:"Tipp: Zum schnelleren Einbetten können Sie die Medien-URL in den Inhalt einfügen.",cg:"Medien-Url",ch:"Farbe entfernen",ci:"Dokumentfarben",cj:"Rückgängig",ck:"Wiederherstellen",cl:"Dropdown-Liste Werkzeugleiste",cm:"Rich Text Editor",cn:"Textalternative",co:"%0 von %1",cp:"vorherige",cq:"Nächste",cr:"Schwarz",cs:"Dunkelgrau",ct:"Grau",cu:"Hellgrau",cv:"Weiß",cw:"Rot",cx:"Orange",cy:"Gelb",cz:"Hellgrün",da:"Grün",db:"Aquamarinblau",dc:"Türkis",dd:"Hellblau",de:"Blau",df:"Violett",dg:"Nur Text",dh:"Editor Werkzeugleiste",di:"Mehr anzeigen",dj:"In neuem Tab öffnen",dk:"Herunterladbar",dl:"Link entfernen",dm:"Link bearbeiten",dn:"Link im neuen Tab öffnen",do:"Dieser Link hat keine Adresse",dp:"Link Adresse",dq:"Absatz",dr:"Überschrift 1",ds:"Überschrift 2",dt:"Überschrift 3",du:"Überschrift 4",dv:"Überschrift 5",dw:"Überschrift 6",dx:"Rich-Text-Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['el']=Object.assign(d['el']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Πλάγια",e:"Strikethrough",f:"Underline",g:"Έντονη",h:"Insert image or file",i:"Code",j:"Περιοχή παράθεσης",k:"Increase indent",l:"Decrease indent",m:"Επιλέξτε κεφαλίδα",n:"Κεφαλίδα",o:"image widget",p:"Εικόνα πλήρης μεγέθους",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Λεζάντα",v:"Upload failed",w:"Σύνδεσμος",x:"Εισαγωγή εικόνας",y:"Αριθμημένη λίστα",z:"Λίστα κουκκίδων",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Αλλαγή εναλλακτικού κείμενου",cc:"Αποθήκευση",cd:"Ακύρωση",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Αναίρεση",ck:"Επανάληψη",cl:"Dropdown toolbar",cm:"Επεξεργαστής Πλούσιου Κειμένου",cn:"Εναλλακτικό κείμενο",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Αφαίρεση συνδέσμου",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Διεύθυνση συνδέσμου",dq:"Παράγραφος",dr:"Κεφαλίδα 1",ds:"Κεφαλίδα 2",dt:"Κεφαλίδα 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Επεξεργαστής Πλούσιου Κειμένου, 0%"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['en-au']=Object.assign(d['en-au']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Italic",e:"Strikethrough",f:"Underline",g:"Bold",h:"Insert image or file",i:"Code",j:"Block quote",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centred image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Colour",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Colour",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align centre",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Save",cd:"Cancel",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove colour",ci:"Document colours",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['en-gb']=Object.assign(d['en-gb']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"Italic",e:"Strikethrough",f:"Underline",g:"Bold",h:"Insert image or file",i:"Code",j:"Block quote",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"Image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centred image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"Media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Colour",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Colour",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Save",cd:"Cancel",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove colour",ci:"Document colours",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['eo']=Object.assign(d['eo']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"kursiva",e:"Strikethrough",f:"Underline",g:"grasa",h:"Insert image or file",i:"Code",j:"Block quote",k:"Increase indent",l:"Decrease indent",m:"Elektu ĉapon",n:"Ĉapo",o:"bilda fenestraĵo",p:"Bildo kun reala dimensio",q:"Flanka biildo",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Skribu klarigon pri la bildo",v:"Upload failed",w:"Ligilo",x:"Enmetu bildon",y:"Numerita Listo",z:"Bula Listo",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Ŝanĝu la alternativan tekston de la bildo",cc:"Konservi",cd:"Nuligi",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Malfari",ck:"Refari",cl:"Dropdown toolbar",cm:"Redaktilo de Riĉa Teksto",cn:"Alternativa teksto",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Malligi",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"URL de la ligilo",dq:"Paragrafo",dr:"Ĉapo 1",ds:"Ĉapo 2",dt:"Ĉapo 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Redaktilo de Riĉa Teksto, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['es']=Object.assign(d['es']||{},{a:"No se pudo cargar el archivo:",b:"Barra de herramientas de imagen",c:"Barra de herramientas de tabla",d:"Cursiva",e:"Tachado",f:"Subrayado",g:"Negrita",h:"Insertar imagen o archivo",i:"Código",j:"Entrecomillado",k:"Aumentar sangría",l:"Disminuir sangría",m:"Elegir Encabezado",n:"Encabezado",o:"Widget de imagen",p:"Imagen a tamaño completo",q:"Imagen lateral",r:"Imagen alineada a la izquierda",s:"Imagen centrada",t:"Imagen alineada a la derecha",u:"Introducir título de la imagen",v:"Fallo en la subida",w:"Enlace",x:"Insertar imagen",y:"Lista numerada",z:"Lista de puntos",aa:"Widget de contenido multimedia",ab:"Insertar contenido multimedia",ac:"La URL no debe estar vacía",ad:"La URL de este contenido multimedia no está soportada",ae:"Marcador amarillo",af:"Marcador verde",ag:"Marcador rosa",ah:"Marcador azul",ai:"Texto rojo",aj:"Texto verde",ak:"Quitar resaltado",al:"Resaltar",am:"Barra de herramientas de resaltado de texto",an:"Color de Fondo",ao:"Subida en progreso",ap:"Barra de herramientas del widget",aq:"Color de Fuente",ar:"Fuente",as:"Por defecto",at:"Insertar bloque de código",au:"Alinear a la izquierda",av:"Alinear a la derecha",aw:"Centrar",ax:"Justificar",ay:"Alineación del texto",az:"Barra de herramientas de alineación del texto",ba:"Tamaño de fuente",bb:"Minúsculo",bc:"Pequeño",bd:"Grande",be:"Enorme",bf:"Insertar tabla",bg:"Columna de encabezado",bh:"Insertar columna izquierda",bi:"Insertar columna derecha",bj:"Eliminar columna",bk:"Columna",bl:"Fila de encabezado",bm:"Insertar fila debajo",bn:"Insertar fila encima",bo:"Eliminar fila",bp:"Fila",bq:"Combinar celda superior",br:"Combinar celda derecha",bs:"Combinar celda inferior",bt:"Combinar celda izquierda",bu:"Dividir celdas verticalmente",bv:"Dividir celdas horizontalmente",bw:"Combinar celdas",bx:"No se puede acceder a la URL de la imagen redimensionada",by:"Fallo eligiendo imagen redimensionada",bz:"No se puede insertar una imagen en la posición actual",ca:"Error insertando imagen",cb:"Cambiar el texto alternativo de la imagen",cc:"Guardar",cd:"Cancelar",ce:"Pega la URL del contenido multimedia",cf:"Tip: pega la URL dentro del contenido para embeber más rápido",cg:"URL del contenido multimedia",ch:"Remover color",ci:"Colores del documento",cj:"Deshacer",ck:"Rehacer",cl:"Barra de herramientas desplegable",cm:"Editor de Texto Enriquecido",cn:"Texto alternativo",co:"%0 de %1",cp:"Anterior",cq:"Siguiente",cr:"Negro",cs:"Gris Oscuro",ct:"Gris",cu:"Gris Claro",cv:"Blanco",cw:"Rojo",cx:"Anaranjado",cy:"Amarillo",cz:"Verde Claro",da:"Verde",db:"Aguamarina",dc:"Turquesa",dd:"Azul Claro",de:"Azul",df:"Morado",dg:"Texto plano",dh:"Barra de herramientas de edición",di:"Mostrar más elementos",dj:"Abrir en una pestaña nueva ",dk:"Descargable",dl:"Quitar enlace",dm:"Editar enlace",dn:"Abrir enlace en una pestaña nueva",do:"Este enlace no tiene URL",dp:"URL del enlace",dq:"Párrafo",dr:"Encabezado 1",ds:"Encabezado 2",dt:"Encabezado 3",du:"Encabezado 4",dv:"Encabezado 5",dw:"Encabezado 6",dx:"Editor de Texto Enriquecido, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['et']=Object.assign(d['et']||{},{a:"Faili ei suudeta üles laadida:",b:"Piltide tööriistariba",c:"Tabelite tööriistariba",d:"Kaldkiri",e:"Läbijoonitud",f:"Allajoonitud",g:"Rasvane",h:"Sisesta pilt või fail",i:"Kood",j:"Tsitaat",k:"Suurenda taanet",l:"Vähenda taanet",m:"Vali pealkiri",n:"Pealkiri",o:"pildi vidin",p:"Täissuuruses pilt",q:"Pilt küljel",r:"Vasakule joondatud pilt",s:"Keskele joondatud pilt",t:"Paremale joondatud pilt",u:"Sisesta pildi pealkiri",v:"Üleslaadimine ebaõnnestus",w:"Link",x:"Siseta pilt",y:"Nummerdatud loetelu",z:"Punktidega loetelu",aa:"meedia vidin",ab:"Sisesta meedia",ac:"URL-i lahter ei tohi olla tühi.",ad:"See meedia URL pole toetatud.",ae:"Kollane marker",af:"Roheline marker",ag:"Roosa marker",ah:"Sinine marker",ai:"Punane pliiats",aj:"Roheline pliiats",ak:"Eemalda esiletõstmine",al:"Tõsta esile",am:"Teksti markeerimise tööriistariba",an:"Kirja tausta värvus",ao:"Üleslaadimine pooleli",ap:"Vidinate tööriistariba",aq:"Fondi värvus",ar:"Kirjastiil",as:"Vaikimisi",at:"Sisesta koodiplokk",au:"Vasakjoondus",av:"Paremjoondus",aw:"Keskjoondus",ax:"Rööpjoondus",ay:"Teksti joondamine",az:"Teksti joonduse tööriistariba",ba:"Teksti suurus",bb:"Imepisike",bc:"Väike",bd:"Suur",be:"Ülisuur",bf:"Sisesta tabel",bg:"Päise veerg",bh:"Sisesta veerg vasakule",bi:"Sisesta veerg paremale",bj:"Kustuta veerg",bk:"Veerg",bl:"Päise rida",bm:"Sisesta rida allapoole",bn:"Sisesta rida ülespoole",bo:"Kustuta rida",bp:"Rida",bq:"Liida ülemise lahtriga",br:"Liida paremal oleva lahtriga",bs:"Liida alumise lahtriga",bt:"Liida vasakul oleva lahtriga",bu:"Jaga lahter vertikaalselt",bv:"Jaga lahter horisontaalselt",bw:"Liida lahtrid",bx:"Muudetud suurusega pildi URL-i hankimine ebaõnnestus.",by:"Muudetud suurusega pildi valimine ebaõnnestus",bz:"Pildi sisestamine praegusesse kohta ebaõnnestus.",ca:"Pildi sisestamine ebaõnnestus",cb:"Muuda pildi asenduskirjeldust",cc:"Salvesta",cd:"Loobu",ce:"Aseta meedia URL sisendi lahtrisse.",cf:"Vihje: asetades meedia URLi otse sisusse saab selle lisada kiiremini.",cg:"Meedia URL",ch:"Eemalda värv",ci:"Dokumendi värvid",cj:"Võta tagasi",ck:"Tee uuesti",cl:"Avatav tööriistariba",cm:"Tekstiredaktor",cn:"Asenduskirjeldus",co:"%0 / %1",cp:"Eelmine",cq:"Järgmine",cr:"Must",cs:"Tumehall",ct:"Hall",cu:"Helehall",cv:"Valge",cw:"Punane",cx:"Oranž",cy:"Kollane",cz:"Heleroheline",da:"Roheline",db:"Akvamariin",dc:"Türkiis",dd:"Helesinine",de:"Sinine",df:"Lilla",dg:"Lihtsalt tekst",dh:"Redaktori tööriistariba",di:"Näita veel",dj:"Ava uuel kaardil",dk:"Allalaaditav",dl:"Eemalda link",dm:"Muuda linki",dn:"Ava link uuel vahekaardil",do:"Sellel lingil puudub URL",dp:"Lingi URL",dq:"Lõik",dr:"Pealkiri 1",ds:"Pealkiri 2",dt:"Pealkiri 3",du:"Pealkiri 4",dv:"Pealkiri 5",dw:"Pealkiri 6",dx:"Tekstiredaktor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['eu']=Object.assign(d['eu']||{},{a:"Ezin da fitxategia kargatu:",b:"Image toolbar",c:"Table toolbar",d:"Etzana",e:"Strikethrough",f:"Azpimarra",g:"Lodia",h:"Insert image or file",i:"Kodea",j:"Aipua",k:"Increase indent",l:"Decrease indent",m:"Aukeratu izenburua",n:"Izenburua",o:"irudi widgeta",p:"Tamaina osoko irudia",q:"Alboko irudia",r:"Ezkerrean lerrokatutako irudia",s:"Zentratutako irudia",t:"Eskuinean lerrokatutako irudia",u:"Sartu irudiaren epigrafea",v:"Kargatzeak huts egin du",w:"Esteka",x:"Txertatu irudia",y:"Zenbakidun zerrenda",z:"Buletdun zerrenda",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Aldatu irudiaren ordezko testua",cc:"Gorde",cd:"Utzi",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Desegin",ck:"Berregin",cl:"Dropdown toolbar",cm:"Testu aberastuaren editorea",cn:"Ordezko testua",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Desestekatu",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Estekaren URLa",dq:"Paragrafoa",dr:"Izenburua 1",ds:"Izenburua 2",dt:"Izenburua 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Testu aberastuaren editorea, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['fa']=Object.assign(d['fa']||{},{a:"فایل آپلود نمیشود:",b:"نوارابزار تصویر",c:"نوارابزار جدول",d:"کج",e:"خط خورده",f:"خط زیر",g:"درشت",h:"وارد کردن تصویر یا فایل",i:"کد",j:" بلوک نقل قول",k:"افزایش تورفتگی",l:"کاهش تورفتگی",m:"انتخاب عنوان",n:"عنوان",o:"ابزاره تصویر",p:"تصویر در اندازه کامل",q:"تصویر جانبی",r:"تصویر تراز شده چپ",s:"تصویر در وسط",t:"تصویر تراز شده راست",u:"عنوان تصویر را وارد کنید",v:"آپلود ناموفق بود",w:"پیوند",x:"قرار دادن تصویر",y:"لیست عددی",z:"لیست نشانهدار",aa:"ویجت رسانه",ab:"وارد کردن رسانه",ac:"آدرس اینترنتی URL نباید خالی باشد.",ad:"این آدرس اینترنتی رسانه پشتیبانی نمیشود",ae:"نشانگر زرد",af:"نشانگر سبز",ag:"نشانگر صورتی",ah:"نشانگر آبی",ai:"قلم قرمز",aj:"قلم سبز",ak:"حذف برجسته",al:"برجسته",am:"نوارابزار برجستگی متن",an:"رنگ پس زمینه فونت",ao:"آپلود در حال انجام",ap:"نوار ابزارک ها",aq:"رنگ فونت",ar:"خانواده فونت",as:"پیش فرض",at:"Insert code block",au:"تراز چپ",av:"تراز راست",aw:"تراز وسط",ax:"هم تراز کردن",ay:"تراز متن",az:"نوارابزار تراز متن",ba:"اندازه فونت",bb:"بسیار کوچک",bc:"کوچک",bd:"بزرگ",be:"بسیار بزرگ",bf:"درج جدول",bg:"ستون سربرگ",bh:"درج ستون در سمت چپ",bi:"درج ستون در سمت راست",bj:"حذف ستون",bk:"ستون",bl:"سطر سربرگ",bm:"درج سطر در پایین",bn:"درج سطر در بالا",bo:"حذف سطر",bp:"سطر",bq:"ادغام سلول بالا",br:"ادغام سلول راست",bs:"ادغام سلول پایین",bt:"ادغام سلول چپ",bu:"تقسیم عمودی سلول",bv:"تقسیم افقی سلول",bw:"ادغام سلول ها",bx:"نمیتوان آدرس اینترنتی تصویر تغییر اندازه یافته را بدست آورد",by:"انتخاب تصویر تغییر اندازه یافته انجام نشد",bz:"نمیتوان تصویر را در موقعیت فعلی وارد کرد",ca:"وارد کردن تصویر انجام نشد",cb:"تغییر متن جایگزین تصویر",cc:"ذخیره",cd:"لغو",ce:"آدرس رسانه را در ورودی قرار دهید",cf:"نکته : آدرس را در محتوا قراردهید تا سریع تر جاسازی شود",cg:"آدرس اینترنتی رسانه",ch:"حذف رنگ",ci:"رنگ اسناد",cj:"بازگردانی",ck:"باز انجام",cl:"نوارابزار کشویی",cm:"ویرایشگر متن غنی",cn:"متن جایگزین",co:"0% از 1%",cp:"قبلی",cq:"بعدی",cr:"سیاه",cs:"خاکستری تیره",ct:"خاکستری",cu:"خاکستری روشن",cv:"سفید",cw:"قرمز",cx:"نارنجی",cy:"زرد",cz:"سبز روشن",da:"سبز",db:"زمرد کبود",dc:"فیروزه ای",dd:"آبی روشن",de:"آبی",df:"بنفش",dg:"Plain text",dh:"نوارابزار ویرایشگر",di:"Show more items",dj:"بازکردن در برگه جدید",dk:"قابل بارگیری",dl:"لغو پیوند",dm:"ویرایش پیوند",dn:"باز کردن پیوند در برگه جدید",do:"این پیوند نشانی اینترنتی ندارد",dp:"نشانی اینترنتی پیوند",dq:"پاراگراف",dr:"عنوان 1",ds:"عنوان 2",dt:"عنوان 3",du:"عنوان 4",dv:"عنوان 5",dw:"عنوان 6",dx:"ویرایشگر متن غنی، %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['fi']=Object.assign(d['fi']||{},{a:"Tiedostoa ei voitu ladata:",b:"Image toolbar",c:"Table toolbar",d:"Kursivointi",e:"Yliviivaus",f:"Alleviivaus",g:"Lihavointi",h:"Lisää kuva tai tiedosto",i:"Koodi",j:"Lainaus",k:"Lisää sisennystä",l:"Vähennä sisennystä",m:"Valitse otsikko",n:"Otsikkotyyli",o:"Kuvavimpain",p:"Täysikokoinen kuva",q:"Pieni kuva",r:"Vasemmalle tasattu kuva",s:"Keskitetty kuva",t:"Oikealle tasattu kuva",u:"Syötä kuvateksti",v:"Lataus epäonnistui",w:"Linkki",x:"Lisää kuva",y:"Numeroitu lista",z:"Lista",aa:"media widget",ab:"Insert media",ac:"URL-osoite ei voi olla tyhjä.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Poista korostus",al:"Korosta",am:"Text highlight toolbar",an:"Fontin taustaväri",ao:"Lähetys käynnissä",ap:"Widget toolbar",aq:"Fontin väri",ar:"Fonttiperhe",as:"Oletus",at:"Insert code block",au:"Tasaa vasemmalle",av:"Tasaa oikealle",aw:"Tasaa keskelle",ax:"Tasaa molemmat reunat",ay:"Tekstin tasaus",az:"Text alignment toolbar",ba:"Fontin koko",bb:"Hyvin pieni",bc:"Pieni",bd:"Suuri",be:"Hyvin suuri",bf:"Lisää taulukko",bg:"Otsikkosarake",bh:"Lisää sarake vasemmalle",bi:"Lisää sarake oikealle",bj:"Poista sarake",bk:"Sarake",bl:"Otsikkorivi",bm:"Lisää rivi alle",bn:"Lisää rivi ylle",bo:"Poista rivi",bp:"Rivi",bq:"Yhdistä solu ylös",br:"Yhdistä solu oikealle",bs:"Yhdistä solu alas",bt:"Yhdistä solu vasemmalle",bu:"Jaa solu pystysuunnassa",bv:"Jaa solu vaakasuunnassa",bw:"Yhdistä tai jaa soluja",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Kuvan lisäys nykyiseen sijaintiin epäonnistui",ca:"Kuvan lisäys epäonnistui",cb:"Vaihda kuvan vaihtoehtoinen teksti",cc:"Tallenna",cd:"Peruuta",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Poista väri",ci:"Document colors",cj:"Peru",ck:"Tee uudelleen",cl:"Dropdown toolbar",cm:"Rikas tekstieditori",cn:"Vaihtoehtoinen teksti",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Musta",cs:"Dim grey",ct:"Harmaa",cu:"Vaaleanharmaa",cv:"Valkoinen",cw:"Punainen",cx:"Oranssi",cy:"Keltainen",cz:"Vaaleanvihreä",da:"Vihreä",db:"Akvamariini",dc:"Turkoosi",dd:"Vaaleansininen",de:"Sininen",df:"Purppura",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Poista linkki",dm:"Muokkaa linkkiä",dn:"Avaa linkki uudessa välilehdessä",do:"Linkillä ei ole URL-osoitetta",dp:"Linkin osoite",dq:"Kappale",dr:"Otsikko 1",ds:"Otsikko 2",dt:"Otsikko 3",du:"Otsikko 4",dv:"Otsikko 5",dw:"Otsikko 6",dx:"Rikas tekstieditori, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['fr']=Object.assign(d['fr']||{},{a:"Envoi du fichier échoué :",b:"Barre d'outils des images",c:"Barre d'outils des tableaux",d:"Italique",e:"Barré",f:"Souligné",g:"Gras",h:"Insérer une image ou un fichier",i:"Code",j:"Citation",k:"Augmenter le retrait",l:"Diminuer le retrait",m:"Choisir l'en-tête",n:"En-tête",o:"Objet image",p:"Image taille réelle",q:"Image latérale",r:"Image alignée à gauche",s:"Image centrée",t:"Image alignée à droite",u:"Saisir la légende de l’image",v:"Échec de l'envoi",w:"Lien",x:"Insérer une image",y:"Liste numérotée",z:"Liste à puces",aa:"widget média",ab:"Insérer un média",ac:"L'URL ne doit pas être vide.",ad:"Cette URL de média n'est pas supportée.",ae:"Marqueur jaune",af:"Marqueur vert",ag:"Marqueur rose",ah:"Marqueur bleu",ai:"Crayon rouge",aj:"Crayon vert",ak:"Enlever le surlignage",al:"Surlignage",am:"Barre d'outils du surlignage",an:"Couleur d'arrière-plan",ao:"Téléchargement en cours",ap:"Barre d'outils du widget",aq:"Couleur de police",ar:"Police",as:"Par défaut",at:"Insérer un bloque de code",au:"Aligner à gauche",av:"Aligner à droite",aw:"Centrer",ax:"Justifier",ay:"Alignement du texte",az:"Barre d'outils d'alignement du texte",ba:"Taille de police",bb:"Minuscule",bc:"Petit",bd:"Grand",be:"Enorme",bf:"Insérer un tableau",bg:"Colonne d'entête",bh:"Insérer une colonne à gauche",bi:"Insérer une colonne à droite",bj:"Supprimer la colonne",bk:"Colonne",bl:"Ligne d'entête",bm:"Insérer une ligne en-dessous",bn:"Insérer une ligne au-dessus",bo:"Supprimer la ligne",bp:"Ligne",bq:"Fusionner la cellule au-dessus",br:"Fusionner la cellule à droite",bs:"Fusionner la cellule en-dessous",bt:"Fusionner la cellule à gauche",bu:"Scinder la cellule verticalement",bv:"Scinder la cellule horizontalement",bw:"Fusionner les cellules",bx:"Impossible d'obtenir l'image redimensionnée",by:"La sélection de l'image redimensionnée a échoué.",bz:"Impossible d'insérer l'image à la position courante.",ca:"L'insertion d'image a échoué.",cb:"Changer le texte alternatif à l’image",cc:"Enregistrer",cd:"Annuler",ce:"Coller l'URL du média",cf:"Astuce : Copier l'URL du média dans le contenu pour l'insérer plus rapidement",cg:"URL de média",ch:"Enlever la couleur",ci:"Couleurs du document",cj:"Annuler",ck:"Restaurer",cl:"Barre d'outils dans un menu déroulant",cm:"Éditeur de texte enrichi",cn:"Texte alternatif",co:"%0 sur %1",cp:"Précedent",cq:"Suivant",cr:"Noir",cs:"Gris pâle",ct:"Gris",cu:"Gris clair",cv:"Blanc",cw:"Rouge",cx:"Orange",cy:"Jaune",cz:"Vert clair",da:"Vert",db:"Bleu vert",dc:"Turquoise",dd:"Bleu clair",de:"Bleu",df:"Violet",dg:"Texte brute",dh:"Barre d'outils de l'éditeur",di:"Montrer plus d'éléments",dj:"Ouvrir dans un nouvel onglet",dk:"Fichier téléchargeable",dl:"Supprimer le lien",dm:"Modifier le lien",dn:"Ouvrir le lien dans un nouvel onglet",do:"Ce lien n'a pas d'URL",dp:"URL du lien",dq:"Paragraphe",dr:"Titre 1",ds:"Titre 2",dt:"Titre 3",du:"Titre 4",dv:"Titre 5",dw:"Titre 6",dx:"Éditeur de texte enrichi, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['gl']=Object.assign(d['gl']||{},{a:"Non é posíbel cargar o ficheiro:",b:"Barra de ferramentas de imaxe",c:"Barra de ferramentas de táboas",d:"Itálica",e:"Riscado",f:"Subliñado",g:"Negra",h:"Inserir imaxe ou ficheiro",i:"Código",j:"Cita de bloque",k:"Aumentar sangrado",l:"Reducir sangrado",m:"Escolla o título",n:"Título",o:"Trebello de imaxe",p:"Imaxe a tamaño completo",q:"Lado da imaxe",r:"Imaxe aliñada á esquerda",s:"Imaxe centrada horizontalmente",t:"Imaxe aliñada á dereita",u:"Introduza o título da imaxe",v:"Fallou o envío",w:"Ligar",x:"Inserir imaxe",y:"Lista numerada",z:"Lista viñeteada",aa:"trebello multimedia",ab:"Inserir elemento multimedia",ac:"O URL non debe estar baleiro.",ad:"Este URL multimedia non é compatible.",ae:"Marcador marelo",af:"Marcador verde",ag:"Marcador rosa",ah:"Marcador azul",ai:"Pluma vermella",aj:"Pluma verde",ak:"Retirar o resaltado",al:"Resaltado",am:"Barra de ferramentas para resaltar texto",an:"Cor do fondo da letra",ao:"Envío en proceso",ap:"Barra de ferramentas de trebellos",aq:"Cor da letra",ar:"Familia tipográfica",as:"Predeterminada",at:"Inserir bloque de código",au:"Aliñar á esquerda",av:"Aliñar á dereita",aw:"Centrar horizontalmente",ax:"Xustificado",ay:"Aliñamento do texto",az:"Barra de ferramentas de aliñamento de textos",ba:"Tamaño da letra",bb:"Diminuta",bc:"Pequena",bd:"Grande",be:"Enorme",bf:"Inserir táboa",bg:"Cabeceira de columna",bh:"Inserir columna á esquerda",bi:"Inserir columna á dereita",bj:"Eliminar columna",bk:"Columna",bl:"Cabeceira de fila",bm:"Inserir fila embaixo",bn:"Inserir fila enriba",bo:"Eliminar fila",bp:"Fila",bq:"Combinar cela cara arriba",br:"Combinar cela cara a dereita",bs:"Combinar cela cara abaixo",bt:"Combinar cela cara a esquerda",bu:"Dividir cela en vertical",bv:"Dividir cela en horizontal",bw:"Combinar celas",bx:"Non foi posíbel obter o URL da imaxe redimensionada.",by:"Non foi posíbel seleccionar a imaxe redimensionada",bz:"Non foi posíbel inserir a imaxe na posición actual.",ca:"Fallou a inserción da imaxe",cb:"Cambiar o texto alternativo da imaxe",cc:"Gardar",cd:"Cancelar",ce:"Pegue o URL do medio na entrada.",cf:"Consello: Pegue o URL no contido para incrustalo máis rápido.",cg:"URL multimedia",ch:"Retirar a cor",ci:"Cores do documento",cj:"Desfacer",ck:"Refacer",cl:"Barra de ferramentas despregábel",cm:"Editor de texto mellorado",cn:"Texto alternativo",co:"%0 de %1",cp:"Anterior",cq:"Seguinte",cr:"Negro",cs:"Gris fume",ct:"Gris",cu:"Gris claro",cv:"Branco",cw:"Vermello",cx:"Laranxa",cy:"Amarelo",cz:"Verde claro",da:"Verde",db:"Augamariña",dc:"Turquesa",dd:"Azul claro",de:"Azul",df:"Púrpura",dg:"Texto simple",dh:"Barra de ferramentas do editor",di:"Amosar máis elementos",dj:"Abrir nunha nova lapela",dk:"Descargábel",dl:"Desligar",dm:"Editar a ligazón",dn:"Abrir a ligazón nunha nova lapela",do:"Esta ligazón non ten URL",dp:"URL de ligazón",dq:"Parágrafo",dr:"Título 1",ds:"Título 2",dt:"Título 3",du:"Título 4",dv:"Título 5",dw:"Título 6",dx:"Editor de texto mellorado, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['gu']=Object.assign(d['gu']||{},{a:"ફાઇલ અપલોડ ન થઇ શકી",b:"Image toolbar",c:"Table toolbar",d:"ત્રાંસુ - ઇટલિક્",e:"Strikethrough",f:"નીચે લિટી - અન્ડરલાઇન્",g:"ઘાટુ - બોલ્ડ્",h:"Insert image or file",i:"Code",j:" વિચાર ટાંકો",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Save",cd:"Cancel",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['he']=Object.assign(d['he']||{},{a:"לא ניתן להעלות את הקובץ הבא:",b:"סרגל תמונה",c:"Table toolbar",d:"נטוי",e:"קו חוצה",f:"קו תחתון",g:"מודגש",h:"הוסף תמונה או קובץ",i:"קוד",j:"בלוק ציטוט",k:"Increase indent",l:"Decrease indent",m:"בחר סוג כותרת",n:"כותרת",o:"תמונה",p:"תמונה בפריסה מלאה",q:"תמונת צד",r:"תמונה מיושרת לשמאל",s:"תמונה ממרוכזת",t:"תמונה מיושרת לימין",u:"הזן כותרת תמונה",v:"העלאה נכשלה",w:"קישור",x:"הוספת תמונה",y:"רשימה ממוספרת",z:"רשימה מנוקדת",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"סימון צהוב",af:"סימון ירוק",ag:"סימון וורוד",ah:"סימון כחול",ai:"עט אדום",aj:"עט ירוק",ak:"הסר הדגשה",al:"הדגשה",am:"סרגל הדגשת טקסט",an:"Font Background Color",ao:"העלאה מתבצעת",ap:"סרגל יישומון",aq:"Font Color",ar:"Font Family",as:"ברירת מחדל",at:"Insert code block",au:"יישור לשמאל",av:"יישור לימין",aw:"יישור באמצע",ax:"מרכוז גבולות",ay:"יישור טקסט",az:"סרגל כלים יישור טקסט",ba:"גודל טקסט",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"לא ניתן להשיג תמונה מוקטנת",by:"בחירת תמונה מוקטנת נכשלה",bz:"לא ניתן להוסיף תמונה במיקום הנוכחי",ca:"הוספת תמונה נכשלה",cb:"שינוי טקסט אלטרנטיבי לתמונה",cc:"שמירה",cd:"ביטול",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"ביטול",ck:"ביצוע מחדש",cl:"סרגל כלים נפתח",cm:"עורך טקסט עשיר",cn:"טקסט אלטרנטיבי",co:"0% מתוך %1",cp:"הקודם",cq:"הבא",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"סרגל הכלים",di:"הצד פריטים נוספים",dj:"Open in a new tab",dk:"Downloadable",dl:"ביטול קישור",dm:"עריכת קישור",dn:"פתח קישור בכרטיסייה חדשה",do:"לקישור זה אין כתובת אתר",dp:"קישור כתובת אתר",dq:"פיסקה",dr:"כותרת 1",ds:"כותרת 2",dt:"כותרת 3",du:"כותרת 4",dv:"כותרת 5",dw:"כותרת 6",dx:"עורך טקסט עשיר, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['hr']=Object.assign(d['hr']||{},{a:"Datoteku nije moguće poslati:",b:"Traka za slike",c:"Traka za tablice",d:"Ukošeno",e:"Precrtano",f:"Podcrtavanje",g:"Podebljano",h:"Umetni sliku ili datoteku",i:"Kod",j:"Blok citat",k:"Povećaj uvlačenje",l:"Umanji uvlačenje",m:"Odaberite naslov",n:"Naslov",o:"Slika widget",p:"Slika pune veličine",q:"Slika sa strane",r:"Lijevo poravnata slika",s:"Centrirana slika",t:"Slika poravnata desno",u:"Unesite naslov slike",v:"Slanje nije uspjelo",w:"Veza",x:"Umetni sliku",y:"Brojčana lista",z:"Obična lista",aa:"dodatak za medije",ab:"Ubaci medij",ac:"URL ne smije biti prazan.",ad:"URL nije podržan.",ae:"Žuti marker",af:"Zeleni marker",ag:"Rozi marker",ah:"Plavi marker",ai:"Crveno pero",aj:"Zeleno pero",ak:"Ukloni isticanje",al:"Istakni",am:"Traka za isticanje teksta",an:"Pozadinska Boja Fonta",ao:"Slanje u tijeku",ap:"Traka sa spravicama",aq:"Boja Fonta",ar:"Obitelj fonta",as:"Podrazumijevano",at:"Insert code block",au:"Poravnaj ulijevo",av:"Poravnaj udesno",aw:"Poravnaj po sredini",ax:"Razvuci",ay:"Poravnanje teksta",az:"Traka za poravnanje",ba:"Veličina fonta",bb:"Sićušan",bc:"Mali",bd:"Veliki",be:"Ogroman",bf:"Ubaci tablicu",bg:"Kolona zaglavlja",bh:"Umetni stupac lijevo",bi:"Umetni stupac desno",bj:"Obriši kolonu",bk:"Kolona",bl:"Red zaglavlja",bm:"Ubaci red ispod",bn:"Ubaci red iznad",bo:"Obriši red",bp:"Red",bq:"Spoji ćelije prema gore",br:"Spoji ćelije prema desno",bs:"Spoji ćelije prema dolje",bt:"Spoji ćelije prema lijevo",bu:"Razdvoji ćeliju okomito",bv:"Razdvoji ćeliju vodoravno",bw:"Spoji ćelije",bx:"Nije moguće dohvatiti URL slike s promijenjenom veličinom",by:"Odabir slike s promijenjenom veličinom nije uspjelo",bz:"Nije moguće umetnuti sliku na trenutnu poziciju",ca:"Umetanje slike nije uspjelo",cb:"Promijeni alternativni tekst slike",cc:"Snimi",cd:"Poništi",ce:"Zalijepi URL medija u ulaz.",cf:"Natuknica: Za brže ugrađivanje zalijepite URL u sadržaj.",cg:"URL medija",ch:"Ukloni boju",ci:"Boje dokumenta",cj:"Poništi",ck:"Ponovi",cl:"Traka padajućeg izbornika",cm:"Rich Text Editor",cn:"Alternativni tekst",co:"%0 od %1",cp:"Prethodni",cq:"Sljedeći",cr:"Crna",cs:"Tamnosiva",ct:"Siva",cu:"Svijetlosiva",cv:"Bijela",cw:"Crvena",cx:"Narančasta",cy:"Žuta",cz:"Svijetlozelena",da:"Zelena",db:"Akvamarin",dc:"Tirkizna",dd:"Svijetloplava",de:"Plava",df:"Ljubičasta",dg:"Plain text",dh:"Traka uređivača",di:"Prikaži više stavaka",dj:"Otvori u novoj kartici",dk:"Moguće preuzeti",dl:"Ukloni vezu",dm:"Uredi vezu",dn:"Otvori vezu u novoj kartici",do:"Ova veza nema URL",dp:"URL veze",dq:"Paragraf",dr:"Naslov 1",ds:"Naslov 2",dt:"Naslov 3",du:"Naslov 4",dv:"Naslov 5",dw:"Naslov 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['hu']=Object.assign(d['hu']||{},{a:"Nem sikerült a fájl feltöltése:",b:"Kép eszköztár",c:"Táblázat eszköztár",d:"Dőlt",e:"Áthúzott",f:"Aláhúzott",g:"Félkövér",h:"Kép, vagy fájl beszúrása",i:"Forráskód",j:"Idézet",k:"Behúzás növelése",l:"Behúzás csökkentése",m:"Stílus megadása",n:"Stílusok",o:"képmodul",p:"Teljes méretű kép",q:"Oldalsó kép",r:"Balra igazított kép",s:"Középre igazított kép",t:"Jobbra igazított kép",u:"Képaláírás megadása",v:"A feltöltés nem sikerült",w:"Link",x:"Kép beszúrása",y:"Számozott lista",z:"Pontozott lista",aa:"Média widget",ab:"Média beszúrása",ac:"Az URL nem lehet üres.",ad:"Ez a média URL típus nem támogatott.",ae:"Sárga kiemelő",af:"Zöld kiemelő",ag:"Rózsaszín kiemelő",ah:"Kék kiemelő",ai:"Piros toll",aj:"Zöld toll",ak:"Kiemelés eltávolítása",al:"Kiemelés",am:"Szöveg kiemelés eszköztár",an:"Betű háttérszín",ao:"A feltöltés folyamatban",ap:"Widget eszköztár",aq:"Betűszín",ar:"Betűtípus",as:"Alapértelmezett",at:"Kód blokk beszúrása",au:"Balra igazítás",av:"Jobbra igazítás",aw:"Középre igazítás",ax:"Sorkizárt",ay:"Szöveg igazítása",az:"Szöveg igazítás eszköztár",ba:"Betűméret",bb:"Apró",bc:"Kicsi",bd:"Nagy",be:"Hatalmas",bf:"Táblázat beszúrása",bg:"Oszlop fejléc",bh:"Oszlop beszúrása balra",bi:"Oszlop beszúrása jobbra",bj:"Oszlop törlése",bk:"Oszlop",bl:"Sor fejléc",bm:"Sor beszúrása alá",bn:"Sor beszúrása fölé",bo:"Sor törlése",bp:"Sor",bq:"Cellák egyesítése felfelé",br:"Cellák egyesítése jobbra",bs:"Cellák egyesítése lefelé",bt:"Cellák egyesítése balra",bu:"Cella felosztása függőlegesen",bv:"Cella felosztása vízszintesen",bw:"Cellaegyesítés",bx:"Az átméretezett kép URL-je nem érhető el.",by:"Az átméretezett kép kiválasztása sikertelen",bz:"A jelenlegi helyen nem szúrható be a kép.",ca:"A kép beszúrása sikertelen",cb:"Helyettesítő szöveg módosítása",cc:"Mentés",cd:"Mégsem",ce:"Illessze be a média URL-jét.",cf:"Tipp: Illessze be a média URL-jét a tartalomba.",cg:"Média URL",ch:"Szín eltávolítása",ci:"Dokumentum színek",cj:"Visszavonás",ck:"Újra",cl:"Lenyíló eszköztár",cm:"Bővített szövegszerkesztő",cn:"Helyettesítő szöveg",co:"%0 / %1",cp:"Előző",cq:"Következő",cr:"Fekete",cs:"Halvány szürke",ct:"Szürke",cu:"Világosszürke",cv:"Fehér",cw:"Piros",cx:"Narancs",cy:"Sárga",cz:"Világoszöld",da:"Zöld",db:"Kékeszöld",dc:"Türkiz",dd:"Világoskék",de:"Kék",df:"Lila",dg:"Egyszerű szöveg",dh:"Szerkesztő eszköztár",di:"További elemek",dj:"Megnyitás új lapon",dk:"Letölthető",dl:"Link eltávolítása",dm:"Link szerkesztése",dn:"Link megnyitása új ablakban",do:"A link nem tartalmaz URL-t",dp:"URL link",dq:"Bekezdés",dr:"Címsor 1",ds:"Címsor 2",dt:"Címsor 3",du:"Címsor 4",dv:"Címsor 5",dw:"Címsor 6",dx:"Bővített szövegszerkesztő, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['id']=Object.assign(d['id']||{},{a:"Tidak dapat mengunggah berkas:",b:"Alat gambar",c:"Alat tabel",d:"Miring",e:"Coret",f:"Garis bawah",g:"Tebal",h:"Sisipkan gambar atau berkas",i:"Kode",j:"Kutipan",k:"Tambah indentasi",l:"Kurangi indentasi",m:"Pilih tajuk",n:"Tajuk",o:"widget gambar",p:"Gambar ukuran penuh",q:"Gambar sisi",r:"Gambar rata kiri",s:"Gambar rata tengah",t:"Gambar rata kanan",u:"Tambahkan deskripsi gambar",v:"Gagal mengunggah",w:"Tautan",x:"Sisipkan gambar",y:"Daftar Berangka",z:"Daftar Tak Berangka",aa:"widget media",ab:"Sisipkan media",ac:"URL tidak boleh kosong.",ad:"URL media ini tidak didukung.",ae:"Marka kuning",af:"Marka hijau",ag:"Marka merah jambu",ah:"Marka biru",ai:"Pena merah",aj:"Pena hijau",ak:"Hapus tanda",al:"Tanda",am:"Alat penanda teks",an:"Warna Latar Huruf",ao:"Sedang mengunggah",ap:"Alat widget",aq:"Warna Huruf",ar:"Jenis Huruf",as:"Bawaan",at:"Sisipkan blok kode",au:"Rata kiri",av:"Rata kanan",aw:"Rata tengah",ax:"Rata kanan-kiri",ay:"Perataan teks",az:"Alat perataan teks",ba:"Ukuran Huruf",bb:"Sangat Kecil",bc:"Kecil",bd:"Besar",be:"Sangat Besar",bf:"Sisipkan tabel",bg:"Kolom tajuk",bh:"Sisipkan kolom ke kiri",bi:"Sisipkan kolom ke kanan",bj:"Hapus kolom",bk:"Kolom",bl:"Baris tajuk",bm:"Sisipkan baris ke bawah",bn:"Sisipkan baris ke atas",bo:"Hapus baris",bp:"Baris",bq:"Gabungkan sel ke atas",br:"Gabungkan sel ke kanan",bs:"Gabungkan sel ke bawah",bt:"Gabungkan sel ke kiri",bu:"Bagikan sel secara vertikal",bv:"Bagikan sel secara horizontal",bw:"Gabungkan sel",bx:"Gagal mendapatkan URL gambar terukur",by:"Gagal memilih gambar terukur",bz:"Tidak dapat menyisipkan gambar pada posisi ini.",ca:"Gagal menyisipkan gambar",cb:"Ganti alternatif teks gambar",cc:"Simpan",cd:"Batal",ce:"Tempelkan URL ke dalam bidang masukan.",cf:"Tip: Tempelkan URL ke bagian konten untuk sisip cepat.",cg:"URL Media",ch:"Hapus warna",ci:"Warna dokumen",cj:"Batal",ck:"Lakukan lagi",cl:"Alat dropdown",cm:"Editor Teks Kaya",cn:"Alternatif teks",co:"%0 dari %1",cp:"Sebelumnya",cq:"Berikutnya",cr:"Hitam",cs:"Kelabu gelap",ct:"Kelabu",cu:"Kelabu terang",cv:"Putih",cw:"Merah",cx:"Jingga",cy:"Kuning",cz:"Hijau terang",da:"Hijau",db:"Biru laut",dc:"Turkish",dd:"Biru terang",de:"Biru",df:"Ungu",dg:"Teks mentah",dh:"Alat editor",di:"Show more items",dj:"Buka di tab baru",dk:"Dapat diunduh",dl:"Hapus tautan",dm:"Sunting tautan",dn:"Buka tautan di tab baru",do:"Tautan ini tidak memiliki URL",dp:"URL tautan",dq:"Paragraf",dr:"Tajuk 1",ds:"Tajuk 2",dt:"Tajuk 3",du:"Tajuk 4",dv:"Tajuk 5",dw:"Tajuk 6",dx:"Editor Teks Kaya, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['it']=Object.assign(d['it']||{},{a:"Impossibile caricare il file:",b:"Barra degli strumenti dell'immagine",c:"Barra degli strumenti della tabella",d:"Corsivo",e:"Barrato",f:"Sottolineato",g:"Grassetto",h:"Inserisci immagine o file",i:"Codice",j:"Blocco citazione",k:"Aumenta rientro",l:"Riduci rientro",m:"Seleziona intestazione",n:"Intestazione",o:"Widget immagine",p:"Immagine a dimensione intera",q:"Immagine laterale",r:"Immagine allineata a sinistra",s:"Immagine centrata",t:"Immagine allineata a destra",u:"inserire didascalia dell'immagine",v:"Caricamento fallito",w:"Collegamento",x:"Inserisci immagine",y:"Elenco numerato",z:"Elenco puntato",aa:"widget media",ab:"Inserisci media",ac:"L'URL non può essere vuoto.",ad:"Questo URL di file multimediali non è supportato.",ae:"Contrassegno giallo",af:"Contrassegno verde",ag:"Contrassegno rosa",ah:"Contrassegno blu",ai:"Penna rossa",aj:"Penna verde",ak:"Rimuovi evidenziazione",al:"Evidenzia",am:"Barra degli strumenti dell'evidenziazione del testo",an:"Colore di sfondo caratteri",ao:"Caricamento in corso",ap:"Barra degli strumenti del widget",aq:"Colore caratteri",ar:"Tipo di caratteri",as:"Predefinito",at:"Inserisci blocco di codice",au:"Allinea a sinistra",av:"Allinea a destra",aw:"Allinea al centro",ax:"Giustifica",ay:"Allineamento del testo",az:"Barra degli strumenti dell'allineamento",ba:"Dimensione caratteri",bb:"Piccolissimi",bc:"Piccoli",bd:"Grandi",be:"Grandissimi",bf:"Inserisci tabella",bg:"Intestazione colonna",bh:"Inserisci colonna a sinistra",bi:"Inserisci colonna a destra",bj:"Elimina colonna",bk:"Colonna",bl:"Riga d'intestazione",bm:"Inserisci riga sotto",bn:"Inserisci riga sopra",bo:"Elimina riga",bp:"Riga",bq:"Unisci cella sopra",br:"Unisci cella a destra",bs:"Unisci cella sotto",bt:"Unisci cella a sinistra",bu:"Dividi cella verticalmente",bv:"Dividi cella orizzontalmente",bw:"Unisci celle",bx:"Non è stato possibile ottenere l'URL dell'immagine ridimensionata.",by:"La selezione dell'immagine ridimensionata è fallita",bz:"Non è stato possibile inserire l'immagine nella posizione corrente.",ca:"L'inserimento dell'immagine è fallito",cb:"Cambia testo alternativo dell'immagine",cc:"Salva",cd:"Annulla",ce:"Incolla l'URL del file multimediale nell'input.",cf:"Consiglio: incolla l'URL nel contenuto per un'incorporazione più veloce.",cg:"URL media",ch:"Rimuovi colore",ci:"Colori del docmento",cj:"Annulla",ck:"Ripristina",cl:"Barra degli strumenti del menu a discesa",cm:"Editor di testo formattato",cn:"Testo alternativo",co:"%0 di %1",cp:"Indietro",cq:"Avanti",cr:"Nero",cs:"Grigio tenue",ct:"Grigio",cu:"Grigio chiaro",cv:"Bianco",cw:"Rosso",cx:"Arancio",cy:"Giallo",cz:"Verde chiaro",da:"Verde",db:"Aquamarina",dc:"Turchese",dd:"Azzurro",de:"Blu",df:"Porpora",dg:"Testo semplice",dh:"Barra degli strumenti dell'editor",di:"Mostra più elementi",dj:"Apri in una nuova scheda",dk:"Scaricabile",dl:"Elimina collegamento",dm:"Modifica collegamento",dn:"Apri collegamento in nuova scheda",do:"Questo collegamento non ha un URL",dp:"URL del collegamento",dq:"Paragrafo",dr:"Intestazione 1",ds:"Intestazione 2",dt:"Intestazione 3",du:"Intestazione 4",dv:"Intestazione 5",dw:"Intestazione 6",dx:"Editor di testo formattato, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ja']=Object.assign(d['ja']||{},{a:"ファイルをアップロードできません:",b:"Image toolbar",c:"Table toolbar",d:"イタリック",e:"取り消し線",f:"アンダーライン",g:"ボールド",h:"画像やファイルの挿入",i:"コード",j:"ブロッククオート(引用)",k:"Increase indent",l:"Decrease indent",m:"見出しを選択",n:"見出し",o:"画像ウィジェット",p:"フルサイズ画像",q:"サイドイメージ",r:"左寄せ画像",s:"中央寄せ画像",t:"右寄せ画像",u:"画像の注釈を入力",v:"アップロード失敗",w:"リンク",x:"画像挿入",y:"番号付きリスト",z:"箇条書きリスト",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"アップロード中",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"左揃え",av:"右揃え",aw:"中央揃え",ax:"両端揃え",ay:"文字揃え",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"表の挿入",bg:"見出し列",bh:"Insert column left",bi:"Insert column right",bj:"列を削除",bk:"列",bl:"見出し行",bm:"下に行を挿入",bn:"上に行を挿入",bo:"行を削除",bp:"行",bq:"上のセルと結合",br:"右のセルと結合",bs:"下のセルと結合",bt:"左のセルと結合",bu:"横にセルを分離",bv:"縦にセルを分離",bw:"セルを結合",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"画像の代替テキストを変更",cc:"保存",cd:"キャンセル",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"元に戻す",ck:"やり直し",cl:"Dropdown toolbar",cm:"リッチテキストエディター",cn:"代替テキスト",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"リンク解除",dm:"リンクを編集",dn:"新しいタブでリンクを開く",do:"リンクにURLが設定されていません",dp:"リンクURL",dq:"パラグラフ",dr:"見出し1",ds:"見出し2",dt:"見出し3 ",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"リッチテキストエディター, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['km']=Object.assign(d['km']||{},{a:"មិនអាចអាប់ឡូតឯកសារ៖",b:"Image toolbar",c:"Table toolbar",d:"ទ្រេត",e:"Strikethrough",f:"គូសបន្ទាត់ក្រោម",g:"ដិត",h:"Insert image or file",i:"Code",j:"ប្លុកពាក្យសម្រង់",k:"Increase indent",l:"Decrease indent",m:"ជ្រើសរើសក្បាលអត្ថបទ",n:"ក្បាលអត្ថបទ",o:"វិដជិតរូបភាព",p:"រូបភាពពេញទំហំ",q:"រូបភាពនៅខាង",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"បញ្ចូលពាក្យពណ៌នារូបភាព",v:"អាប់ឡូតមិនបាន",w:"តំណ",x:"បញ្ចូលរូបភាព",y:"បញ្ជីជាលេខ",z:"បញ្ជីជាចំណុច",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"រក្សាទុ",cd:"បោះបង់",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"លែងធ្វើវិញ",ck:"ធ្វើវិញ",cl:"Dropdown toolbar",cm:"កម្មវិធីកែសម្រួលអត្ថបទសម្បូរបែប",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"ផ្ដាច់តំណ",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"URL តំណ",dq:"កថាខណ្ឌ",dr:"ក្បាលអត្ថបទ 1",ds:"ក្បាលអត្ថបទ 2",dt:"ក្បាលអត្ថបទ 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"កម្មវិធីកែសម្រួលអត្ថបទសម្បូរបែប, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['kn']=Object.assign(d['kn']||{},{a:"Cannot upload file:",b:"Image toolbar",c:"Table toolbar",d:"ಇಟಾಲಿಕ್",e:"Strikethrough",f:"Underline",g:"ದಪ್ಪ",h:"Insert image or file",i:"Code",j:"ಗುರುತಿಸಲಾದ ಉಲ್ಲೇಖ",k:"Increase indent",l:"Decrease indent",m:"ಶೀರ್ಷಿಕೆ ಆಯ್ಕೆಮಾಡು",n:"ಶೀರ್ಷಿಕೆ",o:"ಚಿತ್ರ ವಿಜೆಟ್",p:"ಪೂರ್ಣ ಅಳತೆಯ ಚಿತ್ರ",q:"ಪಕ್ಕದ ಚಿತ್ರ",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ ಸೇರಿಸು",v:"Upload failed",w:"ಕೊಂಡಿ",x:"Insert image",y:"ಸಂಖ್ಯೆಯ ಪಟ್ಟಿ",z:"ಬುಲೆಟ್ ಪಟ್ಟಿ",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"ಚಿತ್ರದ ಬದಲಿ ಪಠ್ಯ ಬದಲಾಯಿಸು",cc:"ಉಳಿಸು",cd:"ರದ್ದುಮಾಡು",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"ರದ್ದು",ck:"ಮತ್ತೆ ಮಾಡು",cl:"Dropdown toolbar",cm:"ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ",cn:"ಪಠ್ಯದ ಬದಲಿ",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"ಕೊಂಡಿ ತೆಗೆ",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"ಕೊಂಡಿ ಸಂಪರ್ಕಿಸು",dq:"ಪ್ಯಾರಾಗ್ರಾಫ್",dr:"ಶೀರ್ಷಿಕೆ 1",ds:"ಶೀರ್ಷಿಕೆ 2",dt:"ಶೀರ್ಷಿಕೆ 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"ಸಮೃದ್ಧ ಪಠ್ಯ ಸಂಪಾದಕ, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ko']=Object.assign(d['ko']||{},{a:"파일 업로드 불가",b:"Image toolbar",c:"Table toolbar",d:"기울임꼴",e:"Strikethrough",f:"밑줄",g:"굵게",h:"Insert image or file",i:"소스",j:"인용 단락",k:"Increase indent",l:"Decrease indent",m:"제목 선택",n:"제목",o:"이미지 위젯",p:"문서 너비",q:"내부 우측 정렬",r:"왼쪽 정렬",s:"가운데 정렬",t:"오른쪽 정렬",u:"이미지 설명을 입력하세요",v:"Upload failed",w:"링크",x:"Insert image",y:"번호매기기",z:"글머리기호",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"왼쪽 맞춤",av:"오른쪽 맞춤",aw:"가운데 맞춤",ax:"양쪽 맞춤",ay:"텍스트 정렬",az:"텍스트 정렬 툴바",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"대체 텍스트 변경",cc:"저장",cd:"취소",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"실행 취소",ck:"다시 실행",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"대체 텍스트",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"링크 삭제",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"링크 주소",dq:"문단",dr:"제목1",ds:"제목2",dt:"제목3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ku']=Object.assign(d['ku']||{},{a:"پەڕگەکە ناتوانرێت باربکرێت:",b:"تووڵامرازی وێنە",c:"تووڵامرازی خشتە",d:"لار",e:"هێڵ بەسەرداهاتوو",f:"ژێرهێڵ",g:"قەڵەو",h:"وێنە یان پەڕگە دابنێ",i:"کۆد",j:"وتەی وەرگیراو",k:"زیادکردنی بۆشایی",l:"کەمکردنەوەی بۆشایی",m:"سەرنووسە هەڵبژێرە",n:"سەرنووسە",o:"وێدجیتی وێنە",p:"پڕ بەقەبارەی وێنە",q:"لای وێنە",r:"ڕیزکردنی وێنە بۆ لای چەپ",s:"ناوەڕاستکراوی وێنە",t:"ڕیزکردنی وێنە بۆ لای ڕاست",u:"سەردێڕی وێنە دابنێ",v:"بارکردنەکە سەرنەکەووت",w:"بەستەر",x:"وێنە دابنێ",y:"لیستەی ژمارەیی",z:"لیستەی خاڵەیی",aa:"ویدجێتتی مێدیا",ab:"مێدیا دابنێ",ac:"پێویستە بەستەر بەتاڵ نەبێت.",ad:"ئەم بەستەری مێدیایە پاڵپشتی ناکرێت.",ae:"نیشانەکەری زەرد",af:"نیشانەکەری سەوز",ag:"نیشانەکەری پەمەیی",ah:"نیشانەکەری شین",ai:"پێنووسی سۆر",aj:"پێنووسی سەوز",ak:"لابردنی بەرچاوکەر",al:"بەرچاوکردن",am:"تووڵامرازی نیشانکردنی تێکست",an:"ڕەنگی پاشبنەمای فۆنت",ao:"بارکردنەکە لە جێبەجێکردن دایە",ap:"تووڵامرازی ویدجێت",aq:"ڕەنگی فۆنت",ar:"فۆنتی خێزانی",as:"بنچینە",at:"دانانی خشتەی کۆد",au:"بەهێڵکردنی چەپ",av:"بەهێڵکردنی ڕاست",aw:"بەهێڵکردنی ناورەڕاست",ax:"هاوستوونی",ay:"ڕیززکردنی تێکست",az:"تووڵامرازی ڕیززکردنی تێکست",ba:"قەبارەی فۆنت",bb:"گچکە",bc:"بچوک",bd:"گەورە",be:"زۆر گەورە",bf:"خشتە دابنێ",bg:"ستوونی دەسپێک",bh:"دانانی ستوون لە چەپ",bi:"دانانی ستوون لە ڕاست",bj:"سڕینەوەی ستوون",bk:"ستوون",bl:"ڕیزی دەسپێک",bm:"دانانی ڕیز لە ژێرەوە",bn:"دانانی ڕیز لە سەرەوە",bo:"سڕینەوەی ڕیز",bp:"ڕیز",bq:"تێکەڵکردنی خانەکان بەرەو سەر",br:"تێکەڵکردنی خانەکان بەرەو ڕاست",bs:"تێکەڵکردنی خانەکان بەرەو ژێرەوە",bt:"تێکەڵکردنی خانەکان بەرەو چەپ",bu:"بەشکردنی خانەکان بە ئەستوونی",bv:"بەشکردنی خانەکان بە ئاسۆیی",bw:"تێکەڵکردنی خانەکان",bx:"نەتوانرا بەستەری وێنەی قەبارە گۆڕاو بەدەست بێت.",by:"دیاریکردنی وێنەی قەبارە گۆڕاو سەرکەوتوو نەبوو",bz:"نەتوانرا وێنە دابنرێت لەم شوێنە.",ca:"دانانی وێنە سەرکەوتوو نەبوو",cb:"گۆڕینی جێگروەی تێکیسی وێنە",cc:"پاشکەوتکردن",cd:"هەڵوەشاندنەوە",ce:"بەستەری مێدیاکە لە خانەکە بلکێنە.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"بەستەری مێدیا",ch:"لابردنی ڕەنگ",ci:"ڕەنگەکانی دۆکومێنت",cj:"وەک خۆی لێ بکەوە",ck:"هەلگەڕاندنەوە",cl:"تووڵامرازی لیستەیی",cm:"سەرنوسەری دەقی بەپیت",cn:"جێگرەوەی تێکست",co:"%0 لە %1",cp:"پێشتر",cq:"دواتر",cr:"ڕەش",cs:"ڕەساسی تاریک",ct:"ڕەساسی",cu:"ڕەساسی ڕووناک",cv:"سپی",cw:"سور",cx:"پرتەقاڵی",cy:"زەرد",cz:"سەوزی ڕووناک",da:"سەوز",db:"شینی دەریایی",dc:"شینی ئاسمانی",dd:"شینی ڕووناک",de:"شین",df:"مۆر",dg:"تێکستی سادە",dh:"تووڵامرازی دەسکاریکەر",di:"بڕگەی زیاتر نیشانبدە",dj:"کردنەوەی لە پەنجەرەیەکی نوێ",dk:"Downloadable",dl:"لابردنی بەستەر",dm:"دەستکاری بەستەر",dn:"کردنەوەی بەستەرەکە لە پەڕەیەکی نوێ",do:"ئەم بەستەرە ناونیشانی نیە",dp:"ناونیشانی بەستەر",dq:"پەراگراف",dr:"سەرنووسەی 1",ds:"سەرنووسەی 2",dt:"سەرنووسەی 3",du:"سەرنووسەی 4",dv:"سەرنووسەی 5",dw:"سەرنووسەی 6",dx:"سەرنوسەری دەقی بەپیت, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['lt']=Object.assign(d['lt']||{},{a:"Negalima įkelti failo:",b:"Image toolbar",c:"Table toolbar",d:"Kursyvas",e:"Perbrauktas",f:"Pabrauktas",g:"Paryškintas",h:"Įterpti vaizdą ar failą",i:"Kodas",j:"Citata",k:"Padidinti atitraukimą",l:"Sumažinti atitraukimą",m:"Pasirinkite antraštę",n:"Antraštė",o:"vaizdų valdiklis",p:"Pilno dydžio vaizdas",q:"Vaizdas šone",r:"Vaizdas kairėje",s:"Vaizdas centre",t:"Vaizdas dešinėje",u:"Įveskite vaizdo antraštę",v:"Įkelti nepavyko",w:"Pridėti nuorodą",x:"Įterpti vaizdą",y:"Numeruotas rąrašas",z:"Sąrašas",aa:"media valdiklis",ab:"Įterpkite media",ac:"URL negali būti tuščias.",ad:"Šis media URL yra nepalaikomas.",ae:"Geltonas žymeklis",af:"Žalias žymeklis",ag:"Rožinis žymeklis",ah:"Mėlynas žymeklis",ai:"Raudonas žymeklis",aj:"Žalias žymeklis",ak:"Panaikinti pažymėjimą",al:"Pažymėti žymekliu",am:"Text highlight toolbar",an:"Šrifto fono spalva",ao:"Įkelima",ap:"Widget toolbar",aq:"Šrifto spalva",ar:"Šrifto šeima",as:"Numatyta",at:"Insert code block",au:"Lygiuoti į kairę",av:"Lygiuoti į dešinę",aw:"Centruoti",ax:"Lygiuoti per visą plotį",ay:"Teksto lygiavimas",az:"Text alignment toolbar",ba:"Šrifto dydis",bb:"Mažytis",bc:"Mažas",bd:"Didelis",be:"Milžiniškas",bf:"Įterpti lentelę",bg:"Antraštės stulpelis",bh:"Įterpti stulpelį kairėje",bi:"Įterpti stulpelį dešinėje",bj:"Ištrinti stulpelį",bk:"Stulpelis",bl:"Antraštės eilutė",bm:"Įterpti eilutę žemiau",bn:"Įterpti eilutę aukščiau",bo:"Ištrinti eilutę",bp:"Eilutė",bq:"Prijungti langelį viršuje",br:"Prijungti langelį dešinėje",bs:"Prijungti langelį apačioje",bt:"Prijungti langelį kairėje",bu:"Padalinti langelį vertikaliai",bv:"Padalinti langelį horizontaliai",bw:"Sujungti langelius",bx:"Nepavyko gauti pakeisto dydžio paveiksliuko URL.",by:"Nepavyko pasirinkti pakeisto vaizdo",bz:"Nepavyko įterpti vaizdo į dabartinę vietą.",ca:"Nepavyko įterpti vaizdo",cb:"Pakeisti vaizdo alternatyvųjį tekstą",cc:"Išsaugoti",cd:"Atšaukti",ce:"Įklijuokite media URL adresą į įvedimo lauką.",cf:"Patarimas: norėdami greičiau įterpti media tiesiog įklijuokite URL į turinį.",cg:"Media URL",ch:"Pašalinti spalvą",ci:"Document colors",cj:"Atgal",ck:"Pirmyn",cl:"Dropdown toolbar",cm:"Raiškiojo teksto redaktorius",cn:"Alternatyvusis tekstas",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Juoda",cs:"Pilkšva",ct:"Pilka",cu:"Šviesiai pilka",cv:"Balta",cw:"Raudona",cx:"Oranžinė",cy:"Geltona",cz:"Šviesiai žalia",da:"Žalia",db:"Aquamarine",dc:"Turkio",dd:"Šviesiai mėlyna",de:"Mėlyna",df:"Violetinė",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Pašalinti nuorodą",dm:"Keisti nuorodą",dn:"Atidaryti nuorodą naujame skirtuke",do:"Ši nuorda neturi URL",dp:"Nuorodos URL",dq:"Paragrafas",dr:"Antraštė 1",ds:"Antraštė 2",dt:"Antraštė 3",du:"Antraštė 4",dv:"Antraštė 5",dw:"Antraštė 6",dx:"Raiškiojo teksto redaktorius, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['lv']=Object.assign(d['lv']||{},{a:"Nevar augšupielādēt failu:",b:"Attēlu rīkjosla",c:"Tabulas rīkjosla",d:"Kursīvs",e:"Nosvītrots",f:"Pasvītrots",g:"Trekns",h:"Ievietot attēlu vai failu",i:"Kods",j:"Citāts",k:"Palielināt atkāpi",l:"Samazināt atkāpi",m:"Izvēlēties virsrakstu",n:"Virsraksts",o:"attēla sīkrīks",p:"Pilna izmēra attēls",q:"Sānā novietots attēls",r:"Pa kreisi līdzināts attēls",s:"Centrēts attēls",t:"Pa labi līdzināts attēls",u:"Ievadiet attēla parakstu",v:"Augšupielāde neizdevusies",w:"Saite",x:"Ievietot attēlu",y:"Numurēts Saraksts",z:"Nenumurēts Saraksts",aa:"medija sīkrīks",ab:"Ievietot mediju",ac:"URL ir jābūt ievadītam.",ad:"Šis medija URL netiek atbalstīts.",ae:"Dzeltens marķieris",af:"Zaļš marķieris",ag:"Rozā marķieris",ah:"Zils marķieris",ai:"Sarkana pildspalva",aj:"Zaļa pildspalva",ak:"Noņemt izcēlumu",al:"Izcelt",am:"Teksta izcēluma rīkjosla",an:"Fonta fona krāsa",ao:"Notiek augšupielāde",ap:"Sīkrīku rīkjosla",aq:"Fonta krāsa",ar:"Fonts",as:"Noklusējuma",at:"Ievietot koda bloku",au:"Pa kreisi",av:"Pa labi",aw:"Centrēt",ax:"Izlīdzināt abas malas",ay:"Teksta izlīdzināšana",az:"Teksta līdzināšanas rīkjosla",ba:"Fonta Lielums",bb:"Ļoti mazs",bc:"Mazs",bd:"Liels",be:"Milzīgs",bf:"Ievietot tabulu",bg:"Šī kolonna ir galvene",bh:"Ievietot kolonnu pa kreisi",bi:"Ievietot kolonnu pa labi",bj:"Dzēst kolonnu",bk:"Kolonna",bl:"Šī rinda ir galvene",bm:"Ievietot rindu zem",bn:"Ievietot rindu virs",bo:"Dzēst rindu",bp:"Rinda",bq:"Apvienot šūnas uz augšu",br:"Apvienot šūnas pa labi",bs:"Apvienot šūnas uz leju",bt:"Apvienot šūnas pa kreisi",bu:"Atdalīt šūnu vertikāli",bv:"Atdalīt šūnu horizontāli",bw:"Apvienot šūnas",bx:"Nevarēja iegūt mērogotā attēla adresi.",by:"Nevarēja izvēlēties mērogoto attēlu.",bz:"Pašreizējā pozīcijā attēlu nevarēja ievietot.",ca:"Nevarēja ievietot attēlu",cb:"Mainīt attēla alternatīvo tekstu",cc:"Saglabāt",cd:"Atcelt",ce:"Ielīmējiet medija URL teksta laukā.",cf:"Padoms: Ielīmējiet adresi saturā, lai iegultu",cg:"Medija URL",ch:"Noņemt krāsu",ci:"Krāsas dokumentā",cj:"Atsaukt",ck:"Uz priekšu",cl:"Papildus izvēlnes rīkjosla",cm:"Bagātinātais Teksta Redaktors",cn:"Alternatīvais teksts",co:"%0 no %1",cp:"Iepriekšējā",cq:"Nākamā",cr:"Melns",cs:"Blāvi pelēks",ct:"Pelēks",cu:"Gaiši pelēks",cv:"Balts",cw:"Sarkans",cx:"Oranžs",cy:"Dzeltens",cz:"Gaiši zaļš",da:"Zaļš",db:"Akvamarīns",dc:"Tirkīza",dd:"Gaiši zils",de:"Zils",df:"Violets",dg:"Vienkāršs teksts",dh:"Redaktora rīkjosla",di:"Parādīt vairāk vienumus",dj:"Atvērt jaunā cilnē",dk:"Lejupielādējams",dl:"Noņemt Saiti",dm:"Labot Saiti",dn:"Atvērt saiti jaunā cilnē",do:"Saitei nav norādīts URL",dp:"Saites URL",dq:"Pagrāfs",dr:"Virsraksts 1",ds:"Virsraksts 2",dt:"Virsraksts 3",du:"Virsraksts 4",dv:"Virsraksts 5",dw:"Virsraksts 6",dx:"Bagātinātais Teksta Redaktors, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['ms']=Object.assign(d['ms']||{},{a:"Gagal memuat naik fail",b:"Image toolbar",c:"Table toolbar",d:"Italic",e:"Strikethrough",f:"Underline",g:"Bold",h:"Insert image or file",i:"Code",j:"Block quote",k:"Increase indent",l:"Decrease indent",m:"Choose heading",n:"Heading",o:"image widget",p:"Full size image",q:"Side image",r:"Left aligned image",s:"Centered image",t:"Right aligned image",u:"Enter image caption",v:"Upload failed",w:"Link",x:"Insert image",y:"Numbered List",z:"Bulleted List",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Yellow marker",af:"Green marker",ag:"Pink marker",ah:"Blue marker",ai:"Red pen",aj:"Green pen",ak:"Remove highlight",al:"Highlight",am:"Text highlight toolbar",an:"Font Background Color",ao:"Upload in progress",ap:"Widget toolbar",aq:"Font Color",ar:"Font Family",as:"Default",at:"Insert code block",au:"Align left",av:"Align right",aw:"Align center",ax:"Justify",ay:"Text alignment",az:"Text alignment toolbar",ba:"Font Size",bb:"Tiny",bc:"Small",bd:"Big",be:"Huge",bf:"Insert table",bg:"Header column",bh:"Insert column left",bi:"Insert column right",bj:"Delete column",bk:"Column",bl:"Header row",bm:"Insert row below",bn:"Insert row above",bo:"Delete row",bp:"Row",bq:"Merge cell up",br:"Merge cell right",bs:"Merge cell down",bt:"Merge cell left",bu:"Split cell vertically",bv:"Split cell horizontally",bw:"Merge cells",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Change image text alternative",cc:"Save",cd:"Cancel",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Undo",ck:"Redo",cl:"Dropdown toolbar",cm:"Rich Text Editor",cn:"Text alternative",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Unlink",dm:"Edit link",dn:"Open link in new tab",do:"This link has no URL",dp:"Link URL",dq:"Paragraph",dr:"Heading 1",ds:"Heading 2",dt:"Heading 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rich Text Editor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
@@ -0,0 +1 @@
|
||||
(function(d){d['nb']=Object.assign(d['nb']||{},{a:"Kan ikke laste opp fil:",b:"Image toolbar",c:"Table toolbar",d:"Kursiv",e:"Gjennomstreking",f:"Understreking",g:"Fet",h:"Insert image or file",i:"Kode",j:"Blokksitat",k:"Increase indent",l:"Decrease indent",m:"Velg overskrift",n:"Overskrift",o:"Bilde-widget",p:"Bilde i full størrelse",q:"Sidebilde",r:"Venstrejustert bilde",s:"Midtstilt bilde",t:"Høyrejustert bilde",u:"Skriv inn bildetekst",v:"Opplasting feilet",w:"Lenke",x:"Sett inn bilde",y:"Nummerert liste",z:"Punktmerket liste",aa:"media widget",ab:"Insert media",ac:"The URL must not be empty.",ad:"This media URL is not supported.",ae:"Gul uthevingsfarge",af:"Grønn uthevingsfarge",ag:"Rosa uthevingsfarge",ah:"Blå uthevingsfarge",ai:"Rød penn",aj:"Grønn penn",ak:"Fjern uthevingsfarge",al:"Utheving",am:"Text highlight toolbar",an:"Font Background Color",ao:"Opplasting pågår",ap:"Widget toolbar",aq:"Font Color",ar:"Skrifttype",as:"Standard",at:"Insert code block",au:"Venstrejuster",av:"Høyrejuster",aw:"Midstill",ax:"Blokkjuster",ay:"Tekstjustering",az:"Text alignment toolbar",ba:"Skriftstørrelse",bb:"Veldig liten",bc:"Liten",bd:"Stor",be:"Veldig stor",bf:"Sett inn tabell",bg:"Overskriftkolonne",bh:"Insert column left",bi:"Insert column right",bj:"Slett kolonne",bk:"Kolonne",bl:"Overskriftrad",bm:"Sett inn rad under",bn:"Sett inn rad over",bo:"Slett rad",bp:"Rad",bq:"Slå sammen celle opp",br:"Slå sammen celle til høyre",bs:"Slå sammen celle ned",bt:"Slå sammen celle til venstre",bu:"Del celle vertikalt",bv:"Del celle horisontalt",bw:"Slå sammen celler",bx:"Could not obtain resized image URL.",by:"Selecting resized image failed",bz:"Could not insert image at the current position.",ca:"Inserting image failed",cb:"Endre tekstalternativ for bilde",cc:"Lagre",cd:"Avbryt",ce:"Paste the media URL in the input.",cf:"Tip: Paste the URL into the content to embed faster.",cg:"Media URL",ch:"Remove color",ci:"Document colors",cj:"Angre",ck:"Gjør om",cl:"Dropdown toolbar",cm:"Rikteksteditor",cn:"Tekstalternativ for bilde",co:"%0 of %1",cp:"Previous",cq:"Next",cr:"Black",cs:"Dim grey",ct:"Grey",cu:"Light grey",cv:"White",cw:"Red",cx:"Orange",cy:"Yellow",cz:"Light green",da:"Green",db:"Aquamarine",dc:"Turquoise",dd:"Light blue",de:"Blue",df:"Purple",dg:"Plain text",dh:"Editor toolbar",di:"Show more items",dj:"Open in a new tab",dk:"Downloadable",dl:"Fjern lenke",dm:"Rediger lenke",dn:"Åpne lenke i ny fane",do:"Denne lenken har ingen URL",dp:"URL for lenke",dq:"Avsnitt",dr:"Overskrift 1",ds:"Overskrift 2",dt:"Overskrift 3",du:"Heading 4",dv:"Heading 5",dw:"Heading 6",dx:"Rikteksteditor, %0"})})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user