chore(vuepress-plugin-pagation): try refactoring using the render func
This commit is contained in:
parent
6c39238b70
commit
2a1cfd5eea
@ -198,7 +198,7 @@ module.exports = {
|
|||||||
'prefer-const': 2,
|
'prefer-const': 2,
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
||||||
'object-curly-spacing': [2, 'always', {
|
'object-curly-spacing': [2, 'always', {
|
||||||
objectsInObjects: false
|
objectsInObjects: true
|
||||||
}],
|
}],
|
||||||
'array-bracket-spacing': [2, 'never']
|
'array-bracket-spacing': [2, 'never']
|
||||||
}
|
}
|
||||||
|
162
packages/@vuepress-reco/vuepress-plugin-pagation/bin/Pagation.js
Normal file
162
packages/@vuepress-reco/vuepress-plugin-pagation/bin/Pagation.js
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
import pagationLocales from './locales'
|
||||||
|
import './pagation.styl'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
render (h) {
|
||||||
|
return h('div', {
|
||||||
|
class: { pagation: true },
|
||||||
|
style: { display: this.show ? 'block' : 'none' }
|
||||||
|
}, [
|
||||||
|
h('div', {
|
||||||
|
class: { 'pagation-list': true }
|
||||||
|
}, [
|
||||||
|
h('span', {
|
||||||
|
class: { jump: true },
|
||||||
|
style: { display: this.currentPage > 1 ? 'inline' : 'none' },
|
||||||
|
on: { click: this.goPrev },
|
||||||
|
attrs: { unselectable: 'on' },
|
||||||
|
domProps: { innerHTML: this.pagationLocales.prev }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { efont: true },
|
||||||
|
style: { display: this.efont ? 'inline-block' : 'none' },
|
||||||
|
on: { click: this.jumpPage.bind(this, 1) },
|
||||||
|
domProps: { innerHTML: 1 }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { efont: true },
|
||||||
|
style: { display: this.efont ? 'inline-block' : 'none' },
|
||||||
|
domProps: { innerHTML: '...' }
|
||||||
|
}),
|
||||||
|
...this.indexs.map(num => {
|
||||||
|
return h('span', {
|
||||||
|
class: {
|
||||||
|
jump: true,
|
||||||
|
bgprimary: this.currentPage == num
|
||||||
|
},
|
||||||
|
on: { click: this.jumpPage.bind(this, num) },
|
||||||
|
attrs: { key: num },
|
||||||
|
domProps: { innerHTML: num }
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { ellipsis: true },
|
||||||
|
style: { display: this.efont && this.currentPage < this.pages - 4 ? 'inline-block' : 'none' },
|
||||||
|
domProps: { innerHTML: '...' }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { jump: true },
|
||||||
|
style: { display: this.efont && this.currentPage < this.pages - 4 ? 'inline-block' : 'none' },
|
||||||
|
domProps: { innerHTML: this.pages }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { jump: true },
|
||||||
|
style: { display: this.currentPage < this.pages ? 'inline' : 'none' },
|
||||||
|
domProps: { innerHTML: this.pagationLocales.next },
|
||||||
|
on: { click: this.goNext }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { jumppoint: true },
|
||||||
|
domProps: { innerHTML: this.pagationLocales.jump }
|
||||||
|
}),
|
||||||
|
h('span', {
|
||||||
|
class: { jumpinp: true }
|
||||||
|
}, [h('input', {
|
||||||
|
attrs: { type: 'text' },
|
||||||
|
domProps: { value: this.value },
|
||||||
|
on: { input (event) { this.$emit(event.target.value) } }
|
||||||
|
})]),
|
||||||
|
h('span', {
|
||||||
|
class: { jump: true, gobtn: true },
|
||||||
|
on: { click: this.jumpPage.bind(this, this.changePage) },
|
||||||
|
domProps: { innerHTML: this.pagationLocales.go }
|
||||||
|
})
|
||||||
|
])
|
||||||
|
])
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
changePage: '' // 跳转页
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
total: {
|
||||||
|
type: Number,
|
||||||
|
default: 10
|
||||||
|
},
|
||||||
|
perPage: {
|
||||||
|
type: Number,
|
||||||
|
default: 2
|
||||||
|
},
|
||||||
|
currentPage: {
|
||||||
|
type: Number,
|
||||||
|
default: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
pages () {
|
||||||
|
return Math.ceil(this.total / this.perPage)
|
||||||
|
},
|
||||||
|
show: function () {
|
||||||
|
return this.pages && this.pages != 1
|
||||||
|
},
|
||||||
|
efont: function () {
|
||||||
|
if (this.pages <= 7) return false
|
||||||
|
return this.currentPage > 5
|
||||||
|
},
|
||||||
|
indexs: function () {
|
||||||
|
var left = 1
|
||||||
|
var right = this.pages
|
||||||
|
var ar = []
|
||||||
|
if (this.pages >= 7) {
|
||||||
|
if (this.currentPage > 5 && this.currentPage < this.pages - 4) {
|
||||||
|
left = Number(this.currentPage) - 3
|
||||||
|
right = Number(this.currentPage) + 3
|
||||||
|
} else {
|
||||||
|
if (this.currentPage <= 5) {
|
||||||
|
left = 1
|
||||||
|
right = 7
|
||||||
|
} else {
|
||||||
|
right = this.pages
|
||||||
|
|
||||||
|
left = this.pages - 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (left <= right) {
|
||||||
|
ar.push(left)
|
||||||
|
left++
|
||||||
|
}
|
||||||
|
return ar
|
||||||
|
},
|
||||||
|
pagationLocales () {
|
||||||
|
return pagationLocales(this)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goPrev () {
|
||||||
|
let currentPage = this.currentPage
|
||||||
|
if (this.currentPage > 1) {
|
||||||
|
this.emit(--currentPage)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
goNext () {
|
||||||
|
let currentPage = this.currentPage
|
||||||
|
if (currentPage < this.pages) {
|
||||||
|
this.emit(++currentPage)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
jumpPage: function (id) {
|
||||||
|
const numId = parseInt(id)
|
||||||
|
|
||||||
|
if (numId <= this.pages && numId > 0) {
|
||||||
|
this.emit(numId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
alert(`请输入大于0,并且小于${this.pages}的页码!`)
|
||||||
|
},
|
||||||
|
emit (id) {
|
||||||
|
this.$emit('getCurrentPage', id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2,4 +2,4 @@ import Pagation from './Pagation.vue'
|
|||||||
|
|
||||||
export default ({ Vue }) => {
|
export default ({ Vue }) => {
|
||||||
Vue.component('Pagation', Pagation)
|
Vue.component('Pagation', Pagation)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
.pagation
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
color: #888;
|
||||||
|
color: var(--text-color)
|
||||||
|
margin: 20px auto 0;
|
||||||
|
background: #f2f2f2;
|
||||||
|
background: var(--background-color);
|
||||||
|
.pagation-list
|
||||||
|
font-size: 0;
|
||||||
|
line-height: 50px;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
span
|
||||||
|
font-size: 14px;
|
||||||
|
&.jump, &.jumpinp input
|
||||||
|
box-shadow: var(--box-shadow)
|
||||||
|
border 1px solid var(--border-color)!important
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
&.jump
|
||||||
|
padding: 5px 8px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-left: 5px;
|
||||||
|
&.jumpinp
|
||||||
|
input
|
||||||
|
width: 55px;
|
||||||
|
height: 26px;
|
||||||
|
background-color: var(--background-color)
|
||||||
|
font-size: 13px;
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
-moz-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
text-align: center;
|
||||||
|
outline none
|
||||||
|
&.bgprimary
|
||||||
|
cursor: default;
|
||||||
|
color: #fff;
|
||||||
|
background: $accentColor;
|
||||||
|
border-color: $accentColor;
|
||||||
|
&.ellipsis
|
||||||
|
padding: 0px 8px;
|
||||||
|
&.jumppoint
|
||||||
|
margin: 0 10px 0 30px;
|
@ -33,7 +33,7 @@ export default {
|
|||||||
import(/* webpackChunkName: "docsearch" */ 'docsearch.js/dist/cdn/docsearch.min.css')
|
import(/* webpackChunkName: "docsearch" */ 'docsearch.js/dist/cdn/docsearch.min.css')
|
||||||
]).then(([docsearch]) => {
|
]).then(([docsearch]) => {
|
||||||
docsearch = docsearch.default
|
docsearch = docsearch.default
|
||||||
const { algoliaOptions = {}} = userOptions
|
const { algoliaOptions = {} } = userOptions
|
||||||
docsearch(Object.assign(
|
docsearch(Object.assign(
|
||||||
{},
|
{},
|
||||||
userOptions,
|
userOptions,
|
||||||
|
@ -3,7 +3,7 @@ import { compareDate } from '@theme/helpers/utils'
|
|||||||
// 过滤博客数据
|
// 过滤博客数据
|
||||||
export function filterPosts (posts, isTimeline) {
|
export function filterPosts (posts, isTimeline) {
|
||||||
posts = posts.filter((item, index) => {
|
posts = posts.filter((item, index) => {
|
||||||
const { title, frontmatter: { home, date, publish }} = item
|
const { title, frontmatter: { home, date, publish } } = item
|
||||||
// 过滤多个分类时产生的重复数据
|
// 过滤多个分类时产生的重复数据
|
||||||
if (posts.indexOf(item) !== index) {
|
if (posts.indexOf(item) !== index) {
|
||||||
return false
|
return false
|
||||||
|
Loading…
Reference in New Issue
Block a user