From 107d64fb06957380a9adabc7bd343793aca3c92a Mon Sep 17 00:00:00 2001 From: chenghongxing <1126263215@qq.com> Date: Wed, 22 Jul 2020 15:59:45 +0800 Subject: [PATCH] chore: add alert plugin for docs; :star2: --- docs/.vuepress/components/Alert.vue | 42 +++++++++++++++++ docs/.vuepress/components/Color.vue | 35 ++++++++++++++ docs/.vuepress/components/ColorList.vue | 18 ++++++++ docs/.vuepress/config.js | 2 +- docs/.vuepress/plugins/alert/Alert.vue | 46 +++++++++++++++++++ docs/.vuepress/plugins/alert/alertMixin.js | 38 +++++++++++++++ .../plugins/alert/clientRootMixin.js | 5 ++ docs/.vuepress/plugins/alert/enhanceApp.js | 5 ++ docs/.vuepress/plugins/alert/index.js | 13 ++++++ 9 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 docs/.vuepress/components/Alert.vue create mode 100644 docs/.vuepress/components/Color.vue create mode 100644 docs/.vuepress/components/ColorList.vue create mode 100644 docs/.vuepress/plugins/alert/Alert.vue create mode 100644 docs/.vuepress/plugins/alert/alertMixin.js create mode 100644 docs/.vuepress/plugins/alert/clientRootMixin.js create mode 100644 docs/.vuepress/plugins/alert/enhanceApp.js create mode 100644 docs/.vuepress/plugins/alert/index.js diff --git a/docs/.vuepress/components/Alert.vue b/docs/.vuepress/components/Alert.vue new file mode 100644 index 0000000..dc5165b --- /dev/null +++ b/docs/.vuepress/components/Alert.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/docs/.vuepress/components/Color.vue b/docs/.vuepress/components/Color.vue new file mode 100644 index 0000000..350951b --- /dev/null +++ b/docs/.vuepress/components/Color.vue @@ -0,0 +1,35 @@ + + + + + \ No newline at end of file diff --git a/docs/.vuepress/components/ColorList.vue b/docs/.vuepress/components/ColorList.vue new file mode 100644 index 0000000..1a0480f --- /dev/null +++ b/docs/.vuepress/components/ColorList.vue @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 0b8eddd..4f85974 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -50,7 +50,7 @@ module.exports = { nextLinks: true, prevLinks: true, }, - plugins: ['@vuepress/back-to-top'], + plugins: ['@vuepress/back-to-top', require('./plugins/alert')], markdown: { lineNumbers: true } diff --git a/docs/.vuepress/plugins/alert/Alert.vue b/docs/.vuepress/plugins/alert/Alert.vue new file mode 100644 index 0000000..433d07e --- /dev/null +++ b/docs/.vuepress/plugins/alert/Alert.vue @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/docs/.vuepress/plugins/alert/alertMixin.js b/docs/.vuepress/plugins/alert/alertMixin.js new file mode 100644 index 0000000..49c65c9 --- /dev/null +++ b/docs/.vuepress/plugins/alert/alertMixin.js @@ -0,0 +1,38 @@ +import Alert from './Alert' + +const AlertMixin = { + install(Vue) { + Vue.mixin({ + methods: { + $alert(message, duration = 2000) { + let Constructor= Vue.extend(Alert) + let alert = new Constructor() + alert.$slots.default = message + alert.$props.alert = this.$page.alert + alert.$mount() + document.body.appendChild(alert.$el) + + const appendHeight = alert.$el.offsetHeight + 16 + this.$page.alert.top += appendHeight + + setTimeout(() => { + this.$page.alert.top -= appendHeight + this.triggerRemoveAlert(appendHeight) + setTimeout(() => { + alert.$destroy() + alert.$el.remove() + }, 100) + }, duration) + }, + triggerRemoveAlert(height) { + const event = new CustomEvent('alert_remove', { + detail: {height} + }) + window.dispatchEvent(event) + } + } + }) + } +} + +export default AlertMixin diff --git a/docs/.vuepress/plugins/alert/clientRootMixin.js b/docs/.vuepress/plugins/alert/clientRootMixin.js new file mode 100644 index 0000000..e5cf7fb --- /dev/null +++ b/docs/.vuepress/plugins/alert/clientRootMixin.js @@ -0,0 +1,5 @@ +export default { + updated() { + this.$page.alert.top = 100 + } +} diff --git a/docs/.vuepress/plugins/alert/enhanceApp.js b/docs/.vuepress/plugins/alert/enhanceApp.js new file mode 100644 index 0000000..d02c403 --- /dev/null +++ b/docs/.vuepress/plugins/alert/enhanceApp.js @@ -0,0 +1,5 @@ +import AlertMixin from './alertMixin' + +export default ({Vue}) => { + Vue.use(AlertMixin) +} \ No newline at end of file diff --git a/docs/.vuepress/plugins/alert/index.js b/docs/.vuepress/plugins/alert/index.js new file mode 100644 index 0000000..c5ff1a7 --- /dev/null +++ b/docs/.vuepress/plugins/alert/index.js @@ -0,0 +1,13 @@ +const path = require('path') + +module.exports = (options, ctx) => { + return { + clientRootMixin: path.resolve(__dirname, 'clientRootMixin.js'), + extendPageData($page) { + $page.alert = { + top: 100 + } + }, + enhanceAppFiles: path.resolve(__dirname, 'enhanceApp.js') + } +} \ No newline at end of file