diff --git a/.gitignore b/.gitignore index a84103e..814a948 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ __pycache__ .DS_Store node_modules -jsconfig.json # pyinstaller build dirs /dist diff --git a/README.md b/README.md index 3bb4ce1..2180f2e 100644 --- a/README.md +++ b/README.md @@ -5,33 +5,33 @@ This is just the WebUI for deemix, it should be used with deemix-pyweb or someth ## What's left to do? - [ ] Use Vue app-wide - - First step: rewrite the app in Single File Components way ✅ - - Second step: Implement routing for the whole app using Vue Router ⚒ - - Third step: Remove jQuery + - [X] First step: rewrite the app in Single File Components way + - [ ] Second step: Implement routing for the whole app using Vue Router ⚒ + - [ ] Third step: Remove jQuery - [ ] Implement custom contextmenu ⚒ - - Copy and paste functions ✅ - - Copy Link where possible ✅ - - Download Quality ✅ - - Copy Image URL where possible ✅ - - Resolve problem when positioning out of window (e.g. clicking on the bottom of the window) + - [X] Copy and paste functions + - [X] Copy Link where possible + - [X] Download Quality + - [X] Copy Image URL where possible + - [ ] Resolve cut/copy/paste compatibility issues - [ ] Make i18n async (https://kazupon.github.io/vue-i18n/guide/lazy-loading.html) - Use ES2020 async imports, if possible - [ ] Make the UI look coherent - - Style buttons - - Style text inputs - - Style checkboxes + - [ ] Style buttons + - [ ] Style text inputs + - [ ] Style checkboxes - [ ] Search tab - - Better placeholer before search + - [ ] Better placeholer before search - [ ] Link Analyzer - - Better placeholer before analyzing and error feedback + - [ ] Better placeholer before analyzing and error feedback - [ ] Settings tab - - Maybe tabbing the section for easy navigation - - Could use a carousel, but it's not worth adding a new dep - - Variable selector near template inputs + - [ ] Variable selector near template inputs + - Maybe tabbing the section for easy navigation + - Could use a carousel, but it's not worth adding a new dep - [ ] Block selection where it's not needed (keep only titles artists albums labels and useful data) - There's a SASS mixin for this. Need to use it in the proper classes - [ ] Better feedback for socket.io possible errors -- [ ] Remove images size limit and add warning if > 1200 +- [X] Remove images size limit and add warning if > 1200 - ? # License diff --git a/public/css/style.css b/public/css/style.css index 1993bbe..0055384 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -1 +1 @@ -html{--main-scroll: hsl(0, 0%, 33%);--panels-scroll: hsl(180, 2%, 17%);--tag-background: hsl(210, 100%, 38%);--tag-text: hsl(0, 0%, 100%);--toast-background: hsla(0, 0%, 0%, 0.867);--toast-secondary: hsla(0, 0%, 100%, 0.133);--toast-text: hsla(0, 0%, 100%, 0.871);--separator: hsl(0, 0%, 50%)}html[data-theme=light]{--main-background: hsl(0, 0%, 100%);--secondary-background: hsl(0, 0%, 93%);--foreground: hsl(0, 0%, 20%);--foreground-inverted: hsl(0, 0%, 93%);--accent-color: hsl(210, 100%, 52%);--panels-background: hsl(210, 3%, 14%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 0%);--sidebar-link-bg: hsl(0, 0%, 24%);--sidebar-link-bg-20: hsla(0, 0%, 24%, 0.2);--icon-hover: var(--accent-color);--table-bg: hsl(0, 0%, 100%);--table-zebra: hsl(0, 0%, 90%);--table-highlight: hsl(0, 0%, 84%)}html[data-theme=dark]{--main-background: hsl(0, 0%, 8%);--secondary-background: hsl(0, 0%, 14%);--foreground: hsl(0, 0%, 93%);--foreground-inverted: hsl(0, 0%, 20%);--accent-color: hsl(210, 100%, 52%);--panels-background: hsl(0, 0%, 10%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 87%);--sidebar-link-bg: hsl(0, 0%, 24%);--sidebar-link-bg-20: hsla(0, 0%, 24%, 0.2);--icon-hover: var(--accent-color);--table-bg: hsl(0, 0%, 8%);--table-zebra: hsl(0, 0%, 14%);--table-highlight: hsl(0, 0%, 20%)}html[data-theme=purple]{--main-background: hsl(261, 74%, 6%);--secondary-background: hsl(257, 61%, 10%);--foreground: hsl(0, 0%, 93%);--foreground-inverted: hsl(258, 62%, 8%);--accent-color: hsl(261, 85%, 37%);--panels-background: hsl(257, 70%, 9%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 87%);--sidebar-link-bg: hsl(257, 70%, 17%);--sidebar-link-bg-20: hsla(257, 70%, 17%, 0.2);--icon-hover: hsl(186, 44%, 54%);--table-bg: hsl(261, 74%, 6%);--table-zebra: hsl(257, 61%, 10%);--table-highlight: hsl(257, 66%, 27%)}html{height:100vh}body{margin:0px;width:100%;height:100%;font-family:"Open Sans";overflow:hidden;background:var(--main-background);color:var(--foreground)}*{margin:0;padding:0;box-sizing:border-box}:root{font-size:16px}table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}table{border-collapse:collapse;border-spacing:0}.lds-ring{display:inline-block;position:relative;width:80px;height:80px}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:64px;height:64px;margin:8px;border:8px solid #fff;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:#fff transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}input[type=text],input[type=password],input[type=number],input[type=search]{-webkit-appearance:none;appearance:none;width:calc(100% - 16px);border:0px solid #000;line-height:36px;padding:0px 8px;border-radius:4px;background-color:var(--secondary-background);color:var(--foreground);margin-bottom:8px}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;width:28px;height:28px;background-color:var(--foreground);-webkit-mask-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='28' viewBox='0 0 24 24' width='28'%3E%%3Cpath fill='%23ffffff' d='M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z'/%3E3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='28' viewBox='0 0 24 24' width='28'%3E%%3Cpath fill='%23ffffff' d='M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z'/%3E3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}input[type=checkbox]{-webkit-appearance:none;appearance:none;background-color:none;border:2px solid gray;opacity:.5;border-radius:2px;padding:7px;margin:3px;display:inline-block;position:relative}input[type=checkbox]:checked{opacity:1;background-color:var(--accent-color);background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='18' viewBox='3 3 18 18' width='18'%3E%3Cpath fill='%23ffffff' d='M 10,17 5,12 6.41,10.59 10,14.17 17.59,6.58 19,8 Z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-position:center center;border:0px solid var(--accent-color);border-radius:2px;padding:9px;margin:3px;color:var(--accent-text)}select{-webkit-appearance:none;appearance:none;width:100%;border:0px solid #000;line-height:36px;padding:0px 40px 0px 8px;border-radius:4px;background-color:var(--secondary-background);background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath style='fill%3A%23000000%3Bfill-opacity%3A0.25' d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:24px;background-position:calc(100% - 8px) center;background-clip:border-box;color:var(--foreground);margin-bottom:8px}p{word-break:break-word}button{min-width:64px;color:var(--accent-text);position:relative;background-color:var(--accent-color);border:1px solid transparent;border-radius:4px;font-family:inherit;font-weight:600;font-size:14px;padding:0px 8px;margin-right:8px;height:36px;text-transform:uppercase;cursor:pointer;transition:transform 50ms ease-in-out,background-color 200ms ease}button[disabled]{background-color:var(--secondary-background);color:var(--foreground);opacity:.75}button.selective{background-color:var(--main-background);color:var(--foreground)}button.selective.active{background-color:var(--accent-color);color:var(--accent-text)}button.with_icon{display:flex;align-items:center}button.with_icon i{margin-left:8px}button.only_icon{min-width:24px;width:48px;margin:0px 0px 0px 8px;padding:0px 4px}button.only_icon i{padding:6px 0px}button:active{background-color:var(--accent-color);transform:scale(0.98)}button:hover{background:none;border:1px solid var(--accent-color)}img.rounded{border-radius:5px}img.circle{border-radius:50%}i.disabled{opacity:.5;cursor:default}i.explicit_icon{color:#ff382e;margin-right:.3125em;margin-left:-3px}i.explicit_icon.explicit_icon--right{margin-left:.3125em;margin-right:0px}span.tag{background-color:var(--tag-background);border-radius:2px;color:var(--tag-text);display:inline-block;font-size:10px;padding:3px 6px;text-transform:capitalize}a{color:#1e90ff}a.single-cover{position:relative;display:inline-block;color:#fff}a:visited{color:#1e90ff}.clickable{cursor:pointer !important}.table--tracklist .clickable:hover,.table--charts .clickable:hover{text-decoration:underline}.fixed_footer footer{position:sticky;display:flex;align-items:center;flex-direction:row;justify-content:flex-end;background-color:var(--main-background);bottom:0px;height:64px;width:100%;margin-top:24px}.fab{width:56px;height:56px;border-radius:28px;display:inline-block;background-color:var(--accent-color);color:var(--accent-text);cursor:pointer}.fab i{font-size:24px;padding:16px}.with_checkbox{display:flex;align-items:center}.with_checkbox [type=checkbox]{cursor:pointer}.with_checkbox .checkbox_text{margin-left:10px;cursor:pointer}.with_checkbox .checkbox_text::selection{background:none}.loading_placeholder{display:flex;justify-content:center;align-items:center;flex-direction:column;flex:1;height:100%}.loading_placeholder.loading_placeholder--hidden{display:none}.loading_placeholder__text{margin-bottom:20px}.loading_placeholder#search_placeholder{height:calc(100% - 93px)}.loading_placeholder#start_app_placeholder{position:absolute;top:0;left:0;width:100vw;height:100vh;background:rgba(0,0,0,.5);z-index:1000}.coverart{background-color:var(--secondary-background)}.cover_container{position:relative}.cover_container .coverart{opacity:1;display:block;width:100%;height:auto;transition:.5s ease;backface-visibility:hidden}.cover_container .download_overlay{transition:.5s ease;opacity:0;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center}.cover_container .download_overlay i{background-color:#000;color:#fff;border-radius:50%;padding:10px;cursor:pointer}.cover_container:hover .coverart{opacity:.75}.cover_container:hover .download_overlay{opacity:1}#main_content{margin-left:48px;width:calc(100% - 48px);height:100%;display:flex}.inline-flex{display:flex;align-items:center}.inline-flex .right{margin-left:auto}.right{float:right}.hide{display:none !important}.table{width:100%;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px}.table tbody tr:not(.table__row-no-highlight):hover{background:var(--table-highlight);cursor:default}.table tr{background:var(--table-bg);transition:background-color 175ms ease-in-out}.table tr:nth-child(even){background:var(--table-zebra);transition:background-color 175ms ease-in-out}.table tr:not(:last-child){border-bottom:1px solid var(--table-highlight)}.table td,.table th{vertical-align:middle}.table th .sortable{-webkit-user-select:none;user-select:none}.table th .sort-asc::after,.table th .sort-desc::after{font-size:.7em;padding-left:3px;line-height:.7em}.table th .sort-asc::after{content:"▲"}.table th .sort-desc::after{content:"▼"}.table td{padding:7px 10px}.table td:first-child{padding:7px 10px 7px 20px}.table td:last-child{padding:7px 20px 7px 10px}.table td img{vertical-align:middle}.table--tracks{border-collapse:collapse}.table--tracks thead{border-bottom:2px solid var(--table-highlight)}.table--tracks th{padding-bottom:10px;height:45px}.table--tracks td{height:35px}.table--tracks td.breakline{word-break:break-word}.table--tracks tr:first-child td:first-child{border-top-left-radius:3px}.table--tracks tr:first-child td:last-child{border-top-right-radius:3px}.table--tracks tr:last-child td:first-child{border-bottom-left-radius:3px}.table--tracks tr:last-child td:last-child{border-bottom-right-radius:3px}.table--tracklist thead{border-bottom:2px solid var(--table-highlight);text-transform:capitalize}.table--tracklist th{height:45px;padding:7px 10px}.table--tracklist th:first-child{padding:7px 10px 7px 20px}.table--tracklist th:last-child{padding:7px 20px 7px 10px}.table--tracklist td{height:35px}.table--charts td{height:35px}.table .table__icon{box-sizing:content-box;width:32px}.table .table__icon--big{width:48px;text-align:center}.table .table__cell--x-small{width:.32%}.table .table__cell--small{width:3.2%}.table .table__cell--medium{width:28.7%}.table .table__cell--large{width:50%}.table .table__cell--left{text-align:left}.table .table__cell--center{text-align:center}.table .table__cell--right{text-align:right}.table .table__cell--download{cursor:pointer}.table .table__cell--download i.material-icons{transition:color 175ms ease-in-out}.table .table__cell--download:hover i.material-icons{color:var(--icon-hover)}.table .table__cell-content.table__cell-content--vertical-center{display:flex;align-items:center}.track_row>td>img{width:32px;height:32px}.track_row>td>a>img{width:56px;height:56px}.top-tracks-position{padding:12px;text-align:center;cursor:default}.page_heading{font-size:2.5rem;margin-bottom:35px}.page_heading--capitalize{text-transform:capitalize}.page_heading--uppercase{text-transform:uppercase}.section_heading{font-size:1.75rem;margin-bottom:25px}#about_tab p{margin-bottom:8px}#about_tab h3{margin:8px 0px}#about_tab hr{margin:12px 0px}.charts_grid .release .coverart{width:156px;height:156px}#download_tab_container{height:100%;background-color:var(--panels-background);color:var(--panels-text);display:block;flex-direction:column}#download_tab_container.tab_hidden{width:32px}#download_tab_container.tab_hidden #toggle_download_tab{margin-left:4px}#download_tab_container.tab_hidden #toggle_download_tab::before{font-family:"Material Icons";font-style:normal;font-weight:400;content:"chevron_left"}#download_tab_container.tab_hidden #download_tab_drag_handler{display:none}#download_tab_container.tab_hidden #queue_buttons{opacity:0;visibility:hidden}#download_tab_container.tab_hidden #download_list{display:none}#download_tab_container.tab_hidden #download_tab_label{opacity:1;visibility:visible}#download_tab_container.tab_hidden::after{content:attr(data-label);display:flex;align-items:center;text-transform:capitalize;writing-mode:vertical-rl;line-height:32px}#toggle_download_tab{width:25px;height:25px;margin-left:20px}#toggle_download_tab::before{font-family:"Material Icons";font-style:normal;font-weight:400;content:"chevron_right"}.download_bar_icon{cursor:pointer;font-size:24px;margin:4px}#download_list{width:100%;height:calc(100% - 32px);padding:0px 8px 0px 28px;overflow-y:scroll}#download_list>.download_object{padding-bottom:8px}#download_list>.download_object .download_info{display:flex;align-items:center}#download_list>.download_object .download_info img{width:75px;height:75px;display:inline-block;flex-shrink:0}#download_list>.download_object .download_info .download_line{display:block}#download_list>.download_object .download_info .download_slim_separator{display:none}#download_list>.download_object .download_info_data{width:100%;margin-left:8px}#download_list>.download_object .download_info_status{margin-left:8px;width:80px}#download_list.slim>.download_object .download_info{display:block}#download_list.slim>.download_object .download_info img{display:none}#download_list.slim>.download_object .download_info .download_line{display:inline-block}#download_list.slim>.download_object .download_info .download_slim_separator{display:inline-block}#download_list.slim>.download_object .download_info_data{width:calc(80% - 16px);display:inline-block;padding-left:0px}#download_list.slim>.download_object .download_info_status{width:20%;display:inline-block;float:right}#download_list::-webkit-scrollbar{width:10px}#download_list::-webkit-scrollbar-track{background:var(--panels-background)}#download_list::-webkit-scrollbar-thumb{background:var(--panels-scroll);border-radius:4px;width:6px;padding:0px 2px}.download_object>.download_bar{display:flex;align-items:center;height:24px}.download_object>.download_bar>.queue_icon{cursor:default;margin-left:8px}.download_object>.download_bar>.progress{margin:0px}#download_tab_container #queue_buttons{position:absolute;top:0;right:0;opacity:1;visibility:visible;transition:all 250ms ease-in-out}#download_tab_container #download_tab_label{opacity:0;visibility:hidden;transition:all 250ms ease-in-out}#download_tab_drag_handler{width:15px;height:100%;position:absolute;background-color:#333;cursor:ew-resize}.reload-button.reload-button--inline{display:inline-block}.reload-button.spin i{animation:spin 500ms infinite ease-out reverse}#home_not_logged_text{margin-bottom:15px}.home_section{border-top:1px solid var(--separator);padding-top:25px;padding-bottom:25px}#main_search .search_section{float:none;padding-top:20px;padding-bottom:20px}#main_search .search_section:not(:first-child){border-top:1px solid var(--separator)}#main_search .top_result_header{display:block;cursor:default;font-size:2rem;text-align:center}.search_header{display:inline-block;cursor:pointer;font-size:1.75rem;margin-bottom:25px}.search_header:not(.top_result_header){transition:color 200ms ease-in-out}.search_header:not(.top_result_header):hover{color:var(--accent-color)}.top_result{display:flex;align-items:center;flex-direction:column}.top_result>.cover_container{width:156px;height:156px}.top_result .info_box{display:flex;flex-direction:column;justify-content:center;align-items:center;margin-top:15px}.top_result .info_box .primary-text,.top_result .info_box .secondary-text{font-size:18px;text-align:center}.top_result .info_box .primary-text{margin-bottom:5px}.top_result .info_box .secondary-text{margin-bottom:10px}.top_result .info_box .tag{width:40px;text-align:center}.release .primary-text,.release .secondary-text{margin:0px;margin-bottom:4px}.release .secondary-text{opacity:.75;font-size:14px}.release .secondary-text .material-icons{font-size:17px !important;margin-left:4px}.release_grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(156px, 1fr));grid-gap:1rem}.release_grid.firstrow_only{grid-template-rows:1fr;grid-auto-rows:0;grid-row-gap:0px;overflow-y:hidden}#settings_picture{width:125px;height:125px}#logged_in_info{height:250px;display:flex;flex-direction:column;justify-content:space-evenly;align-items:center}#log_info{display:flex;flex-direction:column;align-items:center}#open_login_prompt{margin:8px 0px}.inline-flex input{margin-bottom:0px}#spotify_icon{width:24px;height:24px;fill:#1db954;margin-right:15px}.settings-group{display:flex;flex-direction:column;justify-content:center;border-top:1px solid var(--separator);padding-top:20px;padding-bottom:20px}.settings-group>*{margin-bottom:15px}.settings-group__header{font-size:1.5rem;margin-bottom:25px}.settings-group__header.settings-group__header--with-icon{display:inline-flex;align-items:center}.settings-group__header.settings-group__header--with-icon i.material-icons{margin-right:15px}.settings-container{display:flex}.settings-container__half{width:50%}.settings-container__third{width:33%}.settings-container__third--only-checkbox{display:flex;flex-direction:column;justify-content:center;align-items:start}.settings-container__half>*,.settings-container__third>*{margin-bottom:15px}.input_group{margin-bottom:25px}.input_group .input_group_text{margin-bottom:7px}.with_checkbox+.input_group{margin-top:10px}.search_tabcontent,.main_tabcontent,.favorites_tabcontent{display:none}.main_tabcontent h1{margin-bottom:12px}.tab{margin:16px 0px}.tab button{background-color:var(--main-background);color:var(--foreground)}.tab button.active{background-color:var(--accent-color)}.release{display:inline-block;width:156px}.release .cover_container{width:156px;height:156px;margin-bottom:10px}.section-tabs{list-style-type:none;display:flex;margin:16px 0 24px 0;cursor:pointer}.section-tabs__tab{flex:1;font-size:1.2rem;padding:.8em;border-top:3px solid var(--foreground);text-align:center;text-transform:capitalize}.section-tabs__tab.active{color:var(--accent-color);border-top:3px solid var(--accent-color)}#middle_section{background-color:var(--main-background);width:100%;height:100%;min-width:10px}#search{background-color:var(--secondary-background);width:100%;padding:0 1em;margin-bottom:20px;margin-right:32px;display:flex;align-items:center;border:1px solid transparent;transition:border 200ms ease-in-out}#search .search__icon{width:2rem;height:2rem}#search .search__icon i{font-size:2rem;color:var(--foreground)}#search .search__icon i::selection{background:none}#search:focus-within{border:1px solid var(--foreground)}#search #searchbar{height:calc(2rem + 1em);padding-left:.5em;border:0px;border-radius:0px;background-color:var(--secondary-background);color:var(--foreground);font-size:2rem;font-family:"Open Sans";font-weight:300}#search #searchbar:focus{outline:none}#search #searchbar:-webkit-autofill,#search #searchbar:-webkit-autofill:hover,#search #searchbar:-webkit-autofill:focus,#search #searchbar:-webkit-autofill:active{-webkit-box-shadow:0 0 0 calc(2rem + 1em) var(--secondary-background) inset !important;box-shadow:0 0 0 calc(2rem + 1em) var(--secondary-background) inset !important}#content{background-color:var(--main-background);width:100%;height:calc(100% - 93px);overflow-y:scroll;overflow-x:hidden}#content::-webkit-scrollbar{width:10px}#content::-webkit-scrollbar-track{background:var(--main-background)}#content::-webkit-scrollbar-thumb{background:var(--main-scroll);border-radius:4px;width:6px;padding:0px 2px}#container{--container-width: 95%}@media only screen and (min-width: 601px){#container{--container-width: 85%}}@media only screen and (min-width: 993px){#container{--container-width: 70%}}#container{margin:0 auto;max-width:1280px;width:var(--container-width)}.smallmodal-content{--modal-content-width: 95%}@media only screen and (min-width: 601px){.smallmodal-content{--modal-content-width: 85%}}@media only screen and (min-width: 993px){.smallmodal-content{--modal-content-width: 70%}}.progress{position:relative;height:4px;display:block;width:100%;background-color:var(--secondary-background);border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:var(--accent-color);-webkit-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:var(--accent-color)}.progress .indeterminate::before{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate::after{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}#sidebar{display:flex;flex-direction:column;width:48px;height:100%;position:absolute;top:0;left:0;background-color:var(--panels-background);color:var(--panels-text);transition:width 125ms ease-in-out 75ms;z-index:999}#sidebar:hover{width:200px}#sidebar .main_tablinks{transition:all 500ms}#sidebar .main_tablinks.active{background-color:var(--accent-color)}#sidebar .main_tablinks:not(#theme_selector){display:flex;align-items:center;height:55px;cursor:pointer}#sidebar .main_tablinks:not(#theme_selector):hover{background-color:var(--sidebar-link-bg)}#sidebar .main_tablinks:not(#theme_selector):hover .side_icon{color:var(--accent-color)}#sidebar .main_tablinks_text{margin-left:20px;opacity:0;overflow:hidden;text-transform:capitalize;letter-spacing:1.3px;white-space:nowrap;transition:all 50ms ease-in-out 200ms}#sidebar .side_icon{font-size:30px;padding:9px;transition:all 500ms}#sidebar .side_icon--theme{cursor:default}#sidebar .side_icon::selection{background:none}#sidebar:hover .main_tablinks:hover{background:var(--sidebar-link-bg-20);filter:grayscale(0) opacity(1)}#sidebar:hover .main_tablinks.active{background:var(--sidebar-link-bg);filter:grayscale(1)}html[data-theme=purple] #sidebar:hover .main_tablinks.active{background:var(--sidebar-link-bg-20);filter:grayscale(0)}#sidebar:hover .main_tablinks.active:hover{background:var(--sidebar-link-bg-20);filter:grayscale(0)}#sidebar:hover .main_tablinks_text{opacity:1}#sidebar:hover #theme_togglers{opacity:1}#sidebar #theme_selector{margin-top:20px;display:flex;height:50px}#sidebar #theme_togglers{position:relative;display:flex;justify-content:space-evenly;align-items:center;width:100%;opacity:0;transition:all 125ms ease-in-out 75ms}#sidebar .theme_toggler{width:25px;height:25px;border-radius:1000px;border:1px solid var(--separator);cursor:pointer;transition:border 200ms ease-in-out}#sidebar .theme_toggler--active{border-width:3px}#sidebar .theme_toggler--light{background:#fff}#sidebar .theme_toggler--dark{background:#141414}#sidebar .theme_toggler--purple{background:#460eaf}.image_header header{background-position:0% 35%;background-size:cover;padding:220px 24px 8px;border-radius:8px 8px 0px 0px}.image_header header h1,.image_header header h2{margin:0px}.image_header header h2{font-size:18px;margin-bottom:12px}.preview_controls{opacity:0;display:block;background:rgba(0,0,0,.5);width:56px;height:56px;text-align:center;line-height:56px;position:absolute;border-radius:5px;top:0;right:0;transition:opacity 200ms ease-in-out}.preview_playlist_controls{cursor:pointer}.toast-icon{display:inline-block;margin-right:8px}.circle-loader{display:inline-block;border:2px solid var(--accent-color);border-radius:50%;border-bottom:2px solid var(--secondary-background);width:16px;height:16px;animation:spin 1s linear infinite}.toastify{display:flex;align-items:center;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(0,0,0,.3);background:var(--toast-background);color:var(--toast-text)}.toastify .circle-loader{border-bottom-color:var(--toast-secondary)} +html{--main-scroll: hsl(0, 0%, 33%);--panels-scroll: hsl(180, 2%, 17%);--tag-background: hsl(210, 100%, 38%);--tag-text: hsl(0, 0%, 100%);--toast-background: hsla(0, 0%, 0%, 0.867);--toast-secondary: hsla(0, 0%, 100%, 0.133);--toast-text: hsla(0, 0%, 100%, 0.871);--separator: hsl(0, 0%, 50%)}html[data-theme=light]{--main-background: hsl(0, 0%, 100%);--secondary-background: hsl(0, 0%, 93%);--foreground: hsl(0, 0%, 20%);--foreground-inverted: hsl(0, 0%, 93%);--accent-color: hsl(210, 100%, 52%);--secondary-color: hsl(46, 100%, 57%);--panels-background: hsl(210, 3%, 14%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 0%);--sidebar-link-bg: hsl(0, 0%, 24%);--sidebar-link-bg-20: hsla(0, 0%, 24%, 0.2);--icon-hover: var(--accent-color);--table-bg: hsl(0, 0%, 100%);--table-zebra: hsl(0, 0%, 90%);--table-highlight: hsl(0, 0%, 84%)}html[data-theme=dark]{--main-background: hsl(0, 0%, 8%);--secondary-background: hsl(0, 0%, 14%);--foreground: hsl(0, 0%, 93%);--foreground-inverted: hsl(0, 0%, 20%);--accent-color: hsl(210, 100%, 52%);--secondary-color: hsl(46, 100%, 57%);--panels-background: hsl(0, 0%, 10%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 87%);--sidebar-link-bg: hsl(0, 0%, 24%);--sidebar-link-bg-20: hsla(0, 0%, 24%, 0.2);--icon-hover: var(--accent-color);--table-bg: hsl(0, 0%, 8%);--table-zebra: hsl(0, 0%, 14%);--table-highlight: hsl(0, 0%, 20%)}html[data-theme=purple]{--main-background: hsl(261, 74%, 6%);--secondary-background: hsl(257, 61%, 10%);--foreground: hsl(0, 0%, 93%);--foreground-inverted: hsl(258, 62%, 8%);--accent-color: hsl(261, 85%, 37%);--secondary-color: hsl(46, 100%, 57%);--panels-background: hsl(257, 70%, 9%);--panels-text: hsl(0, 0%, 100%);--accent-text: hsl(0, 0%, 87%);--sidebar-link-bg: hsl(257, 70%, 17%);--sidebar-link-bg-20: hsla(257, 70%, 17%, 0.2);--icon-hover: hsl(186, 44%, 54%);--table-bg: hsl(261, 74%, 6%);--table-zebra: hsl(257, 61%, 10%);--table-highlight: hsl(257, 66%, 27%)}html{height:100vh}body{margin:0px;width:100%;height:100%;font-family:"Open Sans";overflow:hidden;background:var(--main-background);color:var(--foreground)}*{margin:0;padding:0;box-sizing:border-box}:root{font-size:16px}table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}table{border-collapse:collapse;border-spacing:0}.lds-ring{display:inline-block;position:relative;width:80px;height:80px}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:64px;height:64px;margin:8px;border:8px solid #fff;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:#fff transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}input[type=text],input[type=password],input[type=number],input[type=search]{-webkit-appearance:none;appearance:none;width:calc(100% - 16px);border:0px solid #000;line-height:36px;padding:0px 8px;border-radius:4px;background-color:var(--secondary-background);color:var(--foreground);margin-bottom:8px}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;width:28px;height:28px;background-color:var(--foreground);-webkit-mask-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='28' viewBox='0 0 24 24' width='28'%3E%%3Cpath fill='%23ffffff' d='M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z'/%3E3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='28' viewBox='0 0 24 24' width='28'%3E%%3Cpath fill='%23ffffff' d='M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z'/%3E3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}input[type=checkbox]{-webkit-appearance:none;appearance:none;background-color:none;border:2px solid gray;opacity:.5;border-radius:2px;padding:7px;margin:3px;display:inline-block;position:relative}input[type=checkbox]:checked{opacity:1;background-color:var(--accent-color);background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='18' viewBox='3 3 18 18' width='18'%3E%3Cpath fill='%23ffffff' d='M 10,17 5,12 6.41,10.59 10,14.17 17.59,6.58 19,8 Z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-position:center center;border:0px solid var(--accent-color);border-radius:2px;padding:9px;margin:3px;color:var(--accent-text)}select{-webkit-appearance:none;appearance:none;width:100%;border:0px solid #000;line-height:36px;padding:0px 40px 0px 8px;border-radius:4px;background-color:var(--secondary-background);background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 0 24 24' width='24'%3E%3Cpath style='fill%3A%23000000%3Bfill-opacity%3A0.25' d='M7 10l5 5 5-5z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:24px;background-position:calc(100% - 8px) center;background-clip:border-box;color:var(--foreground);margin-bottom:8px}p{word-break:break-word}button{min-width:64px;color:var(--accent-text);position:relative;background-color:var(--accent-color);border:1px solid transparent;border-radius:4px;font-family:inherit;font-weight:600;font-size:14px;padding:0px 8px;margin-right:8px;height:36px;text-transform:uppercase;cursor:pointer;transition:transform 50ms ease-in-out,background-color 200ms ease}button[disabled]{background-color:var(--secondary-background);color:var(--foreground);opacity:.75}button.selective{background-color:var(--main-background);color:var(--foreground)}button.selective.active{background-color:var(--accent-color);color:var(--accent-text)}button.with_icon{display:flex;align-items:center}button.with_icon i{margin-left:8px}button.only_icon{min-width:24px;width:48px;margin:0px 0px 0px 8px;padding:0px 4px}button.only_icon i{padding:6px 0px}button:active{background-color:var(--accent-color);transform:scale(0.98)}button:hover{background:none;border:1px solid var(--accent-color)}img.rounded{border-radius:5px}img.circle{border-radius:50%}i.disabled{opacity:.5;cursor:default}i.explicit_icon{color:#ff382e;margin-right:.3125em;margin-left:-3px}i.explicit_icon.explicit_icon--right{margin-left:.3125em;margin-right:0px}span.tag{background-color:var(--tag-background);border-radius:2px;color:var(--tag-text);display:inline-block;font-size:10px;padding:3px 6px;text-transform:capitalize}a{color:#1e90ff}a.single-cover{position:relative;display:inline-block;color:#fff}a:visited{color:#1e90ff}.clickable{cursor:pointer !important}.table--tracklist .clickable:hover,.table--charts .clickable:hover{text-decoration:underline}.fixed_footer footer{position:sticky;display:flex;align-items:center;flex-direction:row;justify-content:flex-end;background-color:var(--main-background);bottom:0px;height:64px;width:100%;margin-top:24px}.fab{width:56px;height:56px;border-radius:28px;display:inline-block;background-color:var(--accent-color);color:var(--accent-text);cursor:pointer}.fab i{font-size:24px;padding:16px}.with_checkbox{display:flex;align-items:center}.with_checkbox [type=checkbox]{cursor:pointer}.with_checkbox .checkbox_text{margin-left:10px;cursor:pointer}.with_checkbox .checkbox_text::selection{background:none}.loading_placeholder{display:flex;justify-content:center;align-items:center;flex-direction:column;flex:1;height:100%}.loading_placeholder.loading_placeholder--hidden{display:none}.loading_placeholder__text{margin-bottom:20px}.loading_placeholder#search_placeholder{height:calc(100% - 93px)}.loading_placeholder#start_app_placeholder{position:absolute;top:0;left:0;width:100vw;height:100vh;background:rgba(0,0,0,.5);z-index:1000}.coverart{background-color:var(--secondary-background)}.cover_container{position:relative}.cover_container .coverart{opacity:1;display:block;width:100%;height:auto;transition:.5s ease;backface-visibility:hidden}.cover_container .download_overlay{transition:.5s ease;opacity:0;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center}.cover_container .download_overlay i{background-color:#000;color:#fff;border-radius:50%;padding:10px;cursor:pointer}.cover_container:hover .coverart{opacity:.75}.cover_container:hover .download_overlay{opacity:1}#main_content{margin-left:48px;width:calc(100% - 48px);height:100%;display:flex}.inline-flex{display:flex;align-items:center}.inline-flex .right{margin-left:auto}.right{float:right}.hide{display:none !important}.table{width:100%;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px}.table tbody tr:not(.table__row-no-highlight):hover{background:var(--table-highlight);cursor:default}.table tr{background:var(--table-bg);transition:background-color 175ms ease-in-out}.table tr:nth-child(even){background:var(--table-zebra);transition:background-color 175ms ease-in-out}.table tr:not(:last-child){border-bottom:1px solid var(--table-highlight)}.table td,.table th{vertical-align:middle}.table th .sortable{-webkit-user-select:none;user-select:none}.table th .sort-asc::after,.table th .sort-desc::after{font-size:.7em;padding-left:3px;line-height:.7em}.table th .sort-asc::after{content:"▲"}.table th .sort-desc::after{content:"▼"}.table td{padding:7px 10px}.table td:first-child{padding:7px 10px 7px 20px}.table td:last-child{padding:7px 20px 7px 10px}.table td img{vertical-align:middle}.table--tracks{border-collapse:collapse}.table--tracks thead{border-bottom:2px solid var(--table-highlight)}.table--tracks th{padding-bottom:10px;height:45px}.table--tracks td{height:35px}.table--tracks td.breakline{word-break:break-word}.table--tracks tr:first-child td:first-child{border-top-left-radius:3px}.table--tracks tr:first-child td:last-child{border-top-right-radius:3px}.table--tracks tr:last-child td:first-child{border-bottom-left-radius:3px}.table--tracks tr:last-child td:last-child{border-bottom-right-radius:3px}.table--tracklist thead{border-bottom:2px solid var(--table-highlight);text-transform:capitalize}.table--tracklist th{height:45px;padding:7px 10px}.table--tracklist th:first-child{padding:7px 10px 7px 20px}.table--tracklist th:last-child{padding:7px 20px 7px 10px}.table--tracklist td{height:35px}.table--charts td{height:35px}.table .table__icon{box-sizing:content-box;width:32px}.table .table__icon--big{width:48px;text-align:center}.table .table__cell--x-small{width:.32%}.table .table__cell--small{width:3.2%}.table .table__cell--medium{width:28.7%}.table .table__cell--large{width:50%}.table .table__cell--left{text-align:left}.table .table__cell--center{text-align:center}.table .table__cell--right{text-align:right}.table .table__cell--download{cursor:pointer}.table .table__cell--download i.material-icons{transition:color 175ms ease-in-out}.table .table__cell--download:hover i.material-icons{color:var(--icon-hover)}.table .table__cell-content.table__cell-content--vertical-center{display:flex;align-items:center}.track_row>td>img{width:32px;height:32px}.track_row>td>a>img{width:56px;height:56px}.top-tracks-position{padding:12px;text-align:center;cursor:default}.page_heading{font-size:2.5rem;margin-bottom:35px}.page_heading--capitalize{text-transform:capitalize}.page_heading--uppercase{text-transform:uppercase}.section_heading{font-size:1.75rem;margin-bottom:25px}#about_tab p{margin-bottom:8px}#about_tab h3{margin:8px 0px}#about_tab hr{margin:12px 0px}.charts_grid .release .coverart{width:156px;height:156px}#download_tab_container{height:100%;background-color:var(--panels-background);color:var(--panels-text);display:block;flex-direction:column}#download_tab_container.tab_hidden{width:32px}#download_tab_container.tab_hidden #toggle_download_tab{margin-left:4px}#download_tab_container.tab_hidden #toggle_download_tab::before{font-family:"Material Icons";font-style:normal;font-weight:400;content:"chevron_left"}#download_tab_container.tab_hidden #download_tab_drag_handler{display:none}#download_tab_container.tab_hidden #queue_buttons{opacity:0;visibility:hidden}#download_tab_container.tab_hidden #download_list{display:none}#download_tab_container.tab_hidden #download_tab_label{opacity:1;visibility:visible}#download_tab_container.tab_hidden::after{content:attr(data-label);display:flex;align-items:center;text-transform:capitalize;writing-mode:vertical-rl;line-height:32px}#toggle_download_tab{width:25px;height:25px;margin-left:20px}#toggle_download_tab::before{font-family:"Material Icons";font-style:normal;font-weight:400;content:"chevron_right"}.download_bar_icon{cursor:pointer;font-size:24px;margin:4px}#download_list{width:100%;height:calc(100% - 32px);padding:0px 8px 0px 28px;overflow-y:scroll}#download_list>.download_object{padding-bottom:8px}#download_list>.download_object .download_info{display:flex;align-items:center}#download_list>.download_object .download_info img{width:75px;height:75px;display:inline-block;flex-shrink:0}#download_list>.download_object .download_info .download_line{display:block}#download_list>.download_object .download_info .download_slim_separator{display:none}#download_list>.download_object .download_info_data{width:100%;margin-left:8px}#download_list>.download_object .download_info_status{margin-left:8px;width:80px}#download_list.slim>.download_object .download_info{display:block}#download_list.slim>.download_object .download_info img{display:none}#download_list.slim>.download_object .download_info .download_line{display:inline-block}#download_list.slim>.download_object .download_info .download_slim_separator{display:inline-block}#download_list.slim>.download_object .download_info_data{width:calc(80% - 16px);display:inline-block;padding-left:0px}#download_list.slim>.download_object .download_info_status{width:20%;display:inline-block;float:right}#download_list::-webkit-scrollbar{width:10px}#download_list::-webkit-scrollbar-track{background:var(--panels-background)}#download_list::-webkit-scrollbar-thumb{background:var(--panels-scroll);border-radius:4px;width:6px;padding:0px 2px}.download_object>.download_bar{display:flex;align-items:center;height:24px}.download_object>.download_bar>.queue_icon{cursor:default;margin-left:8px}.download_object>.download_bar>.progress{margin:0px}#download_tab_container #queue_buttons{position:absolute;top:0;right:0;opacity:1;visibility:visible;transition:all 250ms ease-in-out}#download_tab_container #download_tab_label{opacity:0;visibility:hidden;transition:all 250ms ease-in-out}#download_tab_drag_handler{width:15px;height:100%;position:absolute;background-color:#333;cursor:ew-resize}.reload-button.reload-button--inline{display:inline-block}.reload-button.spin i{animation:spin 500ms infinite ease-out reverse}#home_not_logged_text{margin-bottom:15px}.home_section{border-top:1px solid var(--separator);padding-top:25px;padding-bottom:25px}#main_search .search_section{float:none;padding-top:20px;padding-bottom:20px}#main_search .search_section:not(:first-child){border-top:1px solid var(--separator)}#main_search .top_result_header{display:block;cursor:default;font-size:2rem;text-align:center}.search_header{display:inline-block;cursor:pointer;font-size:1.75rem;margin-bottom:25px}.search_header:not(.top_result_header){transition:color 200ms ease-in-out}.search_header:not(.top_result_header):hover{color:var(--accent-color)}.top_result{display:flex;align-items:center;flex-direction:column}.top_result>.cover_container{width:156px;height:156px}.top_result .info_box{display:flex;flex-direction:column;justify-content:center;align-items:center;margin-top:15px}.top_result .info_box .primary-text,.top_result .info_box .secondary-text{font-size:18px;text-align:center}.top_result .info_box .primary-text{margin-bottom:5px}.top_result .info_box .secondary-text{margin-bottom:10px}.top_result .info_box .tag{width:40px;text-align:center}.release .primary-text,.release .secondary-text{margin:0px;margin-bottom:4px}.release .secondary-text{opacity:.75;font-size:14px}.release .secondary-text .material-icons{font-size:17px !important;margin-left:4px}.release_grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(156px, 1fr));grid-gap:1rem}.release_grid.firstrow_only{grid-template-rows:1fr;grid-auto-rows:0;grid-row-gap:0px;overflow-y:hidden}#settings_picture{width:125px;height:125px}#logged_in_info{height:250px;display:flex;flex-direction:column;justify-content:space-evenly;align-items:center}#log_info{display:flex;flex-direction:column;align-items:center}#open_login_prompt{margin:8px 0px}.inline-flex input{margin-bottom:0px}#spotify_icon{width:24px;height:24px;fill:#1db954;margin-right:15px}.settings-group{display:flex;flex-direction:column;justify-content:center;border-top:1px solid var(--separator);padding-top:20px;padding-bottom:20px}.settings-group>*{margin-bottom:15px}.settings-group__header{font-size:1.5rem;margin-bottom:25px}.settings-group__header.settings-group__header--with-icon{display:inline-flex;align-items:center}.settings-group__header.settings-group__header--with-icon i.material-icons{margin-right:15px}.settings-container{display:flex}.settings-container__half{width:50%}.settings-container__third{width:33%}.settings-container__third--only-checkbox{display:flex;flex-direction:column;justify-content:center;align-items:start}.settings-container__half>*,.settings-container__third>*{margin-bottom:15px}.input_group{margin-bottom:25px}.input_group .input_group_text{margin-bottom:7px}.with_checkbox+.input_group{margin-top:10px}.search_tabcontent,.main_tabcontent,.favorites_tabcontent{display:none}.main_tabcontent h1{margin-bottom:12px}.tab{margin:16px 0px}.tab button{background-color:var(--main-background);color:var(--foreground)}.tab button.active{background-color:var(--accent-color)}.release{display:inline-block;width:156px}.release .cover_container{width:156px;height:156px;margin-bottom:10px}.section-tabs{list-style-type:none;display:flex;margin:16px 0 24px 0;cursor:pointer}.section-tabs__tab{flex:1;font-size:1.2rem;padding:.8em;border-top:3px solid var(--foreground);text-align:center;text-transform:capitalize}.section-tabs__tab.active{color:var(--accent-color);border-top:3px solid var(--accent-color)}#middle_section{background-color:var(--main-background);width:100%;height:100%;min-width:10px}#search{background-color:var(--secondary-background);width:100%;padding:0 1em;margin-bottom:20px;margin-right:32px;display:flex;align-items:center;border:1px solid transparent;transition:border 200ms ease-in-out}#search .search__icon{width:2rem;height:2rem}#search .search__icon i{font-size:2rem;color:var(--foreground)}#search .search__icon i::selection{background:none}#search:focus-within{border:1px solid var(--foreground)}#search #searchbar{height:calc(2rem + 1em);padding-left:.5em;border:0px;border-radius:0px;background-color:var(--secondary-background);color:var(--foreground);font-size:2rem;font-family:"Open Sans";font-weight:300}#search #searchbar:focus{outline:none}#search #searchbar:-webkit-autofill,#search #searchbar:-webkit-autofill:hover,#search #searchbar:-webkit-autofill:focus,#search #searchbar:-webkit-autofill:active{-webkit-box-shadow:0 0 0 calc(2rem + 1em) var(--secondary-background) inset !important;box-shadow:0 0 0 calc(2rem + 1em) var(--secondary-background) inset !important}#content{background-color:var(--main-background);width:100%;height:calc(100% - 93px);overflow-y:scroll;overflow-x:hidden}#content::-webkit-scrollbar{width:10px}#content::-webkit-scrollbar-track{background:var(--main-background)}#content::-webkit-scrollbar-thumb{background:var(--main-scroll);border-radius:4px;width:6px;padding:0px 2px}#container{--container-width: 95%}@media only screen and (min-width: 601px){#container{--container-width: 85%}}@media only screen and (min-width: 993px){#container{--container-width: 70%}}#container{margin:0 auto;max-width:1280px;width:var(--container-width)}.smallmodal-content{--modal-content-width: 95%}@media only screen and (min-width: 601px){.smallmodal-content{--modal-content-width: 85%}}@media only screen and (min-width: 993px){.smallmodal-content{--modal-content-width: 70%}}.progress{position:relative;height:4px;display:block;width:100%;background-color:var(--secondary-background);border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:var(--accent-color);-webkit-transition:width .3s linear;transition:width .3s linear}.progress .converting{background-color:var(--secondary-color);-webkit-transition:none !important;transition:none !important}.progress .indeterminate{background-color:var(--accent-color)}.progress .indeterminate::before{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate::after{content:"";position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left,right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}#sidebar{display:flex;flex-direction:column;width:48px;height:100%;position:absolute;top:0;left:0;background-color:var(--panels-background);color:var(--panels-text);transition:width 125ms ease-in-out 75ms;z-index:999}#sidebar:hover{width:200px}#sidebar .main_tablinks{transition:all 500ms}#sidebar .main_tablinks.active{background-color:var(--accent-color)}#sidebar .main_tablinks:not(#theme_selector){display:flex;align-items:center;height:55px;cursor:pointer}#sidebar .main_tablinks:not(#theme_selector):hover{background-color:var(--sidebar-link-bg)}#sidebar .main_tablinks:not(#theme_selector):hover .side_icon{color:var(--accent-color)}#sidebar .main_tablinks_text{margin-left:20px;opacity:0;overflow:hidden;text-transform:capitalize;letter-spacing:1.3px;white-space:nowrap;transition:all 50ms ease-in-out 200ms}#sidebar .side_icon{font-size:30px;padding:9px;transition:all 500ms}#sidebar .side_icon--theme{cursor:default}#sidebar .side_icon::selection{background:none}#sidebar:hover .main_tablinks:hover{background:var(--sidebar-link-bg-20);filter:grayscale(0) opacity(1)}#sidebar:hover .main_tablinks.active{background:var(--sidebar-link-bg);filter:grayscale(1)}html[data-theme=purple] #sidebar:hover .main_tablinks.active{background:var(--sidebar-link-bg-20);filter:grayscale(0)}#sidebar:hover .main_tablinks.active:hover{background:var(--sidebar-link-bg-20);filter:grayscale(0)}#sidebar:hover .main_tablinks_text{opacity:1}#sidebar:hover #theme_togglers{opacity:1}#sidebar #theme_selector{margin-top:20px;display:flex;height:50px}#sidebar #theme_togglers{position:relative;display:flex;justify-content:space-evenly;align-items:center;width:100%;opacity:0;transition:all 125ms ease-in-out 75ms}#sidebar .theme_toggler{width:25px;height:25px;border-radius:1000px;border:1px solid var(--separator);cursor:pointer;transition:border 200ms ease-in-out}#sidebar .theme_toggler--active{border-width:3px}#sidebar .theme_toggler--light{background:#fff}#sidebar .theme_toggler--dark{background:#141414}#sidebar .theme_toggler--purple{background:#460eaf}.image_header header{background-position:0% 35%;background-size:cover;padding:220px 24px 8px;border-radius:8px 8px 0px 0px}.image_header header h1,.image_header header h2{margin:0px}.image_header header h2{font-size:18px;margin-bottom:12px}.preview_controls{opacity:0;display:block;background:rgba(0,0,0,.5);width:56px;height:56px;text-align:center;line-height:56px;position:absolute;border-radius:5px;top:0;right:0;transition:opacity 200ms ease-in-out}.preview_playlist_controls{cursor:pointer}.toast-icon{display:inline-block;margin-right:8px}.circle-loader{display:inline-block;border:2px solid var(--accent-color);border-radius:50%;border-bottom:2px solid var(--secondary-background);width:16px;height:16px;animation:spin 1s linear infinite}.toastify{display:flex;align-items:center;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(0,0,0,.3);background:var(--toast-background);color:var(--toast-text)}.toastify .circle-loader{border-bottom-color:var(--toast-secondary)} diff --git a/public/js/bundle.js b/public/js/bundle.js index 921bd38..18f915e 100644 --- a/public/js/bundle.js +++ b/public/js/bundle.js @@ -3,7 +3,7 @@ * (c) 2014-2019 Evan You * Released under the MIT License. */ -var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function a(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function r(e){return null!==e&&"object"==typeof e}var s=Object.prototype.toString;function o(e){return"[object Object]"===s.call(e)}function l(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function c(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function d(e){return null==e?"":Array.isArray(e)||o(e)&&e.toString===s?JSON.stringify(e,null,2):String(e)}function u(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),a=e.split(","),i=0;i-1)return e.splice(n,1)}}var g=Object.prototype.hasOwnProperty;function v(e,t){return g.call(e,t)}function b(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var y=/-(\w)/g,_=b((function(e){return e.replace(y,(function(e,t){return t?t.toUpperCase():""}))})),k=b((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),A=/\B([A-Z])/g,w=b((function(e){return e.replace(A,"-$1").toLowerCase()}));var C=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var a=arguments.length;return a?a>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function x(e,t){t=t||0;for(var n=e.length-t,a=new Array(n);n--;)a[n]=e[n+t];return a}function T(e,t){for(var n in t)e[n]=t[n];return e}function S(e){for(var t={},n=0;n0,Q=G&&G.indexOf("edge/")>0,Y=(G&&G.indexOf("android"),G&&/iphone|ipad|ipod|ios/.test(G)||"ios"===H),J=(G&&/chrome\/\d+/.test(G),G&&/phantomjs/.test(G),G&&G.match(/firefox\/(\d+)/)),X={}.watch,Z=!1;if(U)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Z=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===O&&(O=!U&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),O},ne=U&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ae(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,re="undefined"!=typeof Symbol&&ae(Symbol)&&"undefined"!=typeof Reflect&&ae(Reflect.ownKeys);ie="undefined"!=typeof Set&&ae(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var se=z,oe=0,le=function(){this.id=oe++,this.subs=[]};le.prototype.addSub=function(e){this.subs.push(e)},le.prototype.removeSub=function(e){f(this.subs,e)},le.prototype.depend=function(){le.target&&le.target.addDep(this)},le.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(r&&!v(i,"default"))s=!1;else if(""===s||s===w(e)){var l=Fe(String,i.type);(l<0||o0&&(lt((l=e(l,(s||"")+"_"+o))[0])&<(d)&&(u[c]=fe(d.text+l[0].text),l.shift()),u.push.apply(u,l)):i(l)?lt(d)?u[c]=fe(d.text+l):""!==l&&u.push(fe(l)):lt(l)&<(d)?u[c]=fe(d.text+l.text):(a(r._isVList)&&n(l.tag)&&t(l.key)&&n(s)&&(l.key="__vlist"+s+"_"+o+"__"),u.push(l)));return u}(e):void 0}function lt(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),a=re?Reflect.ownKeys(e):Object.keys(e),i=0;i0,s=t?!!t.$stable:!r,o=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(s&&a&&a!==e&&o===a.$key&&!r&&!a.$hasNormal)return a;for(var l in i={},t)t[l]&&"$"!==l[0]&&(i[l]=ht(n,l,t[l]))}else i={};for(var c in n)c in i||(i[c]=mt(n,c));return t&&Object.isExtensible(t)&&(t._normalized=i),F(i,"$stable",s),F(i,"$key",o),F(i,"$hasNormal",r),i}function ht(e,t,n){var a=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:ot(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:a,enumerable:!0,configurable:!0}),a}function mt(e,t){return function(){return e[t]}}function ft(e,t){var a,i,s,o,l;if(Array.isArray(e)||"string"==typeof e)for(a=new Array(e.length),i=0,s=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return on.now()})}function ln(){var e,t;for(rn=sn(),nn=!0,Xt.sort((function(e,t){return e.id-t.id})),an=0;anan&&Xt[n].id>e.id;)n--;Xt.splice(n+1,0,e)}else Xt.push(e);tn||(tn=!0,Ze(ln))}}(this)},dn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||r(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Be(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},dn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||f(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var un={enumerable:!0,configurable:!0,get:z,set:z};function pn(e,t,n){un.get=function(){return this[t][n]},un.set=function(e){this[t][n]=e},Object.defineProperty(e,n,un)}function hn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},a=e._props={},i=e.$options._propKeys=[];e.$parent&&ke(!1);var r=function(r){i.push(r);var s=je(r,t,n,e);Ce(a,r,s),r in e||pn(e,"_props",r)};for(var s in t)r(s);ke(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?z:C(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;o(t=e._data="function"==typeof t?function(e,t){de();try{return e.call(t,t)}catch(e){return Be(e,t,"data()"),{}}finally{ue()}}(t,e):t||{})||(t={});var n=Object.keys(t),a=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var r=n[i];a&&v(a,r)||E(r)||pn(e,"_data",r)}we(t,!0)}(e):we(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),a=te();for(var i in t){var r=t[i],s="function"==typeof r?r:r.get;a||(n[i]=new dn(e,s||z,z,mn)),i in e||fn(e,i,r)}}(e,t.computed),t.watch&&t.watch!==X&&function(e,t){for(var n in t){var a=t[n];if(Array.isArray(a))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===s.call(n)&&e.test(t));var n}function xn(e,t){var n=e.cache,a=e.keys,i=e._vnode;for(var r in n){var s=n[r];if(s){var o=wn(s.componentOptions);o&&!t(o)&&Tn(n,r,a,i)}}}function Tn(e,t,n,a){var i=e[t];!i||a&&i.tag===a.tag||i.componentInstance.$destroy(),e[t]=null,f(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=yn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),a=t._parentVnode;n.parent=t.parent,n._parentVnode=a;var i=a.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=Le(_n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Gt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,a=t.$vnode=n._parentVnode,i=a&&a.context;t.$slots=dt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,a,i){return Rt(t,e,n,a,i,!1)},t.$createElement=function(e,n,a,i){return Rt(t,e,n,a,i,!0)};var r=a&&a.data;Ce(t,"$attrs",r&&r.attrs||e,null,!0),Ce(t,"$listeners",n._parentListeners||e,null,!0)}(n),Jt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&(ke(!1),Object.keys(t).forEach((function(n){Ce(e,n,t[n])})),ke(!0))}(n),hn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Jt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(kn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=xe,e.prototype.$delete=Te,e.prototype.$watch=function(e,t,n){if(o(t))return bn(this,e,t,n);(n=n||{}).user=!0;var a=new dn(this,e,t,n);if(n.immediate)try{t.call(this,a.value)}catch(e){Be(e,this,'callback for immediate watcher "'+a.expression+'"')}return function(){a.teardown()}}}(kn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var a=this;if(Array.isArray(e))for(var i=0,r=e.length;i1?x(n):n;for(var a=x(arguments,1),i='event handler for "'+e+'"',r=0,s=n.length;rparseInt(this.max)&&Tn(s,o[0],o,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return j}};Object.defineProperty(e,"config",t),e.util={warn:se,extend:T,mergeOptions:Le,defineReactive:Ce},e.set=xe,e.delete=Te,e.nextTick=Ze,e.observable=function(e){return we(e),e},e.options=Object.create(null),L.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,T(e.options.components,zn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=x(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=Le(this.options,e),this}}(e),An(e),function(e){L.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&o(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}(e)}(kn),Object.defineProperty(kn.prototype,"$isServer",{get:te}),Object.defineProperty(kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(kn,"FunctionalRenderContext",{value:Dt}),kn.version="2.6.11";var Mn=p("style,class"),Dn=p("input,textarea,option,select,progress"),$n=function(e,t,n){return"value"===n&&Dn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Pn=p("contenteditable,draggable,spellcheck"),Nn=p("events,caret,typing,plaintext-only"),Ln=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),In="http://www.w3.org/1999/xlink",jn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return jn(e)?e.slice(6,e.length):""},En=function(e){return null==e||!1===e};function Fn(e){for(var t=e.data,a=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Bn(i.data,t));for(;n(a=a.parent);)a&&a.data&&(t=Bn(t,a.data));return function(e,t){if(n(e)||n(t))return On(e,qn(t));return""}(t.staticClass,t.class)}function Bn(e,t){return{staticClass:On(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function On(e,t){return e?t?e+" "+t:e:t||""}function qn(e){return Array.isArray(e)?function(e){for(var t,a="",i=0,r=e.length;i-1?ha(e,t,n):Ln(t)?En(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Pn(t)?e.setAttribute(t,function(e,t){return En(t)||"false"===t?"false":"contenteditable"===e&&Nn(t)?t:"true"}(t,n)):jn(t)?En(n)?e.removeAttributeNS(In,Rn(t)):e.setAttributeNS(In,t,n):ha(e,t,n)}function ha(e,t,n){if(En(n))e.removeAttribute(t);else{if(W&&!K&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var a=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",a)};e.addEventListener("input",a),e.__ieph=!0}e.setAttribute(t,n)}}var ma={create:ua,update:ua};function fa(e,a){var i=a.elm,r=a.data,s=e.data;if(!(t(r.staticClass)&&t(r.class)&&(t(s)||t(s.staticClass)&&t(s.class)))){var o=Fn(a),l=i._transitionClasses;n(l)&&(o=On(o,qn(l))),o!==i._prevClass&&(i.setAttribute("class",o),i._prevClass=o)}}var ga,va,ba,ya,_a,ka,Aa={create:fa,update:fa},wa=/[\w).+\-_$\]]/;function Ca(e){var t,n,a,i,r,s=!1,o=!1,l=!1,c=!1,d=0,u=0,p=0,h=0;for(a=0;a=0&&" "===(f=e.charAt(m));m--);f&&wa.test(f)||(c=!0)}}else void 0===i?(h=a+1,i=e.slice(0,a).trim()):g();function g(){(r||(r=[])).push(e.slice(h,a).trim()),h=a+1}if(void 0===i?i=e.slice(0,a).trim():0!==h&&g(),r)for(a=0;a-1?{exp:e.slice(0,ya),key:'"'+e.slice(ya+1)+'"'}:{exp:e,key:null};va=e,ya=_a=ka=0;for(;!Oa();)qa(ba=Ba())?Va(ba):91===ba&&Ua(ba);return{exp:e.slice(0,_a),key:e.slice(_a+1,ka)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ba(){return va.charCodeAt(++ya)}function Oa(){return ya>=ga}function qa(e){return 34===e||39===e}function Ua(e){var t=1;for(_a=ya;!Oa();)if(qa(e=Ba()))Va(e);else if(91===e&&t++,93===e&&t--,0===t){ka=ya;break}}function Va(e){for(var t=e;!Oa()&&(e=Ba())!==t;);}var Ha;function Ga(e,t,n){var a=Ha;return function i(){var r=t.apply(null,arguments);null!==r&&Qa(e,i,n,a)}}var Wa=He&&!(J&&Number(J[1])<=53);function Ka(e,t,n,a){if(Wa){var i=rn,r=t;t=r._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return r.apply(this,arguments)}}Ha.addEventListener(e,t,Z?{capture:n,passive:a}:n)}function Qa(e,t,n,a){(a||Ha).removeEventListener(e,t._wrapper||t,n)}function Ya(e,a){if(!t(e.data.on)||!t(a.data.on)){var i=a.data.on||{},r=e.data.on||{};Ha=a.elm,function(e){if(n(e.__r)){var t=W?"change":"input";e[t]=[].concat(e.__r,e[t]||[]),delete e.__r}n(e.__c)&&(e.change=[].concat(e.__c,e.change||[]),delete e.__c)}(i),it(i,r,Ka,Qa,Ga,a.context),Ha=void 0}}var Ja,Xa={create:Ya,update:Ya};function Za(e,a){if(!t(e.data.domProps)||!t(a.data.domProps)){var i,r,s=a.elm,o=e.data.domProps||{},l=a.data.domProps||{};for(i in n(l.__ob__)&&(l=a.data.domProps=T({},l)),o)i in l||(s[i]="");for(i in l){if(r=l[i],"textContent"===i||"innerHTML"===i){if(a.children&&(a.children.length=0),r===o[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=r;var c=t(r)?"":String(r);ei(s,c)&&(s.value=c)}else if("innerHTML"===i&&Hn(s.tagName)&&t(s.innerHTML)){(Ja=Ja||document.createElement("div")).innerHTML=""+r+"";for(var d=Ja.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;d.firstChild;)s.appendChild(d.firstChild)}else if(r!==o[i])try{s[i]=r}catch(e){}}}}function ei(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var a=e.value,i=e._vModifiers;if(n(i)){if(i.number)return u(a)!==u(t);if(i.trim)return a.trim()!==t.trim()}return a!==t}(e,t))}var ti={create:Za,update:Za},ni=b((function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach((function(e){if(e){var a=e.split(n);a.length>1&&(t[a[0].trim()]=a[1].trim())}})),t}));function ai(e){var t=ii(e.style);return e.staticStyle?T(e.staticStyle,t):t}function ii(e){return Array.isArray(e)?S(e):"string"==typeof e?ni(e):e}var ri,si=/^--/,oi=/\s*!important$/,li=function(e,t,n){if(si.test(t))e.style.setProperty(t,n);else if(oi.test(n))e.style.setProperty(w(t),n.replace(oi,""),"important");else{var a=di(t);if(Array.isArray(n))for(var i=0,r=n.length;i-1?t.split(hi).forEach((function(t){return e.classList.add(t)})):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function fi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(hi).forEach((function(t){return e.classList.remove(t)})):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",a=" "+t+" ";n.indexOf(a)>=0;)n=n.replace(a," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function gi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&T(t,vi(e.name||"v")),T(t,e),t}return"string"==typeof e?vi(e):void 0}}var vi=b((function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}})),bi=U&&!K,yi="transition",_i="transitionend",ki="animation",Ai="animationend";bi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(yi="WebkitTransition",_i="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ki="WebkitAnimation",Ai="webkitAnimationEnd"));var wi=U?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ci(e){wi((function(){wi(e)}))}function xi(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),mi(e,t))}function Ti(e,t){e._transitionClasses&&f(e._transitionClasses,t),fi(e,t)}function Si(e,t,n){var a=Mi(e,t),i=a.type,r=a.timeout,s=a.propCount;if(!i)return n();var o="transition"===i?_i:Ai,l=0,c=function(){e.removeEventListener(o,d),n()},d=function(t){t.target===e&&++l>=s&&c()};setTimeout((function(){l0&&(n="transition",d=s,u=r.length):"animation"===t?c>0&&(n="animation",d=c,u=l.length):u=(n=(d=Math.max(s,c))>0?s>c?"transition":"animation":null)?"transition"===n?r.length:l.length:0,{type:n,timeout:d,propCount:u,hasTransform:"transition"===n&&zi.test(a[yi+"Property"])}}function Di(e,t){for(;e.length1}function ji(e,t){!0!==t.data.show&&Pi(t)}var Ri=function(e){var r,s,o={},l=e.modules,c=e.nodeOps;for(r=0;rm?y(e,t(i[v+1])?null:i[v+1].elm,i,h,v,r):h>v&&k(a,p,m)}(p,f,v,r,d):n(v)?(n(e.text)&&c.setTextContent(p,""),y(p,null,v,0,v.length-1,r)):n(f)?k(f,0,f.length-1):n(e.text)&&c.setTextContent(p,""):e.text!==i.text&&c.setTextContent(p,i.text),n(m)&&n(h=m.hook)&&n(h=h.postpatch)&&h(e,i)}}}function x(e,t,i){if(a(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r-1,s.selected!==r&&(s.selected=r);else if($(qi(s),a))return void(e.selectedIndex!==o&&(e.selectedIndex=o));i||(e.selectedIndex=-1)}}function Oi(e,t){return t.every((function(t){return!$(t,e)}))}function qi(e){return"_value"in e?e._value:e.value}function Ui(e){e.target.composing=!0}function Vi(e){e.target.composing&&(e.target.composing=!1,Hi(e.target,"input"))}function Hi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Gi(e){return!e.componentInstance||e.data&&e.data.transition?e:Gi(e.componentInstance._vnode)}var Wi={model:Ei,show:{bind:function(e,t,n){var a=t.value,i=(n=Gi(n)).data&&n.data.transition,r=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;a&&i?(n.data.show=!0,Pi(n,(function(){e.style.display=r}))):e.style.display=a?r:"none"},update:function(e,t,n){var a=t.value;!a!=!t.oldValue&&((n=Gi(n)).data&&n.data.transition?(n.data.show=!0,a?Pi(n,(function(){e.style.display=e.__vOriginalDisplay})):Ni(n,(function(){e.style.display="none"}))):e.style.display=a?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,a,i){i||(e.style.display=e.__vOriginalDisplay)}}},Ki={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Qi(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Qi(qt(t.children)):e}function Yi(e){var t={},n=e.$options;for(var a in n.propsData)t[a]=e[a];var i=n._parentListeners;for(var r in i)t[_(r)]=i[r];return t}function Ji(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var Xi=function(e){return e.tag||Ot(e)},Zi=function(e){return"show"===e.name},er={name:"transition",props:Ki,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Xi)).length){var a=this.mode,r=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return r;var s=Qi(r);if(!s)return r;if(this._leaving)return Ji(e,r);var o="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?o+"comment":o+s.tag:i(s.key)?0===String(s.key).indexOf(o)?s.key:o+s.key:s.key;var l=(s.data||(s.data={})).transition=Yi(this),c=this._vnode,d=Qi(c);if(s.data.directives&&s.data.directives.some(Zi)&&(s.data.show=!0),d&&d.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(s,d)&&!Ot(d)&&(!d.componentInstance||!d.componentInstance._vnode.isComment)){var u=d.data.transition=T({},l);if("out-in"===a)return this._leaving=!0,rt(u,"afterLeave",(function(){t._leaving=!1,t.$forceUpdate()})),Ji(e,r);if("in-out"===a){if(Ot(s))return c;var p,h=function(){p()};rt(l,"afterEnter",h),rt(l,"enterCancelled",h),rt(u,"delayLeave",(function(e){p=e}))}}return r}}},tr=T({tag:String,moveClass:String},Ki);function nr(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function ar(e){e.data.newPos=e.elm.getBoundingClientRect()}function ir(e){var t=e.data.pos,n=e.data.newPos,a=t.left-n.left,i=t.top-n.top;if(a||i){e.data.moved=!0;var r=e.elm.style;r.transform=r.WebkitTransform="translate("+a+"px,"+i+"px)",r.transitionDuration="0s"}}delete tr.mode;var rr={Transition:er,TransitionGroup:{props:tr,beforeMount:function(){var e=this,t=this._update;this._update=function(n,a){var i=Kt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,a)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),a=this.prevChildren=this.children,i=this.$slots.default||[],r=this.children=[],s=Yi(this),o=0;o-1?Kn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Kn[e]=/HTMLUnknownElement/.test(t.toString())},T(kn.options.directives,Wi),T(kn.options.components,rr),kn.prototype.__patch__=U?Ri:z,kn.prototype.$mount=function(e,t){return function(e,t,n){var a;return e.$el=t,e.$options.render||(e.$options.render=me),Jt(e,"beforeMount"),a=function(){e._update(e._render(),n)},new dn(e,a,z,{before:function(){e._isMounted&&!e._isDestroyed&&Jt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Jt(e,"mounted")),e}(this,e=e&&U?Yn(e):void 0,t)},U&&setTimeout((function(){j.devtools&&ne&&ne.emit("init",kn)}),0);var sr=/\{\{((?:.|\r?\n)+?)\}\}/g,or=/[-.*+?^${}()|[\]\/\\]/g,lr=b((function(e){var t=e[0].replace(or,"\\$&"),n=e[1].replace(or,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}));var cr={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Ia(e,"class");n&&(e.staticClass=JSON.stringify(n));var a=La(e,"class",!1);a&&(e.classBinding=a)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var dr,ur={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Ia(e,"style");n&&(e.staticStyle=JSON.stringify(ni(n)));var a=La(e,"style",!1);a&&(e.styleBinding=a)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},pr=function(e){return(dr=dr||document.createElement("div")).innerHTML=e,dr.textContent},hr=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),mr=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),fr=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),gr=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,vr=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,br="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+R.source+"]*",yr="((?:"+br+"\\:)?"+br+")",_r=new RegExp("^<"+yr),kr=/^\s*(\/?)>/,Ar=new RegExp("^<\\/"+yr+"[^>]*>"),wr=/^]+>/i,Cr=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Mr=/&(?:lt|gt|quot|amp|#39);/g,Dr=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,$r=p("pre,textarea",!0),Pr=function(e,t){return e&&$r(e)&&"\n"===t[0]};function Nr(e,t){var n=t?Dr:Mr;return e.replace(n,(function(e){return zr[e]}))}var Lr,Ir,jr,Rr,Er,Fr,Br,Or,qr=/^@|^v-on:/,Ur=/^v-|^@|^:|^#/,Vr=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Hr=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Gr=/^\(|\)$/g,Wr=/^\[.*\]$/,Kr=/:(.*)$/,Qr=/^:|^\.|^v-bind:/,Yr=/\.[^.\]]+(?=[^\]]*$)/g,Jr=/^v-slot(:|$)|^#/,Xr=/[\r\n]/,Zr=/\s+/g,es=b(pr);function ts(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ls(t),rawAttrsMap:{},parent:n,children:[]}}function ns(e,t){Lr=t.warn||Ta,Fr=t.isPreTag||M,Br=t.mustUseProp||M,Or=t.getTagNamespace||M;t.isReservedTag;jr=Sa(t.modules,"transformNode"),Rr=Sa(t.modules,"preTransformNode"),Er=Sa(t.modules,"postTransformNode"),Ir=t.delimiters;var n,a,i=[],r=!1!==t.preserveWhitespace,s=t.whitespace,o=!1,l=!1;function c(e){if(d(e),o||e.processed||(e=as(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&rs(n,{exp:e.elseif,block:e}),a&&!e.forbidden)if(e.elseif||e.else)s=e,(c=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(a.children))&&c.if&&rs(c,{exp:s.elseif,block:s});else{if(e.slotScope){var r=e.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[r]=e}a.children.push(e),e.parent=a}var s,c;e.children=e.children.filter((function(e){return!e.slotScope})),d(e),e.pre&&(o=!1),Fr(e.tag)&&(l=!1);for(var u=0;u]*>)","i")),p=e.replace(u,(function(e,n,a){return c=a.length,Tr(d)||"noscript"===d||(n=n.replace(//g,"$1").replace(//g,"$1")),Pr(d,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""}));l+=e.length-p.length,e=p,T(d,l-c,l)}else{var h=e.indexOf("<");if(0===h){if(Cr.test(e)){var m=e.indexOf("--\x3e");if(m>=0){t.shouldKeepComment&&t.comment(e.substring(4,m),l,l+m+3),w(m+3);continue}}if(xr.test(e)){var f=e.indexOf("]>");if(f>=0){w(f+2);continue}}var g=e.match(wr);if(g){w(g[0].length);continue}var v=e.match(Ar);if(v){var b=l;w(v[0].length),T(v[1],b,l);continue}var y=C();if(y){x(y),Pr(y.tagName,e)&&w(1);continue}}var _=void 0,k=void 0,A=void 0;if(h>=0){for(k=e.slice(h);!(Ar.test(k)||_r.test(k)||Cr.test(k)||xr.test(k)||(A=k.indexOf("<",1))<0);)h+=A,k=e.slice(h);_=e.substring(0,h)}h<0&&(_=e),_&&w(_.length),t.chars&&_&&t.chars(_,l-_.length,l)}if(e===n){t.chars&&t.chars(e);break}}function w(t){l+=t,e=e.substring(t)}function C(){var t=e.match(_r);if(t){var n,a,i={tagName:t[1],attrs:[],start:l};for(w(t[0].length);!(n=e.match(kr))&&(a=e.match(vr)||e.match(gr));)a.start=l,w(a[0].length),a.end=l,i.attrs.push(a);if(n)return i.unarySlash=n[1],w(n[0].length),i.end=l,i}}function x(e){var n=e.tagName,l=e.unarySlash;r&&("p"===a&&fr(n)&&T(a),o(n)&&a===n&&T(n));for(var c=s(n)||!!l,d=e.attrs.length,u=new Array(d),p=0;p=0&&i[s].lowerCasedTag!==o;s--);else s=0;if(s>=0){for(var c=i.length-1;c>=s;c--)t.end&&t.end(i[c].tag,n,r);i.length=s,a=s&&i[s-1].tag}else"br"===o?t.start&&t.start(e,[],!0,n,r):"p"===o&&(t.start&&t.start(e,[],!1,n,r),t.end&&t.end(e,n,r))}T()}(e,{warn:Lr,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,r,s,d,u){var p=a&&a.ns||Or(e);W&&"svg"===p&&(r=function(e){for(var t=[],n=0;nl&&(o.push(r=e.slice(l,i)),s.push(JSON.stringify(r)));var c=Ca(a[1].trim());s.push("_s("+c+")"),o.push({"@binding":c}),l=i+a[0].length}return l-1"+("true"===r?":("+t+")":":_q("+t+","+r+")")),Na(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+r+"):("+s+");if(Array.isArray($$a)){var $$v="+(a?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Fa(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Fa(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Fa(t,"$$c")+"}",null,!0)}(e,a,i);else if("input"===r&&"radio"===s)!function(e,t,n){var a=n&&n.number,i=La(e,"value")||"null";za(e,"checked","_q("+t+","+(i=a?"_n("+i+")":i)+")"),Na(e,"change",Fa(t,i),null,!0)}(e,a,i);else if("input"===r||"textarea"===r)!function(e,t,n){var a=e.attrsMap.type,i=n||{},r=i.lazy,s=i.number,o=i.trim,l=!r&&"range"!==a,c=r?"change":"range"===a?"__r":"input",d="$event.target.value";o&&(d="$event.target.value.trim()");s&&(d="_n("+d+")");var u=Fa(t,d);l&&(u="if($event.target.composing)return;"+u);za(e,"value","("+t+")"),Na(e,c,u,null,!0),(o||s)&&Na(e,"blur","$forceUpdate()")}(e,a,i);else if(!j.isReservedTag(r))return Ea(e,a,i),!1;return!0},text:function(e,t){t.value&&za(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&za(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:hr,mustUseProp:$n,canBeLeftOpenTag:mr,isReservedTag:Gn,getTagNamespace:Wn,staticKeys:function(e){return e.reduce((function(e,t){return e.concat(t.staticKeys||[])}),[]).join(",")}(ps)},gs=b((function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))}));function vs(e,t){e&&(hs=gs(t.staticKeys||""),ms=t.isReservedTag||M,function e(t){if(t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||h(e.tag)||!ms(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(hs)))}(t),1===t.type){if(!ms(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,a=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,ys=/\([^)]*?\);*$/,_s=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ks={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},As={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ws=function(e){return"if("+e+")return null;"},Cs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ws("$event.target !== $event.currentTarget"),ctrl:ws("!$event.ctrlKey"),shift:ws("!$event.shiftKey"),alt:ws("!$event.altKey"),meta:ws("!$event.metaKey"),left:ws("'button' in $event && $event.button !== 0"),middle:ws("'button' in $event && $event.button !== 1"),right:ws("'button' in $event && $event.button !== 2")};function xs(e,t){var n=t?"nativeOn:":"on:",a="",i="";for(var r in e){var s=Ts(e[r]);e[r]&&e[r].dynamic?i+=r+","+s+",":a+='"'+r+'":'+s+","}return a="{"+a.slice(0,-1)+"}",i?n+"_d("+a+",["+i.slice(0,-1)+"])":n+a}function Ts(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map((function(e){return Ts(e)})).join(",")+"]";var t=_s.test(e.value),n=bs.test(e.value),a=_s.test(e.value.replace(ys,""));if(e.modifiers){var i="",r="",s=[];for(var o in e.modifiers)if(Cs[o])r+=Cs[o],ks[o]&&s.push(o);else if("exact"===o){var l=e.modifiers;r+=ws(["ctrl","shift","alt","meta"].filter((function(e){return!l[e]})).map((function(e){return"$event."+e+"Key"})).join("||"))}else s.push(o);return s.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ss).join("&&")+")return null;"}(s)),r&&(i+=r),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":a?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(a?"return "+e.value:e.value)+"}"}function Ss(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=ks[e],a=As[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(a)+")"}var zs={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:z},Ms=function(e){this.options=e,this.warn=e.warn||Ta,this.transforms=Sa(e.modules,"transformCode"),this.dataGenFns=Sa(e.modules,"genData"),this.directives=T(T({},zs),e.directives);var t=e.isReservedTag||M;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ds(e,t){var n=new Ms(t);return{render:"with(this){return "+(e?$s(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function $s(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ps(e,t);if(e.once&&!e.onceProcessed)return Ns(e,t);if(e.for&&!e.forProcessed)return Is(e,t);if(e.if&&!e.ifProcessed)return Ls(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',a=Fs(e,t),i="_t("+n+(a?","+a:""),r=e.attrs||e.dynamicAttrs?qs((e.attrs||[]).concat(e.dynamicAttrs||[]).map((function(e){return{name:_(e.name),value:e.value,dynamic:e.dynamic}}))):null,s=e.attrsMap["v-bind"];!r&&!s||a||(i+=",null");r&&(i+=","+r);s&&(i+=(r?"":",null")+","+s);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var a=t.inlineTemplate?null:Fs(t,n,!0);return"_c("+e+","+js(t,n)+(a?","+a:"")+")"}(e.component,e,t);else{var a;(!e.plain||e.pre&&t.maybeComponent(e))&&(a=js(e,t));var i=e.inlineTemplate?null:Fs(e,t,!0);n="_c('"+e.tag+"'"+(a?","+a:"")+(i?","+i:"")+")"}for(var r=0;r>>0}(s):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var r=function(e,t){var n=e.children[0];if(n&&1===n.type){var a=Ds(n,t.options);return"inlineTemplate:{render:function(){"+a.render+"},staticRenderFns:["+a.staticRenderFns.map((function(e){return"function(){"+e+"}"})).join(",")+"]}"}}(e,t);r&&(n+=r+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+qs(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Rs(e){return 1===e.type&&("slot"===e.tag||e.children.some(Rs))}function Es(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ls(e,t,Es,"null");if(e.for&&!e.forProcessed)return Is(e,t,Es);var a="_empty_"===e.slotScope?"":String(e.slotScope),i="function("+a+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Fs(e,t)||"undefined")+":undefined":Fs(e,t)||"undefined":$s(e,t))+"}",r=a?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+r+"}"}function Fs(e,t,n,a,i){var r=e.children;if(r.length){var s=r[0];if(1===r.length&&s.for&&"template"!==s.tag&&"slot"!==s.tag){var o=n?t.maybeComponent(s)?",1":",0":"";return""+(a||$s)(s,t)+o}var l=n?function(e,t){for(var n=0,a=0;a':'
',Ws.innerHTML.indexOf(" ")>0}var Ys=!!U&&Qs(!1),Js=!!U&&Qs(!0),Xs=b((function(e){var t=Yn(e);return t&&t.innerHTML})),Zs=kn.prototype.$mount;kn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var a=n.template;if(a)if("string"==typeof a)"#"===a.charAt(0)&&(a=Xs(a));else{if(!a.nodeType)return this;a=a.innerHTML}else e&&(a=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(a){var i=Ks(a,{outputSourceRange:!1,shouldDecodeNewlines:Ys,shouldDecodeNewlinesForHref:Js,delimiters:n.delimiters,comments:n.comments},this),r=i.render,s=i.staticRenderFns;n.render=r,n.staticRenderFns=s}}return Zs.call(this,e,t)},kn.compile=Ks;const eo=io.connect(window.location.href);eo.on("connect",()=>{document.getElementById("start_app_placeholder").classList.add("loading_placeholder--hidden")});var to=new kn;function no(e,t){const{currentTarget:{dataset:{id:n}}}=t;switch(e){case"artist":to.$emit("artistTab:reset");break;case"album":case"playlist":case"spotifyplaylist":to.$emit("tracklistTab:reset")}eo.emit("getTracklist",{type:e,id:n}),ro(e,n)}function ao(e,t,n){window.windows_stack=[],window.currentStack={};const a=document.getElementsByClassName(t+"_tabcontent");for(let e=0;e{e.addEventListener("click",so)})}window.search_selected="",window.main_selected="",window.windows_stack=[],window.currentStack={};const lo={name:"the-sidebar",data:()=>({appOnline:null,activeTheme:"light",themes:["purple","dark","light"]}),mounted(){this.appOnline=navigator.onLine,window.addEventListener("online",()=>{this.appOnline=!0}),window.addEventListener("offline",()=>{this.appOnline=!1}),this.activeTheme=localStorage.getItem("selectedTheme")||"light"},methods:{changeTheme(e){e!==this.activeTheme&&(this.activeTheme=e,document.documentElement.setAttribute("data-theme",e),localStorage.setItem("selectedTheme",e),document.querySelectorAll("*").forEach(e=>{e.style.transition="all 200ms ease-in-out"}),document.documentElement.addEventListener("transitionend",(function e(){document.querySelectorAll("*").forEach(e=>{e.style.transition=""}),document.documentElement.removeEventListener("transitionend",e)})))},handleSidebarClick(e){const{target:t}=e;if(!(t.matches(".main_tablinks")||t.parentElement.matches(".main_tablinks")))return;let n=t.matches(".main_tablinks")?t:t.parentElement,a=null;switch(n.id){case"main_search_tablink":a="search_tab";break;case"main_home_tablink":a="home_tab";break;case"main_charts_tablink":a="charts_tab";break;case"main_favorites_tablink":a="favorites_tab";break;case"main_analyzer_tablink":a="analyzer_tab";break;case"main_settings_tablink":a="settings_tab";break;case"main_about_tablink":a="about_tab"}a&&ao(n,"main",a)}}};var co=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("aside",{attrs:{id:"sidebar",role:"navigation"},on:{click:e.handleSidebarClick}},[n("span",{staticClass:"main_tablinks",attrs:{id:"main_home_tablink",role:"link","aria-label":"home"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("home")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.home")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_search_tablink",role:"link","aria-label":"search"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("search")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.search")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_charts_tablink",role:"link","aria-label":"charts"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("bubble_chart")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.charts")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_favorites_tablink",role:"link","aria-label":"favorites"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("album")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.favorites")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_analyzer_tablink",role:"link","aria-label":"link analyzer"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("link")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.linkAnalyzer")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_settings_tablink",role:"link","aria-label":"settings"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("settings")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.settings")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_about_tablink",role:"link","aria-label":"info"}},[n("i",{staticClass:"material-icons side_icon"},[e._v("info")]),e._v(" "),n("span",{staticClass:"main_tablinks_text"},[e._v(e._s(e.$t("sidebar.about")))])]),e._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"theme_selector",role:"link","aria-label":"theme selector"}},[n("i",{staticClass:"material-icons side_icon side_icon--theme"},[e._v("palette")]),e._v(" "),n("div",{attrs:{id:"theme_togglers"}},e._l(e.themes,(function(t){return n("div",{key:t,staticClass:"theme_toggler ",class:[{"theme_toggler--active":e.activeTheme===t},"theme_toggler--"+t],on:{click:function(n){return e.changeTheme(t)}}})})),0)]),e._v(" "),n("div",{class:{online:e.appOnline,offline:!e.appOnline},attrs:{id:"network-status"}},[e.appOnline?n("i",{staticClass:"material-icons"},[e._v("wifi")]):n("i",{staticClass:"material-icons"},[n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}},[n("path",{attrs:{d:"M24 .01c0-.01 0-.01 0 0L0 0v24h24V.01zM0 0h24v24H0V0zm0 0h24v24H0V0z",fill:"none"}}),e._v(" "),n("path",{attrs:{d:"M22.99 9C19.15 5.16 13.8 3.76 8.84 4.78l2.52 2.52c3.47-.17 6.99 1.05 9.63 3.7l2-2zm-4 4c-1.29-1.29-2.84-2.13-4.49-2.56l3.53 3.53.96-.97zM2 3.05L5.07 6.1C3.6 6.82 2.22 7.78 1 9l1.99 2c1.24-1.24 2.67-2.16 4.2-2.77l2.24 2.24C7.81 10.89 6.27 11.73 5 13v.01L6.99 15c1.36-1.36 3.14-2.04 4.92-2.06L18.98 20l1.27-1.26L3.29 1.79 2 3.05zM9 17l3 3 3-3c-1.65-1.66-4.34-1.66-6 0z"}})])])])])};co._withStripped=!0;var uo=function(e,t,n,a,i,r,s,o){const l=("function"==typeof n?n.options:n)||{};l.__file="/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue",l.render||(l.render=e.render,l.staticRenderFns=e.staticRenderFns,l._compiled=!0,i&&(l.functional=!0)),l._scopeId=a;{let e;if(t&&(e=function(e){t.call(this,s(e))}),void 0!==e)if(l.functional){const t=l.render;l.render=function(n,a){return e.call(a),t(n,a)}}else{const t=l.beforeCreate;l.beforeCreate=t?[].concat(t,e):[e]}}return l}({render:co,staticRenderFns:[]},(function(e){e&&e("data-v-7d8957a2_0",{source:"\n#network-status[data-v-7d8957a2] {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: relative;\n\tmargin-top: auto;\n\tbottom: 0;\n}\n#network-status.online i.material-icons[data-v-7d8957a2] {\n\tcolor: hsl(151, 100%, 31%);\n}\n#network-status.offline i.material-icons svg[data-v-7d8957a2] {\n\tfill: red;\n\twidth: 1em;\n\theight: 1em;\n}\n",map:{version:3,sources:["/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue"],names:[],mappings:";AA0DA;CACA,aAAA;CACA,uBAAA;CACA,mBAAA;CACA,kBAAA;CACA,gBAAA;CACA,SAAA;AACA;AAEA;CACA,0BAAA;AACA;AAEA;CACA,SAAA;CACA,UAAA;CACA,WAAA;AACA",file:"TheSidebar.vue",sourcesContent:['\n\n\n\n diff --git a/src/components/TheContextMenu.vue b/src/components/TheContextMenu.vue index e26d918..190dc63 100644 --- a/src/components/TheContextMenu.vue +++ b/src/components/TheContextMenu.vue @@ -15,7 +15,7 @@ - diff --git a/src/components/TheTrackPreview.vue b/src/components/TheTrackPreview.vue index c87df33..a85cb4d 100644 --- a/src/components/TheTrackPreview.vue +++ b/src/components/TheTrackPreview.vue @@ -30,7 +30,10 @@ export default { onTimeUpdate() { // Prevents first time entering in this function if (isNaN(this.$refs.preview.duration)) return - if (this.$refs.preview.currentTime <= this.$refs.preview.duration - 1) return + let duration = this.$refs.preview.duration + if (!isFinite(duration)) duration = 30 + if (duration - this.$refs.preview.currentTime >= 1) return + if (this.previewStopped) return $(this.$refs.preview).animate({ volume: 0 }, 800) diff --git a/src/jsconfig.json b/src/jsconfig.json new file mode 100644 index 0000000..e6a6a4c --- /dev/null +++ b/src/jsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "checkJs": true, + "baseUrl": ".", + "paths": { + "@/*": ["./*"], + "@js/*": ["./js/*"], + "@components/*": ["./components/*"] + } + }, + "exclude": ["assets/**/*", "styles/**/*"] +} diff --git a/src/lang/ar.js b/src/lang/ar.js new file mode 100644 index 0000000..36edb4b --- /dev/null +++ b/src/lang/ar.js @@ -0,0 +1,346 @@ +const ar = { + globals: { + welcome: 'مرحبأ بك في ديمكس', + back: 'رجوع', + loading: 'جار التحميل', + download: 'تحميل {0}', + by: 'بواسطة {0}', + in: 'في {0}', + download_hint: 'تحميل', + play_hint: 'تشغيل', + toggle_download_tab_hint: 'عرض/اخفاء', + clean_queue_hint: 'تم المسح', + cancel_queue_hint: 'الغاء الكل', + listTabs: { + empty: '', + all: 'الكل', + top_result: 'افضل النتائج', + album: 'البوم | البومات', + artist: 'فنان | فنانون', + single: 'اغنية | اغنية', + title: 'عنوان | عناوين', + track: 'مقطع | مقاطع', + trackN: '0 مقاطع | {n} مقطع | {n} مقطع', + releaseN: '0 اصدار | {n} اصدار | {n} اصدار', + playlist: 'قائمة تشغيل | قوائم تشغيل', + compile: 'مجموعة | مجموعات', + ep: 'ep | eps', + spotifyPlaylist: 'قائمة تشغيل سبوتفاي | قوائم تشغيل سبوتفاي', + releaseDate: 'تاريخ الاصدار', + error: 'خطأ' + } + }, + about: { + titles: { + usefulLinks: 'روابط مهمة', + bugReports: 'ابلاغ عن مشكلة', + contributing: 'مساهمة', + donations: 'التبرع', + license: 'الرخصة' + }, + subtitles: { + bugReports: "هل هناك شيء لا يعمل في ديمكس؟ أخبرنا", + contributing: 'تريد المساهمة في هذا المشروع؟ يمكنك القيام بذلك بعدة طرق', + donations: 'تريد المساهمة مادياً؟ يمكنك التبرع' + }, + usesLibrary: 'هذا البرنامج يستخدم مكتبة ديمكس والتي يمكنك استخدامها لإنشاء واجهة مستخدم خاصة بك لديمكس.', + thanks: `شكرا لـ rtonno, و uhwot و lollilol لمساعدتي في هذا المشروع و لـ BasCurtiz و scarvimane لصنع الايقونة.`, + upToDate: `تابع اخر التحديثات في قناة الاخبار على تلكرام .`, + officialWebsite: 'الموقع الرسمي', + officialRepo: 'مستودع المكتبة الرسمي', + officialWebuiRepo: 'مستودع واجهة الويب الرسمي', + officialSubreddit: 'السب ريدت الرسمي', + newsChannel: 'قناة الاخبار', + questions: `إذا كانت لديك أسئلة أو مشاكل في التطبيق ، فابحث عن حل في السب ريدت اولاً subreddit بعد ذلك ، إذا لم تعثر على أي شيء ، يمكنك نشرمشكلتك على السب ريدت .`, + beforeReporting: `قبل ان تبلغ عن خطأ، تأكد من أنك تشغل أحدث إصدار من التطبيق وأن ما تريد الإبلاغ عنه هو في الواقع خطأ وليس مشكلة من جهتك.`, + beSure: `تأكد من أن الخطأ يمكن إعادة إنتاجه على أجهزة أخرى و ايضاً لا تبلغ علة خطأ تم التبليغ عنه سابقاً.`, + duplicateReports: 'سيتم إغلاق تقارير الأخطاء المكررة ، لذلك ترقب ذلك.', + dontOpenIssues: `DO NOT open issues for asking questions, there is a subreddit for that.`, + newUI: `If you're fluent in python you could try to make a new UI for the app using the base library, or fix bugs in the library with a pull request on the repo.`, + acceptFeatures: `أقبل اقتراحات الميزات أيضًا ، ولكن لا أشياء معقدة ، فقط اشياء يمكنني تنفيذها مباشرة في التطبيق وليس في المكتبة.`, + otherLanguages: `إذا كنت تجيد لغة برمجة أخرى ، يمكنك محاولة تحويل ديمكس إلى لغات برمجة أخرى!`, + understandingCode: `أنت بحاجة إلى مساعدة في فهم الكود؟ فقط اتصل بـ RemixDev على تيليكرام او ريديت.`, + contributeWebUI: `If you know Vue.js (JavaScript), HTML or CSS you could contribute to the WebUI.`, + itsFree: `يجب ان تتذكر ان هذا هو مشروع مجاني و عليك دعم الفنانين المفضلين لك قبل ان تدعم مطورين البرنامج.`, + notObligated: `لا تشعر بالالتزام بالتبرع ، لكني أقدر ذلك على أي حال!`, + lincensedUnder: `This work is licensed under the + GNU General Public License 3.0.` + }, + charts: { + title: 'قائمة الجداول', + changeCountry: 'تغيير الدولة', + download: 'تحميل قائمة الجدول' + }, + errors: { + title: 'خطأ في {0}', + ids: { + invalidURL: 'الرابط غير صحيح', + unsupportedURL: 'الرابط غير متاح حتى الانً', + ISRCnotOnDeezer: 'رمز المقطع غير متوفر في ديزر', + notYourPrivatePlaylist: "لا يمكنك تحميل قوائم التشغيل الخاصة و المخفية.", + spotifyDisabled: 'لم يتم اعداد ميزات سبوتفاي بالطرقة الصحيحة .', + trackNotOnDeezer: 'المقطع لا يوجد في ديزر!', + albumNotOnDeezer: 'الالبوم لا يوجد في ديزر!', + notOnDeezer: 'المقطع لا يوجد في ديزر!', + notEncoded: 'لم يتم تشفير المقطع حتى الانً!', + notEncodedNoAlternative: 'لم يتم تشفير المقطع حتى الآن ولم يتم العثور على بديل!', + wrongBitrate: 'لم يتم العثور على المقطع في الدقة المطلوبة.', + wrongBitrateNoAlternative: 'لم يتم العثور على المقطع في الدقة المطلوبة و لا توجد دقة بديلة!', + no360RA: 'المقطع غير متوفر في Reality Audio 360.', + notAvailable: "المقطع غير متوفر في سيرفرات ديزر!", + notAvailableNoAlternative: "المقطع غير متوفر في سيرفرات ديزر و لا يوجد بديل حتى الان!" + } + }, + favorites: { + title: 'المفضلات', + noPlaylists: 'لا يوجد قوائم تشغيل', + noAlbums: 'لم لا توجد البومات مفضلة', + noArtists: 'لا يوجد فنانين مفضلين', + noTracks: 'لا توجد مقاطع مفضلة' + }, + home: { + needTologin: 'يجب عليك التسجيل في حساب ديزر قبل بدء التحميل.', + openSettings: 'فتح الاعدادات', + sections: { + popularPlaylists: 'قوائم تشغيل مشهورة', + popularAlbums: 'اكثر الالبومات سماعأ' + } + }, + linkAnalyzer: { + info: 'يمكنك استخدام هذا القسم للعثور على مزيد من المعلومات حول الرابط الذي تحاول تنزيله.', + useful: + " كمثال هذا مفيد إذا كنت تحاول تنزيل بعض المقاطع الغير المتاحة في بلدك وتريد معرفة مكان توفرها .", + linkNotSupported: 'هذا الرابط غير معتمد حتى الآن', + linkNotSupportedYet: 'يبدو أن هذا الرابط غير معتمد حتى الآن ، حاول تحليل رابط آخر.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'المدة الزمنية', + diskNumber: 'رقم القرص', + trackNumber: 'رقم المقطع', + releaseDate: 'تاريخ الاصدار', + bpm: 'BPM', + label: 'Label', + recordType: 'نوع التسجيل', + genres: 'النوع الفني', + tracklist: 'قائمة المقاطع' + } + }, + search: { + startSearching: 'ابدأ البحث!', + description: + 'يمكنك البحث عن مقطع ، ألبوم كامل ، فنان ، قائمة تشغيل .... كل شيء! يمكنك أيضًا لصق رابط ديزر', + fans: '{0} متابعون', + noResults: 'لا يوجد نتائج', + noResultsTrack: 'لم يتم العثور على مقاطع', + noResultsAlbum: 'لم يتم العثور على البومات', + noResultsArtist: 'لم يتم العثور على فنانين', + noResultsPlaylist: 'لم يتم العثور على قوائم تشغيل' + }, + searchbar: 'ابحث عن أي شيء تريده (أو الصق رابط)', + downloads: 'التحميلات', + toasts: { + addedToQueue: '{0} تمت إلأضافة إلى قائمة الانتظار', + alreadyInQueue: '{0} حالياً في قائمة الانتظار!', + finishDownload: '{0} انتهى تحميل.', + allDownloaded: 'اكتملت جميع التنزيلات!', + refreshFavs: 'اكتمل التحديث!', + loggingIn: 'جار تسجيل الدخول...', + loggedIn: 'تم تسجيل الدخول', + alreadyLogged: 'تم تسجيل الدخول بالفعل', + loginFailed: "تعذر تسجيل الدخول", + loggedOut: 'تم تسجيل الخروج', + cancellingCurrentItem: 'جار الغاء العنصر الحالي.', + currentItemCancelled: 'تم الغاء العنصر الحالي.', + startAddingArtist: 'جار اضافة {0} البوم الى قائمة الانتضار', + finishAddingArtist: 'تم اضافة {0} البوم الى قائمة الانتضار', + startConvertingSpotifyPlaylist: 'جار تحويل مقاطع سبوتفاي الى مقاطع ديزر', + finishConvertingSpotifyPlaylist: 'تم تحويل قائمة تشغيل سبوتفاي', + loginNeededToDownload: 'يجب عليك تسجيل الدخول لتحميل المقاطع!' + }, + settings: { + title: 'الاعدادات', + languages: 'اللغات', + login: { + title: 'تسجيل الدخول', + loggedIn: 'تم تسجيل الدخول كـ {username}', + arl: { + question: 'كيفية الحصول علة ARL', + update: 'ارفع ال ARL' + }, + logout: 'تسجيل الخروج' + }, + appearance: { + title: 'المظهر', + slimDownloadTab: 'لوحة التحميل الرفيعة' + }, + downloadPath: { + title: 'مسار التحميل' + }, + templates: { + title: 'القوالب', + tracknameTemplate: 'قالب اسم المقطع', + albumTracknameTemplate: 'قالب مقطع الالبوم', + playlistTracknameTemplate: 'قالب مقطع قائمة التشغيل' + }, + folders: { + title: 'الملفات', + createPlaylistFolder: 'اصنع ملف لقائمة التشغيل', + playlistNameTemplate: 'قالب ملف قائمة التشغيل', + createArtistFolder: 'اصنع ملف للفنان', + artistNameTemplate: 'قالب ملف الفنان', + createAlbumFolder: 'اصنع ملف للالبوم', + albumNameTemplate: 'قالب ملف الالبوم', + createCDFolder: 'اصنع ملف للاقراص', + createStructurePlaylist: 'اصنع هيكل مجلدات لقوائم التشغيل', + createSingleFolder: 'اصنع هيكل مجلدات لالبومات ذات الاغنية الواحدة' + }, + trackTitles: { + title: 'عنوان المقطع', + padTracks: 'Pad tracks', + paddingSize: 'Overwrite padding size', + illegalCharacterReplacer: 'محول الكتابات الغير مسموح بها' + }, + downloads: { + title: 'التحميلات', + queueConcurrency: 'التنزيلات المتزامنة', + maxBitrate: { + title: 'الدقة المفضلة', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'هل يمكنني استبدال الملفات?', + y: 'نعم, استبدال الملفات', + n: "لا, لا تبدل الملفات", + t: 'استبدل العلامات فقط', + b: 'لا ، احتفظ بالملفين وأضف رقمًا إلى الملف المكرر' + }, + fallbackBitrate: 'تراجع الدقة', + fallbackSearch: 'تراجع البحث', + logErrors: 'إنشاء ملفات سجل للأخطاء', + logSearched: 'إنشاء ملفات سجل للمقاطع التي تم البحث عنها', + createM3U8File: 'انشاء ملف لقوائم التشغيل', + syncedLyrics: 'انشاء ملف لكلمات الاغنية', + playlistFilenameTemplate: 'قالب اسم ملف قائمة التشغيل', + saveDownloadQueue: 'حفظ قائمة انتظار التنزيل عند إغلاق التطبيق' + }, + covers: { + title: 'غلاف الالبوم', + saveArtwork: 'احفظ الغلاف', + coverImageTemplate: 'تغطية قالب الاسم', + saveArtworkArtist: 'احفظ صورة الفنان', + artistImageTemplate: 'قالب صورة الفنان', + localArtworkSize: 'حجم الصورة', + embeddedArtworkSize: 'حجم الصورة المدمجة', + localArtworkFormat: { + title: 'بأي صيغة تريد حفظ الصورة?', + jpg: 'jpeg صورة', + png: 'png صورة', + both: 'الاثنين png و jpeg' + }, + jpegImageQuality: 'JPEG دقة صورة' + }, + tags: { + head: 'العلامات التي يتم حفظها', + title: 'العنوان', + artist: 'الفنان', + album: 'الالبوم', + cover: 'الغلاف', + trackNumber: 'رقم المقطع', + trackTotal: 'مجموع المقاطع', + discNumber: 'رقم القرص', + discTotal: 'مجموع الاقراص', + albumArtist: 'فنان الالبوم', + genre: 'Genre', + year: 'السنة', + date: 'التاريخ', + explicit: 'كلمات اغنية صريحة للكبار', + isrc: 'ISRC', + length: 'طول المقطع', + barcode: 'Album Barcode (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Album Label', + lyrics: 'كلمات غير متزامنة', + copyright: 'حقوق النشر', + composer: 'ملحن', + involvedPeople: 'الناس المشتركون' + }, + other: { + title: 'غير', + savePlaylistAsCompilation: 'حفظ قوائم التشغيل كمجموعة', + useNullSeparator: 'استخدم فاصل فارغ', + saveID3v1: 'احفظ ملف ID3v1', + multiArtistSeparator: { + title: 'كيف تريد فصل الفنانين?', + nothing: 'احفظ الفنان الرئيسي فقط', + default: 'استخدام المواصفات القياسية', + andFeat: 'استخدام& و feat.', + using: 'استخدام "{0}"' + }, + singleAlbumArtist: 'احفظ فقط فنان الألبوم الرئيسي', + albumVariousArtists: 'احتفظ بـ "فنانين متنوعين" في ألبوم الفنانين', + removeAlbumVersion: 'إزالة "إصدار الألبوم" من عنوان المسار', + removeDuplicateArtists: 'إزالة مجموعات الفنانين', + dateFormat: { + title: 'صيغة التاريخ لملفات flac', + year: 'س س س س', + month: 'ش ش', + day: 'ي ي' + }, + featuredToTitle: { + title: 'ماذا علي أن أفعل مع الفنانين الغير رئيسيين ?', + 0: 'لا شيء', + 1: 'حذفه من العنوان', + 3: 'حذفه من عنوان الاغنية و الالبوم', + 2: 'وضعه في العنوان' + }, + titleCasing: 'نوع كتابة العناون', + artistCasing: 'نوع كتابة الفنان', + casing: { + nothing: 'بدون تغيير', + lower: 'احرف صغيرة', + upper: 'احرف كبيرة', + start: 'حرف كبير في بداية كل كلمة', + sentence: 'مثل جملة' + }, + previewVolume: 'معاينة الحجم', + executeCommand: { + title: 'الأمر للتنفيذ بعد التنزيل', + description: 'اتركه فارغًا بدون إجراء' + } + }, + spotify: { + title: 'مميزات سبوتفاي', + clientID: 'معرف عميل سبوتفاي', + clientSecret: 'الكود السري لعميل سبوتفاي', + username: 'اسم مستخدم سبوتفاي' + }, + reset: 'إعادة تعيين إلى الافتراضي', + save: 'حفظ', + toasts: { + init: 'تم تحميل الإعدادات!', + update: 'تم تحديث الاعدادات!', + ARLcopied: 'تم نسخ ARL إلى الحافظة' + } + }, + sidebar: { + home: 'الرئيسية', + search: 'بحث', + charts: 'قائمة الجداول', + favorites: 'المفضلة', + linkAnalyzer: 'محلل الروابط', + settings: 'الاعدادات', + about: 'حول' + }, + tracklist: { + downloadSelection: 'تحميل الاختيار' + } +} + +export default ar diff --git a/src/lang/en.js b/src/lang/en.js index 457eea0..17493c4 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -11,6 +11,7 @@ const en = { toggle_download_tab_hint: 'Expand/Collapse', clean_queue_hint: 'Clear Finished', cancel_queue_hint: 'Cancel All', + open_downloads_folder: 'Open Downloads Folder', cut: 'cut', copy: 'copy', copyLink: 'copy link', @@ -72,9 +73,7 @@ const en = { itsFree: `You should remember that this is a free project and you should support the artists you love before supporting the developers.`, notObligated: `Don't feel obligated to donate, I appreciate you anyway!`, lincensedUnder: `This work is licensed under the - GNU General Public License 3.0.` + GNU General Public License 3.0.` }, charts: { title: 'Charts', @@ -118,8 +117,7 @@ const en = { }, linkAnalyzer: { info: 'You can use this section to find more information about the link you are trying to download.', - useful: - "This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.", + useful: "This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.", linkNotSupported: 'This link is not yet supported', linkNotSupportedYet: 'Seems like this link is not yet supported, try analyzing another one.', table: { @@ -139,8 +137,7 @@ const en = { }, search: { startSearching: 'Start searching!', - description: - 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link', + description: 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link', fans: '{0} fans', noResults: 'No results', noResultsTrack: 'No Tracks found', @@ -151,7 +148,10 @@ const en = { searchbar: 'Search anything you want (or just paste a link)', downloads: 'downloads', toasts: { + restoringQueue: 'Restoring download queue...', + queueRestored: 'Download queue restored!', addedToQueue: '{0} added to queue', + addedMoreToQueue: '{0} items added to queue', alreadyInQueue: '{0} is already in queue!', finishDownload: '{0} finished downloading.', allDownloaded: 'All downloads completed!', @@ -226,7 +226,8 @@ const en = { y: 'Yes, overwrite the file', n: "No, don't overwrite the file", t: 'Overwrite only the tags', - b: 'No, keep both files and add a number to the duplicate' + b: 'No, keep both files and add a number to the duplicate', + e: "No, and don't look at the extensions" }, fallbackBitrate: 'Bitrate fallback', fallbackSearch: 'Search fallback', @@ -251,7 +252,10 @@ const en = { png: 'A png image', both: 'Both a jpeg and a png' }, - jpegImageQuality: 'JPEG image quality' + jpegImageQuality: 'JPEG image quality', + embeddedArtworkPNG: 'Save embedded artwork as PNG', + embeddedPNGWarning: 'PNGs are not officialy supported by Deezer and can be buggy', + imageSizeWarning: 'Anything above x1200 is not officialy used by Deezer, you may encounter issues' }, tags: { head: 'Which tags to save', diff --git a/src/lang/es.js b/src/lang/es.js index 78f612e..53fe1e7 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -11,6 +11,13 @@ const es = { toggle_download_tab_hint: 'Expandir/Colapsar', clean_queue_hint: 'Limpiar terminados', cancel_queue_hint: 'Cancelar todos', + open_downloads_folder: 'Abrir carpeta de descargas', + cut: 'cortar', + copy: 'copiar', + copyLink: 'copiar link', + copyImageLink: 'copiar link de la imagen', + copyDeezerLink: 'copiar link de Deezer', + paste: 'pegar', listTabs: { empty: '', all: 'todos', @@ -25,6 +32,8 @@ const es = { playlist: 'lista de reproducción | listas de reproducción', compile: 'compilación | compilaciones', ep: 'ep | eps', + more: 'Más álbumes', + featured: 'Apareció en', spotifyPlaylist: 'lista de reproducción spotify | listas de reproducción spotify', releaseDate: 'fecha de publicación', error: 'error' @@ -65,8 +74,7 @@ const es = { itsFree: `Debes recordar que este es un proyecto libre y debes apoyar a los artistas que amas antes de apoyar a los desarrolladores.`, notObligated: `No te sientas obligado a donar, ¡te aprecio de todas formas!`, lincensedUnder: `Esta obra está autorizada bajo una - GNU Licencia Pública General 3.0.` + GNU Licencia Pública General 3.0.` }, charts: { title: 'Tablas', @@ -87,12 +95,10 @@ const es = { notEncoded: '¡Pista aún no codificada!', notEncodedNoAlternative: '¡Pista aún no codificada y no se ha encontrado ninguna alternativa!', wrongBitrate: 'La pista no se encuentra a la velocidad de bitrate deseada.', - wrongBitrateNoAlternative: - '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', + wrongBitrateNoAlternative: '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', no360RA: 'La pista no está disponible en Reality Audio 360.', notAvailable: '¡La pista no está disponible en los servidores de Deezer!', - notAvailableNoAlternative: - '¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!' + notAvailableNoAlternative: '¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!' } }, favorites: { @@ -112,8 +118,7 @@ const es = { }, linkAnalyzer: { info: 'Puedes usar esta sección para encontrar más información sobre el enlace que estás tratando de descargar.', - useful: - 'Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.', + useful: 'Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.', linkNotSupported: 'Este enlace aún no está soportado', linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.', table: { @@ -133,8 +138,7 @@ const es = { }, search: { startSearching: '¡Comienza a buscar!', - description: - 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', + description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', fans: '{0} fanáticos', noResults: 'No hay resultados', noResultsTrack: 'No se encontraron pistas', @@ -145,7 +149,10 @@ const es = { searchbar: 'Busca lo que quieras (o simplemente pega un enlace)', downloads: 'descargas', toasts: { + restoringQueue: 'Restaurando cola de descarga...', + queueRestored: '¡Cola de descarga restaurada!', addedToQueue: '{0} añadidos a la cola', + addedMoreToQueue: '{0} elementos añadidos a la cola', alreadyInQueue: '¡{0} ya está en la cola!', finishDownload: '{0} terminado de descargar.', allDownloaded: '¡Todas las descargas se han completado!', @@ -160,7 +167,8 @@ const es = { startAddingArtist: 'Añadiendo {0} álbumes a la cola', finishAddingArtist: 'Añadido {0} álbumes a la cola', startConvertingSpotifyPlaylist: 'Convertir las pistas de Spotify en pistas de Deezer', - finishConvertingSpotifyPlaylist: 'Lista de reproducción de Spotify convertida' + finishConvertingSpotifyPlaylist: 'Lista de reproducción de Spotify convertida', + loginNeededToDownload: '¡Necesitas iniciar sesión para descargar títulos!' }, settings: { title: 'Configuración', @@ -170,7 +178,7 @@ const es = { loggedIn: 'Usted está conectado como {nombre de usuario}', arl: { question: '¿Cómo consigo mi propio ARL?', - update: 'Actualizar la ARL' + update: 'Actualiza la ARL' }, logout: 'Cerrar sesión' }, @@ -218,7 +226,8 @@ const es = { title: '¿Desea que sobreescriba los archivos?', y: 'Sí, sobrescribir el archivo', n: 'No, no sobrescribir el archivo', - t: 'Sobrescribir sólo las etiquetas' + t: 'Sobrescribir sólo las etiquetas', + b: 'No, mantener los dos archivos y agrega un número al archivo duplicado' }, fallbackBitrate: 'La solución alternativa de bitrate', fallbackSearch: 'Búsqueda de la segunda opción', @@ -243,7 +252,8 @@ const es = { png: 'Una imagen png', both: 'Ambos, jpeg y png' }, - jpegImageQuality: 'Calidad de la imagen JPEG' + jpegImageQuality: 'Calidad de la imagen JPEG', + imageSizeWarning: 'Nada por encima de x1200 no es usado oficialmente por Deezer, tú podrías encontrar inconvenientes' }, tags: { head: '¿Qué etiquetas guardar?', diff --git a/src/lang/fr.js b/src/lang/fr.js index aa6bbee..ce25429 100644 --- a/src/lang/fr.js +++ b/src/lang/fr.js @@ -11,6 +11,13 @@ const fr = { toggle_download_tab_hint: 'Développer/Réduire', clean_queue_hint: 'Retirer Les Tâches Terminées', cancel_queue_hint: 'Tout Annuler', + open_downloads_folder: 'Ouvrir Le Dossier De Téléchargements', + cut: 'couper', + copy: 'copier', + copyLink: 'copier le lien', + copyImageLink: "copier le lien de l'image", + copyDeezerLink: 'copier le lien deezer', + paste: 'coller', listTabs: { empty: '', all: 'tout', @@ -45,8 +52,7 @@ const fr = { contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !', donations: 'Vous souhaitez contribuer financièrement ? Vous pouvez faire un don !' }, - usesLibrary: - 'Cette application utilise la bibliothèque deemix, que vous pouvez exploiter afin de créer votre propre interface utilisateur pour deemix.', + usesLibrary: 'Cette application utilise la bibliothèque deemix, que vous pouvez exploiter afin de créer votre propre interface utilisateur pour deemix.', thanks: "Merci à rtonno, uhwot et lollilol de m'avoir aidé dans ce projet ainsi qu'à BasCurtiz et scarvimane pour avoir réalisé l'icône.", upToDate: 'Restez informé des mises à jour en suivant le canal de nouveautés sur Telegram.', officialWebsite: 'Site Officiel', @@ -67,8 +73,7 @@ const fr = { itsFree: "N'oubliez pas que ceci est un projet gratuit et que vous devez soutenir les artistes que vous appréciez avant de supporter les développeurs.", notObligated: "Ne vous sentez pas obligé de faire un don, je vous apprécie quand même !", lincensedUnder: `Ce projet est autorisé dans le cadre d'une - - Licence publique générale GNU 3.0.` + Licence publique générale GNU 3.0.` }, charts: { title: 'Hit-Parade', @@ -111,10 +116,8 @@ const fr = { } }, linkAnalyzer: { - info: - "Vous pouvez utiliser cette section pour obtenir plus d'informations sur le lien que vous essayez de télécharger.", - useful: - "C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.", + info: "Vous pouvez utiliser cette section pour obtenir plus d'informations sur le lien que vous essayez de télécharger.", + useful: "C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.", linkNotSupported: "Ce lien n'est pas encore pris en charge", linkNotSupportedYet: "Il semble que ce lien ne soit pas encore pris en charge, essayez d'en analyser un autre.", table: { @@ -134,8 +137,7 @@ const fr = { }, search: { startSearching: 'Commencer une recherche !', - description: - 'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist... tout ! Vous pouvez également copier-coller un lien Deezer', + description: 'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist... tout ! Vous pouvez également copier-coller un lien Deezer', fans: '{0} fans', noResults: 'Aucun résultat', noResultsTrack: "Aucune piste n'a été trouvée", @@ -146,7 +148,10 @@ const fr = { searchbar: 'Recherchez tout ce que vous voulez (ou copiez-collez simplement un lien)', downloads: 'téléchargements', toasts: { + restoringQueue: "Restauration de la file d'attente de téléchargement...", + queueRestored: "La file d'attente de téléchargement a été restaurée !", addedToQueue: "{0} ajouté à la file d'attente", + addedMoreToQueue: "{0} éléments ajoutés à la file d'attente", alreadyInQueue: "{0} est déjà en file d'attente !", finishDownload: '{0} a été téléchargé.', allDownloaded: 'Tous les téléchargements sont terminés !', @@ -245,7 +250,8 @@ const fr = { png: 'Une image png', both: 'À la fois jpeg et png' }, - jpegImageQuality: "Qualité d'image JPEG" + jpegImageQuality: "Qualité de l'image JPEG", + imageSizeWarning: "Toute valeur supérieure à x1200 n'est pas officiellement utilisée par Deezer, vous pourriez donc rencontrer des problèmes" }, tags: { head: 'Métadonnées à sauvegarder', diff --git a/src/lang/it.js b/src/lang/it.js index be5738e..b80e1fa 100644 --- a/src/lang/it.js +++ b/src/lang/it.js @@ -11,6 +11,7 @@ const it = { toggle_download_tab_hint: 'Espandi/Riduci', clean_queue_hint: 'Pulisci Lista', cancel_queue_hint: 'Cancella tutti i download', + open_downloads_folder: 'Apri la cartella di download', cut: 'taglia', copy: 'copia', copyLink: 'copia link', @@ -153,7 +154,10 @@ const it = { searchbar: 'Cerca qualsiasi cosa (o incolla semplicemente un link)', downloads: 'download', toasts: { + restoringQueue: 'Ripristinando la coda di download...', + queueRestored: 'Coda di download ripristinata!', addedToQueue: '{0} aggiunto alla coda', + addedMoreToQueue: '{0} oggetti aggiunti alla coda', alreadyInQueue: '{0} è già nella coda!', finishDownload: '{0} ha finito di scaricarsi.', allDownloaded: 'Tutti i download completati!', @@ -228,7 +232,8 @@ const it = { y: 'Si, sovrascrivi i file', n: 'No, non sovrascrivere i file', t: 'Sovrascrivi solo i tag', - b: 'No, mantieni entrambi i file e aggiungi un numero al duplicato' + b: 'No, mantieni entrambi i file e aggiungi un numero al duplicato', + e: "No, e non tener conto della estensione del file" }, fallbackBitrate: 'Utilizza bitrate più bassi se il bitrate preferito non è disponibile', fallbackSearch: 'Cerca il brano se il link originale non è disponibile', @@ -253,7 +258,10 @@ const it = { png: 'In png', both: 'Sia in jpeg che in png' }, - jpegImageQuality: 'Qualità immagine JPEG' + jpegImageQuality: 'Qualità immagine JPEG', + embeddedArtworkPNG: 'Salva copertina incorporata come PNG', + embeddedPNGWarning: 'Le immagini PNG non sono usate ufficialmente da Deezer e potrebbero dare problemi', + imageSizeWarning: 'Dimensioni maggiori di x1200 non sono usate ufficialmente da Deezer, potresti incontrare problemi' }, tags: { head: 'Quali tag salvare', diff --git a/src/plugins/i18n.js b/src/plugins/i18n.js index 4b36bf6..966a07f 100644 --- a/src/plugins/i18n.js +++ b/src/plugins/i18n.js @@ -14,6 +14,7 @@ import ru from '@/lang/ru' import tr from '@/lang/tr' import vn from '@/lang/vn' import hr from '@/lang/hr' +import ar from '@/lang/ar' Vue.use(VueI18n) @@ -33,7 +34,8 @@ const locales = { ru, tr, vn, - hr + hr, + ar } const i18n = new VueI18n({ diff --git a/src/styles/scss/_progressbar.scss b/src/styles/scss/_progressbar.scss index 8cca92e..2a85995 100644 --- a/src/styles/scss/_progressbar.scss +++ b/src/styles/scss/_progressbar.scss @@ -18,6 +18,12 @@ transition: width 0.3s linear; } + .converting { + background-color: var(--secondary-color); + -webkit-transition: none !important; + transition: none !important; + } + .indeterminate { background-color: var(--accent-color); diff --git a/src/styles/scss/base/_base.scss b/src/styles/scss/base/_base.scss index bbe427a..fb57392 100644 --- a/src/styles/scss/base/_base.scss +++ b/src/styles/scss/base/_base.scss @@ -15,13 +15,14 @@ html[data-theme='light'] { --foreground: hsl(0, 0%, 20%); --foreground-inverted: hsl(0, 0%, 93%); --accent-color: hsl(210, 100%, 52%); + --secondary-color: hsl(46, 100%, 57%); --panels-background: hsl(210, 3%, 14%); --panels-text: hsl(0, 0%, 100%); --accent-text: hsl(0, 0%, 0%); --sidebar-link-bg: hsl(0, 0%, 24%); --sidebar-link-bg-20: hsla(0, 0%, 24%, 0.2); - + --icon-hover: var(--accent-color); --table-bg: hsl(0, 0%, 100%); @@ -35,6 +36,7 @@ html[data-theme='dark'] { --foreground: hsl(0, 0%, 93%); --foreground-inverted: hsl(0, 0%, 20%); --accent-color: hsl(210, 100%, 52%); + --secondary-color: hsl(46, 100%, 57%); --panels-background: hsl(0, 0%, 10%); --panels-text: hsl(0, 0%, 100%); --accent-text: hsl(0, 0%, 87%); @@ -55,6 +57,7 @@ html[data-theme='purple'] { --foreground: hsl(0, 0%, 93%); --foreground-inverted: hsl(258, 62%, 8%); --accent-color: hsl(261, 85%, 37%); + --secondary-color: hsl(46, 100%, 57%); --panels-background: hsl(257, 70%, 9%); --panels-text: hsl(0, 0%, 100%); --accent-text: hsl(0, 0%, 87%); diff --git a/src/utils/flags.js b/src/utils/flags.js index 3c3205b..8c9857b 100644 --- a/src/utils/flags.js +++ b/src/utils/flags.js @@ -10,6 +10,7 @@ import ru from 'svg-country-flags/svg/ru.svg' import tr from 'svg-country-flags/svg/tr.svg' import vn from 'svg-country-flags/svg/vn.svg' import hr from 'svg-country-flags/svg/hr.svg' +import ar from '@/assets/ar.svg' export default { it, @@ -23,5 +24,6 @@ export default { ru, tr, vn, - hr + hr, + ar } diff --git a/src/utils/utils.js b/src/utils/utils.js index 3968c2f..f05290b 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -73,6 +73,24 @@ export function debounce(func, wait, immediate) { } } +/** + * Workaround to copy to the clipboard cross-OS by generating a + * ghost input and copying the passed String + * + * @param {string} text Text to copy + */ +export function copyToClipboard(text) { + const ghostInput = document.createElement('input') + + document.body.appendChild(ghostInput) + ghostInput.setAttribute('type', 'text') + ghostInput.setAttribute('value', text) + ghostInput.select() + ghostInput.setSelectionRange(0, 99999) + document.execCommand('copy') + ghostInput.remove() +} + export const COUNTRIES = { AF: 'Afghanistan', AX: '\u00c5land Islands',