commit 59e01abe22d0b6d27320f7cba04fe4e9b71d6c64 Author: 宇天 Date: Wed Dec 26 23:58:24 2018 +0800 初始化项目 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..12e128e --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.DS_Store +.AppleDouble +.LSOverride +.idea +.vscode +._* +.Spotlight-V100 +.Trashes + + +node_modules +node_modules/** + +package-lock.json \ No newline at end of file diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..3620889 --- /dev/null +++ b/Readme.md @@ -0,0 +1,39 @@ +# Sonist 音乐播放器 +> 一个音乐播放器, 主打本地音乐播放。支持 自动歌词/自动封面/均衡器等常见功能。 +>> 同时利用酷狗音乐的API(**来源于网络,仅供学习使用**), 获取实时的云音乐(**仅免费的那部分,付费部分无法提供**)。 + + +界面预览 + +![demo](./demo1.jpg) + +![demo](./demo2.jpg) + + +## 开发计划 + +- [x] 主界面框架 +- [ ] 酷狗音乐电台 +- [ ] 酷狗音乐排行榜 +- [ ] 酷狗歌手列表(完成20%) +- [ ] 酷狗音乐MV +- [ ] 试听列表 +- [ ] 本地音乐(50%) +- [ ] 设置界面 +- [ ] 均衡器 +- [ ] 桌面歌词 +- [ ] 迷你模式 +- [ ] KTV模式 +- [ ] 多媒体快捷键 +- [ ] 酷狗账号直接登录(犹豫中) +- [ ] 铃声制作(犹豫中) +- [ ] 歌曲ID3信息修改(技术攻坚中) +- [ ] 用户评论/点赞(取决于登陆功能是否开发) +- [ ] 试听下载 +- [ ] 歌曲质量选择 +- [ ] 等你来建议 + + +## 捐助 +> 开发app其实挺辛苦的。 喜欢我的作品的童鞋, 可以给我打赏个几块钱茶水费, 感激不尽。 +>> 没钱的, 可以扫支付宝领红包, 也算支持我了。 \ No newline at end of file diff --git a/css/app.css b/css/app.css new file mode 100644 index 0000000..95d0298 --- /dev/null +++ b/css/app.css @@ -0,0 +1 @@ +@font-face{font-family:"sonist font";src:url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff")}[class^="s-icon-"],[class*=" s-icon-"]{display:inline-block;font-family:"sonist font" !important;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.s-icon-all:before{content:"\e714"}.s-icon-eq:before{content:"\e715"}.s-icon-heart:before{content:"\e716"}.s-icon-music:before{content:"\e717"}.s-icon-prev:before{content:"\e718"}.s-icon-play-list:before{content:"\e719"}.s-icon-pause:before{content:"\e71a"}.s-icon-play:before{content:"\e71b"}.s-icon-next:before{content:"\e71c"}.s-icon-mv:before{content:"\e71d"}.s-icon-rank:before{content:"\e71e"}.s-icon-singer:before{content:"\e71f"}.s-icon-random:before{content:"\e720"}.s-icon-radio:before{content:"\e721"}.s-icon-single:before{content:"\e722"}.do-fn-drag{-webkit-app-region:drag;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.do-fn-nodrag{-webkit-app-region:no-drag}html{font-size:62.5%}body{line-height:1.5;background:#fff;font-size:1.4rem;color:#62778d}table{overflow:auto;display:table;width:100%;line-height:2.5rem}table thead tr{height:4.5rem;border-bottom:0.1rem solid #f3f5fb}table thead th{padding:1rem .8rem;border:0}table tbody tr{height:auto;transition:background .3s ease-in-out}table tbody tr:hover{background:#f7f8fb}table tbody td{padding:.9rem .8rem}::-webkit-scrollbar{width:8px;height:8px;background:#f7f8fb}::-webkit-scrollbar:hover{background:#f3f5fb}::-webkit-scrollbar-button{display:none}::-webkit-scrollbar-thumb{background:#dae1e9}::-webkit-scrollbar-thumb:hover{background:#3fc2a7}.do-mod-app{display:flex;position:fixed;left:0;top:0;width:100%;height:100%}.do-mod-app .menubar{position:absolute;left:1.2rem;top:0;z-index:99;width:auto;height:3rem;padding:.9rem 0}.do-mod-app .menubar .item{display:inline-block;width:1.2rem;height:1.2rem;margin:0 .2rem;background:url(/images/btn_gray@2x.png) no-repeat;background-size:cover}.do-mod-app .menubar.focus .quit{background-image:url(/images/btn_close_focus@2x.png)}.do-mod-app .menubar.focus .min{background-image:url(/images/btn_min_focus@2x.png)}.do-mod-app .menubar.focus .max{background-image:url(/images/btn_max_focus@2x.png)}.do-mod-app .menubar:hover .quit{background-image:url(/images/btn_close_hover@2x.png)}.do-mod-app .menubar:hover .min{background-image:url(/images/btn_min_hover@2x.png)}.do-mod-app .menubar:hover .max{background-image:url(/images/btn_max_hover@2x.png)}.do-mod-app .menubar-win{position:absolute;right:1.2rem;top:0;z-index:99;width:auto;height:4rem;padding:.9rem 0;line-height:1.8rem}.do-mod-app .menubar-win .item{display:inline-block;width:2.2rem;height:2.2rem;margin:0 .2rem;padding:.2rem;font-size:1.6rem}.do-mod-app .menubar-win .item:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.do-mod-app .menubar-win .item.opt{font-size:1.8rem}.do-mod-app .sidebar{flex:0 1 22rem;position:relative;height:100%;background:#f3f5fb}.do-mod-app .sidebar .user-box{width:18rem;height:16.5rem;margin:4rem 2rem 0;text-align:center}.do-mod-app .sidebar .user-box .avatar{overflow:hidden;width:12rem;height:12rem;margin:0 3rem;border:.6rem solid #fff;border-radius:50%;box-shadow:0 0.5rem 1.5rem rgba(0,0,0,0.15)}.do-mod-app .sidebar .user-box img{width:100%;height:100%}.do-mod-app .sidebar .user-box .uname{line-height:2;font-weight:normal}.do-mod-app .sidebar .music-box{width:100%;height:auto;padding:0 1.5rem}.do-mod-app .sidebar .music-box dt.title{line-height:4rem;color:#98acae}.do-mod-app .sidebar .music-box dd.item{height:3rem;margin:.3rem 0;padding:0 .8rem;line-height:3rem;color:#748182}.do-mod-app .sidebar .music-box dd.item .icon{float:left;width:3rem;height:3rem;padding:0 .5rem;font-size:2.4rem}.do-mod-app .sidebar .music-box dd.item.active{border-radius:.3rem;background:#3fc2a7;color:#fff}.do-mod-app .sidebar .music-box dd.item.disabled{opacity:.25}.do-mod-app .sidebar .play-contrl{position:absolute;left:0;bottom:0;width:100%;height:8rem;background:rgba(255,255,255,0.3)}.do-mod-app .sidebar .play-contrl .item{position:absolute;top:2rem;width:4rem;height:4rem;line-height:4rem;font-size:3.5rem;text-align:center;color:#19b491;transition:all .2s ease-in-out}.do-mod-app .sidebar .play-contrl .item:hover{color:#3fc2a7}.do-mod-app .sidebar .play-contrl .item:active{color:#16967a}.do-mod-app .sidebar .play-contrl .prev{left:2.5rem}.do-mod-app .sidebar .play-contrl .play{left:50%;top:1.5rem;width:5rem;height:5rem;margin-left:-2.5rem;line-height:5rem;font-size:4.5rem}.do-mod-app .sidebar .play-contrl .next{right:2.5rem}.do-mod-app .main{flex:1;display:flex;flex-flow:column wrap}.do-mod-app .main .tool-bar{flex:0 1 5rem;padding:1rem}.do-mod-app .main .tool-bar .search{position:relative;display:inline-block;line-height:3rem}.do-mod-app .main .tool-bar .icon{position:absolute;right:0;top:0;width:2.6rem;height:3rem}.do-mod-app .main .tool-bar input{width:20rem;padding:0 1.3rem;border-radius:1.5rem}.do-mod-app .main .module{flex:1;display:flex;flex-flow:column wrap}.do-mod-app .main .play-bar{position:relative;flex:0 1 8rem;display:flex;justify-content:center;align-items:center;background:#f5f6fc}.do-mod-app .main .play-bar .song-stat{flex:1;height:8rem;margin:0 2rem 0 0}.do-mod-app .main .play-bar .song-stat canvas{display:flex;width:100%;height:100%}.do-mod-app .main .play-bar .ctrl{position:relative;flex:0 1 3.5rem;height:3rem;line-height:3rem;text-align:center;color:#19b491;font-size:2rem}.do-mod-app .main .play-bar .ctrl:hover{color:#3fc2a7}.do-mod-app .main .play-bar .ctrl:active{color:#16967a}.do-mod-app .main .play-bar .ctrl.lrc{margin-right:2rem;font-size:1.6rem}@-webkit-keyframes play{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes play{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}} diff --git a/css/app.scss b/css/app.scss new file mode 100644 index 0000000..83b337a --- /dev/null +++ b/css/app.scss @@ -0,0 +1,188 @@ +@charset "UTF-8"; +/** + * {sonist app style} + * @authors yutent + * @date 2018/12/16 17:15:07 + */ + + +@import "./var.scss"; + +@font-face {font-family: "sonist font"; + src: url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff') +} + +[class^="s-icon-"], [class*=" s-icon-"] {display:inline-block;font-family:"sonist font" !important;font-style:normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;} + +.s-icon-all:before { content: "\e714"; } +.s-icon-eq:before { content: "\e715"; } +.s-icon-heart:before { content: "\e716"; } +.s-icon-music:before { content: "\e717"; } +.s-icon-prev:before { content: "\e718"; } +.s-icon-play-list:before { content: "\e719"; } +.s-icon-pause:before { content: "\e71a"; } +.s-icon-play:before { content: "\e71b"; } +.s-icon-next:before { content: "\e71c"; } +.s-icon-mv:before { content: "\e71d"; } +.s-icon-rank:before { content: "\e71e"; } +.s-icon-singer:before { content: "\e71f"; } +.s-icon-random:before { content: "\e720"; } +.s-icon-radio:before { content: "\e721"; } +.s-icon-single:before { content: "\e722"; } + +.do-fn-drag {-webkit-app-region:drag;user-select: none;} +.do-fn-nodrag {-webkit-app-region:no-drag;} + +html {font-size:62.5%} +body {line-height:1.5;background:#fff;font-size:1.4rem;color:nth($cd, 1)} + +table {overflow:auto;display:table;width:100%;line-height:2.5rem; + thead tr {height:4.5rem;border-bottom:.1rem solid nth($cp, 1)} + thead th {padding:1rem .8rem;border:0;} + tbody tr {height:auto;@include ts(background, .3s); + &:hover {background:#f7f8fb;} + } + tbody td {padding:.9rem .8rem} +} + +::-webkit-scrollbar {width:8px;height:8px;background:#f7f8fb;} +::-webkit-scrollbar:hover {background:#f3f5fb;} +::-webkit-scrollbar-button {display:none;} +::-webkit-scrollbar-thumb {background:nth($cp, 3);} +::-webkit-scrollbar-thumb:hover {background:nth($ct, 1);} + + +.do-mod-app {display:flex;position:fixed;left:0;top:0;width:100%;height:100%; + + + .menubar {position:absolute;left:1.2rem;top:0;z-index:99;width:auto;height:3rem;padding:.9rem 0; + + .item {display:inline-block;width:1.2rem;height:1.2rem;margin:0 .2rem;background:url(/images/btn_gray@2x.png) no-repeat;background-size:cover;} + + &.focus { + .quit {background-image:url(/images/btn_close_focus@2x.png);} + .min {background-image:url(/images/btn_min_focus@2x.png);} + .max {background-image:url(/images/btn_max_focus@2x.png);} + } + &:hover { + .quit {background-image:url(/images/btn_close_hover@2x.png);} + .min {background-image:url(/images/btn_min_hover@2x.png);} + .max {background-image:url(/images/btn_max_hover@2x.png);} + } + } + + .menubar-win {position:absolute;right:1.2rem;top:0;z-index:99;width:auto;height:4rem;padding:.9rem 0;line-height:1.8rem; + + .item {display:inline-block;width:2.2rem;height:2.2rem;margin:0 .2rem;padding:.2rem;font-size:1.6rem; + + &:hover {transform:scale(1.1)} + &.opt {font-size:1.8rem;} + } + } + + + + + + .sidebar {flex:0 1 22rem;position:relative;height:100%;background:nth($cp, 1); + + // 用户信息 + .user-box {width:18rem;height:16.5rem;margin:4rem 2rem 0;text-align:center; + + .avatar {overflow:hidden;width:12rem;height:12rem;margin:0 3rem;border:.6rem solid #fff;border-radius:50%;box-shadow:0 .5rem 1.5rem rgba(0, 0, 0, .15);} + img {width:100%;height:100%;} + .uname {line-height:2;font-weight:normal;} + } + + // 音乐菜单 + .music-box {width:100%;height:auto;padding:0 1.5rem; + + dt.title {line-height:4rem;color:nth($cgr, 1)} + dd.item {height:3rem;margin:.3rem 0;padding:0 .8rem;line-height:3rem;color:nth($cgr, 3); + + .icon {float:left;width:3rem;height:3rem;padding:0 .5rem;font-size:2.4rem;} + &.active {border-radius:.3rem;background:nth($ct, 1);color:#fff;} + &.disabled {opacity:.25} + } + } + + // 播放控制按钮 + .play-contrl {position:absolute;left:0;bottom:0;width:100%;height:8rem;background:rgba(255,255,255,.3); + + .item {position:absolute;top:2rem;width:4rem;height:4rem;line-height:4rem;font-size:3.5rem;text-align:center;color:nth($ct, 2);@include ts(); + + &:hover {color:nth($ct, 1)} + &:active {color:nth($ct, 3)} + } + .prev {left:2.5rem;} + .play {left:50%;top:1.5rem;width:5rem;height:5rem;margin-left:-2.5rem;line-height:5rem;font-size:4.5rem;} + .next {right:2.5rem;} + } + } + + + // 主体样式 + .main {flex:1;display:flex;flex-flow:column wrap; + + // 工具栏 + .tool-bar {flex:0 1 5rem;padding:1rem; + + .search {position:relative;display:inline-block;line-height:3rem;} + .icon {position:absolute;right:0;top:0;width:2.6rem;height:3rem;} + input {width:20rem;padding:0 1.3rem;border-radius:1.5rem;} + } + + // 功能模块 + .module {flex:1;display:flex;flex-flow:column wrap;} + + + + // 播放条 + .play-bar {position:relative;flex:0 1 8rem;display:flex;justify-content:center;align-items:center;background:#f5f6fc; + + .song-stat {flex:1;height:8rem;margin:0 2rem 0 0; + + canvas {display:flex;width:100%;height:100%;} + } + + .ctrl {position:relative;flex:0 1 3.5rem;height:3rem;line-height:3rem;text-align:center;color:nth($ct, 2);font-size:2rem; + + &:hover {color:nth($ct, 1)} + &:active {color:nth($ct, 3)} + &.lrc {margin-right:2rem;font-size:1.6rem;} + } + + } + + } + + + + + +} + + + + + + + + + + + + + + + + + + + + + +@keyframes play { + from {transform:rotate(0deg)} + to {transform:rotate(360deg)} +} \ No newline at end of file diff --git a/css/modules.css b/css/modules.css new file mode 100644 index 0000000..adf4729 --- /dev/null +++ b/css/modules.css @@ -0,0 +1 @@ +.do-mod-artist{position:relative;display:flex;width:100%;height:100%}.do-mod-artist .filter-box{flex:0 1 12rem;border-right:0.1rem solid #f3f5fb;text-align:right}.do-mod-artist .filter-box .item{width:100%;height:2.4rem;padding:0 1.2rem;line-height:2.4rem;color:#98acae}.do-mod-artist .filter-box .item.active{color:#3fc2a7;font-weight:bold}.do-mod-artist .filter-box .item:hover{padding-right:1.3rem;color:#3fc2a7}.do-mod-artist .filter-box .pipe{display:block;width:100%;height:.7rem}.do-mod-artist .list-box{overflow-y:auto;display:flex;flex-flow:row wrap;flex:1;padding:0 1rem}.do-mod-artist .list-box .item{display:flex;justify-content:center;align-items:center;flex:45%;height:7rem;margin:1rem 2.5%;padding:.5rem;background:#f3f5fb}.do-mod-artist .list-box .item img{flex:0 1 6rem;height:6rem}.do-mod-artist .list-box .item summary{flex:2;padding:0 1rem}.do-mod-artist .list-box .item strong{font-size:1.6rem}.do-mod-artist .list-box .item p{font-size:1.2rem;color:#98acae}.do-mod-artist .artist-box{position:absolute;left:0;top:0;z-index:9;width:100%;height:100%;background-size:cover;background-repeat:no-repeat;background-position:center center}.do-mod-artist .artist-box .content{display:flex;flex-flow:column wrap;width:100%;height:100%;padding:1.5rem 2.5rem;background:linear-gradient(to bottom, #fff 2%, rgba(255,255,255,0.75), #fff 98%);-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.do-mod-artist .artist-box .content .name{flex:0 1 3.6rem;font-size:1.4rem;font-style:italic;font-weight:normal}.do-mod-artist .artist-box .content .name a{text-decoration:underline;color:#3fc2a7}.do-mod-artist .artist-box .content .name i{color:#98acae}.do-mod-artist .artist-box .content .desc{flex:0 1 3rem;font-size:1.2rem;color:#98acae}.do-mod-artist .artist-box .content .desc span{padding:0 .5rem;text-decoration:underline;color:#3fc2a7}.do-mod-artist .artist-box .content .song-album{flex:1;display:flex;flex-flow:column wrap}.do-mod-artist .artist-box .content .tab{flex:0 1 3rem;display:flex;padding:0 .5rem;line-height:2.9rem;border-bottom:0.1rem solid #e8ebf4;text-align:center}.do-mod-artist .artist-box .content .tab .item{flex:0 0 7.5rem;height:3rem;margin:0 .3rem}.do-mod-artist .artist-box .content .tab .item.active{border-bottom:0.2rem solid #3fc2a7;color:#3fc2a7}.do-mod-artist .artist-box .content .tab .item.disabled{opacity:.25}.do-mod-local{flex:1;display:flex;flex-flow:column wrap}.do-mod-local .toolbar{flex:0 1 3rem;padding:0 1rem;line-height:2.9rem;border-bottom:0.1rem solid #e8ebf4}.do-mod-local .toolbar .refresh{margin-left:1rem;color:#3fc2a7;text-decoration:underline}.do-mod-local .table{overflow:auto;flex:1}.do-mod-local .table .stat{width:2.6rem;height:2.6rem;line-height:2.6rem}.do-mod-local .table .ac{text-align:center}.do-mod-local .table .active{color:#3fc2a7}.do-mod-local .table .active i{-webkit-animation:play 2s infinite linear;animation:play 2s infinite linear}.do-mod-search{flex:1;display:flex;flex-flow:column wrap}.do-mod-search .tabbar{flex:0 1 3rem;display:flex;padding:0 .5rem;line-height:2.9rem;border-bottom:0.1rem solid #e8ebf4;text-align:center}.do-mod-search .tabbar .item{flex:0 0 7.5rem;height:3rem;margin:0 .3rem;border:0.1rem solid #e8ebf4;background:#fff;color:#dae1e9}.do-mod-search .tabbar .item.active{border-bottom-color:transparent;color:#62778d}.do-mod-search .tabbar .item i{color:#ff5061}.do-mod-search .table{overflow:auto;flex:1}.do-mod-search .table .active{color:#3fc2a7}.do-mod-search .table .ac{text-align:center}.artist-desc-layer{width:60rem;height:30rem}.artist-desc-layer .layer-content{overflow-y:auto;height:85% !important;padding:1rem;line-height:2;text-indent:2em} diff --git a/css/modules.scss b/css/modules.scss new file mode 100644 index 0000000..0316f4e --- /dev/null +++ b/css/modules.scss @@ -0,0 +1,150 @@ +@charset "UTF-8"; +/** + * 各模块的样式 + * @authors yutent + * @date 2018/12/24 17:11:35 + */ + +@import "./var.scss"; + + +// 歌手模块 +.do-mod-artist {position:relative;display:flex;width:100%;height:100%; + + .filter-box {flex:0 1 12rem;border-right:.1rem solid nth($cp, 1);text-align:right; + + .item {width:100%;height:2.4rem;padding:0 1.2rem;line-height:2.4rem;color:nth($cgr, 1); + + &.active {color:nth($ct,1);font-weight:bold} + &:hover {padding-right:1.3rem;color:nth($ct,1);} + } + .pipe {display:block;width:100%;height:.7rem;} + + } + + .list-box {overflow-y:auto;display:flex;flex-flow:row wrap;flex:1;padding:0 1rem; + + .item {display:flex;justify-content:center;align-items:center;flex:45%;height:7rem;margin:1rem 2.5%;padding:.5rem;background:nth($cp, 1); + img {flex:0 1 6rem;height:6rem} + summary {flex:2;padding:0 1rem;} + strong {font-size:1.6rem} + p {font-size:1.2rem;color:nth($cgr, 1)} + } + + } + + /* ------------------------------------------------------------ */ + /* -------------------- 歌手&专辑样式 -------------------- */ + /* ------------------------------------------------------------ */ + + + .artist-box { + position:absolute;left:0;top:0;z-index:9;width:100%;height:100%; + background-size:cover;background-repeat:no-repeat;background-position:center center; + + .content {display:flex;flex-flow:column wrap;width:100%;height:100%;padding:1.5rem 2.5rem;background:linear-gradient(to bottom,#fff 2%, rgba(255, 255, 255, .75), #fff 98%);backdrop-filter:blur(1rem); + + + .name {flex:0 1 3.6rem;font-size:1.4rem;font-style:italic;font-weight:normal; + a {text-decoration:underline;color:nth($ct, 1)} + i {color:nth($cgr, 1)} + } + .desc {flex:0 1 3rem; font-size:1.2rem;color:nth($cgr, 1); + span {padding:0 .5rem;text-decoration:underline;color:nth($ct, 1)} + } + + .song-album {flex:1;display:flex;flex-flow:column wrap;} + .tab {flex:0 1 3rem;display:flex;padding:0 .5rem;line-height:2.9rem;border-bottom:.1rem solid nth($cp, 2);text-align:center; + + .item {flex:0 0 7.5rem;height:3rem;margin:0 .3rem; + + &.active {border-bottom:.2rem solid nth($ct, 1);color:nth($ct, 1);} + &.disabled {opacity:.25} + } + } + + } + } + + +} + + + +// 本地音乐模块 +.do-mod-local {flex:1;display:flex;flex-flow:column wrap; + + .toolbar {flex:0 1 3rem;padding:0 1rem;line-height:2.9rem;border-bottom:.1rem solid nth($cp, 2); + + .refresh {margin-left:1rem;color:nth($ct, 1);text-decoration:underline;} + } + + .table {overflow:auto;flex:1; + + .stat {width:2.6rem;height:2.6rem;line-height:2.6rem;} + .ac {text-align:center} + + .active {color:nth($ct, 1); + + i {animation: play 2s infinite linear;} + } + } + + +} + + + +// 搜索&试听模块 +.do-mod-search {flex:1;display:flex;flex-flow:column wrap; + + .tabbar {flex:0 1 3rem;display:flex;padding:0 .5rem;line-height:2.9rem;border-bottom:.1rem solid nth($cp, 2);text-align:center; + + .item {flex:0 0 7.5rem;height:3rem;margin:0 .3rem;border:.1rem solid nth($cp, 2);background:#fff;color:nth($cp, 3); + + &.active {border-bottom-color:transparent;color:nth($cd, 1);} + i {color:nth($cr, 1)} + } + } + + .table {overflow:auto;flex:1; + + .active {color:nth($ct, 1)} + .ac {text-align:center} + } + + +} + + + + + + + + + + + + + + + + + + + + + + + + + +.artist-desc-layer {width:60rem;height:30rem; + + .layer-content {overflow-y:auto;height:85%!important;padding:1rem;line-height:2;text-indent:2em;} +} + + + + diff --git a/css/var.scss b/css/var.scss new file mode 100644 index 0000000..bfe91b5 --- /dev/null +++ b/css/var.scss @@ -0,0 +1,14 @@ +$ct: #3fc2a7 #19b491 #16967a; +$cg: #58d68d #2ecc71 #27ae60; +$cpp: #ac61ce #9b59b6 #8e44ad; +$cb: #52a3de #2d8dd6 #2776b1; +$cr: #ff5061 #eb3b48 #ce3742; +$co: #ffb618 #f39c12 #e67e22; +$cp: #f3f5fb #e8ebf4 #dae1e9; +$cgr: #98acae #8a9b9c #748182; +$cd: #62778d #526273 #425064; + +@mixin ts($c: all, $t: .2s, $m: ease-in-out){ + transition:$c $t $m; +} + diff --git a/demo1.jpg b/demo1.jpg new file mode 100644 index 0000000..a71a389 Binary files /dev/null and b/demo1.jpg differ diff --git a/demo2.jpg b/demo2.jpg new file mode 100644 index 0000000..b105628 Binary files /dev/null and b/demo2.jpg differ diff --git a/dist/anot.next.js b/dist/anot.next.js new file mode 100644 index 0000000..d6407ad --- /dev/null +++ b/dist/anot.next.js @@ -0,0 +1,8 @@ +/*================================================== + * Anot normal version for future browsers + * @authors yutent (yutent@doui.cc) + * @date 2017-03-21 21:05:57 + * support IE10+ and modern browsers + * + ==================================================*/ + var _Anot=function(){var e=1024,t=0;window.VBArray&&(t=document.documentMode||(window.XMLHttpRequest?7:6));var n=j(),r=window.document,i=r.head;i.insertAdjacentHTML("afterBegin",'');var a=i.firstChild;function o(){console.log.apply(console,arguments)}function s(){return Object.create(null)}var c,l,u,f,p="$"+n,d={},h=/[^, ]+/g,v=/\w+/g,m=/^\[object SVG\w*Element\]$/,y=Object.prototype,g=y.hasOwnProperty,b=y.toString,w=Array.prototype,x=w.slice,$=window.dispatchEvent,k=r.documentElement,C=r.createDocumentFragment(),A=(r.createElement("div"),{"[object Boolean]":"boolean","[object Number]":"number","[object String]":"string","[object Function]":"function","[object Array]":"array","[object Date]":"date","[object RegExp]":"regexp","[object Object]":"object","[object Error]":"error","[object AsyncFunction]":"asyncfunction","[object Promise]":"promise","[object Generator]":"generator","[object GeneratorFunction]":"generatorfunction"});function _(){}function T(e){return Function.apply(_,e)}function N(e,t){"string"==typeof e&&(e=e.match(h)||[]);for(var n={},r=void 0!==t?t:1,i=0,a=e.length;i=t.length)&&(a(e?o:r),i=!0))},function(e){i=!0,o(e)})}t.length||o(r);for(var c=0,l=t.length;c0?1:-1)*Math.floor(Math.abs(t))}(e);return Math.min(Math.max(t,0),u)},function(e){var t=Object(e);if(null===e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var n,r=arguments.length>1?arguments[1]:void 0;if(void 0!==r){if(!l(r))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(n=arguments[2])}for(var i,a=f(t.length),o=l(this)?Object(new this(a)):new Array(a),s=0;s=r?0:r+e),1===i?this.slice(0,e):(t-=0,this.slice(0,e)+n+this.slice(e+t)))},enumerable:!1}),Date.prototype.getFullWeek||(Object.defineProperty(Date.prototype,"getFullWeek",{value:function(){var e=this.getFullYear(),t=new Date(e,0,1),n=t.getDay()||1,r=(this-t)/864e5;return Math.ceil((r+n)/7)},enumerable:!1}),Object.defineProperty(Date.prototype,"getWeek",{value:function(){var e=this.getDate(),t=this.getMonth(),n=this.getFullYear(),r=new Date(n,t,1).getDay();return Math.ceil((e+r)/7)},enumerable:!1})),Date.isDate||Object.defineProperty(Date,"isDate",{value:function(e){return!("object"!=typeof e||!e.getTime)},enumerable:!1}),Date.prototype.format||Object.defineProperty(Date.prototype,"format",{value:function(e){e=e||"Y-m-d H:i:s";var t,n={fullyear:this.getFullYear(),year:this.getYear(),fullweek:this.getFullWeek(),week:this.getWeek(),month:this.getMonth()+1,date:this.getDate(),day:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][this.getDay()],hours:this.getHours(),minutes:this.getMinutes(),seconds:this.getSeconds()};for(var r in n.g=n.hours>12?n.hours-12:n.hours,t={Y:n.fullyear,y:n.year,m:n.month<10?"0"+n.month:n.month,n:n.month,d:n.date<10?"0"+n.date:n.date,j:n.date,H:n.hours<10?"0"+n.hours:n.hours,h:n.g<10?"0"+n.g:n.g,G:n.hours,g:n.g,i:n.minutes<10?"0"+n.minutes:n.minutes,s:n.seconds<10?"0"+n.seconds:n.seconds,W:n.fullweek,w:n.week,D:n.day})e=e.replace(new RegExp(r,"g"),t[r]);return e},enumerable:!1});var E=function(e){return new E.init(e)};E.nextTick=new function(){var e=window.setImmediate,t=window.MutationObserver;if(e)return e.bind(window);var n=[];if(t){var r=document.createTextNode("anot");new t(function(){for(var e=n.length,t=0;t>>0)return!0}return!1}(e))for(var r=e.length;n1){if(!e)return;if(n=n||{},n=Object.assign({expires:"",path:"/",domain:document.domain,secure:""},n),"string"==this.type(t)&&""===t.trim()||null===t)return document.cookie=encodeURIComponent(e)+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; domain="+n.domain+"; path="+n.path,!0;if(n.expires)switch(n.expires.constructor){case Number:n.expires=n.expires===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n.expires;break;case String:n.expires="; expires="+n.expires;break;case Date:n.expires="; expires="+n.expires.toUTCString()}return document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(t)+n.expires+"; domain="+n.domain+"; path="+n.path+"; "+n.secure,!0}return e?decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null:document.cookie},search:function(e){e+="";var t=location.search;if(!e||!t)return null;t=(t=t.slice(1)).split("&");for(var n,r={},i=0;n=t[i++];){var a=n.split("=");a[1]=a.length<2?null:a[1],a[1]=decodeURIComponent(a[1]),r.hasOwnProperty(a[0])?"object"==typeof r[a[0]]?r[a[0]].push(a[1]):(r[a[0]]=[r[a[0]]],r[a[0]].push(a[1])):r[a[0]]=a[1]}return r.hasOwnProperty(e)?r[e]:null},copy:function(e){if(!r.queryCommandSupported||!r.queryCommandSupported("copy"))return o("该浏览器不支持复制到粘贴板");var t=r.createElement("textarea");t.textContent=e,t.style.position="fixed",t.style.bottom="-1000px",r.body.appendChild(t),t.select();try{r.execCommand("copy")}catch(e){o("复制到粘贴板失败")}r.body.removeChild(t)}});var D=E.bindingHandlers={},L=E.bindingExecutors={},M=E.directives={};E.directive=function(e,t){return D[e]=t.init=t.init||_,L[e]=t.update=t.update||_,M[e]=t};var P=new function(){function e(e){this.size=0,this.limit=e,this.head=this.tail=void 0,this._keymap={}}var t=e.prototype;return t.put=function(e,t){var n={key:e,value:t};return this._keymap[e]=n,this.tail?(this.tail.newer=n,n.older=this.tail):this.head=n,this.tail=n,this.size===this.limit?this.shift():this.size++,t},t.shift=function(){var e=this.head;e&&(this.head=this.head.newer,this.head.older=e.newer=e.older=this._keymap[e.key]=void 0,delete this._keymap[e.key])},t.get=function(e){var t=this._keymap[e];if(void 0!==t)return t===this.tail?t.value:(t.newer&&(t===this.head&&(this.head=t.newer),t.newer.older=t.older),t.older&&(t.older.newer=t.newer),t.newer=void 0,t.older=this.tail,this.tail&&(this.tail.newer=t),this.tail=t,t.value)},e};if(r.contains||(Node.prototype.contains=function(e){return!!(16&this.compareDocumentPosition(e))}),E.contains=function(e,t){try{for(;t=t.parentNode;)if(t===e)return!0;return!1}catch(e){return!1}},window.SVGElement){var H="http://www.w3.org/2000/svg",R=r.createElementNS(H,"svg");if(R.innerHTML='',!m.test(R.firstChild)){function B(e,t){if(e&&e.childNodes)for(var n,i=e.childNodes,a=0;n=i[a++];)if(n.tagName){var o=r.createElementNS(H,n.tagName.toLowerCase());w.forEach.call(n.attributes,function(e){o.setAttribute(e.name,e.value)}),B(n,o),t.appendChild(o)}}Object.defineProperties(SVGElement.prototype,{outerHTML:{enumerable:!0,configurable:!0,get:function(){return(new XMLSerializer).serializeToString(this)},set:function(e){var t=this.tagName.toLowerCase(),n=this.parentNode,i=E.parseHTML(e);if("svg"===t)n.insertBefore(i,this);else{var a=r.createDocumentFragment();B(i,a),n.insertBefore(a,this)}n.removeChild(this)}},innerHTML:{enumerable:!0,configurable:!0,get:function(){var e=this.outerHTML,t=new RegExp("<"+this.nodeName+'\\b(?:(["\'])[^"]*?(\\1)|[^>])*>',"i"),n=new RegExp("$","i");return e.replace(t,"").replace(n,"")},set:function(e){E.clearHTML&&(E.clearHTML(this),B(E.parseHTML(e),this))}}})}}var F=E.eventHooks;function I(e){for(var t in e)if(g.call(e,t)){var n=e[t];"function"==typeof I.plugins[t]?I.plugins[t](n):"object"==typeof I[t]?E.mix(I[t],n):I[t]=n}return this}"onmouseenter"in k||E.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){F[e]={type:t,fix:function(t,n){return function(r){var i=r.relatedTarget;if(!i||i!==t&&!(16&t.compareDocumentPosition(i)))return delete r.type,r.type=e,n.call(t,r)}}}}),E.each({AnimationEvent:"animationend",WebKitAnimationEvent:"webkitAnimationEnd"},function(e,t){window[e]&&!F.animationend&&(F.animationend={type:t})}),void 0===r.onmousewheel&&(F.mousewheel={type:"wheel",fix:function(e,t){return function(n){n.wheelDeltaY=n.wheelDelta=n.deltaY>0?-120:120,n.wheelDeltaX=0,Object.defineProperty(n,"type",{value:"mousewheel"}),t.call(e,n)}}}),E.config=I;var q,V,W,U,z=/[-.*+?^${}()|[\]\/\\]/g;function G(e){return(e+"").replace(z,"\\$&")}var X={interpolate:function(e){if(q=e[0],V=e[1],q===V)throw new SyntaxError("openTag!==closeTag");I.openTag=q,I.closeTag=V;var t=G(q),n=G(V);W=new RegExp(t+"([\\s\\S]*)"+n),U=new RegExp(t+"([\\s\\S]*)"+n,"g"),new RegExp(t+"[\\s\\S]*"+n+"|\\s:")}};function Y(t,n){var i=this.$events||(this.$events={}),a=i[t]||(i[t]=[]);if("function"==typeof n){var o=n;o.uuid="_"+ ++e,(n={element:k,type:"user-watcher",handler:_,vmodels:[this],expr:t,uuid:o.uuid}).wildcard=/\*/.test(t)}if(n.update)n.oneTime||E.Array.ensure(a,n);else{if(/\w\.*\B/.test(t)||"*"===t){n.getter=_;var s=this;n.update=function(){var e=this.fireArgs||[];e[2]&&n.handler.apply(s,e),delete this.fireArgs},a.sync=!0,E.Array.ensure(a,n)}else E.injectBinding(n);o&&(n.handler=o)}return function(){n.update=n.getter=n.handler=_,n.element=r.createElement("a")}}function J(t,n){var r=this.$events,i=null;if(r&&r[t]){n&&(n[2]=t);var a=r[t];if(function(t,n){if(!t)return;new Date-he>444&&"object"==typeof t[0]&&ye();for(var r,i=[],a=[],o=0;r=t[o++];)"user-watcher"===r.type?i.push(r):a.push(r);if(I.async){for(_t.render(),o=0;r=a[o++];)if(r.update){r.uuid=r.uuid||"_"+ ++e;var s=r.uuid;_t.queue[s]||(_t.queue[s]="__",_t.queue.push(r))}}else for(o=0;r=a[o++];)r.update&&r.update();for(o=0;r=i[o++];)(n&&n[2]===r.expr||r.wildcard)&&(r.fireArgs=n),r.update()}(a,n),n&&r["*"]&&!/\./.test(t))for(var o,s=0;o=r["*"][s++];)try{o.handler.apply(this,n)}catch(e){}(i=this.$up)&&(this.$pathname&&J.call(i,this.$pathname+"."+t,n),J.call(i,"*."+t,n))}else{if(i=this.$up,this.$ups){for(var c in this.$ups)J.call(this.$ups[c],c+"."+t,n);return}if(i){var l=this.$pathname;""===l&&(l="*");var u=l+"."+t;a=u.split("."),n=n&&n.concat([u,t])||[u,t],-1===a.indexOf("*")?(J.call(i,u,n),a[1]="*",J.call(i,a.join("."),n)):J.call(i,u,n)}}}I.plugins=X,I.plugins.interpolate(["{{","}}"]),I.async=!0,I.paths={},I.shim={},I.maxRepeatSize=100;var K=N("$id,$watch,$fire,$events,$model,$active,$pathname,$up,$ups,$track,$accessors");function Z(e,t){return(t=t||{}).watch=!0,Q(e,t)}function Q(e,t){if(!e||e.$id&&e.$accessors||e.nodeName&&e.nodeType>0)return e;var n,r=(t=t||d).force||d,i=t.old,a=i&&i.$accessors||d,s=new function(){},c={},l={},u=[],f=[],p={},h=e.state,v=e.computed,m=e.methods,y=e.props,g=e.watch,b=e.mounted;if(delete e.state,delete e.computed,delete e.methods,delete e.props,delete e.watch,e.skip&&(p=N(e.skip),delete e.skip),h)for(x in e.$id&&delete h.props,h){var w=h[x];K[x]||(l[x]=!0),"function"==typeof w||w&&w.nodeName&&w.nodeType>0||!r[x]&&("$"===(n=x).charAt(0)||"__"===n.slice(0,2)||K[n]||p[x])?u.push(x):ee(w)?(o("warning:计算属性建议放在[computed]对象中统一定义"),v[x]=w):(f.push(x),a[x]?c[x]=a[x]:c[x]=te(x,w))}if(v)for(var x in delete v.props,v)l[x]=!0,function(e,t){var n;"function"==typeof t&&(t={get:t,set:_}),"function"!=typeof t.set&&(t.set=_),c[e]={get:function(){return n=t.get.call(this)},set:function(r){var i,a=n;t.set.call(this,r),i=this[e],this.$fire&&i!==a&&this.$fire(e,i,a)},enumerable:!0,configurable:!0}}(x,v[x]);if(m)for(var x in delete m.props,m)l[x]=!0,u.push(x);if(y)for(var x in re(s,"props",{}),l.props=!!e.$id,y)s.props[x]=y[x];if(Object.assign(e,h,m),c.$model=ae,s=Object.defineProperties(s,c,e),u.forEach(function(t){s[t]=e[t]}),re(s,"$id","anonymous"),re(s,"$up",i?i.$up:null),re(s,"$track",Object.keys(l)),re(s,"$active",!1),re(s,"$pathname",i?i.$pathname:""),re(s,"$accessors",c),re(s,"$events",{}),re(s,"$refs",{}),re(s,"$children",[]),re(s,"$components",[]),re(s,"hasOwnProperty",function(e){return!0===l[e]}),re(s,"$mounted",b),t.watch&&(re(s,"$watch",function(){return Y.apply(s,arguments)}),re(s,"$fire",function(e,t){if(0===e.indexOf("all!")){var n=e.slice(4);for(var r in E.vmodels){(i=E.vmodels[r]).$fire&&i.$fire.apply(i,[n,t])}}else if(0===e.indexOf("child!")){n="props."+e.slice(6);for(var r in s.$children){var i;(i=s.$children[r]).$fire&&i.$fire.apply(i,[n,t])}}else J.call(s,e,[t])})),f.forEach(function(e){var t=i&&i[e],n=s[e]=h[e];n&&"object"==typeof n&&!Date.isDate(n)&&(n.$up=s,n.$pathname=e),J.call(s,e,[n,t])}),g)for(var $ in delete g.props,g)if(Array.isArray(g[$]))for(var k;k=g[$].pop();)Y.call(s,$,k);else Y.call(s,$,g[$]);return s.$active=!0,"anonymous"!==s.$id&&i&&i.$up&&i.$up.$children&&i.$up.$children.push(s),s}function ee(e){if(e&&"object"==typeof e){for(var t in e)if("get"!==t&&"set"!==t)return!1;return"function"==typeof e.get}}function te(e,t){var n;t=NaN;return{get:function(){return this.$active&&function(e,t){for(;;){if(e.$watch){var n=e.$events||(e.$events={}),r=n[t]||(n[t]=[]);return void pe.collectDependency(r)}if(!(e=e.$up))break;t=e.$pathname+"."+t}}(this,e),t},set:function(r){if(t!==r){var i=t;(n=ne(r,t))?t=n:(n=void 0,t=r),Object(n)===n&&(n.$pathname=e,n.$up=this),this.$active&&J.call(this,e,[t,i])}},enumerable:!0,configurable:!0}}function ne(e,t,n,r){if(Array.isArray(e))return function(e,t,n){if(t&&t.splice){var r=[0,t.length].concat(e);return t.splice.apply(t,r),t}for(var i in se)e[i]=se[i];re(e,"$up",null),re(e,"$pathname",""),re(e,"$track",le(e.length)),e._=Q({state:{length:NaN}},{watch:!0}),e._.length=e.length,e._.$watch("length",function(t,n){J.call(e.$up,e.$pathname+".length",[t,n])}),n&&re(e,"$watch",function(){return Y.apply(e,arguments)}),Object.defineProperty(e,"$model",ae);for(var a=0,o=e.length;a>>=0)>this.length)throw Error(e+"set方法的第一个参数不能大于原数组长度");if(this[e]!==t){var n=this[e];this.splice(e,1,t),J.call(this.$up,this.$pathname+".*",[t,n,null,e])}},contains:function(e){return this.indexOf(e)>-1},ensure:function(e){return this.contains(e)||this.push(e),this},pushArray:function(e){return this.push.apply(this,ie(e))},remove:function(e){return this.removeAt(this.indexOf(e))},removeAt:function(e){return e>>>=0,this.splice(e,1)},size:function(){return this._.length},removeAll:function(e){if(Array.isArray(e))for(var t=this.length-1;t>=0;t--)-1!==e.indexOf(this[t])&&(ce.call(this.$track,t,1),ce.call(this,t,1));else if("function"==typeof e)for(t=this.length-1;t>=0;t--){e(this[t],t)&&(ce.call(this.$track,t,1),ce.call(this,t,1))}else ce.call(this.$track,0,this.length),ce.call(this,0,this.length);$||(this.$model=ie(this)),this.notify(),this._.length=this.length},clear:function(){this.removeAll()}},ce=oe.splice;function le(e){for(var t=[],n=0;n2){n[1],n.length;n=[n[0],n[1]].concat(le(n.length-2))}}Array.prototype[t].apply(e,n)}(this.$track,e,n),$||(this.$model=ie(this)),this.notify(),this._.length=this.length,a}}),"sort,reverse".replace(h,function(e){se[e]=function(){var t=this.concat(),n=Math.random(),r=[],i=!1;oe[e].apply(this,arguments);for(var a=0,o=t.length;a444&&ye())}(t,e)}}),e.getter=Ue(e.expr,e.vmodels,e),e.observers.forEach(function(t){t.v.$watch(t.p,e)}),delete e.observers);try{var n,r,i=e.fireArgs;if(delete e.fireArgs,i)n=i[0],r=i[1];else if("on"===e.type)n=e.getter+"";else try{n=e.getter.apply(0,e.args)}catch(e){n=null}if(r=void 0===r?e.oldValue:r,e._filters&&(n=Tn.$filter.apply(0,[n].concat(e._filters))),e.signature){var a=E.type(n);if("array"!==a&&"object"!==a)throw Error("warning:"+e.expr+"只能是对象或数组");e.xtype=a;var s=function(e,t){for(var n,r=[],i=0;n=e[i++];)r.push(t?n.$id:n.$key);return r.join(";")}(e.proxies||[],a),c=n.$track||("array"===a?le(n.length):Object.keys(n));e.track=c,s!==c.join(";")&&(e.handler(n,r),e.oldValue=1)}else Array.isArray(n)&&n.length!==(r&&r.length)?(e.handler(n,r),e.oldValue=n.concat()):"oldValue"in e&&n===r||(e.handler(n,r),e.oldValue=Array.isArray(n)?n.concat():n)}catch(t){delete e.getter,o("warning:exception throwed in [Anot.injectBinding] ",t);var l=e.element;l&&3===l.nodeType&&(l.nodeValue=q+(e.oneTime?"::":"")+e.expr+V)}finally{t&&pe.end()}},e.update()};var de=E.$$subscribers=[],he=new Date;function ve(t,n){t.list=n,t.i=~~t.i,t.uuid||(t.uuid="_"+ ++e),de[t.uuid]||(de[t.uuid]="__",de.push(t))}var me=0;function ye(e){for(var t=me||de.length,n=0;e=de[--t];)if(e.i<7){if(null===e.element){de.splice(t,1),e.list&&(E.Array.remove(e.list,e),delete de[e.uuid]);continue}if(be(e.element)){if(de.splice(t,1),E.Array.remove(e.list,e),ge(e),n++>500){me=t;break}continue}e.i++,7===e.i&&(e.i=14)}else e.i--;he=new Date}function ge(e){for(var t in delete de[e.uuid],e.element=null,e.rollback&&e.rollback(),e)e[t]=null}function be(e){try{e.parentNode.nodeType}catch(e){return!0}return e.ifRemove&&!k.contains(e.ifRemove)&&a===e.parentNode?(e.parentNode&&e.parentNode.removeChild(e),!0):e.msRetain?0:1===e.nodeType?!k.contains(e):!E.contains(k,e)}var we=new function(){E.mix(this,{option:r.createElement("select"),thead:r.createElement("table"),td:r.createElement("tr"),area:r.createElement("map"),tr:r.createElement("tbody"),col:r.createElement("colgroup"),legend:r.createElement("fieldset"),_default:r.createElement("div"),g:r.createElementNS("http://www.w3.org/2000/svg","svg")}),this.optgroup=this.option,this.tbody=this.tfoot=this.colgroup=this.caption=this.thead,this.th=this.td};String("circle,defs,ellipse,image,line,path,polygon,polyline,rect,symbol,text,use").replace(h,function(e){we[e]=we.g});var xe=/<([\w:]+)/,$e=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ke=N(["","text/javascript","text/ecmascript","application/ecmascript","application/javascript"]),Ce=r.createElement("script"),Ae=/<|&#?\w+;/;function _e(e){return e.replace(/([a-z\d])([A-Z]+)/g,"$1-$2").toLowerCase()}function Te(e){return e.indexOf("-")<0&&e.indexOf("_")<0?e:e.replace(/[-_][^-_]/g,function(e){return e.charAt(1).toUpperCase()})}E.parseHTML=function(e){var t=C.cloneNode(!1);if("string"!=typeof e)return t;if(!Ae.test(e))return t.appendChild(r.createTextNode(e)),t;e=e.replace($e,"<$1>").trim();var n,i=(xe.exec(e)||["",""])[1].toLowerCase(),a=we[i]||we._default;a.innerHTML=e;var o=a.getElementsByTagName("script");if(o.length)for(var s,c=0;s=o[c++];)if(ke[s.type]){var l=Ce.cloneNode(!1);w.forEach.call(s.attributes,function(e){l.setAttribute(e.name,e.value)}),l.text=s.text,s.parentNode.replaceChild(l,s)}for(;n=a.firstChild;)t.appendChild(n);return t},E.innerHTML=function(e,t){var n=this.parseHTML(t);this.clearHTML(e).appendChild(n)},E.clearHTML=function(e){for(e.textContent="";e.firstChild;)e.removeChild(e.firstChild);return e},"add,remove".replace(h,function(e){E.fn[e+"Class"]=function(t){var n=this[0];return t&&"string"==typeof t&&n&&1===n.nodeType&&t.replace(/\S+/g,function(t){n.classList[e](t)}),this}}),E.fn.mix({hasClass:function(e){var t=this[0]||{};return 1===t.nodeType&&t.classList.contains(e)},toggleClass:function(e,t){for(var n,r=0,i=String(e).match(/\S+/g)||[],a="boolean"==typeof t;n=i[r++];){this[(a?t:!this.hasClass(n))?"addClass":"removeClass"](n)}return this},attr:function(e,t){return 2===arguments.length?(this[0].setAttribute(e,t),this):this[0].getAttribute(e)},data:function(e,t){switch(e="data-"+_e(e||""),arguments.length){case 2:return this.attr(e,t),this;case 1:return je(this.attr(e));case 0:var n={};return w.forEach.call(this[0].attributes,function(t){t&&((e=t.name).indexOf("data-")||(e=Te(e.slice(5)),n[e]=je(t.value)))}),n}},removeData:function(e){return e="data-"+_e(e),this[0].removeAttribute(e),this},css:function(e,t){if(E.isPlainObject(e))for(var n in e)E.css(this,n,e[n]);else var r=E.css(this,e,t);return void 0!==r?r:this},position:function(){var e,t,n=this[0],r={top:0,left:0};if(n)return"fixed"===this.css("position")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),"HTML"!==e[0].tagName&&(r=e.offset()),r.top+=E.css(e[0],"borderTopWidth",!0),r.left+=E.css(e[0],"borderLeftWidth",!0),r.top-=e.scrollTop(),r.left-=e.scrollLeft()),{top:t.top-r.top-E.css(n,"marginTop",!0),left:t.left-r.left-E.css(n,"marginLeft",!0)}},offsetParent:function(){for(var e=this[0].offsetParent;e&&"static"===E.css(e,"position");)e=e.offsetParent;return E(e||k)},bind:function(e,t,n){if(this[0])return E.bind(this[0],e,t,n)},unbind:function(e,t,n){return this[0]&&E.unbind(this[0],e,t,n),this},val:function(e){var t,n,r=this[0];if(r&&1===r.nodeType){var i=0===arguments.length,a=i?":get":":set",o=Me[(t=r,n=t.tagName.toLowerCase(),("input"===n&&/checkbox|radio/.test(t.type)?"checked":n)+a)];if(o)var s=o(r,e);else{if(i)return(r.value||"").replace(/\r/g,"");r.value=e}}return i?s:this}}),k.dataset&&(E.fn.data=function(e,t){e=e&&Te(e);var n=this[0].dataset;switch(arguments.length){case 2:return n[e]=t,this;case 1:return je(t=n[e]);case 0:var r=s();for(e in n)r[e]=je(n[e]);return r}}),E.parseJSON=JSON.parse;var Ne=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/;function je(e){try{if("object"==typeof e)return e;e="true"===e||"false"!==e&&("null"===e?null:+e+""===e?+e:Ne.test(e)?JSON.parse(e):e)}catch(e){}return e}E.fireDom=function(e,t,n){var i=r.createEvent("Events");i.initEvent(t,!0,!0),E.mix(i,n),e.dispatchEvent(i)},E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){E.fn[e]=function(n){var r=this[0]||{},i=function(e){return e.window&&e.document?e:9===e.nodeType&&e.defaultView}(r),a="scrollTop"===e;if(!arguments.length)return i?i[t]:r[e];i?i.scrollTo(a?i[t]:n,a?n:i[t]):r[e]=n}});var Ee=E.cssHooks=s(),Oe=["","-webkit-","-moz-","-ms-"],Se={float:"cssFloat"};E.cssNumber=N("animationIterationCount,animationIterationCount,columnCount,order,flex,flexGrow,flexShrink,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom"),E.cssName=function(e,t,n){if(Se[e])return Se[e];t=t||k.style;for(var r=0,i=Oe.length;r-1)&&(n=!0);n||(e.selectedIndex=-1)}},Pe={};["break,case,catch,continue,debugger,default,delete,do,else,false","finally,for,function,if,in,instanceof,new,null,return,switch,this","throw,true,try,typeof,var,void,while,with","abstract,boolean,byte,char,class,const,double,enum,export,extends","final,float,goto,implements,import,int,interface,long,native","package,private,protected,public,short,static,super,synchronized","throws,transient,volatile","arguments,let,yield,async,await,undefined"].join(",").replace(/\w+/g,function(e){Pe[e]=!0});var He=/[a-z_$]/i,Re=/[\s\uFEFF\xA0]/;function Be(e,t){if(t&&!Pe[t])return e.push(t),!0}function Fe(e,t,n,r){for(var i,a=[],o=" = "+n+".",s=e.length;i=e[--s];){var c=i.split(".")[0];t.hasOwnProperty(c)&&(a.push(c+o+c),r.observers.push({v:t,p:i,type:E.type(t[c])}),e.splice(s,1))}return a}var Ie=/(proxy\-[a-z]+)\-[\-0-9a-f]+$/,qe=new P(218),Ve=new P(128);function We(e){e=e.trim();var t=qe.get(e);if(t)return t.concat();for(var n,r=function e(t,n){var r=[],i=!!n;n=n||0;for(var a="unknown",o="",s=0;s0){var t=e.replace(wt,function(e){return Array(e.length+1).join("1")}).replace(bt,"ᄢ㍄").indexOf("|");if(t>-1)return{type:"text",filters:e.slice(t).trim(),expr:e.slice(0,t)}}return{type:"text",expr:e,filters:""}}function kt(e){for(var t,n,r=[],i=0;;){if(-1===(n=e.indexOf(q,i)))break;if((t=e.slice(i,n))&&r.push({expr:t}),i=n+q.length,-1===(n=e.indexOf(V,i)))break;(t=e.slice(i,n))&&r.push($t(t.replace(xt,""))),i=n+V.length}return(t=e.slice(i))&&r.push({expr:t}),r}function Ct(e,t,n){var i=[],a=kt(e.data);if(a.length){for(var o,s=0;o=a[s++];){var c=r.createTextNode(o.expr);o.type&&(o.expr=o.expr.replace(it,function(){return o.oneTime=!0,""}),o.element=c,o.filters=o.filters.replace(gt,function(){return o.type="html",""}),o.pos=1e3*n+s,i.push(o)),C.appendChild(c)}e.parentNode.replaceChild(C,e),i.length&&nt(i,t)}}var At=function(){this.queue=[]};At.prototype={render:function(e){if(!this.locked){this.locked=e?k.offsetHeight+10:1;var t=this;E.nextTick(function(){t.flush()})}},flush:function(){for(var e,t=0;e=this.queue[t++];)e.update&&e.update();this.locked=0,this.queue=[]}};var _t=new At,Tt=[],Nt=[],jt={__init__:_,componentWillMount:_,componentDidMount:_,childComponentDidMount:_,componentWillUnmount:_,render:function(){return null}};function Et(e,t,n){if(2===arguments.length){var r=Function("o","return o."+t)(e);if(r&&"object"==typeof r)try{return r.$model}catch(e){}return r}3===arguments.length&&Function("o","v","return o."+t+" = v")(e,n)}E.components={},E.component=function(e,t){t&&(E.components[e]=E.mix({},jt,t));for(var n,i=0;n=Tt[i];i++)e===n.name&&(Tt.splice(i,1),i--,function(t,n,i,a){if(E.contains(r,i)&&!i.msResolved){var o=1;if(!i.getAttribute(":attr-uuid")){n.watch=n.watch||{};for(var s,c,l,u=t.vmodels.concat().pop(),f={},p=pt(i,t.vmodels),d=p.uuid||j(a),h={__extra__:[]};u.$up&&u.$up.__WIDGET__===e;)u=u.$up;i.childNodes.length&&(s=i.childNodes,c=t.vmodels,l={__extra__:[]},x.call(s,0).forEach(function(e){switch(e.nodeType){case 1:var t="SLOT"===e.tagName,n=null,r=e.getAttribute("slot");if(t?n=e.name||e.getAttribute("name"):r&&(n=r),n)l[n]=l[n]||[],e.removeAttribute("slot"),t?l[n].push(e.innerHTML):l[n].push(e.outerHTML);else{var i=e.outerHTML;if(et(e)||/:[\w-]*=".*"/.test(i))break;W.test(i)&&(i=Ue(ze(i),c,{}).apply(0,c)),l.__extra__.push(i)}break;case 3:(i=e.textContent.trim())&&l.__extra__.push(i)}e.parentNode.removeChild(e)}),h=l);var v=h.__extra__.join("");if(delete h.__extra__,i.text=function(){return v},p.hasOwnProperty(":disabled")){var m=p[":disabled"],y=!1;0===m.indexOf("!")&&(m=m.slice(1),y=!0),f.disabled=Et(u,m),y&&(f.disabled=!f.disabled),u.$watch(m,function(e){y&&(e=!e),E.vmodels[d].disabled=e}),delete p[":disabled"]}if(p.hasOwnProperty(":loading")){var g=p[":loading"],b=!1;0===g.indexOf("!")&&(g=g.slice(1),b=!0),f.loading=Et(u,g),b&&(f.loading=!f.loading),u.$watch(g,function(e){b&&(e=!e),E.vmodels[d].loading=e}),delete p[":loading"]}if(p.hasOwnProperty(":value")){var w=p[":value"],$=function(){var e=Et(u,w);E.vmodels[d].value=e},k=function(){var e=this.value;e&&"object"==typeof e&&(e=e.$model),Et(u,w,e)};f.value=Et(u,w),n.watch.value?n.watch.value=[n.watch.value]:n.watch.value=[],n.watch["value.length"]?n.watch["value.length"]=[n.watch["value.length"]]:n.watch["value.length"]=[],n.watch["value.*"]?n.watch["value.*"]=[n.watch["value.*"]]:n.watch["value.*"]=[],u.$watch(w,$),Array.isArray(f.value)?(u.$watch(w+".*",$),u.$watch(w+".length",$),n.watch["value.*"].push(k),n.watch["value.length"].push(k)):n.watch.value.push(k),delete p[":value"]}delete p.uuid,delete p.name,delete p.isWidget,n.props=n.props||{},n.state=n.state||{},Object.assign(n.props,p),Object.assign(n.state,f);var C=!1;if(n.__init__.call(i,n.props,n.state,function(){C=!0,delete i.text}),C){n.$id=d;var{componentWillMount:A,componentDidMount:_,childComponentDidMount:T,componentWillUnmount:N,render:O}=n;delete n.__init__,delete n.componentWillMount,delete n.componentDidMount,delete n.childComponentDidMount,delete n.componentWillUnmount;var S=E(n);E.vmodels[S.$id]=S,re(S,"__WIDGET__",e),re(S,"$recycle",function(){for(var e in this.$events)for(var t=this.$events[e]||[],n=t.length;n--;)null!==t[n].type&&"user-watcher"!==t[n].type||t.splice(n,1)}),delete S.$mounted,u.$components.push(S),u.__WIDGET__===e&&(S.$up=u),i.msResolved=1,A.call(S),E.clearHTML(i);var D=O.call(S,h)||"";D=D.replace(/<\w+[^>]*>/g,function(e,t){return e.replace(/[\n\t\s]{1,}/g," ")}),i.innerHTML=D,re(S,"$elem",i),i.__VM__=S,E.fireDom(i,"datasetchanged",{vm:S,childReady:1});var L=0,M=E.bind(i,"datasetchanged",function(e){if(e.childReady&&(o+=e.childReady,S.$id!==e.vm.$id&&(-1===e.childReady&&(L++,T.call(S,e.vm)),e.stopPropagation())),0===o){var n=setTimeout(function(){clearTimeout(n),i.removeAttribute("is-widget"),_.call(S)},L?Math.max(17*L,100):17);E.unbind(i,"datasetchanged",M),t.rollback=function(){try{N.call(S)}catch(e){}u.$recycle&&u.$recycle(),E.Array.remove(u.$components,S),delete E.vmodels[S.$id]},ve(t,Nt),window.chrome&&i.addEventListener("DOMNodeRemovedFromDocument",function(){setTimeout(ye)})}});if(yt(i,[S]),i.childNodes.length)var P=setTimeout(function(){clearTimeout(P),E.fireDom(i,"datasetchanged",{vm:S,childReady:-1})},17);else E.fireDom(i,"datasetchanged",{vm:S,childReady:-1})}}}else E.Array.remove(Tt,t)}(n,ie(E.components[e]),n.element,n.name))};var Ot={};["autofocus,autoplay,async,allowTransparency,checked,controls","declare,disabled,defer,defaultChecked,defaultSelected","contentEditable,isMap,loop,multiple,noHref,noResize,noShade","open,readOnly,selected"].join(",").replace(h,function(e){Ot[e.toLowerCase()]=e});var St={"accept-charset":"acceptCharset",char:"ch",charoff:"chOff",class:"className",for:"htmlFor","http-equiv":"httpEquiv"};["accessKey,bgColor,cellPadding,cellSpacing,codeBase,codeType,colSpan","dateTime,defaultValue,frameBorder,longDesc,maxLength,marginWidth,marginHeight","rowSpan,tabIndex,useMap,vSpace,valueType,vAlign"].join(",").replace(h,function(e){St[e.toLowerCase()]=e});E.directive("attr",{init:function(e){if(e.expr=ze(e.expr.trim()),"include"===e.type){var t=e.element;Jt(t,e),e.includeRendered=tt(t,"data-rendered",e.vmodels),e.includeLoaded=tt(t,"data-loaded",e.vmodels);var n=e.includeReplace=!!E(t).data("includeReplace");E(t).data("cache")&&(e.templateCache={}),e.start=r.createComment(":include"),e.end=r.createComment(":include-end"),n?(e.element=e.end,e._element=t,t.parentNode.insertBefore(e.start,t),t.parentNode.insertBefore(e.end,t.nextSibling)):(t.insertBefore(e.start,t.firstChild),t.appendChild(e.end))}},update:function(e){var t=this.element,n={},i=this.vmodels[0];if(e=ie(e),this.param)"object"==typeof e&&null!==e?Array.isArray(e)?n[this.param]=e:Date.isDate(e)?n[this.param]=e.toUTCString():n[this.param]=e:n[this.param]=e;else{if(!e||"object"!=typeof e||Array.isArray(e))return;if(Date.isDate(e))return;n=e}for(var a in n)if("style"!==a){if(0!==a.indexOf("@")||"function"==typeof n[a])if("href"===a||"src"===a){if(k.hasAttribute||(n[a]=n[a].replace(/&/g,"&")),t[a]=n[a],window.chrome&&"EMBED"===t.tagName){var o=t.parentNode,s=r.createComment(":src");o.replaceChild(s,t),o.replaceChild(t,s)}}else{var c=a;if(!$&&St[c]&&(c=St[c]),!1!==n[a]&&null!==n[a]&&void 0!==n[a]||(n[a]=""),"boolean"==typeof t[Ot[c]]&&(t[Ot[c]]=!!n[a],n[a]||(n[a]=!!n[a]),!1===n[a])){t.removeAttribute(c);continue}!m.test(t)&&(!(!r.namespaces||!isVML(t))||c in t.cloneNode(!1))?t[c]=n[a]:("object"==typeof n[a]?n[a]=Date.isDate(n[a])?n[a].toUTCString():JSON.stringify(n[a]):"function"==typeof n[a]&&(t[c=lt+Te(c.slice(1))]=n[a].bind(i),n[a]=c),t.setAttribute(c,n[a]))}}else console.error("设置style样式, 请改用 :css指令")}});E.directive("class",{init:function(e){e.expr=e.expr.replace(/\n/g," ").replace(/\s{2,}/g," ");var t=[];if(/^\{.*\}$/.test(e.expr))/^\{\{.*\}\}$/.test(e.expr)&&(e.expr=e.expr.slice(2,-2));else{(t=e.expr.split(":"))[1]=t[1]&&t[1].trim()||"true";var n=t[0].split(/\s+/);e.expr="{"+n.map(function(e){return e+": "+t[1]}).join(", ")+"}"}if("hover"===e.type||"active"===e.type){if(!e.hasBindEvent){var r=e.element,i=E(r),a="mouseenter",o="mouseleave";if("active"===e.type){r.tabIndex=r.tabIndex||-1,a="mousedown",o="mouseup";var s=i.bind("mouseleave",function(){i.removeClass(t[0])})}}var c=i.bind(a,function(){i.addClass(t[0])}),l=i.bind(o,function(){i.removeClass(t[0])});e.rollback=function(){i.unbind("mouseleave",s),i.unbind(a,c),i.unbind(o,l)},e.hasBindEvent=!0}},update:function(e){if("class"===this.type){var t=e;if(!t||this.param)return o('class指令语法错误 %c %s="%s"',"color:#f00",this.name,this.expr);"string"==typeof t&&((t={})[e]=!0),E.isPlainObject(t)||(t=t.$model);var n=E(this.element);for(var r in t)n.toggleClass(r,!!t[r])}}}),"hover,active".replace(h,function(e){M[e]=M.class}),E.directive("css",{init:M.attr.init,update:function(e){var t=E(this.element);if(this.param)t.css(this.param,e);else{var n=e;try{for(var r in"object"==typeof e?E.isPlainObject(e)||(n=e.$model):n=new Function("return "+e)(),n)t.css(r,n[r])}catch(e){o('样式格式错误 %c %s="%s"',"color:#f00",this.name,this.expr)}}}}),E.directive("data",{priority:100,init:M.attr.init,update:function(e){var t=e;if("object"==typeof t&&null!==t)for(var n in E.isPlainObject(t)||(t=e.$model),t)this.element.setAttribute("data-"+n,t[n]);else{if(!this.param)return;this.element.setAttribute("data-"+this.param,t)}}});var Dt={};E.validate=function(e,t){if(!Dt[e])throw new Error("validate ["+e+"] not exists.");"function"==typeof t&&(Dt[e].event=t);var n=Dt[e].result;for(var r in n)if(!n[r].passed)return n[r];return!0},E.directive("rule",{priority:2010,init:function(e){e.param&&!Dt[e.param]&&(Dt[e.param]={event:_,result:{}}),e.target=Dt[e.param]},update:function(e){var t=this,n=this.element;if(["INPUT","TEXTAREA"].includes(n.nodeName)&&!n.msBinded){this.target&&(this.target.result[n.expr]={key:n.expr});var r=this.target;E(n).bind("blur",i),this.rollback=function(){E(n).unbind("blur",i)},n.msBinded=!0,i()}function i(i){var a=n.value,o=0;(!e.require||""!==a&&null!==a||(o=10001),0===o&&e.isNumeric&&(o=isFinite(a)?0:10002),0===o&&e.isEmail&&(o=/^[\w\.\-]+@\w+([\.\-]\w+)*\.\w+$/.test(a)?0:10003),0===o&&e.isPhone&&(o=/^1[34578]\d{9}$/.test(a)?0:10004),0===o&&e.isCN&&(o=/^[\u4e00-\u9fa5]+$/.test(a)?0:10005),0===o&&e.exp&&(o=e.exp.test(a)?0:10006),0===o&&e.maxLen&&(o=a.length>e.maxLen?10011:0),0===o&&e.minLen&&(o=a.lengthe.max?10021:0),0===o&&e.hasOwnProperty("min")&&(o=a-1;break;case"select":this._value=e,n.msHasEvent?E.fireDom(n,"datasetchanged",{bubble:n.msHasEvent}):n.msHasEvent="selectDuplex"}}});function Ht(e){return null==e?"":e}function Rt(e,t,n,r){return t.param.replace(v,function(r){var i=E.duplexHooks[r];i&&"function"==typeof i[n]&&(e=i[n](e,t))}),e}E.duplexHooks={checked:{get:function(e,t){return!t.oldValue}},string:{get:function(e){return e},set:Ht},boolean:{get:function(e){return"true"===e},set:Ht},number:{get:function(e,t){var n=+e;return+e===n?n:0},set:Ht}};var Bt,Ft=[];function It(){for(var e=Ft.length-1;e>=0;e--){!1===(0,Ft[e])()&&Ft.splice(e,1)}Ft.length||clearInterval(Bt)}E.tick=function(e){1===Ft.push(e)&&(Bt=setInterval(It,60))};var qt=_;new function(){try{var e={},t=HTMLInputElement.prototype,n=HTMLTextAreaElement.prototype;function r(t){e[this.tagName].call(this,t),!this.msFocus&&this.anotSetter&&this.anotSetter()}var i=HTMLInputElement.prototype;Object.getOwnPropertyNames(i),e.INPUT=Object.getOwnPropertyDescriptor(t,"value").set,Object.defineProperty(t,"value",{set:r}),e.TEXTAREA=Object.getOwnPropertyDescriptor(n,"value").set,Object.defineProperty(n,"value",{set:r})}catch(e){qt=E.tick}},E.directive("effect",{priority:5,init:function(e){var t,n,r=e.expr,i=r.replace(U,function(e){return e.replace(/./g,"0")}).indexOf(":");-1===i?(t=r,n=!0):(t=r.slice(0,i),n=r.slice(i+1)),t=W.test(r)?ze(t):Ze(t),e.expr="["+t+","+n+"]"},update:function(e){var t=e[0],n=this.element;if(n.getAttribute("data-effect-name")!==t){n.removeAttribute("data-effect-driver");var r=n.style,i=window.getComputedStyle?window.getComputedStyle(n):null,a=!1;if(i&&(Ut||zt)){var o=r[Gt]||i[Gt];o&&"0s"!==o&&(n.setAttribute("data-effect-driver","t"),a=!0),a||(o=r[Xt]||i[Xt])&&"0s"!==o&&(n.setAttribute("data-effect-driver","a"),a=!0)}a||E.effects[t]&&(n.setAttribute("data-effect-driver","j"),a=!0),a&&n.setAttribute("data-effect-name",t)}}}),E.effects={},E.effect=function(e,t){E.effects[e]=t};var Vt,Wt,Ut=!1,zt=!1,Gt=E.cssName("transition-duration"),Xt=E.cssName("animation-duration");new function(){var e,t,n={TransitionEvent:"transitionend",WebKitTransitionEvent:"webkitTransitionEnd",OTransitionEvent:"oTransitionEnd",otransitionEvent:"otransitionEnd"};for(var r in n){if(window[r]){e=n[r];break}try{document.createEvent(r);e=n[r];break}catch(e){}}for(r in"string"==typeof e&&(Ut=!0,Vt=e),n={AnimationEvent:"animationend",WebKitAnimationEvent:"webkitAnimationEnd"})if(window[r]){t=n[r];break}"string"==typeof t&&(Ut=!0,Wt=t)};var Yt=[];function Jt(e,t){var n=e.getAttribute("data-effect-name");if(n){t.effectName=n,t.effectDriver=e.getAttribute("data-effect-driver");var r=+e.getAttribute("data-effect-stagger");t.effectLeaveStagger=+e.getAttribute("data-effect-leave-stagger")||r,t.effectEnterStagger=+e.getAttribute("data-effect-enter-stagger")||r,t.effectClass=e.className||NaN}}function Kt(e){return e.replace(/^[\S]/g,function(e){return e.toUpperCase()})}var Zt=new At;function Qt(){}function en(e,t){var n=e.callbacks[t+"Class"];return"string"==typeof n?n:"function"==typeof n?n():e.name+"-"+t}function tn(e,t,n){var r=e.callbacks[t];r&&r.call(e,e.el,n)}Qt.prototype={contrustor:Qt,enterClass:function(){return en(this,"enter")},leaveClass:function(){return en(this,"leave")},actionFun:function(e,t,n){if(!document.hidden){var r=this,i=r.el,a="leave"===e;e=a?"leave":"enter",tn(r,"abort"+Kt(a?"enter":"leave")),tn(r,"before"+Kt(e)),a||t(i);var o=function(o){i.removeEventListener(r.cssEvent,r.cssCallback),a?(t(i),E(i).removeClass(r.cssClass)):"a"===r.driver&&E(i).removeClass(r.cssClass),!0!==o&&(tn(r,"after"+Kt(e)),n&&n(i)),r.dispose()};r.useCss?(r.cssCallback&&r.cssCallback(!0),r.cssClass=en(r,e),r.cssCallback=o,r.update=function(){i.addEventListener(r.cssEvent,r.cssCallback),a||"t"!==r.driver||E(i).removeClass(r.cssClass)},E(i).addClass(r.cssClass),Zt.render(!0),Zt.queue.push(r)):tn(r,e,o)}},enter:function(e,t){this.actionFun.apply(this,["enter"].concat(E.slice(arguments)))},leave:function(e,t){this.actionFun.apply(this,["leave"].concat(E.slice(arguments)))},dispose:function(){this.update=this.cssCallback=null,Yt.unshift(this)>100&&Yt.pop()}};var nn=function(e,t){var n=x.call(arguments,0);"function"!=typeof n[2]&&n.splice(2,0,_),"function"!=typeof n[3]&&n.splice(3,0,_);var r=n[2],i=n[3],a=function(e,t){if(!e||1!==e.nodeType)return null;if(t)var n=t.effectName,r=t.effectDriver;else n=e.getAttribute("data-effect-name"),r=e.getAttribute("data-effect-driver");if(!n||!r)return null;var i=Yt.pop()||new Qt;return i.el=e,i.driver=r,i.useCss="j"!==r,i.useCss&&(t&&E(e).addClass(t.effectClass),i.cssEvent="t"===r?Vt:Wt),i.name=n,i.callbacks=E.effects[n]||{},i}(e,n[4]);if(!a)return r(),i(),!1;a[t?"enter":"leave"](r,i)};E.mix(E.effect,{apply:nn,append:function(e,t,n,r){return nn(e,1,function(){t.appendChild(e)},n,r)},before:function(e,t,n,r){return nn(e,1,function(){t.parentNode.insertBefore(e,t)},n,r)},remove:function(e,t,n,r){return nn(e,0,function(){e.parentNode===t&&t.removeChild(e)},n,r)}}),E.directive("html",{update:function(e){var t=this.element,n=1!==t.nodeType,i=n?t.parentNode:t;if(i){if(e=null==e?"":e,3===t.nodeType){var a=j("html");i.insertBefore(r.createComment(a),t),this.element=r.createComment(a+":end"),i.replaceChild(this.element,t),t=this.element}if("object"!=typeof e)var o=E.parseHTML(String(e));else if(11===e.nodeType)o=e;else if(1===e.nodeType||e.item){var s=1===e.nodeType?e.childNodes:e.item;for(o=C.cloneNode(!0);s[0];)o.appendChild(s[0])}if(s=E.slice(o.childNodes),n){for(var c=t.nodeValue.slice(0,-4);;){var l=t.previousSibling;if(!l||8===l.nodeType&&l.nodeValue===c)break;i.removeChild(l)}i.insertBefore(o,t)}else E.clearHTML(t).appendChild(o);mt(s,this.vmodels)}}}),E.directive("text",{update:function(e){var t=this.element;if(e=null==e?"":e,3===t.nodeType)try{t.data=e}catch(e){}else t.textContent=e}}),E.directive("if",{priority:10,update:function(e){var t,n=this,i=this.element,o=n.stamp=+new Date,s=function(){o===n.stamp&&(n.recoverNode=null)};n.recoverNode&&n.recoverNode();try{if(!i.parentNode)return;t=i.parentNode}catch(e){return}if(e){function c(){i.getAttribute(n.name)&&(i.removeAttribute(n.name),dt(i,n.vmodels)),n.rollback=null}if(8===i.nodeType){var l=n.keep,u=E.effect.apply(l,1,function(){o===n.stamp&&(i.parentNode.replaceChild(l,i),i=n.element=l,l.getAttribute("_required")&&(i.required=!0,i.removeAttribute("_required")),i.querySelectorAll&&E.each(i.querySelectorAll("[_required=true]"),function(e){e.required=!0,e.removeAttribute("_required")}),c())},s);u=!1===u}u||c()}else if(1===i.nodeType){!0===i.required&&(i.required=!1,i.setAttribute("_required","true"));try{E.each(i.querySelectorAll(":required"),function(e){i.required=!1,e.setAttribute("_required","true")})}catch(e){}var f=n.element=r.createComment(":if"),p=i.nextSibling;n.recoverNode=function(){n.recoverNode=null,f.parentNode!==t&&(t.insertBefore(f,p),n.keep=i)},E.effect.apply(i,0,function(){n.recoverNode=null,o===n.stamp&&(i.parentNode.replaceChild(f,i),n.keep=i,a.appendChild(i),n.rollback=function(){i.parentNode===a&&a.removeChild(i)})},s)}}});var rn=E.templateCache={};function an(e){for(var t=r.createDocumentFragment(),n=0,i=e.length;n0&&t.indexOf(")")>-1){var r=(t.match(on)||["",""])[1].trim();""!==r&&"$event"!==r||(t=t.replace(on,""))}e.expr=t},update:function(e){var t=this,n=this.element;e=function(e){return(t.getter||_).apply(t.args[0],t.args.concat(e))};var r=t.param.replace(/-\d+$/,"");if("scan"===r)e.call(n,{type:r});else if("function"==typeof t.specialBind)t.specialBind(n,e);else var i=E.bind(n,r,e);t.rollback=function(){"function"==typeof t.specialUnbind?t.specialUnbind():E.unbind(n,r,i)}}});function cn(e,t,n){for(var r,i=0;r=e[i++];)r.className===n.effectClass&&E.effect.apply(r,t,_,_,n)}function ln(e,t,n){return e?setTimeout(t,++n*e):t(),n}function un(e,t,n){for(var r=C.cloneNode(!1),i=e,a=i.nodeValue,o=t&&Math.max(+t.staggerIndex,0),s=E.slice(i.parentNode.childNodes),c=s.indexOf(i);;){var l=s[--c];if(!l||0===String(l.nodeValue).indexOf(a))break;!n&&t&&l.className===t.effectClass?(e=l,function(e){t.staggerIndex=ln(t.effectLeaveStagger,function(){E.effect.apply(e,0,_,function(){r.appendChild(e)},t)},o)}(l)):r.insertBefore(l,r.firstChild)}return r.appendChild(i),r}function fn(e,t,n,r,i){var a=e.template.cloneNode(!0),o=E.slice(a.childNodes);a.appendChild(n.$anchor),i&&t.appendChild(a);n[e.param||"el"];var s={nodes:o,vmodels:[n].concat(e.vmodels),content:a};r.push(s)}function pn(e){var t=("object"===e.xtype?yn:vn)(e);return(t.$anchor||(t.$anchor=e.element.cloneNode(!1))).nodeValue=e.signature,t.$outer=e.$outer,t}function dn(e,t,n){if("array"===n){e.$remove=function(){t.$repeat.removeAt(e.$index)};var r=t.param;e.$watch(r,function(n){var r=e.$index;t.$repeat[r]=n})}else{var i=t.vars[0],a=t.vars[1];e.$up.$watch(t.expr+"."+e[i],function(n){e[t.param][a]=n,e[a]=n})}}E.directive("for",{priority:90,init:function(e){var t=e.type;e.cache={},e.enterCount=0;var n=e.element;if(1===n.nodeType){var i=e.expr.split(" in ");e.expr=i.pop(),i.length&&(i=i.pop().split(/\s+/)),e.vars=i,n.removeAttribute(e.name),Jt(n,e);var a=tt(n,"data-rendered",e.vmodels),o=j(t),s=r.createComment(o+":start"),c=e.element=r.createComment(o+":end");e.signature=o,e.start=s,e.template=C.cloneNode(!1);var l=n.parentNode;if(l.replaceChild(c,n),l.insertBefore(s,c),e.template.appendChild(n),e.element=c,a)var u=E.bind(l,"datasetchanged",function(){a.apply(l,l.args),E.unbind(l,"datasetchanged",u),l.msRendered=a})}},update:function(e,t){var n=this,r=this.xtype;"array"===r?(this.vars.length?1===this.vars.length&&this.vars.unshift("$index"):this.vars.push("$index","el"),this.param=this.vars[1]):(this.param="__el__",this.vars.length?1===this.vars.length&&this.vars.push("$val"):this.vars.push("$key","$val")),this.enterCount+=1;var i=!t;if(i){n.$outer={};var a=this.vars[0],o=this.vars[1];"array"===r&&(a="$first",o="$last");for(var s,c=0;s=n.vmodels[c++];)if(s.hasOwnProperty(a)&&s.hasOwnProperty(o)){n.$outer=s;break}}var l=this.track,u="move";n.$repeat=e;var f=[],p=i&&C.cloneNode(!1),d=[],h=this.param,v=E.mix({},this.cache),m=this.element,y=l.length,g=m.parentNode,b=0;for(c=0;c10,A=m.previousSibling,_=n.start;if(k)for(;A!==_;)g.removeChild(A),A=m.previousSibling;for(c=0;cI.maxRepeatSize&&i.pop(),delete e[t]}}function bn(e,t){var n="_"+e;if(!bn[n]){var i=r.createElement(e);k.appendChild(i),t=$?getComputedStyle(i,null).display:i.currentStyle.display,k.removeChild(i),bn[n]=t}return bn[n]}E.parseDisplay=bn,E.directive("visible",{init:function(e){Jt(e.element,e)},update:function(e){var t,n=this,r=this.element,i=!this.effectName;if(!this.stamp)return t=this.stamp=+new Date,void(e?(r.style.display=n.display||"","none"===E(r).css("display")&&(r.style.display=n.display=bn(r.nodeName))):r.style.display="none");t=this.stamp=+new Date,e?E.effect.apply(r,1,function(){if(t===n.stamp){var e=r.getAttribute("data-effect-driver")||"a";i&&(r.style.display=n.display||""),"a"!==e&&"t"!==e||"none"===E(r).css("display")&&(r.style.display=n.display||bn(r.nodeName))}}):E.effect.apply(r,0,function(){t===n.stamp&&(r.style.display="none")})}});var wn=/]*>([\S\s]*?)<\/script\s*>/gim,xn=/\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,$n=/<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/gi,kn={a:/\b(href)\=("javascript[^"]*"|'javascript[^']*')/gi,img:/\b(src)\=("javascript[^"]*"|'javascript[^']*')/gi,form:/\b(action)\=("javascript[^"]*"|'javascript[^']*')/gi},Cn=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,An=/([^\#-~| |!])/g;function _n(e,t,n,r){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var i=isFinite(+e)?+e:0,a=isFinite(+t)?Math.abs(t):3,o=r||",",s=n||".",c="";return(c=(a?function(e,t){var n=Math.pow(10,t);return""+(Math.round(e*n)/n).toFixed(t)}(i,a):""+Math.round(i)).split("."))[0].length>3&&(c[0]=c[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,o)),(c[1]||"").length>=0)%60,n=Math.floor(e/60),r=Math.floor(n/60);return n=(n%=60)<10?"0"+n:n,t=t<10?"0"+t:t,r>0?(r=r<10?"0"+r:r)+":"+n+":"+t:n+":"+t},$filter:function(e){for(var t=1,n=arguments.length;t/g,">")},currency:function(e,t,n){return(t||"¥")+_n(e,isFinite(n)?n:2)},number:_n,date:function(e,t,n){var r;if(n=void 0!==n,Date.isDate(e))r=e;else if(/[^\d]/.test(e)||(e-=0,n&&(e*=1e3)),(r=new Date(e))+""=="Invalid Date")return"Invalid Date";return r.format(t)}},Nn={};!function(){if(!window.LIBS_BASE_URL){var e;try{throw new Error}catch(t){e=t.stack}e=e.trim().split(/[@ ]+/),e=(e=window.safari?e[1]:e.pop()).replace(/(:\d+)?:d+([\w\W]*)?$/i,""),window.LIBS_BASE_URL=e.replace(/^([a-z-]*):\/\/([^\/]+)(\/.*)?/,"$1://$2")}}();var jn,En=[],On=function(e){for(jn=!0;e=En.shift();)e(E)};"complete"===r.readyState?setTimeout(On):r.addEventListener("DOMContentLoaded",On),window.addEventListener("load",On),E.ready=function(e){jn?e(E):En.push(e)},window.importCss=function(e,t){e=e.replace(/^\/+/,"/"),t?e=t+e:window.LIBS_BASE_URL&&(e=window.LIBS_BASE_URL+e),Nn[e]||(i.insertAdjacentHTML("afterBegin",''),Nn[e]=1)};var Sn=window.Anot;return E.noConflict=function(e){return e&&window.Anot===E&&(window.Anot=Sn),E},window.Anot=E,E}();export default _Anot; \ No newline at end of file diff --git a/dist/audio/index.js b/dist/audio/index.js new file mode 100644 index 0000000..94beadd --- /dev/null +++ b/dist/audio/index.js @@ -0,0 +1,204 @@ +/** + * 播放器 + * @author yutent + * @date 2018/12/23 23:14:40 + */ + +'use strict' + +const { exec } = require('child_process') +const { EventEmitter } = require('events') +const util = require('util') + +class AudioPlayer { + constructor() { + this.__PLAYER__ = new Audio() + this.__IS_PLAYED__ = false + this.__LIST__ = [] // 播放列表 + this.__CURR__ = -1 // 当前播放的歌曲的id + this.__PLAY_MODE__ = 'all' // all | single | random + this.__PLAYER__.valume = 0.7 + + this.__init__() + } + + __init__() { + this.__PLAYER__.addEventListener( + 'timeupdate', + _ => { + this.emit('play', this.__PLAYER__.currentTime) + }, + false + ) + + this.__PLAYER__.addEventListener( + 'ended', + _ => { + this.emit('end') + }, + false + ) + } + + static ID3(song) { + let cmd = `ffprobe -v quiet -print_format json -show_entries format "${song}"` + let pc = exec(cmd) + let buf = [] + return new Promise((resolve, reject) => { + pc.stdout.on('data', _ => { + buf.push(_) + }) + + pc.stderr.on('data', reject) + + pc.stdout.on('close', _ => { + let { format } = Buffer.from(buf) + try { + res = JSON.parse(res) + resolve({ + title: format.tags.TITLE || format.tags.title, + album: format.tags.ALBUM || format.tags.album, + artist: format.tags.ARTIST || format.tags.artist, + duration: +format.duration, + size: +(format.size / 1024 / 1024).toFixed(2) + }) + } catch (err) { + reject(err) + } + }) + }) + } + + get stat() { + return this.__LIST__.length ? 'ready' : 'stop' + } + + get IS_MUTED() { + return this.__PLAYER__.muted + } + + set valume(val) { + this.__PLAYER__.valume = val / 100 + } + + set mode(val = 'all') { + this.__PLAY_MODE__ = val + } + + clear() { + this.__LIST__ = [] + } + + push(songs) { + this.__LIST__.push.apply(this.__LIST__, songs) + } + + // 上一首 + prev() { + let id = this.__CURR__ + + switch (this.__PLAY_MODE__) { + case 'all': + id-- + if (id < 0) { + id = this.__LIST__.length - 1 + } + break + case 'random': + id = (Math.random() * this.__LIST__.length) >>> 0 + break + // single + default: + break + } + + this.play(id) + return Promise.resolve(this.__LIST__[id]) + } + + // 下一首 + next() { + let id = this.__CURR__ + + switch (this.__PLAY_MODE__) { + case 'all': + id++ + if (id >= this.__LIST__.length) { + id = 0 + } + break + case 'random': + id = (Math.random() * this.__LIST__.length) >>> 0 + break + // single + default: + break + } + + this.play(id) + return Promise.resolve(this.__LIST__[id]) + } + + // 播放 + play(id) { + // 播放列表里没有数据的话, 不作任何处理 + if (!this.__LIST__.length) { + return + } + + // 有ID的话,不管之前是否在播放,都切换歌曲 + if (id !== undefined) { + let song = this.__LIST__[id] + if (song) { + this.__CURR__ = id + this.__IS_PLAYED__ = true + + this.__PLAYER__.pause() + this.__PLAYER__.currentTime = 0 + this.__PLAYER__.src = song.path + this.__PLAYER__.play() + + return Promise.resolve(song) + } + return Promise.reject('song not found') + } else { + if (!this.__IS_PLAYED__) { + this.__IS_PLAYED__ = true + this.__PLAYER__.play() + } + return Promise.resolve(true) + } + } + + // 暂停 + pause() { + if (!this.__IS_PLAYED__) { + return + } + this.__IS_PLAYED__ = false + + this.__PLAYER__.pause() + } + + // 切换静音 + mute() { + if (this.__CURR__ < 0) { + return + } + this.__PLAYER__.muted = !this.__PLAYER__.muted + } + + // 跳到指定位置播放 + seek(time) { + if (this.__CURR__ < 0) { + return + } + this.__PLAYER__.pause() + this.__PLAYER__.currentTime = time + this.__PLAYER__.play() + } +} + +util.inherits(AudioPlayer, EventEmitter) + +export default AudioPlayer diff --git a/dist/avatar/def.jpg b/dist/avatar/def.jpg new file mode 100644 index 0000000..8a23176 Binary files /dev/null and b/dist/avatar/def.jpg differ diff --git a/dist/avatar/index.js b/dist/avatar/index.js new file mode 100644 index 0000000..19e4797 --- /dev/null +++ b/dist/avatar/index.js @@ -0,0 +1 @@ +"use strict";function arraySum(t){var e=0;return t.forEach(function(t){e+=+t}),e}export const create=(t,e)=>{if(!t)return this.defafultImg;(!e||e<100)&&(e=100);var l,a=document.createElement("canvas"),r=a.getContext("2d"),c=t.slice(-3),i=t.slice(-9,-6),f=t.slice(0,8).match(/([\w]{1})/g),n=t.slice(8,16).match(/([\w]{1})/g),s=t.slice(16,24).match(/([\w]{1})/g),m=e/10;a.width=e,a.height=e,f=f.map(t=>(t=parseInt(t,16))%8),n=n.map(t=>(t=parseInt(t,16))%4),s=s.map(t=>(t=parseInt(t,16))%4),l=arraySum(f)>32?c:i,r.fillStyle="#"+c,r.fillRect(0,0,e,e);for(var u=1;u<9;u++){var o=f[u-1],h=n[u-1],p=s[u-1];o+h>8&&(o=8-h),r.fillStyle="#"+i,r.fillRect((h+1)*m,u*m,o*m,m),r.fillStyle="#"+i,r.fillRect((9-h-o)*m,u*m,o*m,m),r.fillStyle="#"+l,r.fillRect((p+1)*m,u*m,m,m),r.fillStyle="#"+l,r.fillRect((8-p)*m,u*m,m,m)}return a.toDataURL()}; \ No newline at end of file diff --git a/dist/css/elem-ui.css b/dist/css/elem-ui.css new file mode 100644 index 0000000..8080069 --- /dev/null +++ b/dist/css/elem-ui.css @@ -0,0 +1 @@ +.do-ui-button{display:inline-block;height:16px;padding:2px 5px;line-height:12px;border-radius:2px;text-align:center;font-size:12px;background:#e8ebf4;color:#98acae;cursor:pointer;transition:all .2s ease-in-out}.do-ui-button.medium{min-width:80px;height:30px;padding:0 8px;line-height:30px;font-size:14px}.do-ui-button.large{min-width:130px;height:45px;padding:0 13px;line-height:45px;border-radius:3px;font-size:18px}.do-ui-button:hover{background:#f3f5fb}.do-ui-button:active{background:#dae1e9}.do-ui-button.teal{background:#19b491;color:#fff}.do-ui-button.teal:hover{background:#3fc2a7}.do-ui-button.teal:active{background:#16967a}.do-ui-button.green{background:#2ecc71;color:#fff}.do-ui-button.green:hover{background:#58d68d}.do-ui-button.green:active{background:#27ae60}.do-ui-button.blue{background:#2d8dd6;color:#fff}.do-ui-button.blue:hover{background:#52a3de}.do-ui-button.blue:active{background:#2776b1}.do-ui-button.purple{background:#9b59b6;color:#fff}.do-ui-button.purple:hover{background:#ac61ce}.do-ui-button.purple:active{background:#8e44ad}.do-ui-button.red{background:#eb3b48;color:#fff}.do-ui-button.red:hover{background:#ff5061}.do-ui-button.red:active{background:#ce3742}.do-ui-button.orange{background:#f39c12;color:#fff}.do-ui-button.orange:hover{background:#ffb618}.do-ui-button.orange:active{background:#e67e22}.do-ui-button.grey{background:#8a9b9c;color:#fff}.do-ui-button.grey:hover{background:#98acae}.do-ui-button.grey:active{background:#748182}.do-ui-button.dark{background:#526273;color:#fff}.do-ui-button.dark:hover{background:#62778d}.do-ui-button.dark:active{background:#425064}.do-ui-button.disabled{background:#f3f5fb;color:#dae1e9;cursor:not-allowed}.do-ui-input{width:auto;height:30px;padding:0 5px;background:#f3f5fb;border:2px solid transparent;border-radius:5px;font-size:13px;transition:all .2s ease-in-out;color:#526273}.do-ui-input:focus{background:#fff;border-color:#526273}.do-ui-input::placeholder{color:#98acae}.do-ui-input:disabled{border-color:transparent;background:#fff8ed;color:#98acae;cursor:not-allowed}.do-ui-textarea{width:auto;height:120px;padding:5px 8px;background:#f3f5fb;border:2px solid transparent;border-radius:5px;font-size:14px;transition:all .2s ease-in-out;color:#526273}.do-ui-textarea:focus{background:#fff;border-color:#526273}.do-ui-textarea:disabled{border-color:transparent;background:#fff8ed;color:#98acae;cursor:not-allowed}.do-ui-select{position:relative;display:inline-block;width:auto;min-width:100px;height:30px;color:#98acae}.do-ui-select select{width:100%;height:100%;padding:5px 13px;line-height:1;background:#f3f5fb;border-radius:5px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:2px solid transparent;outline:none;color:#526273;font-size:13px}.do-ui-select select:focus{background:#fff;border-color:#526273}.do-ui-select select::-ms-expand{display:none}.do-ui-select select:disabled{border-color:transparent;background:#fff8ed;color:#dae1e9}.do-ui-select .trigon{position:absolute;right:7px;top:0;width:15px;height:30px;padding:7px 0;font-size:12px;text-align:center}.do-ui-select .trigon i{float:left;width:15px;height:12px;line-height:12px}.do-ui-select .trigon i:nth-child(2){margin-top:-6px}.do-ui-radio,.do-ui-checkbox{display:inline-block;position:relative;width:auto;height:auto;padding:0 5px 0 35px;line-height:30px;color:#62778d;font-size:13px}.do-ui-radio>input,.do-ui-checkbox>input{position:absolute;left:7px;top:5px;width:20px;height:20px;border-radius:50%;border:1px solid #dae1e9;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}.do-ui-radio>input:checked,.do-ui-checkbox>input:checked{box-shadow:0 0 5px #52a3de}.do-ui-radio>input:checked::after,.do-ui-checkbox>input:checked::after{display:block;width:12px;height:12px;margin:3px;border-radius:50%;background:#98acae;content:""}.do-ui-radio>input:disabled,.do-ui-checkbox>input:disabled{background:#fff8ed;box-shadow:none;cursor:not-allowed}.do-ui-radio>input:disabled:checked::after,.do-ui-checkbox>input:disabled:checked::after{background:#98acae}.do-ui-radio.disabled,.do-ui-checkbox.disabled{color:#dae1e9;cursor:not-allowed}.do-ui-checkbox>input{border-radius:3px}.do-ui-checkbox>input:checked::after{width:100%;height:100%;margin:0;line-height:18px;font-size:18px;text-align:center;color:#98acae;background:none;content:"✓"}.do-ui-checkbox>input:disabled:checked::after{color:#98acae;background:none}.do-ui-quote{display:inline-block;position:relative;min-height:60px;margin:10px 0;padding:15px 10px 5px 50px;border:1px solid #dae1e9;border-radius:10px;background:#f3f5fb;color:#98acae;font-size:14px;word-break:break-all}.do-ui-quote i{position:absolute;left:8px;top:0;font-size:30px;line-height:1.5;color:#dae1e9}.do-ui-warn,.do-ui-mark{display:inline-block;position:relative;min-height:40px;margin:5px 0;padding:5px 8px 5px 30px;border:1px solid #ffb618;border-radius:5px;background:#fffbed;color:#e67e22;font-size:14px;word-break:break-all}.do-ui-warn p,.do-ui-mark p{margin:0 !important}.do-ui-warn i,.do-ui-mark i{position:absolute;left:5px;top:2px;font-size:20px;line-height:1.5}.do-ui-mark{border-color:#19b491;color:#16967a;background:#edfbf8} diff --git a/dist/css/form.css b/dist/css/form.css new file mode 100644 index 0000000..6fb314c --- /dev/null +++ b/dist/css/form.css @@ -0,0 +1 @@ +.do-button{overflow:hidden;position:relative;display:inline-block;width:auto;height:30px;padding:0 10px;line-height:30px;text-align:center;cursor:pointer;font-size:14px}.do-button::before{position:absolute;left:-50%;top:-50%;display:block;width:200%;height:200%;border-radius:50%;background:rgba(220,220,220,0.5);content:"";opacity:0;-webkit-transform:scale(0, 0);transform:scale(0, 0);transition:opacity 1.3s cubic-bezier(0.23, 1, 0.32, 1),-webkit-transform 1.3s cubic-bezier(0.23, 1, 0.32, 1);transition:opacity 1.3s cubic-bezier(0.23, 1, 0.32, 1),transform 1.3s cubic-bezier(0.23, 1, 0.32, 1);transition:opacity 1.3s cubic-bezier(0.23, 1, 0.32, 1),transform 1.3s cubic-bezier(0.23, 1, 0.32, 1),-webkit-transform 1.3s cubic-bezier(0.23, 1, 0.32, 1)}.do-button:hover::before{opacity:1;-webkit-transform:scale(1, 0.8);transform:scale(1, 0.8)}.do-button:active::before{background:rgba(0,0,0,0.1)}.do-button__text,.do-button__icon{position:relative;display:inline-block}.do-button__icon{font-size:20px;vertical-align:top}.do-button.small{height:20px;padding:0 5px;line-height:20px;font-size:12px}.do-button.small i{font-size:16px}.do-button.medium{min-width:100px;height:35px;line-height:35px;font-size:16px}.do-button.medium i{padding-right:5px;font-size:24px}.do-button.large{min-width:160px;height:50px;padding:0 13px;line-height:50px;font-size:18px}.do-button.large i{padding-right:10px;font-size:28px}.do-button.teal{color:#19b491}.do-button.green{color:#2ecc71}.do-button.blue{color:#2d8dd6}.do-button.purple{color:#9b59b6}.do-button.red{color:#eb3b48}.do-button.orange{color:#f39c12}.do-button.plain{color:#dae1e9}.do-button.grey{color:#8a9b9c}.do-button.dark{color:#526273}.do-button.disabled{color:#e8ebf4;cursor:not-allowed}.do-button.disabled::before{display:none}.do-radio{position:relative;display:inline-block;width:auto;height:30px;padding-right:10px;line-height:30px;text-align:center;cursor:default;font-size:14px}.do-radio__box{float:left;width:20px;height:20px;margin:5px;margin-left:0;border:1px solid #8a9b9c;border-radius:50%}.do-radio.checked .do-radio__box::after{display:block;width:14px;height:14px;margin:2px;border-radius:50%;content:""}.do-radio.teal .do-radio__box{border-color:#19b491}.do-radio.teal .do-radio__box::after{background:#19b491}.do-radio.teal{color:#19b491}.do-radio.green .do-radio__box{border-color:#2ecc71}.do-radio.green .do-radio__box::after{background:#2ecc71}.do-radio.green{color:#2ecc71}.do-radio.blue .do-radio__box{border-color:#2d8dd6}.do-radio.blue .do-radio__box::after{background:#2d8dd6}.do-radio.blue{color:#2d8dd6}.do-radio.purple .do-radio__box{border-color:#9b59b6}.do-radio.purple .do-radio__box::after{background:#9b59b6}.do-radio.purple{color:#9b59b6}.do-radio.red .do-radio__box{border-color:#eb3b48}.do-radio.red .do-radio__box::after{background:#eb3b48}.do-radio.red{color:#eb3b48}.do-radio.orange .do-radio__box{border-color:#f39c12}.do-radio.orange .do-radio__box::after{background:#f39c12}.do-radio.orange{color:#f39c12}.do-radio.plain .do-radio__box{border-color:#dae1e9}.do-radio.plain .do-radio__box::after{background:#dae1e9}.do-radio.plain{color:#dae1e9}.do-radio.grey .do-radio__box{border-color:#8a9b9c}.do-radio.grey .do-radio__box::after{background:#8a9b9c}.do-radio.grey{color:#8a9b9c}.do-radio.dark .do-radio__box{border-color:#526273}.do-radio.dark .do-radio__box::after{background:#526273}.do-radio.dark{color:#526273}.do-radio.disabled{color:#dae1e9;cursor:not-allowed;text-decoration:line-through}.do-radio.disabled.checked{color:#62778d}.do-radio.disabled .do-radio__box{border-color:#dae1e9}.do-radio.disabled .do-radio__box::after{background:#dae1e9}.do-switch{position:relative;display:inline-block;width:45px;height:30px;padding-right:10px;cursor:default}.do-switch__label{position:relative;display:inline-block;width:100%;height:14px;margin:7px 0;background:#dae1e9;border-radius:7px}.do-switch__dot{position:absolute;left:0;top:-3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,0.3)}.do-switch:hover .do-switch__dot{-webkit-transform:scale(1.1);transform:scale(1.1)}.do-switch.disabled{cursor:not-allowed}.do-switch.disabled:hover .do-switch__dot{-webkit-transform:scale(1);transform:scale(1)}.do-switch.checked .do-switch__dot{left:auto;right:0}.do-switch.teal.checked .do-switch__dot{background:#19b491}.do-switch.teal.checked .do-switch__label{background:#3fc2a7a0}.do-switch.green.checked .do-switch__dot{background:#2ecc71}.do-switch.green.checked .do-switch__label{background:#58d68da0}.do-switch.blue.checked .do-switch__dot{background:#2d8dd6}.do-switch.blue.checked .do-switch__label{background:#52a3dea0}.do-switch.purple.checked .do-switch__dot{background:#9b59b6}.do-switch.purple.checked .do-switch__label{background:#ac61cea0}.do-switch.red.checked .do-switch__dot{background:#eb3b48}.do-switch.red.checked .do-switch__label{background:#ff5061a0}.do-switch.orange.checked .do-switch__dot{background:#f39c12}.do-switch.orange.checked .do-switch__label{background:#ffb618a0}.do-switch.plain.checked .do-switch__dot{background:#dae1e9}.do-switch.plain.checked .do-switch__label{background:#e8ebf4}.do-switch.grey.checked .do-switch__dot{background:#8a9b9c}.do-switch.grey.checked .do-switch__label{background:#98acaea0}.do-switch.dark.checked .do-switch__dot{background:#526273}.do-switch.dark.checked .do-switch__label{background:#62778da0}.do-switch.disabled.checked .do-switch__dot{background:#fff}.do-switch.disabled .do-switch__label::before,.do-switch.disabled.checked .do-switch__label::before{display:block;position:absolute;top:5px;width:8px;height:4px;border-radius:2px;background:#fff;content:""}.do-switch.disabled .do-switch__label::before{right:5px}.do-switch.disabled.checked .do-switch__label::before{left:5px}.do-checkbox{position:relative;display:inline-block;width:auto;height:30px;padding-right:10px;line-height:30px;text-align:center;cursor:default;font-size:14px}.do-checkbox__box{float:left;width:18px;height:18px;margin:6px;margin-left:0;line-height:16px;border:1px solid #8a9b9c;border-radius:3px;font-size:16px;text-align:center}.do-checkbox.checked .do-checkbox__box{color:#fff;font-weight:bold}.do-checkbox.grey{color:#8a9b9c}.do-checkbox.grey .do-checkbox__box{border-color:#8a9b9c}.do-checkbox.grey.checked .do-checkbox__box{background:#8a9b9c}.do-checkbox.dark{color:#526273}.do-checkbox.dark .do-checkbox__box{border-color:#526273}.do-checkbox.dark.checked .do-checkbox__box{background:#526273}.do-checkbox.teal{color:#19b491}.do-checkbox.teal .do-checkbox__box{border-color:#19b491}.do-checkbox.teal.checked .do-checkbox__box{background:#19b491}.do-checkbox.green{color:#2ecc71}.do-checkbox.green .do-checkbox__box{border-color:#2ecc71}.do-checkbox.green.checked .do-checkbox__box{background:#2ecc71}.do-checkbox.blue{color:#2d8dd6}.do-checkbox.blue .do-checkbox__box{border-color:#2d8dd6}.do-checkbox.blue.checked .do-checkbox__box{background:#2d8dd6}.do-checkbox.purple{color:#9b59b6}.do-checkbox.purple .do-checkbox__box{border-color:#9b59b6}.do-checkbox.purple.checked .do-checkbox__box{background:#9b59b6}.do-checkbox.orange{color:#f39c12}.do-checkbox.orange .do-checkbox__box{border-color:#f39c12}.do-checkbox.orange.checked .do-checkbox__box{background:#f39c12}.do-checkbox.plain{color:#dae1e9}.do-checkbox.plain .do-checkbox__box{border-color:#dae1e9}.do-checkbox.plain.checked .do-checkbox__box{background:#dae1e9}.do-checkbox.red{color:#eb3b48}.do-checkbox.red .do-checkbox__box{border-color:#eb3b48}.do-checkbox.red.checked .do-checkbox__box{background:#eb3b48}.do-checkbox.disabled{cursor:not-allowed;color:#dae1e9;text-decoration:line-through}.do-checkbox.disabled .do-checkbox__box{border-color:#dae1e9}.do-checkbox.disabled.checked{color:#62778d}.do-checkbox.disabled.checked .do-checkbox__box{background:#dae1e9}.do-input{position:relative;display:inline-block;width:180px;height:30px;line-height:30px;border-bottom:1px solid #e8ebf4;cursor:default;font-size:14px}.do-input.icon-left{padding-left:30px}.do-input.icon-right{padding-right:30px}.do-input__holder{visibility:hidden;position:absolute;bottom:0;left:0;width:100%;height:30px;padding:0 5px;color:#dae1e9;transition:bottom .2s ease-in-out}.do-input__holder.visible{visibility:visible}.do-input__input{position:relative;width:100%;height:30px;padding:0 5px;border:0;background:none;font-size:14px;color:#526273}.do-input__icon{position:absolute;bottom:0;width:30px;height:30px;text-align:center;font-size:20px}.do-input::after{position:absolute;left:50%;bottom:-1px;width:0;height:2px;content:"";transition:left .15s linear,width .15s linear}.do-input.active .do-input__holder{bottom:20px}.do-input.active::after{left:0;width:100%}.do-input.icon-left .do-input__icon{left:0}.do-input.icon-right .do-input__icon{right:0}.do-input.icon-left .do-input__holder{padding-left:30px}.do-input.icon-right .do-input__holder{padding-right:30px}.do-input.grey{color:#8a9b9c}.do-input.grey::after{background:#98acae}.do-input.dark{color:#526273}.do-input.dark::after{background:#62778d}.do-input.teal{color:#19b491}.do-input.teal::after{background:#3fc2a7}.do-input.green{color:#2ecc71}.do-input.green::after{background:#58d68d}.do-input.red{color:#eb3b48}.do-input.red::after{background:#ff5061}.do-input.blue{color:#2d8dd6}.do-input.blue::after{background:#52a3de}.do-input.purple{color:#9b59b6}.do-input.purple::after{background:#ac61ce}.do-input.orange{color:#f39c12}.do-input.orange::after{background:#ffb618}.do-input.disabled{background:#fff8ed;color:#dae1e9}.do-input.disabled .do-input__input{cursor:not-allowed;color:#dae1e9} diff --git a/dist/css/layer-normal.css b/dist/css/layer-normal.css new file mode 100644 index 0000000..8b677e6 --- /dev/null +++ b/dist/css/layer-normal.css @@ -0,0 +1 @@ +.do-layer{width:auto;height:auto}.do-layer a{text-decoration:none}.do-layer .layer-box{position:absolute;z-index:65535;opacity:0}.do-layer .layer-box.shift{transition:all .5s ease-out}.do-layer .layer-box.__tc{top:0;left:50%}.do-layer .layer-box.__tl{top:0;left:0}.do-layer .layer-box.__tr{top:0;left:100%}.do-layer .layer-box.__ct{top:50%;left:50%}.do-layer .layer-box.__cc{top:47.5%;left:50%}.do-layer .layer-box.__bc{top:100%;left:50%}.do-layer .layer-box.__bl{top:100%;left:0}.do-layer .layer-box.__br{top:100%;left:100%}.do-layer .layer-box.scale{transform:scale(1.02);transition:transform .1s linear}.do-layer .layer-box.skin-normal{padding:15px 10px;border-radius:3px;color:#666;font-size:14px;box-shadow:0 5px 20px rgba(0,0,0,0.3)}.do-layer .layer-box.skin-normal .layer-title{width:100%;height:43px;padding:0 10px;line-height:43px;font-size:16px;color:#526273}.do-layer .layer-box.skin-normal .layer-content{position:relative;width:100%;height:auto;min-height:50px;word-break:break-all;word-wrap:break-word}.do-layer .layer-box.skin-normal .layer-content .prompt-value{width:100%;height:30px;padding:0 8px;border:1px solid #ddd;border-radius:3px}.do-layer .layer-box.skin-normal .layer-content .prompt-value.alert{border-color:#eb3b48}.do-layer .layer-box.skin-normal .layer-content .prompt-value:focus{border-color:#19b491}.do-layer .layer-box.skin-normal .layer-content .msg-box{line-height:30px}.do-layer .layer-box.skin-normal .layer-ctrl{width:100%;height:40px;padding:5px 0;line-height:30px;font-size:14px;color:#454545;text-align:right}.do-layer .layer-box.skin-normal .layer-ctrl a{overflow:hidden;position:relative;display:inline-block;width:auto;min-width:60px;height:30px;margin-left:5px;padding:0 10px;color:#19b491;text-align:center;cursor:pointer}.do-layer .layer-box.skin-normal .layer-ctrl a::before{position:absolute;left:-50%;top:-50%;z-index:-1;display:block;width:200%;height:200%;border-radius:50%;background:#f3f5fb;content:"";opacity:0;transform:scale(0, 0);transition:opacity 1.3s cubic-bezier(0.23, 1, 0.32, 1),transform 1.3s cubic-bezier(0.23, 1, 0.32, 1)}.do-layer .layer-box.skin-normal .layer-ctrl a:hover::before{opacity:1;transform:scale(1, 0.8)}.do-layer .layer-box.skin-normal .layer-ctrl a:active{background:#e8ebf4}.do-layer .layer-box.type-1,.do-layer .layer-box.type-2,.do-layer .layer-box.type-3{max-width:600px;min-width:300px}.do-layer .layer-box.type-1 .layer-content,.do-layer .layer-box.type-2 .layer-content,.do-layer .layer-box.type-3 .layer-content{padding:10px}.do-layer .layer-box.type-4{padding:0}.do-layer .layer-box.type-4 .frame-box{display:block;width:100%;height:100%;margin:0;padding:0;border:0;resize:none}.do-layer .layer-box.type-5{visibility:hidden;position:fixed;z-index:65534;min-width:75px;max-width:600px;padding:10px;line-height:1.5;color:#fff;background:rgba(0,0,0,0.5);box-shadow:none}.do-layer .layer-box.type-5 i.arrow{position:absolute;width:0;height:0;border:6px solid transparent;content:""}.do-layer .layer-box.type-5 i.offset-top{left:5px;bottom:-14px;border-top:8px solid rgba(0,0,0,0.5)}.do-layer .layer-box.type-5 i.offset-bottom{left:5px;top:-14px;border-bottom:8px solid rgba(0,0,0,0.5)}.do-layer .layer-box.type-5 i.offset-top-left{right:5px;bottom:-14px;border-top:8px solid rgba(0,0,0,0.5)}.do-layer .layer-box.type-5 i.offset-bottom-left{right:5px;top:-14px;border-bottom:8px solid rgba(0,0,0,0.5)}.do-layer .layer-box.type-5 .layer-content{min-height:20px;margin:0}.do-layer .layer-box.type-6{z-index:65539;box-shadow:none;background:transparent}.do-layer .layer-box.type-toast{position:fixed;min-width:10px;padding:0;background:transparent}.do-layer .layer-box.type-toast .layer-content{min-height:40px;height:40px}.do-layer .layer-box.type-toast .toast-box{display:inline-block;position:relative;min-height:40px;padding:5px 12px 5px 50px;line-height:28px;border-radius:3px;word-break:break-all}.do-layer .layer-box.type-toast .toast-box.style-info{border:1px solid #19b491;background:#edfbf8;color:#16967a}.do-layer .layer-box.type-toast .toast-box.style-warn{border:1px solid #f39c12;background:#fffbed;color:#e67e22}.do-layer .layer-box.type-toast .toast-box.style-deny{border:1px solid #eb3b48;background:#fffbed;color:#ce3742}.do-layer .layer-box.type-toast .toast-box>i{position:absolute;left:12px;top:5px;line-height:28px;font-size:26px}.do-layer .layer-box .loading{position:relative;width:100px;height:100px;margin:auto}.do-layer .layer-box .loading .dot-box{position:absolute;display:block}.do-layer .layer-box .loading.style-1 .dot-box,.do-layer .layer-box .loading.style-2 .dot-box{width:70%;height:70%;margin:15%;line-height:70px;font-size:70px;text-align:center}.do-layer .layer-box .loading.style-1 .dot-box i,.do-layer .layer-box .loading.style-2 .dot-box i{display:block;width:100%;height:100%}.do-layer .layer-box .loading.style-1 .dot-box{animation:circle .8s infinite linear}.do-layer .layer-box .loading.style-2 .dot-box{animation:round .6s infinite linear}.do-layer .layer-box .loading.style-3{height:50px}.do-layer .layer-box .loading.style-3 .dot-box{width:100%;height:100%}.do-layer .layer-box .loading.style-3 .dot-box i{float:left;display:block;width:10px;height:100%;margin:0 5px;background:#16967a;animation:bounce 1s infinite ease-in-out;transform:scaleY(0.6)}.do-layer .layer-box .loading.style-3 .dot-box i:nth-child(2){animation-delay:.1s}.do-layer .layer-box .loading.style-3 .dot-box i:nth-child(3){animation-delay:.2s}.do-layer .layer-box .loading.style-3 .dot-box i:nth-child(4){animation-delay:.3s}.do-layer .layer-box .loading.style-3 .dot-box i:nth-child(5){animation-delay:.4s}.do-layer .layer-box .loading.style-4 .dot-box{width:60%;height:60%;margin:20%}.do-layer .layer-box .loading.style-4 .dot-box i{position:absolute;display:block;width:60px;height:60px;animation:circle2 2s infinite ease-in-out;transform:rotate(45deg)}.do-layer .layer-box .loading.style-4 .dot-box i::before{display:block;width:8px;height:8px;background:#16967a;border-radius:50%;content:""}.do-layer .layer-box .loading.style-4 .dot-box i:nth-child(2){animation-delay:.1s}.do-layer .layer-box .loading.style-4 .dot-box i:nth-child(3){animation-delay:.2s}.do-layer .layer-box .loading.style-4 .dot-box i:nth-child(4){animation-delay:.3s}.do-layer .layer-box .loading.style-4 .dot-box i:nth-child(5){animation-delay:.4s}.do-layer .layer-box .loading.style-5 .dot-box{width:90%;height:90%;margin:5%}.do-layer .layer-box .loading.style-5 .dot-box i{float:left;display:block;width:30px;height:30px;background:#16967a;animation:grid 1.5s infinite linear}.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(4),.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(8){animation-delay:.2s}.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(1),.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(5),.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(9){animation-delay:.3s}.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(2),.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(6){animation-delay:.4s}.do-layer .layer-box .loading.style-5 .dot-box i:nth-child(3){animation-delay:.5s}.do-layer.mask{position:fixed;z-index:65534;left:0;top:0;width:100%;height:100%;background:transparent}.do-layer.mask.shift{transition:all .5s ease-out}.do-layer.mask.inner{position:absolute}.do-layer:active{z-index:65536}.do-layer__tips{visibility:hidden;position:fixed;z-index:65534;min-width:75px;max-width:600px;padding:10px;line-height:1.5;border-radius:3px;font-size:14px;color:#fff;background:rgba(0,0,0,0.5)}.do-layer__tips i.arrow{position:absolute;width:0;height:0;border:6px solid transparent;content:""}.do-layer__tips i.offset-top{left:5px;bottom:-14px;border-top:8px solid rgba(0,0,0,0.5)}.do-layer__tips i.offset-bottom{left:5px;top:-14px;border-bottom:8px solid rgba(0,0,0,0.5)}.do-layer__tips i.offset-top-left{right:5px;bottom:-14px;border-top:8px solid rgba(0,0,0,0.5)}.do-layer__tips i.offset-bottom-left{right:5px;top:-14px;border-bottom:8px solid rgba(0,0,0,0.5)}.do-layer__tips .layer-content{min-height:20px;margin:0}@keyframes circle{to{transform:rotate(360deg)}}@keyframes circle2{70%,to{transform:rotate(405deg)}}@keyframes round{from,24.99%,to{transform:rotate(0deg)}25%,49.99%{transform:rotate(90deg)}50%,74.99%{transform:rotate(180deg)}75%,99.99%{transform:rotate(270deg)}}@keyframes bounce{25%{transform:scaleY(1.3)}50%{transform:scaleY(0.6)}}@keyframes grid{36%{transform:scale(0.1);opacity:.3}60%{transform:scale(1);opacity:1}}@media screen and (max-width: 480px){.do-layer .layer-box.type-1,.do-layer .layer-box.type-2,.do-layer .layer-box.type-3,.do-layer .layer-box.type-4,.do-layer .layer-box.type-7{width:90%}} diff --git a/dist/css/pager.css b/dist/css/pager.css new file mode 100644 index 0000000..41af290 --- /dev/null +++ b/dist/css/pager.css @@ -0,0 +1 @@ +.do-pager{display:block;height:auto;text-align:center;font-size:14px;color:#8a9b9c}.do-pager.mini{line-height:30px}.do-pager.mini .button,.do-pager.mini .page{min-width:30px;height:30px}.do-pager.medium{line-height:35px}.do-pager.medium .button,.do-pager.medium .page{min-width:35px;height:35px}.do-pager.large{line-height:40px}.do-pager.large .button,.do-pager.large .page{min-width:40px;height:40px}.do-pager .button,.do-pager .page{display:inline-block;border:0;color:#8a9b9c;text-decoration:none;cursor:pointer;vertical-align:top;font-size:14px;font-weight:100;-webkit-appearance:none;-moz-appearance:none;appearance:none}.do-pager .button{font-size:18px}.do-pager .curr,.do-pager .disabled{cursor:default}.do-pager.skin-1{width:100%}.do-pager.skin-1 .page,.do-pager.skin-1 .button,.do-pager.skin-1 .disabled,.do-pager.skin-1 .curr{padding:0 8px;margin:0 3px}.do-pager.skin-1 .curr{font-weight:bold;font-size:15px}.do-pager.skin-1 .page.disabled{min-width:0;padding:0;background:none;color:#8a9b9c}.do-pager.skin-1 .page.disabled:hover,.do-pager.skin-1 .page.disabled:active{background:none}.do-pager.skin-1 .page.curr{background:none;color:#8a9b9c}.do-pager.skin-1 .page.curr:hover,.do-pager.skin-1 .page.curr:active{background:none}.do-pager.skin-1 .button[disabled]{cursor:not-allowed}.do-pager.skin-1 .total-box,.do-pager.skin-1 .input-box{display:inline-block;padding:0 8px}.do-pager.skin-1 .input-box input{display:inline-block;width:40px;height:30px;padding:0 3px;font-size:14px;background:#fff;border:1px solid #ddd;text-align:center}.do-pager.skin-2{float:right;width:auto}.do-pager.skin-2 .page,.do-pager.skin-2 .button,.do-pager.skin-2 .disabled,.do-pager.skin-2 .curr{float:left;margin:0;padding:0 5px;color:#fff}.do-pager.skin-2 .page.disabled{display:none}.do-pager.skin-2 .button[disabled]{cursor:not-allowed}.do-pager.skin-2 .input-box{display:none}.do-pager.skin-2 .total-box{float:left;display:inline-block;padding:0 8px}.do-pager.plain .page,.do-pager.plain .button{background:#e8ebf4;color:#8a9b9c}.do-pager.plain .page:hover,.do-pager.plain .button:hover{background:#f3f5fb}.do-pager.plain .page:active,.do-pager.plain .button:active{background:#dae1e9}.do-pager.plain .button[disabled]{background:#e8ebf4}.do-pager.plain.skin-2 .curr{background:#dae1e9}.do-pager.grey .page,.do-pager.grey .button{background:#8a9b9c;color:#fff}.do-pager.grey .page:hover,.do-pager.grey .button:hover{background:#98acae}.do-pager.grey .page:active,.do-pager.grey .button:active{background:#748182}.do-pager.grey .button[disabled]{background:#8a9b9c}.do-pager.grey.skin-2 .curr{background:#748182}.do-pager.dark .page,.do-pager.dark .button{background:#526273;color:#fff}.do-pager.dark .page:hover,.do-pager.dark .button:hover{background:#526273}.do-pager.dark .page:active,.do-pager.dark .button:active{background:#425064}.do-pager.dark .button[disabled]{background:#526273}.do-pager.dark.skin-2 .curr{background:#425064}.do-pager.red .page,.do-pager.red .button{background:#eb3b48;color:#fff}.do-pager.red .page:hover,.do-pager.red .button:hover{background:#ff5061}.do-pager.red .page:active,.do-pager.red .button:active{background:#ce3742}.do-pager.red .button[disabled]{background:#eb3b48}.do-pager.red.skin-2 .curr{background:#ce3742}.do-pager.orange .page,.do-pager.orange .button{background:#f39c12;color:#fff}.do-pager.orange .page:hover,.do-pager.orange .button:hover{background:#ffb618}.do-pager.orange .page:active,.do-pager.orange .button:active{background:#e67e22}.do-pager.orange .button[disabled]{background:#f39c12}.do-pager.orange.skin-2 .curr{background:#e67e22}.do-pager.green .page,.do-pager.green .button{background:#2ecc71;color:#fff}.do-pager.green .page:hover,.do-pager.green .button:hover{background:#58d68d}.do-pager.green .page:active,.do-pager.green .button:active{background:#27ae60}.do-pager.green .button[disabled]{background:#2ecc71}.do-pager.green.skin-2 .curr{background:#27ae60}.do-pager.teal .page,.do-pager.teal .button{background:#19b491;color:#fff}.do-pager.teal .page:hover,.do-pager.teal .button:hover{background:#3fc2a7}.do-pager.teal .page:active,.do-pager.teal .button:active{background:#16967a}.do-pager.teal .button[disabled]{background:#19b491}.do-pager.teal.skin-2 .curr{background:#16967a}.do-pager.blue .page,.do-pager.blue .button{background:#2d8dd6;color:#fff}.do-pager.blue .page:hover,.do-pager.blue .button:hover{background:#52a3de}.do-pager.blue .page:active,.do-pager.blue .button:active{background:#2776b1}.do-pager.blue .button[disabled]{background:#2d8dd6}.do-pager.blue.skin-2 .curr{background:#2776b1}.do-pager.purple .page,.do-pager .button .page{background:#9b59b6;color:#fff}.do-pager.purple .page:hover,.do-pager .button .page:hover{background:#ac61ce}.do-pager.purple .page:active,.do-pager .button .page:active{background:#8e44ad}.do-pager.purple .button[disabled],.do-pager .button .button[disabled]{background:#9b59b6}.do-pager.purple.skin-2 .curr,.do-pager .button.skin-2 .curr{background:#8e44ad} diff --git a/dist/css/reset-basic.css b/dist/css/reset-basic.css new file mode 100644 index 0000000..5031c4d --- /dev/null +++ b/dist/css/reset-basic.css @@ -0,0 +1 @@ +@font-face{font-family:"uifont";src:url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff")}*{margin:0;padding:0;vertical-align:baseline;box-sizing:border-box}::before,::after{box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section,content{display:block}img{border:0;display:inline-block}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote::before,blockquote::after,q::before,q::after{content:'';content:none}table{border-collapse:collapse;border-spacing:0}a:focus,input,textarea,button:focus,input:focus,textarea:focus{outline:none}::-moz-focus-inner{border:none;outline:none}body{font-family:Helvetica, Arial,"WenQuanYi Micro Hei","PingFang SC","Hiragino Sans GB","Segoe UI", "Microsoft Yahei", sans-serif;-webkit-font-smoothing:antialiased;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}code,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}[anot],[\:repeat],[\:if],[is-widget],slot{visibility:hidden}.do-fn-cl{*zoom:1}.do-fn-cl::after{content:".";display:block;height:0;clear:both;visibility:hidden;overflow:hidden}.do-fn-clear{clear:both;display:inline}.do-fn-show{display:block}.do-fn-hide{display:none}.do-fn-fl{float:left}.do-fn-fr{float:right}.do-fn-noselect{-webkit-touch-callout:none;-moz-user-select:none;user-select:none}.do-fn-noselect img,.do-fn-noselect a{-webkit-user-drag:none}.do-fn-ell{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.do-st-thin{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.do-st-hand{cursor:pointer}[class^="do-icon-"],[class*=" do-icon-"]{display:inline-block;font-family:"uifont" !important;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.do-icon-app1:before{content:"\e6cc"}.do-icon-apple:before{content:"\e6cd"}.do-icon-bad:before{content:"\e6ce"}.do-icon-android:before{content:"\e6cf"}.do-icon-app2:before{content:"\e6d0"}.do-icon-bell:before{content:"\e6d1"}.do-icon-calendar:before{content:"\e6d2"}.do-icon-book:before{content:"\e6d3"}.do-icon-camera:before{content:"\e6d4"}.do-icon-chart:before{content:"\e6d5"}.do-icon-close:before{content:"\e6d6"}.do-icon-chat:before{content:"\e6d7"}.do-icon-client:before{content:"\e6d8"}.do-icon-dbl-left:before{content:"\e6d9"}.do-icon-dbl-right:before{content:"\e6da"}.do-icon-deny:before{content:"\e6db"}.do-icon-download:before{content:"\e6dc"}.do-icon-edit:before{content:"\e6dd"}.do-icon-email:before{content:"\e6de"}.do-icon-face:before{content:"\e6df"}.do-icon-female:before{content:"\e6e0"}.do-icon-fire:before{content:"\e6e1"}.do-icon-donate:before{content:"\e6e2"}.do-icon-first:before{content:"\e6e3"}.do-icon-eye:before{content:"\e6e4"}.do-icon-floppy:before{content:"\e6e5"}.do-icon-fly:before{content:"\e6e6"}.do-icon-folder-close:before{content:"\e6e7"}.do-icon-folder-open:before{content:"\e6e8"}.do-icon-font:before{content:"\e6e9"}.do-icon-get:before{content:"\e6ea"}.do-icon-git:before{content:"\e6eb"}.do-icon-gift:before{content:"\e6ec"}.do-icon-github:before{content:"\e6ed"}.do-icon-good:before{content:"\e6ee"}.do-icon-google:before{content:"\e6ef"}.do-icon-headset:before{content:"\e6f0"}.do-icon-happy:before{content:"\e6f1"}.do-icon-help:before{content:"\e6f2"}.do-icon-home:before{content:"\e6f3"}.do-icon-icon-list:before{content:"\e6f4"}.do-icon-info:before{content:"\e6f5"}.do-icon-layout:before{content:"\e6f6"}.do-icon-left:before{content:"\e6f7"}.do-icon-link:before{content:"\e6f8"}.do-icon-list:before{content:"\e6f9"}.do-icon-live:before{content:"\e6fa"}.do-icon-loading:before{content:"\e6fb"}.do-icon-lock:before{content:"\e6fc"}.do-icon-linux:before{content:"\e6fd"}.do-icon-logout:before{content:"\e6fe"}.do-icon-maximize:before{content:"\e6ff"}.do-icon-maximized:before{content:"\e700"}.do-icon-male:before{content:"\e701"}.do-icon-menu-dot:before{content:"\e702"}.do-icon-menu-left:before{content:"\e703"}.do-icon-menu-right:before{content:"\e704"}.do-icon-minimize:before{content:"\e705"}.do-icon-mute:before{content:"\e706"}.do-icon-osx:before{content:"\e707"}.do-icon-phone:before{content:"\e708"}.do-icon-picture:before{content:"\e709"}.do-icon-pipe:before{content:"\e70a"}.do-icon-pin:before{content:"\e70b"}.do-icon-position:before{content:"\e70c"}.do-icon-plus:before{content:"\e70d"}.do-icon-plugin:before{content:"\e70e"}.do-icon-post:before{content:"\e70f"}.do-icon-qr:before{content:"\e710"}.do-icon-quote:before{content:"\e711"}.do-icon-right:before{content:"\e712"}.do-icon-sad:before{content:"\e713"}.do-icon-safe:before{content:"\e714"}.do-icon-search:before{content:"\e715"}.do-icon-second:before{content:"\e716"}.do-icon-setting:before{content:"\e717"}.do-icon-share:before{content:"\e718"}.do-icon-sign:before{content:"\e719"}.do-icon-star-full:before{content:"\e71a"}.do-icon-star:before{content:"\e71b"}.do-icon-tag:before{content:"\e71c"}.do-icon-talk:before{content:"\e71e"}.do-icon-third:before{content:"\e71f"}.do-icon-time:before{content:"\e720"}.do-icon-trigon-down:before{content:"\e721"}.do-icon-trash:before{content:"\e722"}.do-icon-track:before{content:"\e723"}.do-icon-trigon-up:before{content:"\e724"}.do-icon-txt:before{content:"\e725"}.do-icon-unmute:before{content:"\e726"}.do-icon-vip:before{content:"\e727"}.do-icon-windows:before{content:"\e728"}.do-icon-upload:before{content:"\e729"}.do-icon-warn:before{content:"\e72a"}.do-icon-user:before{content:"\e72b"}.do-icon-backward:before{content:"\e71d"} diff --git a/dist/drag/doc.md b/dist/drag/doc.md new file mode 100644 index 0000000..0cd4766 --- /dev/null +++ b/dist/drag/doc.md @@ -0,0 +1,85 @@ +# 拖拽插件 +> 该插件可以让任意一个元素可以被拖拽,而不需要该元素是否具有定位属性。 +> 使用时,在目标元素上添加`:drag`属性即可以实现拖拽功能。 + +## 依赖 +> 依赖`Anot`框架 + +## 浏览器兼容性 ++ chrome ++ firefox ++ safari ++ IE10+ + + +## 用法 +> 只需要在要拖拽的元素上添加`:drag`即可; +> 如果要拖拽的元素不是当前元素,只需要给该属性增加一个值为想要拖拽元素的类名或ID。 +> 具体请看示例: +> **注意:** `拖拽的元素不是本身时,只会往父级一级一级找相匹配的` + +```html + + + + + + + + +
+ +
+
+
+ + + + + + +``` + + +## 额外参数 + +### `data-limit` +> 用于限制元素的拖动范围,默认没有限制。 可选值为 "window"和"parent", 分别为 "限制在可视区"和"限制在父级元素的范围" + +### `data-axis` +> 用于限制拖动的方向, 默认值为 "xy",即不限制方向。可选值为 "x"和"y", 即只能在"x轴"或"y轴"方向拖动。 + +### `data-beforedrag` +> 拖动前的回调,如果有设置回调方法, 则该回调的返回值,可决定该元素是否能被拖拽, 可用于在特殊场景下,临时禁用拖拽。 +> `注:` +> 1. 该回调方法,会传入3个参数, 第1个为被拖拽的元素(dom对象), 第2个参数为 该元素的x轴绝对坐标, 第3个元素为y轴绝对坐标; +> 2. 该回调方法, 返回false时, 本次拖拽将临时失效, 返回其他值,或没有返回值,则忽略。 + + +### `data-dragging` +> 元素被拖动时的回调。 +> `注:` +> 1.该回调方法,会传入3个参数, 第1个为被拖拽的元素(dom对象), 第2个参数为 该元素的x轴绝对坐标, 第3个元素为y轴绝对坐标; + + +### `data-dragged` +> 元素被拖动结束后的回调。 +> `注:` +> 1. 该回调方法,会传入3个参数, 第1个为被拖拽的元素(dom对象), 第2个参数为 该元素的x轴绝对坐标, 第3个元素为y轴绝对坐标; + + + + + + + + diff --git a/dist/drag/index.js b/dist/drag/index.js new file mode 100644 index 0000000..8b89daf --- /dev/null +++ b/dist/drag/index.js @@ -0,0 +1 @@ +"use strict";function getBindingCallback(e,t,i){var n=e.getAttribute(t);if(n)for(var a,o=0;a=i[o++];)if(a.hasOwnProperty(n)&&"function"==typeof a[n])return a[n]}Anot.ui.drag="1.0.0",Anot.directive("drag",{priority:1500,init:function(e){e.expr='"'+e.expr+'"';let t=document.documentMode?"move":"grab";window.sidebar?t="-moz-"+t:window.chrome&&(t="-webkit-"+t),Anot(e.element).css("cursor",t),e.beforedrag=getBindingCallback(e.element,"data-beforedrag",e.vmodels),e.dragging=getBindingCallback(e.element,"data-dragging",e.vmodels),e.dragged=getBindingCallback(e.element,"data-dragged",e.vmodels),e.overflow=!0,e.axis="xy",e.element.dataset.axis&&(e.axis=e.element.dataset.axis,delete e.element.dataset.axis),e.limit=!1,e.element.dataset.limit&&(e.limit=e.element.dataset.limit,e.overflow=!1,delete e.element.dataset.limit),delete e.element.dataset.beforedrag,delete e.element.dataset.dragging,delete e.element.dataset.dragged},update:function(e){let t,i,n,a,o,l,r,d,s,g,m,u,c,f,p,b=this,x=e?this.element.parentNode:this.element,v=Anot(this.element),h=Anot(document),w=null,y=null;for(;e&&x&&(x.classList||Anot.error(`${this.name}=${this.expr}, 解析异常[元素不存在]`),!x.classList.contains(e)&&x.id!==e);)x=x.parentNode;w=Anot(x),"parent"===this.limit&&(y=x.parentNode),v.bind("mousedown",function(e){let v=getComputedStyle(x),A=v.transform.replace(/matrix\((.*)\)/,"$1"),C=w.offset();if("0s"!==v.transitionDuration&&(p=v.transitionDuration,x.style.transitionDuration="0s"),(A="none"!==A?A.split(", "):[1,0,0,1,0,0])[4]-=0,A[5]-=0,t=A[4],i=A[5],c=h.scrollTop(),f=h.scrollLeft(),o=C.left-t-f,l=C.top-i-c,n=e.pageX,a=e.pageY,m=window.innerWidth,u=window.innerHeight,s=x.clientWidth,g=x.clientHeight,b.beforedrag){if(!1===b.beforedrag.call(b.vmodels[0],x,o+t,l+i))return}let k=[0,u-g,0,m-s];if("parent"===b.limit){let e=getComputedStyle(y).transform.replace(/matrix\((.*)\)/,"$1"),t=Anot(y).offset();e="none"!==e?e.split(", "):[1,0,0,1,0,0];let i=t.left-e[4]-f,n=t.top-e[5]-c;k=[n,n+y.clientHeight-g,i,i+y.clientWidth-s]}let D=h.bind("mousemove",function(e){e.preventDefault(),"y"!==b.axis&&(A[4]=e.pageX-n+t),"x"!==b.axis&&(A[5]=e.pageY-a+i),r=o+A[4],d=l+A[5],b.overflow||("y"!==b.axis&&(r<=k[2]&&(r=k[2],A[4]=r-o),r>=k[3]&&(r=k[3],A[4]=r-o)),"x"!==b.axis&&(d<=k[0]&&(d=k[0],A[5]=d-l),d>=k[1]&&(d=k[1],A[5]=d-l))),w.css({transform:"matrix("+A.join(", ")+")"}),b.dragging&&b.dragging.call(b.vmodels[0],x,r,d)}),B=h.bind("mouseup",function(e){h.unbind("mousemove",D),h.unbind("mouseup",B),x.style.transitionDuration=p,b.dragged&&b.dragged.call(b.vmodels[0],x,r,d,A[4],A[5])})})}}); \ No newline at end of file diff --git a/dist/form/index.js b/dist/form/index.js new file mode 100644 index 0000000..5b279ce --- /dev/null +++ b/dist/form/index.js @@ -0,0 +1 @@ +importCss("/css/form.css");const log=console.log;Anot.ui.form="0.1.0",Anot.component("button",{__init__(e,s,t){s.text=this.text(),s.style={"border-radius":e.radius},this.classList.add("do-fn-noselect"),this.classList.add("do-button"),this.classList.add(e.color||"grey"),this.setAttribute(":click","onClick"),this.setAttribute(":class","{disabled: disabled}"),this.setAttribute(":css","style"),e.size&&this.classList.add(e.size),e.hasOwnProperty("disabled")&&(s.disabled=!0),delete e.disabled,delete e.color,delete e.size,t()},render(e){let s="";return this.props.icon&&(s=``),`${s}`},state:{text:"",disabled:!1,style:{}},props:{click:Anot.PropsTypes.isFunction()},skip:["style"],watch:{},methods:{onClick(){this.disabled||"function"==typeof this.props.click&&this.props.click(this.props.prop)}}}),Anot.component("radio",{__init__(e,s,t){e.hasOwnProperty("disabled")&&(s.disabled=!0),e.hasOwnProperty("checked")&&null===s.value&&(s.value=e.label),s.text=this.text(),s.checked=s.value===e.label,this.classList.add("do-radio"),this.classList.add("do-fn-noselect"),this.classList.add(e.color||"grey"),this.setAttribute(":class","{disabled: disabled, checked: checked}"),this.setAttribute(":click","onClick"),delete e.disabled,delete e.color,t()},render:()=>'\n \n \n ',state:{value:null,text:"",checked:!1,disabled:!1},props:{label:""},watch:{value(e){this.checked=this.props.label===e}},methods:{onClick(){this.disabled||this.checked||(this.checked=!0,this.value=this.props.label)}}}),Anot.component("switch",{__init__(e,s,t){e.hasOwnProperty("disabled")&&(s.disabled=!0),e.hasOwnProperty("checked")&&null===s.value&&(s.value=!0),s.value=!!s.value,this.classList.add("do-switch"),this.classList.add("do-fn-noselect"),this.classList.add(e.color||"grey"),this.setAttribute(":class","{disabled: disabled, checked: value}"),this.setAttribute(":click","onClick"),delete e.disabled,delete e.color,t()},render:()=>'\n \n ',state:{value:null,disabled:!1},methods:{onClick(){this.disabled||(this.value=!this.value)}}}),Anot.component("checkbox",{__init__(e,s,t){Array.isArray(s.value)||(this.parentNode.removeChild(this),Anot.error("多选框的传入值必须一个数组",TypeError)),e.hasOwnProperty("disabled")&&(s.disabled=!0),e.hasOwnProperty("checked")&&Anot.Array.ensure(s.value,e.label),s.text=this.text(),s.checked=s.value.indexOf(e.label)>-1,this.classList.add("do-checkbox"),this.classList.add("do-fn-noselect"),this.classList.add(e.color||"grey"),this.setAttribute(":class","{disabled: disabled, checked: checked}"),this.setAttribute(":click","onClick"),delete e.disabled,delete e.color,t()},render:()=>'\n \n \n \n \n ',state:{value:[],text:"",checked:!1,disabled:!1},props:{label:""},watch:{"value.*"(e,s,t,i){this.checked=this.value.indexOf(this.props.label)>-1},"value.length"(e,s,t,i){this.checked=this.value.indexOf(this.props.label)>-1},value(e,s,t,i){this.checked=this.value.indexOf(this.props.label)>-1}},methods:{onClick(){if(this.disabled)return;let{label:e}=this.props,s=this.value.$model;for(let t in s)if(s[t]===e)return this.checked=!1,void this.value.removeAt.call(this.value,t);this.checked=!0,this.value.push(e)}}}),Anot.component("input",{__init__(e,s,t){e.hasOwnProperty("disabled")&&(s.disabled=!0),e.iconR&&(s.pos="right",e.icon=e.iconR,delete e.iconR),this.classList.add("do-input"),this.classList.add("do-fn-noselect"),this.classList.add(e.color||"grey"),e.icon&&this.classList.add("icon-"+s.pos),this.setAttribute(":class","{disabled: disabled, active: active}"),this.setAttribute(":css","{width: props.width}"),delete e.disabled,delete e.color,t()},render(){let{icon:e,placeholder:s}=this.props;return'\n \n '+(e?``:"")},state:{pos:"left",value:"",disabled:!1,active:!1},skip:["pos"],props:{type:"text",width:180,placeholder:"",default:"",submit:Anot.PropsTypes.isFunction()},methods:{onFocus(){this.active=!0},onBlur(){this.active=!1},onKeyup(e){this.disabled||13===e.keyCode&&"function"==typeof this.props.submit&&this.props.submit()}}});export default Anot; \ No newline at end of file diff --git a/dist/layer/Release.md b/dist/layer/Release.md new file mode 100644 index 0000000..ef9aba3 --- /dev/null +++ b/dist/layer/Release.md @@ -0,0 +1,30 @@ +v1.0.0-base / 2017-09-20 +================== + + 统一字体图标 + + 精简动画类型 + + 优化样式 + +v0.0.4-base / 2017-04-20 +================== + + 优化offset的处理 + + 优化样式 + + +v0.0.3-base / 2017-04-15 +================== + + 重构wrap方式创建弹窗实例的实现 + + +v0.0.2-base / 2017-04-13 +================== + + 修复:layer方式创建实例时,漏掉自身的bug; + + 修复layer.open()方法打开已有实例时不返回id的bug; + + 修复layer.close()方法关闭实例时,未修改实例状态的bug; + + 修改特殊模式下的实例的最小宽度为10px; + + 优化:layer方式创建实例的逻辑处理; + + 优化layer.alert()方法参数的处理; + + +v0.0.1-base / 2017-04-06 +================== + + 完成layer base版移植 \ No newline at end of file diff --git a/dist/layer/index.js b/dist/layer/index.js new file mode 100644 index 0000000..c220319 --- /dev/null +++ b/dist/layer/index.js @@ -0,0 +1 @@ +"use strict";import "../drag/index.js";importCss("/css/layer-normal.css");Anot.ui.layer="1.0.0-normal";const LANGUAGES={en:{TITLE:"Dialog",YES_BTN:"OK",NO_BTN:"Cancel",ERROR:"The layer instance is not exists",NEED_CONTAINER:'layer "tips" require a DOM object as container'},zh:{TITLE:"提示",YES_BTN:"确定",NO_BTN:"取消",ERROR:"要关闭的layer实例不存在",NEED_CONTAINER:"tips类型需要指定一个元素节点作为容器"},"zh-TW":{TITLE:"提示",YES_BTN:"確定",NO_BTN:"取消",ERROR:"要關閉的layer實例不存在",NEED_CONTAINER:"tips类型需要指定一個元素節點作爲容器"}};LANGUAGES["zh-CN"]=LANGUAGES.zh;const lang=LANGUAGES[window.__ENV_LANG__||navigator.language]||LANGUAGES.en;let layerDom={},layerObj={},unique=null,lid=0,defconf={type:1,background:"#fff",mask:!0,maskClose:!1,maskColor:null,radius:"0px",area:["auto","auto"],title:lang.TITLE,menubar:!0,content:"",fixed:!1,shift:"cc",offset:[],btns:[lang.YES_BTN,lang.NO_BTN]};const $doc=Anot(document),uuid=function(){return"layer-"+lid++},close=function(e){if("string"!=typeof e&&"number"!=typeof e)return Anot.error(lang.ERROR);if(/^layerwrap\-/.test(e)||layerObj["layerwrap-"+e])try{if(e=(layerObj["layerwrap-"+e]?"layerwrap-":"")+e,!layerObj[e].show)return;layerObj[e].parentElem.replaceChild(layerObj[e].wrap,layerDom[e][0]),layerObj[e].wrap.style.display="none",layerObj[e].show=!1}catch(e){}else{unique=null;try{layerDom[e][0].classList.add("shift"),layerDom[e][1].classList.add("shift"),layerDom[e][0].style.opacity="",layerDom[e][1].style.opacity=0,setTimeout(function(){layerDom[e][0].parentNode.removeChild(layerDom[e][0]),delete layerDom[e],delete Anot.vmodels[e]},200)}catch(e){}}document.body.style.overflow=""},repeat=function(e,t){let o=0,s="";for(;o{this.$refs.layer.classList.remove("scale")},100)},onMaskClick:function(){this.type<4&&!this.maskClose?this.shake():this.maskClose&&this.close()},handleConfirm:function(){if(3===this.type&&!this.prompt)return this.shake();if("function"==typeof this.props.yes){let e=[this.$id];3===this.type&&e.unshift(this.prompt),this.props.yes.apply(this,e)}else this.close()},handleCancel:function(){"function"==typeof this.props.no?this.props.no.call(this,this.$id):this.close()},close:function(){close(this.$id)},cancelBubble:function(e){e.cancelBubble=!0}},mounted:function(){"function"==typeof this.props.success&&this.props.success.call(this)}},4===this.init.state.type&&(this.init.methods.autoSize=function(){let{layer:e,frame:t}=this.$refs;t.onload=function(){setTimeout(function(){try{let o=t.contentWindow.document.body,{clientWidth:s,clientHeight:n}=o;Anot(e).css({width:s,height:n,marginLeft:-s/2,marginTop:-n/2}),Anot(t).css({height:n})}catch(e){}},500)}}),this}create(){let{state:e,$id:t}=this.init,o=document.createElement("div"),s=document.createElement("div");if(o.setAttribute("anot",t),o.setAttribute(":click","onMaskClick"),o.classList.add("do-layer"),e.mask&&(o.classList.add("mask"),e.container&&e.container!==document.body&&o.classList.add("inner")),e.maskColor&&(o.style.background=e.maskColor),s.classList.add("layer-box"),s.classList.add("skin-normal"),e.extraClass&&(s.classList.add(e.extraClass),delete e.extraClass),"string"==typeof e.shift)s.classList.add("__"+e.shift);else for(let t in e.shift){let o=e.shift[t];o+=isFinite(o)?"px":"",s.style.cssText+=`${t}: ${o};`}e.toast?s.classList.add("type-toast"):s.classList.add("type-"+e.type),s.setAttribute("ref","layer"),s.setAttribute(":click","cancelBubble"),s.style.cssText+="border-radius:"+e.radius+"px",e.menubar||e.fixed||(s.setAttribute(":drag",""),s.setAttribute("data-limit","window"));var n="";"auto"!==e.area[0]&&(n+="width: "+e.area[0]+";"),"auto"!==e.area[1]&&(n+="height: "+e.area[1]+";");let i="";return 5===e.type&&(i+=''),s.innerHTML=`\n ${this.mkMenubar()}\n \n\n ${6===e.type?this.mkLoading(e.load):""}\n \n ${this.mkCtrl()}\n ${i}\n `,delete e.wrap,o.appendChild(s),[o,s]}mkLoading(e){return`\n
\n \n ${repeat(1===e?'':2===e?'':"",this.dot[e])}\n \n
\n `}mkMenubar(){let{menubar:e,fixed:t}=this.init.state,o="";return e&&(o=`\n
\n
\n `),o}mkCtrl(){let{type:e}=this.init.state;if(e>3)return"";{let t="",o='\n \n ';return e>1&&(o='\n \n '+o),t=`\n
\n ${o}\n
\n `}}append(){let{state:e,$id:t}=this.init,o=e.container;return e.type<4&&(unique&&close(unique),unique=t),layerDom[t]=this.create(),delete e.toast,this.toast=!0,o||(o=document.body),o.appendChild(layerDom[t][0]),this.vm=Anot(this.init),this}show(){let{state:e,$id:t}=this.init,o=(this.vm,e.container);setTimeout(function(){let s={background:e.background},n=getComputedStyle(layerDom[t][1]);if(5===e.type){s.color=e.color,s.opacity=1;let i=Anot(o),a=i[0].querySelector(".arrow"),r=i.innerWidth(),l=i.innerHeight(),c=i.offset().left-$doc.scrollLeft(),d=i.offset().top-$doc.scrollTop(),p=parseInt(n.width),f=parseInt(n.height),y=["top"];Anot(layerDom[t][1]).css(s),i.bind("mouseenter",o=>{let s={visibility:"visible"};c=i.offset().left-$doc.scrollLeft(),(d=i.offset().top-$doc.scrollTop())+18window.innerWidth?(s.left=c+.3*r-p,y[1]="left"):s.left=c+.7*r,a.classList.add("offset-"+y.join("-")),Anot(layerDom[t][1]).css(s)}),i.bind("mouseleave",()=>{setTimeout(()=>{a.classList.remove("offset-"+y.join("-")),y=["top"],a.style.borderBottomColor="",a.style.borderTopColor="",layerDom[t][1].style.visibility="hidden"},100)})}else{let o={opacity:1};e.offset?(o.top=fixOffset(e.offset[0]),o.right=fixOffset(e.offset[1]),o.bottom=fixOffset(e.offset[2]),o.left=fixOffset(e.offset[3]),"auto"===o.left&&"auto"===o.right&&(o.left="50%",s.marginLeft=-parseInt(n.width)/2),"auto"===o.top&&"auto"===o.bottom&&(o.top="50%",s.marginTop=-parseInt(n.height)/2)):s=Object.assign(s,{marginLeft:-parseInt(n.width)/2,marginTop:-parseInt(n.height)/2}),Anot(layerDom[t][1]).css(s),setTimeout(()=>{document.body.style.overflow="hidden",layerDom[t][1].classList.add("shift"),setTimeout(s=>{Anot(layerDom[t][1]).css(o),setTimeout(o=>{try{layerDom[t][1].classList.remove("shift"),layerDom[t][1].classList.remove("__"+e.shift)}catch(e){}},500)},50)},50)}},4),e.type>3&&(e.timeout>0?(clearTimeout(this.timeout),this.timeout=setTimeout(()=>{clearTimeout(this.timeout),close(t),6===e.type&&this.vm.props.yes.call(this.vm,t)},e.timeout)):6===e.type&&this.vm.props.yes.call(this.vm,t))}}const _layer={alert(e,t,o){let s={content:e,fixed:!0};return"function"==typeof t?s.yes=t:(t&&(s.title=t+""),o&&"function"==typeof o&&(s.yes=o)),_layer.open(s)},confirm(e,t,o,s){let n={content:e,fixed:!0,type:2};return"function"==typeof t?(n.yes=t,"function"==typeof o&&(n.no=o)):(t&&(n.title=t+""),o&&"function"==typeof o&&(n.yes=o),s&&"function"==typeof s&&(n.no=s)),_layer.open(n)},frame(e,t={}){let o={content:``,menubar:!1,maskClose:!0,type:4,...t};return _layer.open(o)},toast(e,t="info",o=2500){switch("number"==typeof t&&(o=t,t="info"),t){case"info":case"warn":break;case"error":t="deny";break;default:t="info"}let s={content:`\n \n \n ${e}\n `,menubar:!1,mask:!1,type:7,shift:"tc",timeout:o,offset:[50,"auto"],fixed:!0,toast:!0};return _layer.open(s)},load:(e,t,o)=>(e=(e>>>=0)<1?1:e>5?5:e,"function"==typeof t?(o=t,t=null):(t instanceof HTMLElement||(t=null),"function"!=typeof o&&(o=Anot.noop)),_layer.open({container:t,type:6,load:e,yes:o,menubar:!1,background:"none",shift:"ct",fixed:!0})),tips:(e,t,o={})=>t instanceof HTMLElement?(o.background||(o.background="rgba(0,0,0,.5)"),o.color||(o.color="#fff"),Object.assign(o,{container:t,content:e,type:5,fixed:!0,mask:!1,menubar:!1,timeout:0}),_layer.open(o)):Anot.error(lang.NEED_CONTAINER),prompt(e,t){if("function"!=typeof t)return console.error("argument [callback] requires a function, but "+typeof t+" given");let o={type:3,prompt:"",title:e,content:'',fixed:!0,yes:t};return _layer.open(o)},close:close,open(e){if("string"==typeof e){if(layerObj[e="layerwrap-"+e])return layerObj[e].show?e:(layerObj[e].show=!0,layerObj[e].parentElem.appendChild(layerDom[e][0]),layerDom[e][0].querySelector(".layer-content").appendChild(layerObj[e].wrap),layerObj[e].wrap.style.display="",Anot.vmodels[e]||Anot(layerObj[e].obj.init),layerObj[e].obj.show(),e);throw new Error(lang.ERROR)}return new __layer__(e).init.$id},version:Anot.ui.layer};Anot.directive("layer",{priority:8090,init:function(e){e.element.removeAttribute(e.name),e.param&&"tips"===e.param||(e.param="",e.element.style.display="none")},update:function(e){if(!e)return console.error(this),console.error(`SyntaxError: Unexpected [${this.name}=${this.expr}]`);let t=Object.assign({type:7,wrap:!0},this.element.dataset);if(this.param){if("tips"===this.param){let o=document.createElement("div"),s=document.createElement("span"),n=document.createElement("i");o.className="do-layer__tips",s.className="layer-content",n.className="arrow",s.textContent=e,o.appendChild(s),o.appendChild(n),this.element.appendChild(o),t.color&&(i.color=t.color),t.color&&(i.background=t.background);let i={},a=getComputedStyle(o),r=Anot(this.element),l=r.innerWidth(),c=r.innerHeight(),d=r.offset().left-$doc.scrollLeft(),p=r.offset().top-$doc.scrollTop(),f=parseInt(a.width),y=parseInt(a.height),u=["top"];Anot(o).css(i),r.bind("mouseenter",e=>{let s={visibility:"visible"};d=r.offset().left-$doc.scrollLeft(),(p=r.offset().top-$doc.scrollTop())+18window.innerWidth?(s.left=d+.3*l-f,u[1]="left"):s.left=d+.7*l,n.classList.add("offset-"+u.join("-")),Anot(o).css(s)}),r.bind("mouseleave",()=>{setTimeout(()=>{n.classList.remove("offset-"+u.join("-")),u=["top"],n.style.borderBottomColor="",n.style.borderTopColor="",o.style.visibility="hidden"},100)})}}else{let o={$id:"layerwrap-"+e,state:t,props:{}};t.hasOwnProperty("area")&&(t.area=t.area.split(",")),t.hasOwnProperty("offset")&&(t.offset=t.offset.split(",")),t.hasOwnProperty("btns")&&(t.btns=t.btns.split(",")),t.hasOwnProperty("menubar")||(t.menubar=!1);let s=(new __layer__).__init__(o);for(let e in this.element.dataset)delete this.element.dataset[e];layerObj[s.init.$id]={obj:s,parentElem:this.element.parentNode,wrap:this.element,show:!1},layerDom[s.init.$id]=s.create()}}}),window.layer=_layer;export default _layer; \ No newline at end of file diff --git a/dist/pager/index.js b/dist/pager/index.js new file mode 100644 index 0000000..66b4d80 --- /dev/null +++ b/dist/pager/index.js @@ -0,0 +1 @@ +"use strict";importCss("/css/pager.css");function calculate({currPage:t,maxPageShow:e,totalPage:a}){let s=[],r=0,o=t1&&s.push("..."),a-t0&&s.push(e);return t+o1?e.pageList.pushArray(calculate({currPage:t,totalPage:a,maxPageShow:s})):e.pageList.pushArray([1])}Anot.ui.pager="1.0.0";const tmpls={home:'',end:'',prev:'',next:'',pager:'',curr:'',total:'共 {{totalPage}} 页 {{totalItem}} 条',jumper:'
前往\n 页\n
',slot:""};export default Anot.component("pager",{__init__:function(t,e,a){this.classList.add("do-pager"),this.classList.add("do-fn-noselect"),this.setAttribute(":class","{{classList.join(' ')}}"),t.theme=+t.theme||1,t.simpleMode&&(t.theme=1),e.classList=e.classList.concat("skin-"+t.theme,t.color||"plain",t.size||"mini"),t.total&&(e.totalItem=+t.total),t.pageSize&&(e.pageSize=+t.pageSize),t.layout||(t.layout="total,home,prev,pager,next,end,jumper"),2===t.theme&&(t.radius=null),delete t.total,delete t.pageSize,delete t.color,delete t.size,a()},render:function(t){let{layout:e,theme:a,simpleMode:s}=this.props;return s?e=["prev","curr","next"]:(e=e.replace(/\s/g,""),2===a&&(e=e.replace(/total|jumper/g,"")),e=e.split(",")),(e=e.map(e=>"slot"!==e?tmpls[e]||"":t&&t.extra?t.extra.join(""):void 0)).join("\n")},componentWillMount:function(){const{currPage:t,totalPage:e,props:a}=this;this.pageList.clear(),this.pageList.pushArray(calculate({currPage:t,totalPage:e,maxPageShow:a.maxPageShow}))},componentDidMount:function(){"function"==typeof this.props.created&&this.props.created(this)},state:{classList:[],currPage:1,totalItem:1,pageSize:20,inputPage:1,pageList:[]},computed:{totalPage:function(){return Math.ceil(this.totalItem/this.pageSize)}},props:{url:null,maxPageShow:5,simpleMode:!1,radius:3,pageChanged:Anot.PropsTypes.isFunction(),created:Anot.PropsTypes.isFunction()},skip:["classList"],methods:{parseUrl(t){return(t>>>=0)<1||!this.props.url||this.currPage===t?"":this.props.url.replace("{id}",t)},go(t,e){let{inputPage:a,totalPage:s,currPage:r}=this,o=e&&e.target||null;if(!(o&&o.disabled||r===t))if(t&&o){if("..."!==t){let e=o.dataset.to;e?location.href=e:t>>>=0,update(t,this)}}else if(null===t){if(a>>>=0,e&&13===e.keyCode){if(a<1||r===a)return this.inputPage=r;a>s&&(a=s),this.inputPage=a,update(a,this)}}else update(t>>>=0,this)},setSize(t){t=+t,this.pageSize!==t&&(this.pageSize=+t,update(1,this))},setTotal(t){t=+t,this.totalItem!==t&&(this.totalItem=+t,update(1,this))}}}); \ No newline at end of file diff --git a/dist/request/index.js b/dist/request/index.js new file mode 100644 index 0000000..1036cee --- /dev/null +++ b/dist/request/index.js @@ -0,0 +1 @@ +"use strict";import Format from "./lib/format.js";const rlocalProtocol=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,encode=encodeURIComponent,decode=decodeURIComponent,toS=Object.prototype.toString,win=window,doc=win.document,noop=function(t,e){this.defer.resolve(e)},Xhr=function(){return new XMLHttpRequest},supportCors="withCredentials"in Xhr();let isLocal=!1;try{isLocal=rlocalProtocol.test(location.ptyperotocol)}catch(t){}let originAnchor=doc.createElement("a");originAnchor.href=location.href;const noBodyMethods=["GET","HEAD","JSONP"],error={10001:"argument url is required",10002:'method "set" required an object or 2 args',10003:'method "send" can not call by different way',10004:'method "send" arguments error',10005:'method "send" required an object/string or 2 args',10006:'method "field" required an object or 2 args',10011:"Promise required a callback",10012:"Parse error",10104:"Request pending...",10200:"ok",10204:"no content",10304:"not modified",10500:"Internal Server Error",10504:"Connected timeout",form:"application/x-www-form-urlencoded; charset=UTF-8",json:"application/json; charset=UTF-8",text:"text/plain; charset=UTF-8"},convert={text:t=>t,xml:(t,e)=>void 0!==e?e:Format.parseXML(t),html:t=>Format.parseHTML(t),json:t=>JSON.parse(t),script:t=>Format.parseJS(t),jsonp(t){var e=request.cache[t];return delete request.cache[t],e}};class _Request{constructor(t="",e="GET"){if(!t)throw new Error(error[10001]);e=e.toUpperCase(),this.transport=Object.create(null),this.xhr=Xhr(),this.defer=Promise.defer(),this.opt={url:t,method:e,form:null,data:{},headers:{},timeoutID:0,uuid:Math.random().toString(16).slice(2)}}_formData(){if(this.opt.form){let t=Format.parseForm(this.opt.form);Format.merge(this.opt.data,t)}let t=new FormData;for(let e in this.opt.data){let r=this.opt.data[e];Array.isArray(r)?r.forEach(function(r){t.append(e+"[]",r)}):t.append(e,this.opt.data[e])}return t}_jsonp(t){win[t]=function(e){delete win[t],request.cache[t]=e}}_dispatch(t){if(!this.transport)return this.defer.reject(error[10104]);let e={response:{url:this.opt.url,headers:{"content-type":""}},request:{url:this.opt.url,headers:this.opt.headers},status:null===t?504:200,statusText:null===t?"Connected timeout":"ok",text:"",body:"",error:null};if(clearTimeout(this.opt.timeoutID),this.transport.nodeType&&"JSONP"===this.opt.method){if(this.transport.parentNode.removeChild(this.transport),!t){(!this.transport.readyState||"loaded"===this.transport.readyState||"complete"===this.transport.readyState)&&(e.body=convert.jsonp(this.opt.data.callback),e.text=JSON.stringify(e.body))}this.defer.resolve(e)}else{let o=!t&&(this.transport.status>=200&&this.transport.status<400);(!t&&this.transport.getAllResponseHeaders().split("\n")||[]).forEach(function(t,r){(t=t.trim())&&(t=t.split(":"),e.response.headers[t.shift().toLowerCase()]=t.join(":").trim())}),o?(e.status=this.transport.status,204===e.status?e.statusText=error[10204]:304===e.status&&(e.statusText=error[10304])):(e.status=t?504:this.transport.status||500,e.statusText=t?error[10504]:this.transport.statusText||error[10500],e.error=new Error(e.statusText));try{var r=e.response.headers["content-type"].match(/json|xml|script|html/i)||["text"];r=r[0].toLowerCase(),e.text=t?"":this.transport.responseText||this.transport.responseXML,e.body=convert[r](e.text,!t&&this.transport.responseXML)}catch(t){e.error=t,e.statusText=error[10012]}e.status>=200&&e.status<400?this.defer.resolve(e):this.defer.reject(e)}delete this.transport,delete this.opt,delete this.xhr}type(t){return"form-data"===this.opt.formType?this:(this.opt.formType=t||"form","form"===t||noBodyMethods.indexOf(this.opt.method)>-1?this.set("content-type",error.form):"json"===t?this.set("content-type",error.json):this.set("content-type",error.text),this)}set(t,e){if(!this.transport)return this;let r={};if(1===arguments.length){if("object"!=typeof t)return this.defer.reject(error[10002]),this;r=t}else{if(2!==arguments.length)return this.defer.reject(error[10002]),this;"string"==typeof t&&void 0!==e&&(r[t]=e)}for(let t in r){let e=r[t];t=t.toLowerCase(),this.opt.headers[t]=e}return this}send(t,e){if(!this.transport)return this;if(1===arguments.length)if("string"==typeof t)this.opt.data=t;else if("object"==typeof t){if("object"!=typeof this.opt.data)return this.defer.reject(error[10003]),this;Format.merge(this.opt.data,t)}else this.defer.reject(error[10004]);else if(2===arguments.length){if("string"!=typeof t)return this.defer.reject(error[10004]),this;void 0===e?delete this.opt.data[t]:this.opt.data[t]=e}else this.defer.reject(error[10005]);return this}field(t,e){return this.transport?(this.opt.formType="form-data",this.opt.method="POST",this.opt.data&&"object"==typeof this.opt.data||(this.opt.data={}),1===arguments.length&&"object"==typeof t?Format.merge(this.opt.data,t):2===arguments.length?this.opt.data[t]=e:this.defer.reject(error[10006]),this):this}cache(t){return this.transport?(noBodyMethods.indexOf(this.opt.method)>-1&&(this.opt.cache=!!t),this):this}abort(){return delete this.transport,this.opt.form||this.xhr.abort(),this}timeout(t){return"number"!=typeof t||t<1?this:(this.opt.timeout=t,this)}form(t){return"object"==typeof t&&"FORM"===t.nodeName&&(this.opt.method="POST",this.opt.form=t),this}then(t){if("function"!=typeof t)return this.defer.reject(error[10011]),this.defer.promise;if(!this.transport)return this.defer.promise;if(this.opt.url=this.opt.url.replace(/#.*$/,"").replace(/^\/\//,location.protocol+"//"),"boolean"!=typeof this.opt.crossDomain){var e=doc.createElement("a");try{e.href=this.opt.url;var r="1"[0]?e.href:e.getAttribute("href",4);e.href=r,e.async=!0,this.opt.crossDomain=originAnchor.protocol!==e.protocol||originAnchor.host!==e.host}catch(t){this.opt.crossDomain=!0}}if("JSONP"===this.opt.method&&(this.opt.crossDomain?(this.opt.data.callback=this.opt.data.callback||"jsonp"+request.cid++,this._jsonp(this.opt.data.callback)):this.opt.method="GET"),"JSONP"!==this.opt.method&&this.set("X-Requested-With","XMLHttpRequest"),this.opt.crossDomain&&supportCors&&(this.xhr.withCredentials=!0),this.opt.param=Format.param(this.opt.data),this.opt.formType||this.type("form"),noBodyMethods.indexOf(this.opt.method)<0?"form-data"===this.opt.formType?(delete this.opt.headers["content-type"],this.opt.param=this._formData()):"form"!==this.opt.formType&&("object"==typeof this.opt.data&&(this.opt.data=JSON.stringify(this.opt.data)),this.opt.param=this.opt.data):(this.opt.param&&(this.opt.url+=(/\?/.test(this.opt.url)?"&":"?")+this.opt.param),!1===this.opt.cache&&(this.opt.url+=(/\?/.test(this.opt.url)?"&":"?")+"_="+Math.random())),"JSONP"===this.opt.method)this.transport=doc.createElement("script"),this.transport.onerror=this.transport.onload=(()=>{this._dispatch()}),this.transport.src=this.opt.url,doc.head.insertBefore(this.transport,doc.head.firstChild),this.opt.timeout&&this.opt.timeout>0&&(this.opt.timeoutID=setTimeout(()=>{this.transport.onerror=this.transport.onload=null,this._dispatch(!0)},this.opt.timeout));else{for(var o in this.transport=this.xhr,this.xhr.onreadystatechange=(t=>{this.opt.timeout&&this.opt.timeout>0&&(this.opt["time"+this.xhr.readyState]=t.timeStamp,4===this.xhr.readyState&&(this.opt.isTimeout=this.opt.time4-this.opt.time1>this.opt.timeout)),4===this.xhr.readyState&&this._dispatch(this.opt.isTimeout)}),this.xhr.open(this.opt.method,this.opt.url,!0),this.opt.headers)this.xhr.setRequestHeader(o,this.opt.headers[o]);this.xhr.send(this.opt.param),this.opt.timeout&&this.opt.timeout>0&&(this.xhr.timeout=this.opt.timeout)}return this.defer.promise.then(e=>t(e))}}win.request||(win.request={get:t=>new _Request(t,"GET"),post:t=>new _Request(t,"POST"),jsonp:t=>new _Request(t,"JSONP"),open:(t,e="GET")=>new _Request(t,e),cache:{},cid:0,version:"1.1.0-normal"},Anot.ui.request=request.version);export default request; \ No newline at end of file diff --git a/dist/request/lib/format.js b/dist/request/lib/format.js new file mode 100644 index 0000000..8275e56 --- /dev/null +++ b/dist/request/lib/format.js @@ -0,0 +1 @@ +"use strict";function serialize(e,t,r){var o;if(Array.isArray(t))t.forEach(function(t,a){o=e?e+"["+(Array.isArray(t)?a:"")+"]":a,"object"==typeof t?serialize(o,t,r):r(o,t)});else for(var a in t)o=e?e+"["+a+"]":a,"object"==typeof t[a]?serialize(o,t[a],r):r(o,t[a])}var toS=Object.prototype.toString,doc=window.document,encode=encodeURIComponent,decode=decodeURIComponent,TagHooks=function(){this.option=doc.createElement("select"),this.thead=doc.createElement("table"),this.td=doc.createElement("tr"),this.area=doc.createElement("map"),this.tr=doc.createElement("tbody"),this.col=doc.createElement("colgroup"),this.legend=doc.createElement("fieldset"),this._default=doc.createElement("div"),this.g=doc.createElementNS("http://www.w3.org/2000/svg","svg"),this.optgroup=this.option,this.tbody=this.tfoot=this.colgroup=this.caption=this.thead,this.th=this.td},Format=function(){var e=this;this.tagHooks=new TagHooks,"circle,defs,ellipse,image,line,path,polygon,polyline,rect,symbol,text,use".replace(/,/g,function(t){e.tagHooks[t]=e.tagHooks.g}),this.rtagName=/<([\w:]+)/,this.rxhtml=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,this.scriptTypes={"text/javascript":1,"text/ecmascript":1,"application/ecmascript":1,"application/javascript":1},this.rhtml=/<|&#?\w+;/};Format.prototype={parseJS:function(code){if(code=(code+"").trim(),code)if(1===code.indexOf("use strict")){var script=doc.createElement("script");script.text=code,doc.head.appendChild(script).parentNode.removeChild(script)}else eval(code)},parseXML:function(e,t,r){try{t=(new DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&t.documentElement&&!t.getElementsByTagName("parsererror").length||console.error("Invalid XML: "+e),t},parseHTML:function(e){var t=doc.createDocumentFragment().cloneNode(!1);if("string"!=typeof e)return t;if(!this.rhtml.test(e))return t.appendChild(document.createTextNode(e)),t;e=e.replace(this.rxhtml,"<$1>").trim();var r=(this.rtagName.exec(e)||["",""])[1].toLowerCase(),o=this.tagHooks[r]||this.tagHooks._default,a=null;o.innerHTML=e;var i=o.getElementsByTagName("script");if(i.length)for(var c,n=0;c=i[n++];)if(this.scriptTypes[c.type]){var s=doc.createElement("script").cloneNode(!1);c.attributes.forEach(function(e){s.setAttribute(e.name,e.value)}),s.text=c.text,c.parentNode.replaceChild(s,c)}for(;a=o.firstChild;)t.appendChild(a);return t},param:function(e){if(!e||"string"==typeof e||"number"==typeof e)return e;var t=[];return"object"==typeof e&&serialize("",e,function(e,r){/native code/.test(r)||(r="function"==typeof r?r():r,r="[object File]"!==toS.call(r)?encode(r):r,t.push(encode(e)+"="+r))}),t.join("&")},parseForm:function(e){for(var t,r={},o=0;t=e.elements[o++];)switch(t.type){case"select-one":case"select-multiple":if(t.name.length&&!t.disabled)for(var a,i=0;a=t.options[i++];)a.selected&&(r[t.name]=a.value||a.text);break;case"file":t.name.length&&!t.disabled&&(r[t.name]=t.files[0]);break;case void 0:case"submit":case"reset":case"button":break;case"radio":case"checkbox":if(!t.checked)break;default:t.name.length&&!t.disabled&&(r[t.name]=t.value)}return r},merge:function(e,t){if("object"!=typeof e||"object"!=typeof t)throw new TypeError("argument must be an object");if(Object.assign)return Object.assign(e,t);for(var r in t)e[r]=t[r];return e}};export default new Format; \ No newline at end of file diff --git a/dist/request/light.js b/dist/request/light.js new file mode 100644 index 0000000..e69de29 diff --git a/dist/store/index.js b/dist/store/index.js new file mode 100644 index 0000000..01bdfa4 --- /dev/null +++ b/dist/store/index.js @@ -0,0 +1 @@ +const __STORE__={};function parse$And(_){let t="";for(let e in _){let i=_[e];switch(Anot.type(i)){case"object":if(i.$has){t+=`it.${e}.indexOf(${JSON.stringify(i.$has)}) > -1`;break}if(i.$in){t+=`${JSON.stringify(i.$in)}.indexOf(it.${e}) > -1`;break}if(i.$regex){t+=`${i.$regex}.test(it.${e})`;break}if(i.$lt||i.$lte){t+=`it.${e} <${i.$lte?"=":""} ${i.$lt||i.$lte}`,(i.$gt||i.$gte)&&(t+=` && it.${e} >${i.$gte?"=":""} ${i.$gt||i.$gte}`);break}if(i.$gt||i.$gte){t+=`it.${e} >${i.$gte?"=":""} ${i.$gt||i.$gte}`;break}if(i.$eq){t+=`it.${e} === ${i.$eq}`;break}default:t+=`it.${e} === ${JSON.stringify(_[e])}`}t+=" && "}return(t=t.slice(0,-4))||(t="true"),t}function parse$Or(_){let t="";return _.forEach(_=>{t+="(",t+=parse$And(_),t+=") || "}),t.slice(0,-4)}class AnotStore{constructor(_){Anot.hideProperty(this,"__name__",_),Anot.hideProperty(this,"__LAST_QUERY__",""),Anot.hideProperty(this,"__QUERY_HISTORY__",[]),__STORE__[_]||(__STORE__[_]=[],__STORE__[`${_}Dict`]={})}static collection(_){return new this(_)}__MAKE_FN__(_){let t="\n let result = [];\n let num = 0;\n for (let it of arr) {\n if(";return _.$or?t+=parse$Or(_.$or):t+=parse$And(_),t+="){\n result.push(it)\n num++\n if(limit > 0 && num >= limit){\n break\n }\n }\n }\n return result;",Function("arr","limit",t)}clear(_){this.__QUERY_HISTORY__=[],this.__LAST_QUERY__="",_&&(__STORE__[this.__name__]=[],__STORE__[`${this.__name__}Dict`]={})}getAll({filter:_,limit:t=[]}={}){const e=__STORE__[this.__name__];let i=[],r=!1;if(!e||!e.length)return i;if(t.length<1&&(t=[0]),t.length<2&&_&&(r=!0,t[0]>0&&t.unshift(0)),_){let n=JSON.stringify(_);if(this.__LAST_QUERY__===n)i=this.__QUERY_HISTORY__.slice.apply(this.__QUERY_HISTORY__,t);else{i=this.__MAKE_FN__(_)(e,r&&t[1]||0),r||(this.__LAST_QUERY__=n,this.__QUERY_HISTORY__=i,i=this.__QUERY_HISTORY__.slice.apply(this.__QUERY_HISTORY__,t))}}else i=e.slice.apply(e,t);return Anot.deepCopy(i)}get(_){const t=__STORE__[`${this.__name__}Dict`];return Anot.deepCopy(t[_])||null}count({filter:_}={}){return _?this.__LAST_QUERY__===JSON.stringify(_)?this.__QUERY_HISTORY__.length:this.getAll({filter:_,limit:[0]}).length:__STORE__[this.__name__].length}__INSERT__(_,t){let e=__STORE__[this.__name__],i=__STORE__[`${this.__name__}Dict`],r=_[t||"id"];i[r]?this.update(r,_):(e.push(_),i[r]=_)}insert(_,t){Array.isArray(_)||(_=[_]),_.forEach(_=>{this.__INSERT__(_,t)}),this.clear()}sort(_,t,e){let i="";t&&window.Intl&&(i+="\n let col = new Intl.Collator('zh')\n "),i+=e?"return arr.sort((b, a) => {":"return arr.sort((a, b) => {",i+=`\n let filter = function(val) {\n try {\n return val.${_} || ''\n } catch (err) {\n return ''\n }\n }\n `,t?window.Intl?i+="return col.compare(filter(a), filter(b))":i+="return (filter(a) + '').localeCompare(filter(b), 'zh')":i+="return filter(a) - filter(b)",i+="\n})",Function("arr",i).call(this,__STORE__[this.__name__]),this.clear()}update(_,t){let e=__STORE__[this.__name__],i=__STORE__[`${this.__name__}Dict`],r=i[_],n=e.indexOf(r);Object.assign(r,t),e.splice(n,1,r),i[_]=r}remove(_){let t=__STORE__[this.__name__],e=__STORE__[`${this.__name__}Dict`],i=e[_id],r=t.indexOf(i);t.splice(r,1),delete e[_id]}}Anot.store=window.store=AnotStore;export default AnotStore; \ No newline at end of file diff --git a/images/album.jpg b/images/album.jpg new file mode 100644 index 0000000..a7d05f2 Binary files /dev/null and b/images/album.jpg differ diff --git a/images/album.png b/images/album.png new file mode 100644 index 0000000..55a7ee4 Binary files /dev/null and b/images/album.png differ diff --git a/images/avatar.jpg b/images/avatar.jpg new file mode 100644 index 0000000..2cafca7 Binary files /dev/null and b/images/avatar.jpg differ diff --git a/images/btn_close_focus@2x.png b/images/btn_close_focus@2x.png new file mode 100644 index 0000000..5fbaab7 Binary files /dev/null and b/images/btn_close_focus@2x.png differ diff --git a/images/btn_close_hover@2x.png b/images/btn_close_hover@2x.png new file mode 100755 index 0000000..f3b55cb Binary files /dev/null and b/images/btn_close_hover@2x.png differ diff --git a/images/btn_gray@2x.png b/images/btn_gray@2x.png new file mode 100755 index 0000000..d0a793b Binary files /dev/null and b/images/btn_gray@2x.png differ diff --git a/images/btn_max_focus@2x.png b/images/btn_max_focus@2x.png new file mode 100644 index 0000000..e5df06d Binary files /dev/null and b/images/btn_max_focus@2x.png differ diff --git a/images/btn_max_hover@2x.png b/images/btn_max_hover@2x.png new file mode 100644 index 0000000..9a6530d Binary files /dev/null and b/images/btn_max_hover@2x.png differ diff --git a/images/btn_min_focus@2x.png b/images/btn_min_focus@2x.png new file mode 100644 index 0000000..beae88d Binary files /dev/null and b/images/btn_min_focus@2x.png differ diff --git a/images/btn_min_hover@2x.png b/images/btn_min_hover@2x.png new file mode 100644 index 0000000..d7e327b Binary files /dev/null and b/images/btn_min_hover@2x.png differ diff --git a/images/disk.png b/images/disk.png new file mode 100644 index 0000000..d647938 Binary files /dev/null and b/images/disk.png differ diff --git a/images/tray_16x16.png b/images/tray_16x16.png new file mode 100644 index 0000000..b5debaf Binary files /dev/null and b/images/tray_16x16.png differ diff --git a/images/tray_16x16@2x.png b/images/tray_16x16@2x.png new file mode 100644 index 0000000..55e39d5 Binary files /dev/null and b/images/tray_16x16@2x.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..6f60b5e --- /dev/null +++ b/index.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+ + + + + +
+ +
+ +
+ + + \ No newline at end of file diff --git a/js/api.js b/js/api.js new file mode 100644 index 0000000..e3a8b72 --- /dev/null +++ b/js/api.js @@ -0,0 +1,108 @@ +/** + * 音乐APP接口 + * @author yutent + * @date 2018/12/24 16:02:00 + */ + +'use strict' + +import request from '/dist/request/index.js' + +const log = console.log + +const BASE_API_URI = 'http://mobilecdnbj.kugou.com' + +const get = uri => { + return request.get(BASE_API_URI + uri) +} + +const post = uri => { + return request.post(BASE_API_URI + uri) +} + +export default { + getLastHot100Artists() { + return get('/api/v5/singer/list') + .send({ + sort: 1, + showtype: 1, + sextype: 0, + musician: 0, + pagesize: 100, + plat: 2, + type: 0, + page: 1 + }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + }, + + getArtistList(sextype = 1, type = 1) { + return get('/api/v5/singer/list') + .send({ + showtype: 2, + musician: 0, + type, + sextype + }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + }, + + getArtistInfo(singerid) { + return get('/api/v3/singer/info') + .send({ singerid }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + }, + + getArtistInfo(singerid) { + return get('/api/v3/singer/info') + .send({ singerid }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + }, + + getArtistSongs(singerid, page = 1) { + return get('/api/v3/singer/song') + .send({ + sorttype: 2, + pagesize: 50, + singerid, + area_code: 1, + page + }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + }, + + getArtistAlbums(singerid, page = 1) { + return get('/api/v3/singer/album') + .send({ + pagesize: 50, + singerid, + area_code: 1, + page + }) + .then(res => { + if (res.status === 200) { + return JSON.parse(res.text) + } + }) + } +} diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..c87e6c5 --- /dev/null +++ b/js/app.js @@ -0,0 +1,339 @@ +/** + * {sonist app} + * @author yutent + * @date 2018/12/16 17:15:57 + */ + +import '/dist/anot.next.js' +import layer from '/dist/layer/index.js' +import store from '/dist/store/index.js' +import AudioPlayer from '/dist/audio/index.js' + +import Api from '/js/api.js' + +import Artist from '/js/modules/artist.js' +import Local from '/js/modules/local.js' + +const log = console.log + +const fs = require('iofs') +const path = require('path') +const crypto = require('crypto.js') +const { exec } = require('child_process') +const { + remote: { app } +} = require('electron') + +const HOME_PATH = app.getPath('appData') +const APP_INI_PATH = path.join(HOME_PATH, 'app.ini') +const MUSIC_DB_PATH = path.join(HOME_PATH, 'music.db') +const PLAY_MODE = { + 0: 'all', + 1: 'single', + 2: 'random' +} +const FONTS_NAME = + ' Helvetica, Arial,"WenQuanYi Micro Hei","PingFang SC","Hiragino Sans GB","Segoe UI", "Microsoft Yahei", sans-serif' + +// 本地音乐和试用音乐列表 +window.LS = store.collection('local') +window.TS = store.collection('temp') +// 音乐播放器 +window.SONIST = new AudioPlayer() + +let appInit = fs.cat(APP_INI_PATH) +let dbCache = fs.cat(MUSIC_DB_PATH) + +dbCache = JSON.parse(dbCache) +appInit = JSON.parse(appInit) +LS.insert(dbCache) + +dbCache = null + +let list = fs.ls('/Volumes/extends/music') + +let hasNew = false +// list.forEach(it => { +// let name = path.basename(it) +// if (name.startsWith('.')) { +// return +// } +// let hash = crypto.md5Sign(it) +// if (LS.get(hash)) { +// return +// } +// hasNew = true +// AudioPlayer.ID3(it).then(tag => { +// LS.insert({ +// id: hash, +// title: tag.title, +// album: tag.album, +// artist: tag.artist, +// path: `file://${it}`, +// duration: tag.duration +// }) +// }) +// }) + +if (hasNew) { + setTimeout(() => { + dbCache = JSON.stringify(LS.getAll(), '', 2) + log(dbCache, MUSIC_DB_PATH) + fs.echo(dbCache, MUSIC_DB_PATH) + }, 500) +} + +Anot({ + $id: 'app', + state: { + theme: 1, // 1:macos, 2: deepin + winFocus: true, + mod: 'local', + playMode: Anot.ls('play-mode') >>> 0, // 0:all | 1:single | 2:random + isPlaying: false, + curr: { + id: '', + index: 0, + title: '', + artist: '', + album: '', + time: 0, + duration: 0 + }, + + currTimeBar: '', + currTimeBarPercent: 0, + __DEG__: 0.01 + }, + skip: [], + computed: { + views() { + if (!this.mod) { + return + } + return '/views/' + this.mod + '.htm' + } + }, + watch: { + 'curr.*'() { + let { time, duration } = this.curr + let x = time / duration + + this.currTimeBar = `matrix(1, 0, 0, 1, ${x * this.__TB_WIDTH__}, 0)` + this.currTimeBarPercent = 100 * x + '%' + }, + mod(val) { + this.activeModule(val) + } + }, + mounted() { + let canvas = this.$refs.player + + // 画布放大4倍, 以解决模糊的问题 + this.__WIDTH__ = canvas.clientWidth * 4 + this.__HEIGHT__ = canvas.clientHeight * 4 + + canvas.width = this.__WIDTH__ + canvas.height = this.__HEIGHT__ + this.__CTX__ = canvas.getContext('2d') + + // 修改歌曲进度 + canvas.addEventListener( + 'click', + ev => { + let rect = canvas.getBoundingClientRect() + let aw = rect.width + let ax = ev.pageX - rect.left + let ay = ev.pageY - rect.top + + log(aw, ax, ay) + if (ax > 124 && ay > 55 && ay < 64) { + let pp = (ax - 124) / (aw - 124) + this.curr.time = pp * this.curr.duration + log(pp, this.curr.time) + SONIST.seek(this.curr.time) + } + }, + true + ) + + // 设置循环模式 + SONIST.mode = PLAY_MODE[this.playMode] + + SONIST.on('play', time => { + this.curr.time = time + }) + + SONIST.on('end', time => { + this.nextSong(1) + }) + + this.activeModule(this.mod) + }, + methods: { + quit() {}, + minimize() {}, + maximize() {}, + + activeModule(mod) { + switch (mod) { + case 'artist': + Artist.__init__() + break + case 'local': + Local.__init__() + break + default: + break + } + }, + toggleModule(mod) { + if (['radio', 'mv'].includes(mod)) { + return + } + this.mod = mod + }, + togglePlayMode() { + let mod = this.playMode + mod++ + if (mod > 2) { + mod = 0 + } + this.playMode = mod + SONIST.mode = PLAY_MODE[mod] + Anot.ls('play-mode', mod) + }, + + draw() { + let img1 = new Image() + let img2 = new Image() + let p1 = Promise.defer() + let p2 = Promise.defer() + let { title, artist, cover } = this.curr + let play = this.isPlaying + + img1.onload = p1.resolve + img2.onload = p2.resolve + img1.src = '/images/disk.png' + img2.src = cover || '/images/album.png' + + let rx = (play ? 112 : 40) + this.__HEIGHT__ / 2 // 旋转唱片的圆心坐标X + let ry = this.__HEIGHT__ / 2 // 旋转唱片的圆心坐标Y + let pw = this.__WIDTH__ - this.__HEIGHT__ - 180 // 进度条总长度 + let wl = this.__HEIGHT__ + 180 // 文字的坐标X + const draw = () => { + let { time, duration } = this.curr + let pp = time / duration // 进度百分比 + time = Anot.filters.time(time) + duration = Anot.filters.time(duration) + + this.__CTX__.clearRect(0, 0, this.__WIDTH__, this.__HEIGHT__) + this.__CTX__.save() + + // 将原点移到唱片圆心, 旋转完再回到初始值 + this.__CTX__.translate(rx, ry) + this.__CTX__.rotate(this.__DEG__ * Math.PI) + this.__CTX__.translate(-rx, -ry) + + this.__CTX__.drawImage( + img1, + play ? 112 : 40, + 0, + this.__HEIGHT__, + this.__HEIGHT__ + ) + + this.__CTX__.restore() + + this.__CTX__.drawImage(img2, 0, 0, this.__HEIGHT__, this.__HEIGHT__) + + // 歌曲标题和歌手 + this.__CTX__.fillStyle = '#62778d' + this.__CTX__.font = '56px' + FONTS_NAME + this.__CTX__.fillText(`${title} - ${artist}`, wl, 100) + + // 时间 + this.__CTX__.fillStyle = '#98acae' + this.__CTX__.font = '48px' + FONTS_NAME + this.__CTX__.fillText( + `${time} / ${duration}`, + this.__WIDTH__ - 280, + 100 + ) + + // 歌词 + this.__CTX__.fillStyle = '#98acae' + this.__CTX__.font = '48px' + FONTS_NAME + this.__CTX__.fillText(`暂无歌词...`, wl, 180) + + // 进度条 + this.__CTX__.fillStyle = '#dae1e9' + this.__CTX__.fillRect(wl, 230, pw, 16) + this.__CTX__.fillStyle = '#3fc2a7' + this.__CTX__.fillRect(wl, 230, pw * pp, 16) + + this.__DEG__ += 0.01 + } + + Promise.all([p1.promise, p2.promise]).then(_ => { + clearInterval(this.timer) + if (play) { + this.timer = setInterval(() => { + draw(img1, img2, play, rx, ry) + }, 20) + } else { + draw(img1, img2, play, rx, ry) + } + }) + }, + + nextSong(step) { + let _p = null + if (step > 0) { + _p = SONIST.next() + } else { + _p = SONIST.prev() + } + this.isPlaying = false + _p.then(it => { + this.curr = { + ...it, + time: 0, + cover: + 'http://imge.kugou.com/stdmusic/480/20170906/20170906161516611883.jpg' + } + // 通知子模块歌曲已经改变 + this.$fire('child!curr', it.id) + this.play() + }) + }, + + pause() { + this.isPlaying = false + }, + + play(song) { + // 有参数的,说明是播放回调通知 + // 此时仅更新播放控制条的信息即可 + if (song) { + this.curr = { + ...song, + time: 0, + cover: + 'http://imge.kugou.com/stdmusic/480/20170906/20170906161516611883.jpg' + } + this.isPlaying = true + } else { + if (SONIST.stat === 'ready') { + if (this.isPlaying) { + SONIST.pause() + } else { + SONIST.play() + } + this.isPlaying = !this.isPlaying + } + } + this.draw() + } + } +}) diff --git a/js/modules/artist.js b/js/modules/artist.js new file mode 100644 index 0000000..87b8ff0 --- /dev/null +++ b/js/modules/artist.js @@ -0,0 +1,139 @@ +/** + * 歌手模块 + * @author yutent + * @date 2018/12/24 17:00:48 + */ + +'use strict' + +import Api from '/js/api.js' + +const log = console.log + +export default Anot({ + $id: 'artist', + state: { + filter: 'hot', + list: [], //歌手列表 + display: 'artist', // list | artist | album + artist: { + avatar: + 'http://singerimg.kugou.com/uploadpic/softhead/240/20181023/20181023141706176.jpg', + id: 3060, + name: '薛之谦', + info: '', + songCount: 0, + mvCount: 0, + albumCount: 0 + }, + songList: [], //单曲列表 + albumList: [] //专辑列表 + }, + methods: { + __init__() { + // Api.getArtistList().then(json => { + // log(json) + // }) + // this.getHotArtist() + this.getArtistInfo() + }, + search(ev) { + let target = ev.target + if (target.tagName !== 'SECTION') { + return + } + let key = target.dataset.key + + this.filter = key + + switch (key) { + case 'hot': + this.getHotArtist() + break + default: + key = key.split(',') + this.getArtistList.apply(this, key) + } + }, + + pickArtist(ev) { + if (ev.target === ev.currentTarget) { + return + } + let target = ev.target + while (target.tagName !== 'LI') { + target = target.parentNode + } + + let { index } = target.dataset + + let artist = this.list[index] + + this.artist.id = artist.id + this.artist.name = artist.name + this.artist.avatar = artist.avatar + + this.display = 'artist' + + this.getArtistInfo() + }, + + showArtistInfo() { + layer.open({ + type: 7, + title: '歌手详细介绍', + content: this.artist.info, + fixed: true, + maskClose: true, + extraClass: 'artist-desc-layer' + }) + }, + + toArtistListPage() { + this.display = 'list' + }, + + getArtistInfo() { + Api.getArtistInfo(this.artist.id).then(json => { + log(json) + + this.artist.info = json.data.intro.replace(/\n/g, '
') + this.artist.songCount = json.data.songcount + this.artist.mvCount = json.data.mvcount + this.artist.albumCount = json.data.albumcount + }) + }, + + getHotArtist() { + let cache = Anot.ss('hot-artist') + if (cache) { + cache = JSON.parse(cache) + this.list.clear() + this.list.pushArray(cache) + } else { + Api.getLastHot100Artists().then(json => { + log(json) + let list = json.data.info.map(it => { + return { + id: it.singerid, + name: it.singername, + avatar: it.imgurl.replace('{size}', '240'), + fans: it.fanscount + } + }) + + Anot.ss('hot-artist', JSON.stringify(list)) + + this.list.clear() + this.list.pushArray(list) + }) + } + }, + + getArtistList(type, sextype) { + // Api.getArtistList().then(json => { + // log(json) + // }) + } + } +}) diff --git a/js/modules/local.js b/js/modules/local.js new file mode 100644 index 0000000..965fe36 --- /dev/null +++ b/js/modules/local.js @@ -0,0 +1,47 @@ +/** + * 本地音乐模块 + * @author yutent + * @date 2018/12/24 17:00:48 + */ + +'use strict' + +import Api from '/js/api.js' + +const log = console.log + +export default Anot({ + $id: 'local', + state: { + list: [], + curr: '' + }, + __APP__: null, + mounted() { + this.__APP__ = Anot.vmodels.app + this.list = LS.getAll() + let lastPlay = Anot.ls('last-play') || 0 + + SONIST.clear() + SONIST.push(LS.getAll()) + SONIST.play(lastPlay).then(it => { + this.__APP__.play(it) + this.curr = it.id + }) + }, + watch: { + 'props.curr'(v) { + this.curr = v + } + }, + methods: { + __init__() {}, + + play(idx) { + SONIST.play(idx).then(it => { + this.__APP__.play(it) + this.curr = it.id + }) + } + } +}) diff --git a/js/modules/search.js b/js/modules/search.js new file mode 100644 index 0000000..55f3c93 --- /dev/null +++ b/js/modules/search.js @@ -0,0 +1,33 @@ +/** + * 本地音乐模块 + * @author yutent + * @date 2018/12/24 17:00:48 + */ + +'use strict' + +import Api from '/js/api.js' + +const log = console.log + +export default Anot({ + $id: 'search', + state: { + filter: 'hot', + list: [], //歌手列表 + display: 'artist', // list | artist | album + artist: { + avatar: + 'http://singerimg.kugou.com/uploadpic/softhead/240/20181023/20181023141706176.jpg', + id: 3060, + name: '薛之谦', + info: '', + songCount: 0, + mvCount: 0, + albumCount: 0 + }, + songList: [], //单曲列表 + albumList: [] //专辑列表 + }, + methods: {} +}) diff --git a/main.js b/main.js new file mode 100644 index 0000000..a26eba9 --- /dev/null +++ b/main.js @@ -0,0 +1,58 @@ +const { app, BrowserWindow, protocol } = require('electron') +const path = require('path') +const fs = require('iofs') +const log = console.log + +const ROOT = __dirname +const HOME = app.getPath('home') +const MIME_TYPES = { + js: 'application/javascript', + html: 'text/html', + htm: 'text/html', + css: 'text/css', + jpg: 'image/jpg', + png: 'image/png', + gif: 'image/gif' +} + +let win = null + +function createWindow() { + // 创建浏览器窗口 + win = new BrowserWindow({ + title: 'sonist', + width: 1024, + height: 600, + frame: false, + resizable: false, + webPreferences: { + webSecurity: false, + experimentalFeatures: true + } + }) + + // 然后加载应用的 index.html。 + win.loadURL('app://sonist/index.html') +} +app.commandLine.appendSwitch('--autoplay-policy', 'no-user-gesture-required') +app.setPath('appData', path.resolve(HOME, '.sonist/')) +protocol.registerStandardSchemes(['app'], { secure: true }) + +let appPath = app.getPath('appData') +if (!fs.exists(appPath)) { + fs.mkdir(appPath) + fs.echo('{}', path.join(appPath, 'app.ini')) + fs.echo('[]', path.join(appPath, 'music.db')) +} + +// 创建窗口 +app.on('ready', () => { + protocol.registerBufferProtocol('app', (req, cb) => { + let file = req.url.replace(/^app:\/\/sonist\//, '') + let ext = path.extname(req.url).slice(1) + let buf = fs.cat(path.resolve(ROOT, file)) + cb({ data: buf, mimeType: MIME_TYPES[ext] }) + }) + createWindow() + win.webContents.openDevTools() +}) diff --git a/package.json b/package.json new file mode 100644 index 0000000..193f5cd --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "sonist", + "version": "1.0.0", + "description": "Music Player", + "main": "main.js", + "scripts": { + "start": "electron ." + }, + "author": "yutent", + "license": "ISC", + "dependencies": { + "crypto.js": "^1.1.6", + "iofs": "^1.1.0" + }, + "devDependencies": { + "electron": "^4.0.0" + } +} diff --git a/views/artist.htm b/views/artist.htm new file mode 100644 index 0000000..f8f204d --- /dev/null +++ b/views/artist.htm @@ -0,0 +1,91 @@ +
+ +
+
热门歌手
+
入驻音乐人
+ + + +
华语男歌手
+
华语女歌手
+
华语组合
+ + + +
韩国男歌手
+
韩国女歌手
+
韩国组合
+ + + +
日本男歌手
+
日本女歌手
+
日本组合
+ + + +
欧美男歌手
+
欧美女歌手
+
欧美组合
+ + + +
其他歌手
+ +
+ + +
    +
  • + + + +

    粉丝数: {{it.fans}}

    +
    +
  • +
+ +
+
+

+ + 歌手列表 + + +

+ + 介绍: {{artist.info | truncate(50)}} 详细 + + +
+
+ 单曲({{artist.songCount}}) + 专辑({{artist.albumCount}}) + MV({{artist.mvCount}}) +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/views/local.htm b/views/local.htm new file mode 100644 index 0000000..2475dd4 --- /dev/null +++ b/views/local.htm @@ -0,0 +1,31 @@ +
+
+ 本地音乐({{list.length}}首)重新扫描 +
+ +
+ + + + + + + + + + + + + + + + + + + +
 歌名歌手专辑时长
+
+
diff --git a/views/search.htm b/views/search.htm new file mode 100644 index 0000000..229de81 --- /dev/null +++ b/views/search.htm @@ -0,0 +1,32 @@ +