├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .postcssrc.js ├── LICENSE ├── README.md ├── SECURITY.md ├── build ├── build.comp.js ├── build.web.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.comp.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── dist └── index.js ├── distweb └── static │ ├── css │ ├── app.30a26807f031f9a0b81f97e3c0993ac3.css │ └── app.30a26807f031f9a0b81f97e3c0993ac3.css.map │ └── js │ ├── app.0b117f8782f605e85778.js │ ├── app.0b117f8782f605e85778.js.map │ ├── manifest.7daecd8593b1dbd1782f.js │ ├── manifest.7daecd8593b1dbd1782f.js.map │ ├── vendor.70c2052b0b6bce04faf7.js │ └── vendor.70c2052b0b6bce04faf7.js.map ├── index.html ├── index.template.html ├── package-lock.json ├── package.json ├── src ├── App.vue ├── assets │ ├── logo.png │ └── logo_center.png ├── components │ └── clock │ │ ├── clock.vue │ │ └── index.js ├── main.comp.js ├── main.dev.js ├── main.web.js ├── page │ ├── clocks.page.vue │ └── test.vue └── router │ └── index.js └── static └── .gitkeep /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | 'indent': 'off', //强制一致的缩进风格 25 | 'no-nested-ternary': 2, //不允许使用嵌套的三目运算符 26 | 'no-unneeded-ternary': 'off', //当存在更简单的选择时不允许三元运算符 27 | 'no-dupe-keys': 2, //对象中不允许出现重复的键 28 | 'no-cond-assign': 2, //条件语句的条件中不允许出现赋值运算符 29 | 'no-const-assign': 2, //禁止修改const声明的变量 30 | 'no-redeclare': 2, //禁止变量重新声明 31 | 'no-self-assign': 2, //禁止自我分配 32 | 'no-useless-escape': 2, // 禁止不必要的转义使用(无用的转义) 33 | 'no-undef': 'off', //禁止未声明的变量 34 | 'no-extend-native': 'off', //禁止扩展本地对象 35 | 'generator-star-spacing': 'off', //生成器函数*的前后空格 36 | 'padded-blocks': 'off', //要求或不允许块内的填充 37 | 'eqeqeq': 'off', //要求===和!== 38 | 'no-tabs': 'off', 39 | 'comma-dangle': 'off', 40 | 'space-before-function-paren': 'off', 41 | 'spaced-comment': 'off', //注释号‘//’后面须有空格 42 | 'semi': [0, 'always'], // 在语句结尾需要分号 43 | 'quotes': [1, 'single'], // 尽可能地使用单引号 44 | 'no-trailing-spaces': [1, { 'ignoreComments': true }], // 不允许在行尾添加尾随空格 45 | 'curly': 2, // 当一个块只包含一条语句时,不允许忽略花括号 46 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' //禁止使用debugger 47 | } 48 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | 7 | # Editor directories and files 8 | .idea 9 | .vscode 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 符东伟 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-clock-lonlyape 2 | 3 | > vue 的时钟组件 4 | 5 | > [vue3 版本](https://github.com/lonlyape/vue-clock-v3) 6 | 7 | ## use 8 | 9 | ``` bash 10 | # install 11 | npm install -S vue-clock-lonlyape 12 | 13 | # main.js 14 | ...... 15 | import vueClock from 'vue-clock-lonlyape' 16 | Vue use(vueClock) 17 | ...... 18 | 19 | or 20 | # xxx.vue 21 | ...... 22 | import {vueClock} from 'vue-clock-lonlyape' 23 | ...... 24 | components:{ 25 | myClock:vueClock 26 | } 27 | ...... 28 | ``` 29 | 30 | 31 | 32 | ## 例子 33 | [一个小展示](https://lonlyape.github.io/vue-clock/#/clock) 34 | 35 | # 参数 36 | 37 | | 属性 | 类型 | 默认值 | 说明 | 38 | |-----|------|-------|------| 39 | | width | `String` | auto | canvas 画布的宽度,默认为画布容器的宽度 | 40 | | height | `String` | auto | canvas 画布的高度,默认与画布的宽度一致 | 41 | | timezone | `Number` | 本地时区 | [时区](http://www.shijian.cc/shiqu/),如时区为 UTC+8,则 timezone=8| 42 | | adaptive | `Boolean` | true | 自适应,如果容器小于时钟的设定大小,时钟根据容器的大小自行调整 | 43 | | [time](#time-时间) | `Object` | | 时间的配置,具体各个属性意义参考以下 | 44 | | [border](#border-边界) | `Object` | | 边界的配置,具体各个属性意义参考以下 | 45 | | [background](#background-背景) | `Object` | | 背景的配置,具体各个属性意义参考以下 | 46 | | [dial](#dial-刻度) | `Object` | | 刻度的配置,具体各个属性意义参考以下 | 47 | | [number](#number-数字) | `Object` | | 数字的配置,具体各个属性意义参考以下 | 48 | | [needle](#needle-针) | `Object` | | 针的配置,具体各个属性意义参考以下 | 49 | 50 | ### time (时间) 51 | 52 | | 属性 | 类型 | 默认值 | 说明 | 53 | |-----|------|-------|------| 54 | | isStatic | `Boolean` | false | 是否为静止时间 | 55 | | timestamp | `Number` | 0 | 时钟的时间,只有 isStatic 为 true 时才起作用 | 56 | 57 | ### border (边界) 58 | 59 | | 属性 | 类型 | 默认值 | 说明 | 60 | |-----|------|-------|------| 61 | | type | `String` | circle | 边界类型(圆、四边形);circle(圆形) 、 rectangle(四边形) | 62 | | width | `Number` | 300 | 时钟的宽度或直径,如果 type==circle ,则为时钟的直径 | 63 | | height | `Number` | 300 | 时钟的高度,只有 type==rectangle 明有效 | 64 | | lineWidth | `Number` | 2 | 边界线的宽度(粗细) | 65 | | color | `String` | #bbb | 边界线的颜色 | 66 | 67 | ### background (背景) 68 | 69 | | 属性 | 类型 | 默认值 | 说明 | 70 | |-----|------|-------|------| 71 | | color | `String` | 空 | 背景颜色 | 72 | | image | `String` | 空 | 背景图片 | 73 | 74 | ### dial (刻度) 75 | 76 | | 属性 | 类型 | 默认值 | 说明 | 77 | |-----|------|-------|------| 78 | | isDial | `Boolean` | true | 是否需要刻度 | 79 | | distance | `Number` | 0 | 刻度与边界的距离 | 80 | | maxLength | `Number` | 8 | 长刻度的长度 | 81 | | minLength | `Number` | 5 | 短刻度的长度 | 82 | | maxWidth | `Number` | 3 | 长刻度的宽度(粗细) | 83 | | minWidth | `Number` | 2 | 短刻度的宽度(粗细) | 84 | | color | `String` | #888 | 刻度的颜色 | 85 | 86 | ### number (数字) 87 | 88 | | 属性 | 类型 | 默认值 | 说明 | 89 | |-----|------|-------|------| 90 | | isNumber | `Boolean` | true | 是否需要数字 | 91 | | type | `String` | arabic | 数字类型,罗马:roman;阿拉伯:arabic | 92 | | color | `String` | #777 | 数字的颜色 | 93 | | fontSize | `String` | 19px | 字体的大小 | 94 | | fontWeight | `String` | normal | 字体的粗细 (与css中font-weight一致)| 95 | | fontFamily | `String` | 微软雅黑 | 字体 | 96 | | radius | `Number` | 125 | 数字圆的半径 | 97 | 98 | ### needle (针) 99 | 100 | | 属性 | 类型 | 默认值 | 说明 | 101 | |-----|------|-------|------| 102 | | second | `Object` | | 秒针 | 103 | | minute | `Object` | | 分针 | 104 | | hour | `Object` | | 时针 | 105 | 106 | 在 needle 中,secone、minute、hour 分别为一个对象,每个对象中的属性名和代表的意义是一样的 107 | 108 | #### needle.second/needle.minute/needle.hour 109 | 110 | | 属性 | 类型 | 默认值 | 说明 | 111 | |-----|------|-------|------| 112 | | length | `Number` | second : 100
minute : 110
hour : 70 | 针的长度 | 113 | | lineWidth | `String` | second : 3
minute : 4
hour : 4 | 针的宽度(粗细) | 114 | | longOut | `Number` | second : 5
minute : 5
hour : 5 | 超出圆心的长度 | 115 | | color | `String` | second : #aaa
minute : #999
hour : #888 | 针的颜色 | 116 | 117 | # 事件 118 | 119 | | 事件名 | 说明 | 参数 | 120 | |-----|------|------| 121 | | timeChange | 一秒触发一次,当 time.isStatic 为 true 时,只触发一次 | 当前时间的 date 对象 | 122 | 123 | 124 | # 更新日志 125 | 126 | ### 1.2.0 127 | * 添加 timeChange 事件 128 | 129 | ### 1.1.0 130 | 131 | * 添加自适应功能,以参数 adaptive 控制,如果容器小于时钟设定的大小,时钟将根据容器的大小自行调整 132 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 5.1.x | :white_check_mark: | 11 | | 5.0.x | :x: | 12 | | 4.0.x | :white_check_mark: | 13 | | < 4.0 | :x: | 14 | 15 | ## Reporting a Vulnerability 16 | 17 | Use this section to tell people how to report a vulnerability. 18 | 19 | Tell them where to go, how often they can expect to get an update on a 20 | reported vulnerability, what to expect if the vulnerability is accepted or 21 | declined, etc. 22 | -------------------------------------------------------------------------------- /build/build.comp.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'compontents' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.comp.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(config.comp.assetsRoot, err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/build.web.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec(cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [{ 12 | name: 'node', 13 | currentVersion: semver.clean(process.version), 14 | versionRequirement: packageConfig.engines.node 15 | }] 16 | 17 | if (shell.which('npm')) { 18 | versionRequirements.push({ 19 | name: 'npm', 20 | currentVersion: exec('npm --version'), 21 | versionRequirement: packageConfig.engines.npm 22 | }) 23 | } 24 | 25 | module.exports = function() { 26 | const warnings = [] 27 | 28 | for (let i = 0; i < versionRequirements.length; i++) { 29 | const mod = versionRequirements[i] 30 | 31 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 32 | warnings.push(mod.name + ': ' + 33 | chalk.red(mod.currentVersion) + ' should be ' + 34 | chalk.green(mod.versionRequirement) 35 | ) 36 | } 37 | } 38 | 39 | if (warnings.length) { 40 | console.log('') 41 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 42 | console.log() 43 | 44 | for (let i = 0; i < warnings.length; i++) { 45 | const warning = warnings[i] 46 | console.log(' ' + warning) 47 | } 48 | 49 | console.log() 50 | process.exit(1) 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonlyape/vue-clock/70eb4f2638e20aa7de51d6ece287b857f8c137a0/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const config = require('../config') 4 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 5 | const packageConfig = require('../package.json') 6 | 7 | exports.assetsPath = function(_path) { 8 | const assetsSubDirectory = process.env.NODE_ENV === 'production' ? 9 | config.build.assetsSubDirectory : 10 | config.dev.assetsSubDirectory 11 | 12 | return path.posix.join(assetsSubDirectory, _path) 13 | } 14 | 15 | exports.cssLoaders = function(options) { 16 | options = options || {} 17 | 18 | const cssLoader = { 19 | loader: 'css-loader', 20 | options: { 21 | sourceMap: options.sourceMap 22 | } 23 | } 24 | 25 | const postcssLoader = { 26 | loader: 'postcss-loader', 27 | options: { 28 | sourceMap: options.sourceMap 29 | } 30 | } 31 | 32 | // generate loader string to be used with extract text plugin 33 | function generateLoaders(loader, loaderOptions) { 34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 35 | 36 | if (loader) { 37 | loaders.push({ 38 | loader: loader + '-loader', 39 | options: Object.assign({}, loaderOptions, { 40 | sourceMap: options.sourceMap 41 | }) 42 | }) 43 | } 44 | 45 | // Extract CSS when that option is specified 46 | // (which is the case during production build) 47 | if (options.extract) { 48 | return ExtractTextPlugin.extract({ 49 | use: loaders, 50 | fallback: 'vue-style-loader' 51 | }) 52 | } else { 53 | return ['vue-style-loader'].concat(loaders) 54 | } 55 | } 56 | 57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 58 | return { 59 | css: generateLoaders(), 60 | postcss: generateLoaders(), 61 | less: generateLoaders('less'), 62 | sass: generateLoaders('sass', { indentedSyntax: true }), 63 | scss: generateLoaders('sass'), 64 | stylus: generateLoaders('stylus'), 65 | styl: generateLoaders('stylus') 66 | } 67 | } 68 | 69 | // Generate loaders for standalone style files (outside of .vue) 70 | exports.styleLoaders = function(options) { 71 | const output = [] 72 | const loaders = exports.cssLoaders(options) 73 | 74 | for (const extension in loaders) { 75 | const loader = loaders[extension] 76 | output.push({ 77 | test: new RegExp('\\.' + extension + '$'), 78 | use: loader 79 | }) 80 | } 81 | 82 | return output 83 | } 84 | 85 | exports.createNotifierCallback = () => { 86 | const notifier = require('node-notifier') 87 | 88 | return (severity, errors) => { 89 | if (severity !== 'error') return 90 | 91 | const error = errors[0] 92 | const filename = error.file && error.file.split('!').pop() 93 | 94 | notifier.notify({ 95 | title: packageConfig.name, 96 | message: severity + ': ' + error.name, 97 | subtitle: filename || '', 98 | icon: path.join(__dirname, 'logo.png') 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction ? 6 | config.build.productionSourceMap : 7 | config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve(dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | const createLintingRule = () => ({ 12 | test: /\.(js|vue)$/, 13 | loader: 'eslint-loader', 14 | enforce: 'pre', 15 | include: [resolve('src'), resolve('test')], 16 | options: { 17 | formatter: require('eslint-friendly-formatter'), 18 | emitWarning: !config.dev.showEslintErrorsInOverlay 19 | } 20 | }) 21 | 22 | module.exports = { 23 | context: path.resolve(__dirname, '../'), 24 | output: { 25 | path: config.build.assetsRoot, 26 | filename: '[name].js', 27 | publicPath: process.env.NODE_ENV === 'production' ? 28 | config.build.assetsPublicPath : config.dev.assetsPublicPath 29 | }, 30 | resolve: { 31 | extensions: ['.js', '.vue', '.json'], 32 | alias: { 33 | 'vue$': 'vue/dist/vue.esm.js', 34 | '@': resolve('src'), 35 | } 36 | }, 37 | module: { 38 | rules: [ 39 | ...(config.dev.useEslint ? [createLintingRule()] : []), 40 | { 41 | test: /\.vue$/, 42 | loader: 'vue-loader', 43 | options: vueLoaderConfig 44 | }, 45 | { 46 | test: /\.js$/, 47 | loader: 'babel-loader', 48 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 49 | }, 50 | { 51 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 52 | loader: 'url-loader', 53 | options: { 54 | limit: 10000, 55 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 56 | } 57 | }, 58 | { 59 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 60 | loader: 'url-loader', 61 | options: { 62 | limit: 10000, 63 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 64 | } 65 | }, 66 | { 67 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 68 | loader: 'url-loader', 69 | options: { 70 | limit: 10000, 71 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 72 | } 73 | } 74 | ] 75 | }, 76 | node: { 77 | // prevent webpack from injecting useless setImmediate polyfill because Vue 78 | // source contains it (although only uses it if it's native). 79 | setImmediate: false, 80 | // prevent webpack from injecting mocks to Node native modules 81 | // that does not make sense for the client 82 | dgram: 'empty', 83 | fs: 'empty', 84 | net: 'empty', 85 | tls: 'empty', 86 | child_process: 'empty' 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /build/webpack.comp.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 9 | 10 | const env = require('../config/prod.env') 11 | 12 | const webpackConfig = merge(baseWebpackConfig, { 13 | module: { 14 | rules: utils.styleLoaders({ 15 | sourceMap: false, 16 | extract: true, 17 | usePostCSS: true 18 | }) 19 | }, 20 | devtool: false, 21 | entry: { 22 | index: './src/main.comp.js' 23 | }, 24 | output: { 25 | path: config.comp.assetsRoot, 26 | filename: '[name].js', 27 | library: 'vue-clock', 28 | libraryTarget: 'umd', 29 | umdNamedDefine: true 30 | }, 31 | plugins: [ 32 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 33 | new webpack.DefinePlugin({ 34 | 'process.env': env 35 | }), 36 | new UglifyJsPlugin({ 37 | uglifyOptions: { 38 | compress: { 39 | warnings: false 40 | } 41 | }, 42 | sourceMap: false, 43 | parallel: true 44 | }), 45 | ] 46 | }) 47 | 48 | if (config.comp.productionGzip) { 49 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 50 | 51 | webpackConfig.plugins.push( 52 | new CompressionWebpackPlugin({ 53 | asset: '[path].gz[query]', 54 | algorithm: 'gzip', 55 | test: new RegExp( 56 | '\\.(' + 57 | config.comp.productionGzipExtensions.join('|') + 58 | ')$' 59 | ), 60 | threshold: 10240, 61 | minRatio: 0.8 62 | }) 63 | ) 64 | } 65 | 66 | 67 | module.exports = webpackConfig 68 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const webpack = require('webpack') 4 | const config = require('../config') 5 | const merge = require('webpack-merge') 6 | const path = require('path') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 11 | const portfinder = require('portfinder') 12 | 13 | const HOST = process.env.HOST 14 | const PORT = process.env.PORT && Number(process.env.PORT) 15 | 16 | const devWebpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 19 | }, 20 | entry: { 21 | app: './src/main.dev.js' 22 | }, 23 | // cheap-module-eval-source-map is faster for development 24 | devtool: config.dev.devtool, 25 | 26 | // these devServer options should be customized in /config/index.js 27 | devServer: { 28 | clientLogLevel: 'warning', 29 | historyApiFallback: { 30 | rewrites: [ 31 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 32 | ], 33 | }, 34 | hot: true, 35 | contentBase: false, // since we use CopyWebpackPlugin. 36 | compress: true, 37 | host: HOST || config.dev.host, 38 | port: PORT || config.dev.port, 39 | open: config.dev.autoOpenBrowser, 40 | overlay: config.dev.errorOverlay ? { warnings: false, errors: true } : false, 41 | publicPath: config.dev.assetsPublicPath, 42 | proxy: config.dev.proxyTable, 43 | quiet: true, // necessary for FriendlyErrorsPlugin 44 | watchOptions: { 45 | poll: config.dev.poll, 46 | } 47 | }, 48 | plugins: [ 49 | new webpack.DefinePlugin({ 50 | 'process.env': require('../config/dev.env') 51 | }), 52 | new webpack.HotModuleReplacementPlugin(), 53 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 54 | new webpack.NoEmitOnErrorsPlugin(), 55 | // https://github.com/ampedandwired/html-webpack-plugin 56 | new HtmlWebpackPlugin({ 57 | filename: 'index.html', 58 | template: 'index.template.html', 59 | inject: true 60 | }), 61 | // copy custom static assets 62 | new CopyWebpackPlugin([{ 63 | from: path.resolve(__dirname, '../static'), 64 | to: config.dev.assetsSubDirectory, 65 | ignore: ['.*'] 66 | }]) 67 | ] 68 | }) 69 | 70 | module.exports = new Promise((resolve, reject) => { 71 | portfinder.basePort = process.env.PORT || config.dev.port 72 | portfinder.getPort((err, port) => { 73 | if (err) { 74 | reject(err) 75 | } else { 76 | // publish the new Port, necessary for e2e tests 77 | process.env.PORT = port 78 | // add port to devServer config 79 | devWebpackConfig.devServer.port = port 80 | 81 | // Add FriendlyErrorsPlugin 82 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 83 | compilationSuccessInfo: { 84 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 85 | }, 86 | onErrors: config.dev.notifyOnErrors ? 87 | utils.createNotifierCallback() : undefined 88 | })) 89 | 90 | resolve(devWebpackConfig) 91 | } 92 | }) 93 | }) 94 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const webpack = require('webpack') 5 | const config = require('../config') 6 | const merge = require('webpack-merge') 7 | const baseWebpackConfig = require('./webpack.base.conf') 8 | const CopyWebpackPlugin = require('copy-webpack-plugin') 9 | const HtmlWebpackPlugin = require('html-webpack-plugin') 10 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 13 | 14 | const env = require('../config/prod.env') 15 | 16 | const webpackConfig = merge(baseWebpackConfig, { 17 | module: { 18 | rules: utils.styleLoaders({ 19 | sourceMap: config.build.productionSourceMap, 20 | extract: true, 21 | usePostCSS: true 22 | }) 23 | }, 24 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 25 | entry: { 26 | app: './src/main.web.js' 27 | }, 28 | output: { 29 | path: config.build.assetsRoot, 30 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 31 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 32 | }, 33 | plugins: [ 34 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 35 | new webpack.DefinePlugin({ 36 | 'process.env': env 37 | }), 38 | new UglifyJsPlugin({ 39 | uglifyOptions: { 40 | compress: { 41 | warnings: false 42 | } 43 | }, 44 | sourceMap: config.build.productionSourceMap, 45 | parallel: true 46 | }), 47 | // extract css into its own file 48 | new ExtractTextPlugin({ 49 | filename: utils.assetsPath('css/[name].[contenthash].css'), 50 | // Setting the following option to `false` will not extract CSS from codesplit chunks. 51 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. 52 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, 53 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 54 | allChunks: true, 55 | }), 56 | // Compress extracted CSS. We are using this plugin so that possible 57 | // duplicated CSS from different components can be deduped. 58 | new OptimizeCSSPlugin({ 59 | cssProcessorOptions: config.build.productionSourceMap ? { safe: true, map: { inline: false } } : { safe: true } 60 | }), 61 | // generate dist index.html with correct asset hash for caching. 62 | // you can customize output by editing /index.html 63 | // see https://github.com/ampedandwired/html-webpack-plugin 64 | new HtmlWebpackPlugin({ 65 | filename: config.build.index, 66 | template: 'index.template.html', 67 | inject: true, 68 | minify: { 69 | removeComments: true, 70 | collapseWhitespace: true, 71 | removeAttributeQuotes: true 72 | // more options: 73 | // https://github.com/kangax/html-minifier#options-quick-reference 74 | }, 75 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 76 | chunksSortMode: 'dependency' 77 | }), 78 | // keep module.id stable when vendor modules does not change 79 | new webpack.HashedModuleIdsPlugin(), 80 | // enable scope hoisting 81 | new webpack.optimize.ModuleConcatenationPlugin(), 82 | // split vendor js into its own file 83 | new webpack.optimize.CommonsChunkPlugin({ 84 | name: 'vendor', 85 | minChunks(module) { 86 | // any required modules inside node_modules are extracted to vendor 87 | return ( 88 | module.resource && 89 | /\.js$/.test(module.resource) && 90 | module.resource.indexOf( 91 | path.join(__dirname, '../node_modules') 92 | ) === 0 93 | ) 94 | } 95 | }), 96 | // extract webpack runtime and module manifest to its own file in order to 97 | // prevent vendor hash from being updated whenever app bundle is updated 98 | new webpack.optimize.CommonsChunkPlugin({ 99 | name: 'manifest', 100 | minChunks: Infinity 101 | }), 102 | // This instance extracts shared chunks from code splitted chunks and bundles them 103 | // in a separate chunk, similar to the vendor chunk 104 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 105 | new webpack.optimize.CommonsChunkPlugin({ 106 | name: 'app', 107 | async: 'vendor-async', 108 | children: true, 109 | minChunks: 3 110 | }), 111 | 112 | // copy custom static assets 113 | new CopyWebpackPlugin([{ 114 | from: path.resolve(__dirname, '../static'), 115 | to: config.build.assetsSubDirectory, 116 | ignore: ['.*'] 117 | }]) 118 | ] 119 | }) 120 | 121 | if (config.build.productionGzip) { 122 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 123 | 124 | webpackConfig.plugins.push( 125 | new CompressionWebpackPlugin({ 126 | asset: '[path].gz[query]', 127 | algorithm: 'gzip', 128 | test: new RegExp( 129 | '\\.(' + 130 | config.build.productionGzipExtensions.join('|') + 131 | ')$' 132 | ), 133 | threshold: 10240, 134 | minRatio: 0.8 135 | }) 136 | ) 137 | } 138 | 139 | if (config.build.bundleAnalyzerReport) { 140 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 141 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 142 | } 143 | 144 | module.exports = webpackConfig 145 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'cheap-module-eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | cssSourceMap: true 44 | }, 45 | 46 | build: { 47 | // Template for index.html 48 | index: path.resolve(__dirname, '../index.html'), 49 | 50 | // Paths 51 | assetsRoot: path.resolve(__dirname, '../distweb'), 52 | assetsSubDirectory: 'static', 53 | assetsPublicPath: './distweb/', 54 | 55 | /** 56 | * Source Maps 57 | */ 58 | 59 | productionSourceMap: true, 60 | // https://webpack.js.org/configuration/devtool/#production 61 | devtool: '#source-map', 62 | 63 | // Gzip off by default as many popular static hosts such as 64 | // Surge or Netlify already gzip all static assets for you. 65 | // Before setting to `true`, make sure to: 66 | // npm install --save-dev compression-webpack-plugin 67 | productionGzip: false, 68 | productionGzipExtensions: ['js', 'css'], 69 | 70 | // Run the build command with an extra argument to 71 | // View the bundle analyzer report after build finishes: 72 | // `npm run build --report` 73 | // Set to `true` or `false` to always turn it on or off 74 | bundleAnalyzerReport: process.env.npm_config_report 75 | }, 76 | 77 | comp: { 78 | assetsRoot: path.resolve(__dirname, '../dist'), 79 | productionGzip: false, 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("vue-clock",[],e):"object"==typeof exports?exports["vue-clock"]=e():t["vue-clock"]=e()}("undefined"!=typeof self?self:this,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=39)}([function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){var n=t.exports={version:"2.6.1"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(4),i=n(12);t.exports=n(5)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(11),i=n(30),o=n(19),s=Object.defineProperty;e.f=n(5)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){t.exports=!n(9)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(35),i=n(17);t.exports=function(t){return r(i(t))}},function(t,e,n){var r=n(22)("wks"),i=n(14),o=n(0).Symbol,s="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=s&&o[t]||(s?o:i)("Symbol."+t))}).store=r},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=!0},function(t,e,n){var r=n(8);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(34),i=n(23);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(0),i=n(2),o=n(53),s=n(3),a=n(1),u=function(t,e,n){var c,f,l,h=t&u.F,d=t&u.G,p=t&u.S,v=t&u.P,y=t&u.B,m=t&u.W,g=d?i:i[e]||(i[e]={}),b=g.prototype,w=d?r:p?r[e]:(r[e]||{}).prototype;for(c in d&&(n=e),n)(f=!h&&w&&void 0!==w[c])&&a(g,c)||(l=f?w[c]:n[c],g[c]=d&&"function"!=typeof w[c]?n[c]:y&&f?o(l,r):m&&w[c]==l?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):v&&"function"==typeof l?o(Function.call,l):l,v&&((g.virtual||(g.virtual={}))[c]=l,t&u.R&&b&&!b[c]&&s(b,c,l)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,n){var r=n(8);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports={}},function(t,e,n){var r=n(22)("keys"),i=n(14);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(2),i=n(0),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(10)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(4).f,i=n(1),o=n(7)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){e.f=n(7)},function(t,e,n){var r=n(0),i=n(2),o=n(10),s=n(25),a=n(4).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){"use strict";var r=n(48),i=n.n(r),o=n(77),s=n.n(o),a=n(79),u=n.n(a);e.a={name:"vueClock",data:function(){return{clockBoxStyle:{},canvas:{},context:{},timeAngle:{},timeInterval:{},transitionOption:{},defOption:{time:{isStatic:!1,timestamp:0},border:{type:"circle",width:300,height:300,lineWidth:2,color:"#bbb"},background:{color:"",image:""},dial:{isDial:!0,distance:0,maxLength:8,minLength:5,maxWidth:3,minWidth:2,color:"#888"},number:{isNumber:!0,type:"arabic",color:"#777",fontSize:"19px",fontWeight:"normal",fontFamily:"微软雅黑",radius:125},needle:{second:{length:100,color:"#aaa",lineWidth:3,longOut:5},minute:{length:110,color:"#999",lineWidth:4,longOut:5},hour:{length:70,color:"#888",lineWidth:4,longOut:5}}}}},props:{width:{default:""},height:{default:""},adaptive:{type:Boolean,default:!0},timezone:{default:""},time:{type:Object},border:{type:Object},background:{type:Object},dial:{type:Object},number:{type:Object},needle:{type:Object,default:function(){return{second:{},minute:{},hour:{}}}}},computed:{drawOption:function(){return{time:u()({},this.defOption.time,this.time),border:u()({},this.defOption.border,this.border),background:u()({},this.defOption.background,this.background),dial:u()({},this.defOption.dial,this.dial),number:u()({},this.defOption.number,this.number),needle:{second:u()({},this.defOption.needle.second,this.needle.second),minute:u()({},this.defOption.needle.minute,this.needle.minute),hour:u()({},this.defOption.needle.hour,this.needle.hour)}}}},watch:{drawOption:{handler:function(t){t.time.isStatic&&clearInterval(this.timeInterval),this.draw()},deep:!0},timeAngle:function(){this.draw()}},created:function(){var t=this;this.$nextTick(function(){t.canvas=t.$el.querySelector("canvas"),t.context=t.canvas.getContext("2d"),t.setClockBoxStyle(),t.newData(),t.drawOption.time.isStatic||(t.timeInterval=setInterval(t.newData,1e3)),t.draw(),setTimeout(t.drawAsResize,100)})},methods:{drawAsResize:function(){var t=this,e=JSON.parse(s()(this.drawOption)),n=e.border.width;new ResizeObserver(function(r){r.forEach(function(r){var i=r.contentRect,o=t.drawOption;t.setNumberValue(o,e,i.width-6,n),t.setClockBoxStyle(),t.draw()})}).observe(this.$el)},setNumberValue:function(t,e,n,r){var o=this;if(this.adaptive){var s=function(s){var a=t[s],u=e[s],c=n/r<1?n/r:1;"number"==typeof a?t[s]=u*c:"object"==(void 0===a?"undefined":i()(a))?o.setNumberValue(a,u,n,r):"fontSize"==s&&(t[s]=u.replace(/^\d*/,function(t){return t*c}))};for(var a in t)s(a)}},draw:function(){this.clear(),this.setNumberValue(this.drawOption,this.drawOption,this.canvas.width-6,this.drawOption.border.width),this.drawBackground(),this.drawBorder(),this.drawDial(),this.drawNumber(),this.drawNeedle()},clear:function(){this.context.clearRect(0,0,this.canvas.width,this.canvas.width)},setClockBoxStyle:function(){var t={};""===this.width||/%$/.test(this.width)?t.width=this.width:t.width=Number(this.width)+"px",""===this.height&&(""===this.width||/%$/.test(this.width)?(t.height=this.$el.clientWidth+"px",this.clockBoxStyle=t):t.height=this.width),this.canvas.width=this.$el.clientWidth,this.canvas.height=Number(t.height.split("px")[0])},drawBorder:function(){this.context.save(),this.context.translate(this.canvas.width/2,this.canvas.height/2),this.context.beginPath(),"rectangle"==this.drawOption.border.type?this.context.rect(-this.drawOption.border.width/2,-this.drawOption.border.height/2,this.drawOption.border.width,this.drawOption.border.height):this.context.arc(0,0,this.drawOption.border.width/2,0,2*Math.PI,!0),this.context.closePath(),this.context.strokeStyle=this.drawOption.border.color,this.context.lineWidth=this.drawOption.border.lineWidth,this.context.stroke(),this.context.restore()},drawBackground:function(){var t,e;if(this.context.save(),this.context.beginPath(),this.context.translate(this.canvas.width/2,this.canvas.height/2),"rectangle"==this.drawOption.border.type?(this.context.rect(-this.drawOption.border.width/2,-this.drawOption.border.height/2,this.drawOption.border.width,this.drawOption.border.height),t=-this.drawOption.border.width/2,e=-this.drawOption.border.height/2):(this.context.arc(0,0,this.drawOption.border.width/2,0,2*Math.PI,!0),t=-this.drawOption.border.width/2,e=-this.drawOption.border.width/2),this.drawOption.background.color&&(this.context.fillStyle=this.drawOption.background.color,this.context.fill()),this.drawOption.background.image){var n,r,i,o=new Image;if(this.transitionOption.bgImg)o=this.transitionOption.bgImg;else{var s=this;o.src=this.drawOption.background.image,o.onload=function(){console.log("img loaded"),s.$set(s.transitionOption,"bgImg",o)}}o.width>=o.height?(n=(o.width-o.height)/2,r=0,i=o.height):(n=0,r=(o.height-o.width)/2,i=o.width),this.context.clip(),this.context.drawImage(o,n,r,i,i,t,e,2*-t,2*-e)}this.context.closePath(),this.context.restore()},drawDial:function(){if(this.drawOption.dial.isDial){var t=2*Math.PI/60,e=0,n=this.drawOption.dial.distance?this.drawOption.dial.distance+this.drawOption.border.lineWidth/2:this.drawOption.border.lineWidth/2;0==this.drawOption.dial.distance&&(n=this.drawOption.border.lineWidth/2);for(var r={x:0,y:this.drawOption.border.width/2-n},i=0;i<60;i++)e=t*i,this.context.save(),this.context.translate(this.canvas.width/2,this.canvas.height/2),i%5==0?this.line(r,e,this.drawOption.dial.maxLength-r.y,this.drawOption.dial.color,this.drawOption.dial.maxWidth):this.line(r,e,this.drawOption.dial.minLength-r.y,this.drawOption.dial.color,this.drawOption.dial.minWidth),this.context.restore()}},drawNumber:function(){if(this.drawOption.number.isNumber){for(var t=[],e=1;e<13;e++)t[e-1]=e+3,e+3>12&&(t[e-1]=3-(12-e));if("roman"==this.drawOption.number.type)for(var n=0;n<12;n++)t[n]=this.intToRoman(t[n]);var r=Math.PI/6;this.context.save(),this.context.fillStyle=this.drawOption.number.color,this.context.font=this.drawOption.number.fontWeight+" "+this.drawOption.number.fontSize+" "+this.drawOption.number.fontFamily,this.context.textBaseline="middle",this.context.textAlign="center",this.context.translate(this.canvas.width/2,this.canvas.height/2);for(var i=0;i=5&&i<9){n[n.length-1-r]=e[2*r+1];for(var o=0;odocument.F=Object<\/script>"),t.close(),u=t.F;r--;)delete u.prototype[o[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(a.prototype=r(t),n=new a,a.prototype=null,n[s]=t):n=u(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(1),i=n(6),o=n(57)(!1),s=n(21)("IE_PROTO");t.exports=function(t,e){var n,a=i(t),u=0,c=[];for(n in a)n!=s&&r(a,n)&&c.push(n);for(;e.length>u;)r(a,n=e[u++])&&(~o(c,n)||c.push(n));return c}},function(t,e,n){var r=n(36);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(17);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(34),i=n(23).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),n.d(e,"install",function(){return o});var r=n(40);n.d(e,"vueClock",function(){return r.a});var i=[r.a],o=function(t,e){i.map(function(e){t.component(e.name,e)})};"undefined"!=typeof window&&window.Vue&&o(window.Vue),e.default={install:o}},function(t,e,n){"use strict";var r=n(41);r.a.install=function(t){return t.component(r.a.name,r.a)},e.a=r.a},function(t,e,n){"use strict";var r=n(28),i=n(84),o=!1;var s=function(t){o||n(42)},a=n(47)(r.a,i.a,!1,s,"data-v-78f2126d",null);a.options.__file="src/components/clock/clock.vue",e.a=a.exports},function(t,e,n){var r=n(43);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(45)("e4d2bf46",r,!1,{})},function(t,e,n){(t.exports=n(44)(!0)).push([t.i,"","",{version:3,sources:[],names:[],mappings:"",file:"clock.vue",sourceRoot:""}])},function(t,e){t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n=function(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var i=(s=r,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(s))))+" */"),o=r.sources.map(function(t){return"/*# sourceURL="+r.sourceRoot+t+" */"});return[n].concat(o).concat([i]).join("\n")}var s;return[n].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;in.parts.length&&(r.parts.length=n.parts.length)}else{var s=[];for(i=0;i=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var r=n(16),i=n(17);t.exports=function(t){return function(e,n){var o,s,a=String(i(e)),u=r(n),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,n){var r=n(54);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){"use strict";var r=n(33),i=n(12),o=n(24),s={};n(3)(s,n(7)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var r=n(4),i=n(11),o=n(13);t.exports=n(5)?Object.defineProperties:function(t,e){i(t);for(var n,s=o(e),a=s.length,u=0;a>u;)r.f(t,n=s[u++],e[n]);return t}},function(t,e,n){var r=n(6),i=n(58),o=n(59);t.exports=function(t){return function(e,n,s){var a,u=r(e),c=i(u.length),f=o(s,c);if(t&&n!=n){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===n)return t||f||0;return!t&&-1}}},function(t,e,n){var r=n(16),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(16),i=Math.max,o=Math.min;t.exports=function(t,e){return(t=r(t))<0?i(t+e,0):o(t,e)}},function(t,e,n){var r=n(0).document;t.exports=r&&r.documentElement},function(t,e,n){var r=n(1),i=n(37),o=n(21)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){n(63);for(var r=n(0),i=n(3),o=n(20),s=n(7)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),u=0;u=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){t.exports={default:n(67),__esModule:!0}},function(t,e,n){n(68),n(74),n(75),n(76),t.exports=n(2).Symbol},function(t,e,n){"use strict";var r=n(0),i=n(1),o=n(5),s=n(18),a=n(32),u=n(69).KEY,c=n(9),f=n(22),l=n(24),h=n(14),d=n(7),p=n(25),v=n(26),y=n(70),m=n(71),g=n(11),b=n(8),w=n(6),O=n(19),x=n(12),S=n(33),_=n(72),j=n(73),k=n(4),M=n(13),P=j.f,T=k.f,N=_.f,C=r.Symbol,E=r.JSON,L=E&&E.stringify,A=d("_hidden"),I=d("toPrimitive"),R={}.propertyIsEnumerable,W=f("symbol-registry"),D=f("symbols"),F=f("op-symbols"),B=Object.prototype,z="function"==typeof C,V=r.QObject,$=!V||!V.prototype||!V.prototype.findChild,U=o&&c(function(){return 7!=S(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=P(B,e);r&&delete B[e],T(t,e,n),r&&t!==B&&T(B,e,r)}:T,G=function(t){var e=D[t]=S(C.prototype);return e._k=t,e},J=z&&"symbol"==typeof C.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof C},H=function(t,e,n){return t===B&&H(F,e,n),g(t),e=O(e,!0),g(n),i(D,e)?(n.enumerable?(i(t,A)&&t[A][e]&&(t[A][e]=!1),n=S(n,{enumerable:x(0,!1)})):(i(t,A)||T(t,A,x(1,{})),t[A][e]=!0),U(t,e,n)):T(t,e,n)},q=function(t,e){g(t);for(var n,r=y(e=w(e)),i=0,o=r.length;o>i;)H(t,n=r[i++],e[n]);return t},K=function(t){var e=R.call(this,t=O(t,!0));return!(this===B&&i(D,t)&&!i(F,t))&&(!(e||!i(this,t)||!i(D,t)||i(this,A)&&this[A][t])||e)},X=function(t,e){if(t=w(t),e=O(e,!0),t!==B||!i(D,e)||i(F,e)){var n=P(t,e);return!n||!i(D,e)||i(t,A)&&t[A][e]||(n.enumerable=!0),n}},Y=function(t){for(var e,n=N(w(t)),r=[],o=0;n.length>o;)i(D,e=n[o++])||e==A||e==u||r.push(e);return r},Q=function(t){for(var e,n=t===B,r=N(n?F:w(t)),o=[],s=0;r.length>s;)!i(D,e=r[s++])||n&&!i(B,e)||o.push(D[e]);return o};z||(a((C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),e=function(n){this===B&&e.call(F,n),i(this,A)&&i(this[A],t)&&(this[A][t]=!1),U(this,t,x(1,n))};return o&&$&&U(B,t,{configurable:!0,set:e}),G(t)}).prototype,"toString",function(){return this._k}),j.f=X,k.f=H,n(38).f=_.f=Y,n(15).f=K,n(27).f=Q,o&&!n(10)&&a(B,"propertyIsEnumerable",K,!0),p.f=function(t){return G(d(t))}),s(s.G+s.W+s.F*!z,{Symbol:C});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)d(Z[tt++]);for(var et=M(d.store),nt=0;et.length>nt;)v(et[nt++]);s(s.S+s.F*!z,"Symbol",{for:function(t){return i(W,t+="")?W[t]:W[t]=C(t)},keyFor:function(t){if(!J(t))throw TypeError(t+" is not a symbol!");for(var e in W)if(W[e]===t)return e},useSetter:function(){$=!0},useSimple:function(){$=!1}}),s(s.S+s.F*!z,"Object",{create:function(t,e){return void 0===e?S(t):q(S(t),e)},defineProperty:H,defineProperties:q,getOwnPropertyDescriptor:X,getOwnPropertyNames:Y,getOwnPropertySymbols:Q}),E&&s(s.S+s.F*(!z||c(function(){var t=C();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))})),"JSON",{stringify:function(t){for(var e,n,r=[t],i=1;arguments.length>i;)r.push(arguments[i++]);if(n=e=r[1],(b(e)||void 0!==t)&&!J(t))return m(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),r[1]=e,L.apply(E,r)}}),C.prototype[I]||n(3)(C.prototype,I,C.prototype.valueOf),l(C,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},function(t,e,n){var r=n(14)("meta"),i=n(8),o=n(1),s=n(4).f,a=0,u=Object.isExtensible||function(){return!0},c=!n(9)(function(){return u(Object.preventExtensions({}))}),f=function(t){s(t,r,{value:{i:"O"+ ++a,w:{}}})},l=t.exports={KEY:r,NEED:!1,fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,r)){if(!u(t))return"F";if(!e)return"E";f(t)}return t[r].i},getWeak:function(t,e){if(!o(t,r)){if(!u(t))return!0;if(!e)return!1;f(t)}return t[r].w},onFreeze:function(t){return c&&l.NEED&&u(t)&&!o(t,r)&&f(t),t}}},function(t,e,n){var r=n(13),i=n(27),o=n(15);t.exports=function(t){var e=r(t),n=i.f;if(n)for(var s,a=n(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,n){var r=n(36);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){var r=n(6),i=n(38).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(r(t))}},function(t,e,n){var r=n(15),i=n(12),o=n(6),s=n(19),a=n(1),u=n(30),c=Object.getOwnPropertyDescriptor;e.f=n(5)?c:function(t,e){if(t=o(t),e=s(e,!0),u)try{return c(t,e)}catch(t){}if(a(t,e))return i(!r.f.call(t,e),t[e])}},function(t,e){},function(t,e,n){n(26)("asyncIterator")},function(t,e,n){n(26)("observable")},function(t,e,n){t.exports={default:n(78),__esModule:!0}},function(t,e,n){var r=n(2),i=r.JSON||(r.JSON={stringify:JSON.stringify});t.exports=function(t){return i.stringify.apply(i,arguments)}},function(t,e,n){"use strict";e.__esModule=!0;var r,i=n(80),o=(r=i)&&r.__esModule?r:{default:r};e.default=o.default||function(t){for(var e=1;ec;)for(var h,d=a(arguments[c++]),p=f?r(d).concat(f(d)):r(d),v=p.length,y=0;v>y;)l.call(d,h=p[y++])&&(n[h]=d[h]);return n}:u},function(t,e,n){"use strict";var r=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"lonlyape_clock",style:this.clockBoxStyle},[e("canvas")])};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i}])}); -------------------------------------------------------------------------------- /distweb/static/css/app.30a26807f031f9a0b81f97e3c0993ac3.css: -------------------------------------------------------------------------------- 1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e51;margin-top:60px}#app,#tes_page[data-v-6915e5a7]{text-align:center}#tes_page>div[data-v-6915e5a7]{max-width:500px;margin:100px auto;border:1px solid #ccc}#tes_page>div .button[data-v-6915e5a7]{padding:10px 0}#tes_page>div .button span[data-v-6915e5a7]{font-size:16px;display:inline-block;background:#0e9e63;padding:6px 10px;border-radius:2px;color:#fff;cursor:pointer}#clock[data-v-2d98def9]{width:100%} 2 | /*# sourceMappingURL=app.30a26807f031f9a0b81f97e3c0993ac3.css.map */ -------------------------------------------------------------------------------- /distweb/static/css/app.30a26807f031f9a0b81f97e3c0993ac3.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["app.30a26807f031f9a0b81f97e3c0993ac3.css"],"names":[],"mappings":"AACA,KACC,8CAAoD,AACpD,mCAAoC,AACpC,kCAAmC,AAEnC,cAAe,AACf,eAAiB,CACjB,AAGD,gCANC,iBAAmB,CAQnB,AACD,+BACE,gBAAiB,AACjB,kBAAmB,AACnB,qBAAuB,CACxB,AACD,uCACE,cAAgB,CACjB,AACD,4CACE,eAAgB,AAChB,qBAAsB,AACtB,mBAAoB,AACpB,iBAAkB,AAClB,kBAAmB,AACnB,WAAY,AACZ,cAAgB,CACjB,AAED,wBACE,UAAY,CACb","file":"app.30a26807f031f9a0b81f97e3c0993ac3.css","sourcesContent":["\n#app {\r\n\tfont-family: 'Avenir', Helvetica, Arial, sans-serif;\r\n\t-webkit-font-smoothing: antialiased;\r\n\t-moz-osx-font-smoothing: grayscale;\r\n\ttext-align: center;\r\n\tcolor: #2c3e51;\r\n\tmargin-top: 60px;\n}\r\n\r\n\n#tes_page[data-v-6915e5a7] {\n text-align: center;\n}\n#tes_page > div[data-v-6915e5a7] {\n max-width: 500px;\n margin: 100px auto;\n border: 1px solid #ccc;\n}\n#tes_page > div .button[data-v-6915e5a7] {\n padding: 10px 0;\n}\n#tes_page > div .button span[data-v-6915e5a7] {\n font-size: 16px;\n display: inline-block;\n background: #0e9e63;\n padding: 6px 10px;\n border-radius: 2px;\n color: #fff;\n cursor: pointer;\n}\n\n#clock[data-v-2d98def9] {\n width: 100%;\n}\n"]} -------------------------------------------------------------------------------- /distweb/static/js/app.0b117f8782f605e85778.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{"/VbN":function(t,i){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+nhxg7wAAG3NJREFUeJzt3W2sXdV95/Hv2o/3+vrhPpNAHIZADZSniGdsx9jMSB0pbyr1Rd/0RatpJ1BgWobWEkmgNJQoYlDoDKVp0gBqFGWYppUSTSqiIcpEqZgmk0laUSVVRAoiNtjmIfa177kP5+y917xY+xjjc21f33vuWeuc8/tIR0rM9bn/s/c6f++HtX4bRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERESkC4zvArpl3zcf+QJwKVD5ruVUJjVgDY1nXqV4rUG0LQXruajSQhKRXzn+nxiJ/4WiIvyh4Gpmqbxy+V+O/TeKCmLPNRuo5lqkF4+x6bcuwUYWWr53bocY+Nn//vcP/kffhXRD4ruALoqAO3wXcTpbWKItCemOLRT/Ou/aqe/eEBlss6Q81tyffHDzb1nw30TPxRhMFlMcXtxvm+W/M0nkuyK3LwtLsmMLZizGnmj5ruhMXvFdQLcEsNe75rcJccdUUC2XZHtmSC4eozrR8t+wjHsVhxq/aReLq0xsoLJgA31VFhMb7GJxVXGo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"},FNFv:function(t,i){},GWCC:function(t,i,e){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n=e("MVMM"),o={render:function(){var t=this.$createElement,i=this._self._c||t;return i("div",{attrs:{id:"app"}},[i("router-view")],1)},staticRenderFns:[]};var r=e("vSla")({name:"App"},o,!1,function(t){e("Wn9W")},null,null).exports,h=e("zO6J"),s={name:"vueClock",data:function(){return{observer:null,clockBoxStyle:{},canvas:{},context:{},timeAngle:{},timeInterval:{},transitionOption:{}}},props:{width:{default:""},height:{default:""},timezone:{default:""},time:{type:Object,default:function(){return{isStatic:!1,timestamp:0}}},border:{type:Object,default:function(){return{type:"circle",width:300,height:300,lineWidth:2,color:"#bbb"}}},background:{type:Object,default:function(){return{color:"",image:""}}},dial:{type:Object,default:function(){return{isDial:!0,distance:0,maxLength:8,minLength:5,maxWidth:3,minWidth:2,color:"#888"}}},number:{type:Object,default:function(){return{isNumber:!0,type:"arabic",color:"#777",fontSize:"19px",fontWeight:"normal",fontFamily:"微软雅黑",radius:125}}},needle:{type:Object,default:function(){return{second:{length:100,color:"#aaa",lineWidth:3,longOut:5},minute:{length:110,color:"#999",lineWidth:4,longOut:5},hour:{length:70,color:"#888",lineWidth:4,longOut:5}}}}},computed:{drawOption:function(){return{time:{isStatic:this.time.isStatic||!1,timestamp:this.time.isStatic},border:{type:this.border.type||"circle",width:this.border.width||300,height:this.border.height||this.border.width||300,color:this.border.color||"#bbb",lineWidth:this.border.lineWidth||2},background:{color:this.background.color||"",image:this.background.image||""},dial:{isDial:this.dial.isDial||!0,distance:this.dial.distance||0,maxLength:this.dial.maxLength||8,minLength:this.dial.minLength||5,maxWidth:this.dial.maxWidth||3,minWidth:this.dial.minWidth||2,color:this.dial.color||"#888"},number:{isNumber:this.number.isNumber||!0,type:this.number.type||"arabic",color:this.number.color||"#777",fontSize:this.number.fontSize||"19px",fontWeight:this.number.fontWeight||"normal",fontFamily:this.number.fontFamily||"微软雅黑",radius:this.number.radius||125},needle:{second:{length:this.needle.second&&this.needle.second.length||100,color:this.needle.second&&this.needle.second.color||"#aaa",lineWidth:this.needle.second&&this.needle.second.lineWidth||3,longOut:this.needle.second&&this.needle.second.longOut||5},minute:{length:this.needle.minute&&this.needle.minute.length||110,color:this.needle.minute&&this.needle.minute.color||"#999",lineWidth:this.needle.minute&&this.needle.minute.lineWidth||4,longOut:this.needle.minute&&this.needle.minute.longOut||5},hour:{length:this.needle.hour&&this.needle.hour.length||70,color:this.needle.hour&&this.needle.hour.color||"#888",lineWidth:this.needle.hour&&this.needle.hour.lineWidth||4,longOut:this.needle.hour&&this.needle.hour.longOut||5}}}}},watch:{drawOption:{handler:function(t){t.time.isStatic&&clearInterval(this.timeInterval),this.draw(),console.log("option change")},deep:!0},timeAngle:function(){this.draw()}},created:function(){var t=this;this.$nextTick(function(){t.canvas=t.$el.querySelector("canvas"),t.context=t.canvas.getContext("2d"),t.setClockBoxStyle(),t.newData(),t.time.isStatic||(t.timeInterval=setInterval(t.newData,1e3)),t.draw()})},methods:{draw:function(){this.clear(),this.drawBackground(),this.drawBorder(),this.drawDial(),this.drawNumber(),this.drawNeedle()},clear:function(){this.context.clearRect(0,0,this.canvas.width,this.canvas.width)},setClockBoxStyle:function(){var t={};""===this.width||/%$/.test(this.width)?t.width=this.width:t.width=Number(this.width)+"px",""===this.height&&(""===this.width||/%$/.test(this.width)?(t.height=this.$el.clientWidth+"px",this.clockBoxStyle=t):t.height=this.width),this.canvas.width=this.$el.clientWidth,this.canvas.height=Number(t.height.split("px")[0])},drawBorder:function(){this.context.save(),this.context.translate(this.canvas.width/2,this.canvas.height/2),this.context.beginPath(),"rectangle"==this.drawOption.border.type?this.context.rect(-this.drawOption.border.width/2,-this.drawOption.border.height/2,this.drawOption.border.width,this.drawOption.border.height):this.context.arc(0,0,this.drawOption.border.width/2,0,2*Math.PI,!0),this.context.closePath(),this.context.strokeStyle=this.drawOption.border.color,this.context.lineWidth=this.drawOption.border.lineWidth,this.context.stroke(),this.context.restore()},drawBackground:function(){var t,i;if(this.context.save(),this.context.beginPath(),this.context.translate(this.canvas.width/2,this.canvas.height/2),"rectangle"==this.drawOption.border.type?(this.context.rect(-this.drawOption.border.width/2,-this.drawOption.border.height/2,this.drawOption.border.width,this.drawOption.border.height),t=-this.drawOption.border.width/2,i=-this.drawOption.border.height/2):(this.context.arc(0,0,this.drawOption.border.width/2,0,2*Math.PI,!0),t=-this.drawOption.border.width/2,i=-this.drawOption.border.width/2),this.drawOption.background.color&&(this.context.fillStyle=this.drawOption.background.color,this.context.fill()),this.drawOption.background.image){var e,n,o,r=new Image;if(this.transitionOption.bgImg)r=this.transitionOption.bgImg;else{var h=this;r.src=this.drawOption.background.image,r.onload=function(){console.log("img loaded"),h.$set(h.transitionOption,"bgImg",r)}}r.width>=r.height?(e=(r.width-r.height)/2,n=0,o=r.height):(e=0,n=(r.height-r.width)/2,o=r.width),this.context.clip(),this.context.drawImage(r,e,n,o,o,t,i,2*-t,2*-i)}this.context.closePath(),this.context.restore()},drawDial:function(){if(this.drawOption.dial.isDial){var t=2*Math.PI/60,i=0,e=this.drawOption.dial.distance?this.drawOption.dial.distance+this.drawOption.border.lineWidth/2:this.drawOption.border.lineWidth/2;0==this.drawOption.dial.distance&&(e=this.drawOption.border.lineWidth/2);for(var n={x:0,y:this.drawOption.border.width/2-e},o=0;o<60;o++)i=t*o,this.context.save(),this.context.translate(this.canvas.width/2,this.canvas.height/2),o%5==0?this.line(n,i,this.drawOption.dial.maxLength-n.y,this.drawOption.dial.color,this.drawOption.dial.maxWidth):this.line(n,i,this.drawOption.dial.minLength-n.y,this.drawOption.dial.color,this.drawOption.dial.minWidth),this.context.restore()}},drawNumber:function(){if(this.drawOption.number.isNumber){for(var t=[],i=1;i<13;i++)t[i-1]=i+3,i+3>12&&(t[i-1]=3-(12-i));if("roman"==this.drawOption.number.type)for(var e=0;e<12;e++)t[e]=this.intToRoman(t[e]);var n=Math.PI/6;this.context.save(),this.context.fillStyle=this.drawOption.number.color,this.context.font=this.drawOption.number.fontWeight+" "+this.drawOption.number.fontSize+" "+this.drawOption.number.fontFamily,this.context.textBaseline="middle",this.context.textAlign="center",this.context.translate(this.canvas.width/2,this.canvas.height/2);for(var o=0;o=5&&o<9){e[e.length-1-n]=i[2*n+1];for(var r=0;r"})},Wn9W:function(t,i){},yjiM:function(t,i){}},["GWCC"]); 2 | //# sourceMappingURL=app.0b117f8782f605e85778.js.map -------------------------------------------------------------------------------- /distweb/static/js/app.0b117f8782f605e85778.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///./src/assets/logo_center.png","webpack:///./src/App.vue?406d","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///src/components/clock/clock.vue","webpack:///./src/components/clock/clock.vue?8699","webpack:///./src/components/clock/clock.vue","webpack:///src/page/clocks.page.vue","webpack:///./src/page/clocks.page.vue?672e","webpack:///./src/page/clocks.page.vue","webpack:///src/page/test.vue","webpack:///./src/page/test.vue?498e","webpack:///./src/page/test.vue","webpack:///./src/router/index.js","webpack:///./src/main.web.js"],"names":["module","exports","selectortype_template_index_0_src_App","render","_h","this","$createElement","_c","_self","attrs","id","staticRenderFns","src_App","__webpack_require__","normalizeComponent","name","ssrContext","clock","data","observer","clockBoxStyle","canvas","context","timeAngle","timeInterval","transitionOption","props","width","default","height","timezone","time","type","Object","isStatic","timestamp","border","lineWidth","color","background","image","dial","isDial","distance","maxLength","minLength","maxWidth","minWidth","number","isNumber","fontSize","fontWeight","fontFamily","radius","needle","second","length","longOut","minute","hour","computed","drawOption","watch","handler","val","clearInterval","draw","console","log","deep","created","_this2","$nextTick","$el","querySelector","getContext","setClockBoxStyle","newData","setInterval","methods","clear","drawBackground","drawBorder","drawDial","drawNumber","drawNeedle","clearRect","obj","test","Number","clientWidth","split","save","translate","beginPath","rect","arc","Math","PI","closePath","strokeStyle","stroke","restore","x","y","fillStyle","fill","sx","sy","autow","Image","bgImg","_this","src","onload","$set","clip","drawImage","degMinute","degM","begainPosition","i","line","num","_i","intToRoman","ar","font","textBaseline","textAlign","_i2","fillText","cos","sin","roman","numArr","toString","n","j","_j","join","h","hAngle","m","mAngle","s","sAngle","selectTimezone","d","Data","Date","len","getTime","getTimezoneOffset","offset","nd","getHours","getMinutes","getSeconds","starp","col","lw","rotate","moveTo","lineTo","clock_clock","style","components_clock_clock","clock_normalizeComponent","clocks_page","window","addEventListener","$refs","components","Clock","setBorder","setBackground","logo_center_default","a","colorChange","getColor","colorReset","floor","random","page_clocks_page","_vm","staticClass","on","click","$event","_v","ref","src_page_clocks_page","clocks_page_normalizeComponent","myClock","dist","page_test","src_page_test","test_normalizeComponent","vue_esm","use","vue_router_esm","router","routes","path","redirect","component","config","productionTip","el","App","template"],"mappings":"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","file":"static/js/app.0b117f8782f605e85778.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+nhxg7wAAG3NJREFUeJzt3W2sXdV95/Hv2o/3+vrhPpNAHIZADZSniGdsx9jMSB0pbyr1Rd/0RatpJ1BgWobWEkmgNJQoYlDoDKVp0gBqFGWYppUSTSqiIcpEqZgmk0laUSVVRAoiNtjmIfa177kP5+y917xY+xjjc21f33vuWeuc8/tIR0rM9bn/s/c6f++HtX4bRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERESkC4zvArpl3zcf+QJwKVD5ruVUJjVgDY1nXqV4rUG0LQXruajSQhKRXzn+nxiJ/4WiIvyh4Gpmqbxy+V+O/TeKCmLPNRuo5lqkF4+x6bcuwUYWWr53bocY+Nn//vcP/kffhXRD4ruALoqAO3wXcTpbWKItCemOLRT/Ou/aqe/eEBlss6Q81tyffHDzb1nw30TPxRhMFlMcXtxvm+W/M0nkuyK3LwtLsmMLZizGnmj5ruhMXvFdQLcEsNe75rcJccdUUC2XZHtmSC4eozrR8t+wjHsVhxq/aReLq0xsoLJgA31VFhMb7GJxVXGo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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/logo_center.png\n// module id = /VbN\n// module chunks = 1","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler?{\"id\":\"data-v-19161fed\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.2@vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/_extract-text-webpack-plugin@3.0.2@extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/_vue-loader@13.7.2@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-19161fed\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/_vue-loader@13.7.2@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-19161fed\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/clock/clock.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:(_vm.clockBoxStyle),attrs:{\"id\":\"clock\"}},[_c('canvas')])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler?{\"id\":\"data-v-2d98def9\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.2@vue-loader/lib/selector.js?type=template&index=0!./src/components/clock/clock.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/_extract-text-webpack-plugin@3.0.2@extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-2d98def9\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!less-loader?{\\\"sourceMap\\\":true}!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=styles&index=0!./clock.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./clock.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./clock.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-2d98def9\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=template&index=0!./clock.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-2d98def9\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/clock/clock.vue\n// module id = null\n// module chunks = ","\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/page/clocks.page.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"tes_page\"}},[_c('div',[_c('div',{staticClass:\"button\"},[(_vm.border.type=='circle')?_c('span',{on:{\"click\":function($event){_vm.setBorder('type','rectangle')}}},[_vm._v(\"改为方形边框\")]):_c('span',{on:{\"click\":function($event){_vm.setBorder('type','circle')}}},[_vm._v(\"改为圆形边框\")]),_vm._v(\" \"),(_vm.background.image)?_c('span',{on:{\"click\":function($event){_vm.setBackground('image','')}}},[_vm._v(\"没有背景\")]):_c('span',{on:{\"click\":function($event){_vm.setBackground('image','logo')}}},[_vm._v(\"图片背景\")]),_vm._v(\" \"),_c('span',{on:{\"click\":function($event){_vm.colorChange()}}},[_vm._v(\"随机颜色\")]),_vm._v(\" \"),_c('span',{on:{\"click\":function($event){_vm.colorReset()}}},[_vm._v(\"重置颜色\")])]),_vm._v(\" \"),_c('clock',{ref:\"clock\",attrs:{\"border\":_vm.border,\"background\":_vm.background,\"dial\":_vm.dial,\"number\":_vm.number,\"needle\":_vm.needle}})],1)])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler?{\"id\":\"data-v-6915e5a7\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.2@vue-loader/lib/selector.js?type=template&index=0!./src/page/clocks.page.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/_extract-text-webpack-plugin@3.0.2@extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-6915e5a7\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!less-loader?{\\\"sourceMap\\\":true}!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=styles&index=0!./clocks.page.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./clocks.page.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./clocks.page.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6915e5a7\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=template&index=0!./clocks.page.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-6915e5a7\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/page/clocks.page.vue\n// module id = null\n// module chunks = ","\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/page/test.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('vue-clock',{attrs:{\"timezone\":\"8\"}}),_vm._v(\" \"),_c('my-clock')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler?{\"id\":\"data-v-6f355d2c\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.2@vue-loader/lib/selector.js?type=template&index=0!./src/page/test.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./test.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=script&index=0!./test.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-6f355d2c\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/_vue-loader@13.7.2@vue-loader/lib/selector?type=template&index=0!./test.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/page/test.vue\n// module id = null\n// module chunks = ","import Vue from 'vue'\r\nimport Router from 'vue-router'\r\nimport ClockPage from '../page/clocks.page.vue'\r\nimport TextPage from '../page/test.vue'\r\n\r\nVue.use(Router)\r\n\r\nexport default new Router({\r\n\troutes: [{\r\n\t\tpath: '/',\r\n\t\tredirect: '/clock'\r\n\t}, {\r\n\t\tpath: '/clock',\r\n\t\tcomponent: ClockPage,\r\n\t}, {\r\n\t\tpath: '/test',\r\n\t\tcomponent: TextPage,\r\n\t}]\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import Vue from 'vue'\r\nimport App from './App'\r\nimport router from './router'\r\n\r\nVue.config.productionTip = false\r\n\r\n/* eslint-disable no-new */\r\nnew Vue({\r\n\tel: '#app',\r\n\trouter,\r\n\tcomponents: { App },\r\n\ttemplate: ''\r\n})\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.web.js"],"sourceRoot":""} -------------------------------------------------------------------------------- /distweb/static/js/manifest.7daecd8593b1dbd1782f.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];avue-clock
-------------------------------------------------------------------------------- /index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-clock 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-clock-lonlyape", 3 | "version": "1.2.2", 4 | "description": "a clock component for vue", 5 | "author": "lonlyape ", 6 | "private": false, 7 | "main": "dist/index.js", 8 | "scripts": { 9 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 10 | "start": "npm run dev", 11 | "lint": "eslint --ext .js,.vue src", 12 | "build-web": "node build/build.web.js", 13 | "build-comp": "node build/build.comp.js" 14 | }, 15 | "publishConfig": { 16 | "registry": "https://npm.pkg.github.com/lonlyape" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/lonlyape/vue-clock.git" 21 | }, 22 | "keywords": [ 23 | "vue-clock-lonlyape", 24 | "vue-clock", 25 | "vueClock", 26 | "clock", 27 | "vue" 28 | ], 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/lonlyape/vue-clock/issues" 32 | }, 33 | "homepage": "https://github.com/lonlyape/vue-clock#readme", 34 | "dependencies": { 35 | "vue": "^2.5.2", 36 | "vue-router": "^3.0.1" 37 | }, 38 | "devDependencies": { 39 | "autoprefixer": "^7.1.2", 40 | "babel-core": "^6.22.1", 41 | "babel-eslint": "^8.2.1", 42 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 43 | "babel-loader": "^7.1.1", 44 | "babel-plugin-syntax-jsx": "^6.18.0", 45 | "babel-plugin-transform-runtime": "^6.22.0", 46 | "babel-plugin-transform-vue-jsx": "^3.5.0", 47 | "babel-preset-env": "^1.3.2", 48 | "babel-preset-stage-2": "^6.22.0", 49 | "chalk": "^2.0.1", 50 | "copy-webpack-plugin": "^4.0.1", 51 | "css-loader": "^0.28.0", 52 | "eslint": "^4.15.0", 53 | "eslint-config-standard": "^10.2.1", 54 | "eslint-friendly-formatter": "^3.0.0", 55 | "eslint-loader": "^1.7.1", 56 | "eslint-plugin-import": "^2.7.0", 57 | "eslint-plugin-node": "^5.2.0", 58 | "eslint-plugin-promise": "^3.4.0", 59 | "eslint-plugin-standard": "^3.0.1", 60 | "eslint-plugin-vue": "^4.0.0", 61 | "extract-text-webpack-plugin": "^3.0.0", 62 | "file-loader": "^1.1.4", 63 | "friendly-errors-webpack-plugin": "^1.6.1", 64 | "html-webpack-plugin": "^2.30.1", 65 | "less": "^3.0.2", 66 | "less-loader": "^4.1.0", 67 | "node-notifier": "^5.1.2", 68 | "optimize-css-assets-webpack-plugin": "^3.2.0", 69 | "ora": "^1.2.0", 70 | "portfinder": "^1.0.13", 71 | "postcss-import": "^11.0.0", 72 | "postcss-loader": "^2.0.8", 73 | "postcss-url": "^7.2.1", 74 | "rimraf": "^2.6.0", 75 | "semver": "^5.3.0", 76 | "shelljs": "^0.7.6", 77 | "uglifyjs-webpack-plugin": "^1.1.1", 78 | "url-loader": "^0.5.8", 79 | "vue-loader": "^13.3.0", 80 | "vue-style-loader": "^3.1.2", 81 | "vue-template-compiler": "^2.5.2", 82 | "webpack": "^3.6.0", 83 | "webpack-bundle-analyzer": "^3.3.2", 84 | "webpack-dev-server": "^3.1.11", 85 | "webpack-merge": "^4.1.0" 86 | }, 87 | "engines": { 88 | "node": ">= 6.0.0", 89 | "npm": ">= 3.0.0" 90 | }, 91 | "browserslist": [ 92 | "> 1%", 93 | "last 2 versions", 94 | "not ie <= 8" 95 | ] 96 | } 97 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 12 | 23 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonlyape/vue-clock/70eb4f2638e20aa7de51d6ece287b857f8c137a0/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logo_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonlyape/vue-clock/70eb4f2638e20aa7de51d6ece287b857f8c137a0/src/assets/logo_center.png -------------------------------------------------------------------------------- /src/components/clock/clock.vue: -------------------------------------------------------------------------------- 1 | 6 | 484 | 485 | 487 | -------------------------------------------------------------------------------- /src/components/clock/index.js: -------------------------------------------------------------------------------- 1 | import vueClock from './clock.vue'; 2 | 3 | vueClock.install = Vue => Vue.component(vueClock.name, vueClock); 4 | 5 | export default vueClock; 6 | -------------------------------------------------------------------------------- /src/main.comp.js: -------------------------------------------------------------------------------- 1 | import vueClock from './components/clock/' 2 | 3 | const components = [vueClock]; 4 | 5 | const install = function(Vue, options) { 6 | components.map(component => { 7 | Vue.component(component.name, component); 8 | }) 9 | } 10 | 11 | /* 支持使用标签的方式引入 */ 12 | if (typeof window !== 'undefined' && window.Vue) { 13 | install(window.Vue); 14 | } 15 | 16 | export default { 17 | install 18 | } 19 | 20 | export { 21 | install, 22 | vueClock 23 | }; 24 | -------------------------------------------------------------------------------- /src/main.dev.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | import router from './router' 4 | import vueClock from 'vue-clock-lonlyape' 5 | 6 | Vue.use(vueClock); 7 | 8 | Vue.config.productionTip = false 9 | 10 | /* eslint-disable no-new */ 11 | new Vue({ 12 | el: '#app', 13 | router, 14 | components: { App }, 15 | template: '' 16 | }) 17 | -------------------------------------------------------------------------------- /src/main.web.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | import router from './router' 4 | 5 | Vue.config.productionTip = false 6 | 7 | /* eslint-disable no-new */ 8 | new Vue({ 9 | el: '#app', 10 | router, 11 | components: { App }, 12 | template: '' 13 | }) 14 | -------------------------------------------------------------------------------- /src/page/clocks.page.vue: -------------------------------------------------------------------------------- 1 | 16 | 81 | 107 | -------------------------------------------------------------------------------- /src/page/test.vue: -------------------------------------------------------------------------------- 1 | 7 | 19 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import ClockPage from '../page/clocks.page.vue' 4 | import TextPage from '../page/test.vue' 5 | 6 | Vue.use(Router) 7 | 8 | export default new Router({ 9 | routes: [{ 10 | path: '/', 11 | redirect: '/clock' 12 | }, { 13 | path: '/clock', 14 | component: ClockPage, 15 | }, { 16 | path: '/test', 17 | component: TextPage, 18 | }] 19 | }) 20 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonlyape/vue-clock/70eb4f2638e20aa7de51d6ece287b857f8c137a0/static/.gitkeep --------------------------------------------------------------------------------