diff --git a/COMPILE-UI.md b/COMPILE-UI.md
index 7ad6c95..e06bbbf 100644
--- a/COMPILE-UI.md
+++ b/COMPILE-UI.md
@@ -19,7 +19,7 @@ If you will see the corresponding versions of node and npm, you are ready to cod
3. Go to the root of this project, open your favorite prompt and run
```console
-$ npm install
+$ npm i
```
# Scripts
@@ -50,4 +50,12 @@ If you want to deploy your application, you have to run
$ npm run build
```
-This is necessary to get a bundled `.js` file **minified**, helping ro drop your final application size.
\ No newline at end of file
+This is necessary to get a bundled `.js` file **minified**, helping ro drop your final application size.
+
+# Other
+
+If you notice that another member of the team installed one or more new packages, just run
+
+```bash
+$ npm i
+```
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 6bddce1..d85ae3e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -403,6 +403,11 @@
}
}
},
+ "jquery": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz",
+ "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg=="
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -427,6 +432,11 @@
"strip-bom": "^3.0.0"
}
},
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
"magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
@@ -806,6 +816,11 @@
"source-map-support": "~0.5.12"
}
},
+ "toastify-js": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.7.0.tgz",
+ "integrity": "sha512-GmPy4zJ/ulCfmCHlfCtgcB+K2xhx2AXW3T/ZZOSjyjaIGevhz+uvR8HSCTay/wBq4tt2mUnBqlObP1sSWGlsnQ=="
+ },
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
diff --git a/package.json b/package.json
index 683fa2b..de1be54 100644
--- a/package.json
+++ b/package.json
@@ -19,5 +19,10 @@
"serve": "python server.py",
"dev": "npm-run-all --parallel watch:js serve",
"build": "npm-run-all build:js"
+ },
+ "dependencies": {
+ "jquery": "^3.5.1",
+ "lodash": "^4.17.15",
+ "toastify-js": "^1.7.0"
}
}
diff --git a/public/index.html b/public/index.html
index 38eb702..a4f07d6 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1095,10 +1095,7 @@
{{ metadata }}
-
-
-
diff --git a/public/js/bundle.js b/public/js/bundle.js
index 0fadc83..70d4031 100644
--- a/public/js/bundle.js
+++ b/public/js/bundle.js
@@ -1,1854 +1,35 @@
-const socket = io.connect(window.location.href);
-
-socket.on('connect', () => {
- document.getElementById('loading_overlay').classList.remove('active');
-});
-
-let toastsWithId = {};
-
-const toast = function (msg, icon = null, dismiss = true, id = null) {
- if (toastsWithId[id]) {
- let toastObj = toastsWithId[id];
- let toastDOM = $(`div.toastify[toast_id=${id}]`);
- if (msg) {
- toastDOM.find('.toast-message').html(msg);
- }
- if (icon) {
- if (icon == 'loading') icon = `
`;
- else icon = `${icon} `;
- toastDOM.find('.toast-icon').html(icon);
- }
- if (dismiss !== null && dismiss) {
- setTimeout(function () {
- toastObj.hideToast();
- delete toastsWithId[id];
- }, 3000);
- }
- } else {
- if (icon == null) icon = '';
- else if (icon == 'loading') icon = `
`;
- else icon = `${icon} `;
- let toastObj = Toastify({
- text: `${icon} ${msg}`,
- duration: dismiss ? 3000 : 0,
- gravity: 'bottom',
- position: 'left'
- }).showToast();
- if (id) {
- toastsWithId[id] = toastObj;
- $(toastObj.toastElement).attr('toast_id', id);
- }
- }
-};
-
-socket.on('toast', data => {
- toast(data.msg, data.icon || null, data.dismiss !== undefined ? data.dismiss : true, data.id || null);
-});
-
-/* ===== Locals ===== */
-const tabMinWidth = 250;
-const tabMaxWidth = 500;
-
-let cachedTabWidth = parseInt(localStorage.getItem('downloadTabWidth')) || 300;
-let queueList = {};
-let queue = [];
-let queueComplete = [];
-let tabContainerEl;
-let listEl;
-let dragHandlerEl;
-
-function init() {
- // Find download DOM elements
- tabContainerEl = document.getElementById('download_tab_container');
- listEl = document.getElementById('download_list');
- dragHandlerEl = document.getElementById('download_tab_drag_handler');
-
- // Check if download tab should be open
- if ('true' === localStorage.getItem('downloadTabOpen')) {
- tabContainerEl.classList.remove('tab_hidden');
-
- setTabWidth(cachedTabWidth);
- }
-
- linkListeners();
-}
-
-function linkListeners() {
- listEl.addEventListener('click', handleListClick);
- document.getElementById('toggle_download_tab').addEventListener('click', toggleDownloadTab);
-
- // Queue buttons
- document.getElementById('clean_queue').addEventListener('click', () => {
- socket.emit('removeFinishedDownloads');
- });
-
- document.getElementById('cancel_queue').addEventListener('click', () => {
- socket.emit('cancelAllDownloads');
- });
-
- dragHandlerEl.addEventListener('mousedown', event => {
- event.preventDefault();
-
- document.addEventListener('mousemove', handleDrag);
- });
-
- document.addEventListener('mouseup', () => {
- document.removeEventListener('mousemove', handleDrag);
- });
-
- tabContainerEl.addEventListener('transitionend', () => {
- tabContainerEl.style.transition = '';
- });
-
- window.addEventListener('beforeunload', () => {
- localStorage.setItem('downloadTabWidth', cachedTabWidth);
- });
-}
-
-function setTabWidth(newWidth) {
- if (undefined === newWidth) {
- tabContainerEl.style.width = '';
- listEl.style.width = '';
- } else {
- tabContainerEl.style.width = newWidth + 'px';
- listEl.style.width = newWidth + 'px';
- }
-}
-
-function handleDrag(event) {
- let newWidth = window.innerWidth - event.pageX + 2;
-
- if (newWidth < tabMinWidth) {
- newWidth = tabMinWidth;
- } else if (newWidth > tabMaxWidth) {
- newWidth = tabMaxWidth;
- }
-
- cachedTabWidth = newWidth;
-
- setTabWidth(newWidth);
-}
-
-function sendAddToQueue(url, bitrate = null) {
- if (url.indexOf(';') !== -1) {
- let urls = url.split(';');
- urls.forEach(url => {
- socket.emit('addToQueue', { url: url, bitrate: bitrate });
- });
- } else if (url != '') {
- socket.emit('addToQueue', { url: url, bitrate: bitrate });
- }
-}
-
-function addToQueue(queueItem, current = false) {
- queueList[queueItem.uuid] = queueItem;
- if (queueItem.downloaded + queueItem.failed == queueItem.size) {
- queueComplete.push(queueItem.uuid);
- } else {
- queue.push(queueItem.uuid);
- }
- $(listEl).append(
- `
-
-
-
- ${queueItem.title} -
- ${queueItem.artist}
-
-
- ${queueItem.downloaded + queueItem.failed} /${
- queueItem.size
- }
-
-
-
-
`
- );
- if (queueItem.progress > 0 || current) {
- $('#bar_' + queueItem.uuid)
- .removeClass('indeterminate')
- .addClass('determinate');
- }
- $('#bar_' + queueItem.uuid).css('width', queueItem.progress + '%');
- if (queueItem.failed >= 1) {
- $('#download_' + queueItem.uuid + ' .download_info_status').append(
- `( ${queueItem.failed} error_outline ) `
- );
- }
- if (queueItem.downloaded + queueItem.failed == queueItem.size) {
- let result_icon = $('#download_' + queueItem.uuid).find('.queue_icon');
- if (queueItem.failed == 0) {
- result_icon.text('done');
- } else if (queueItem.failed == queueItem.size) {
- result_icon.text('error');
- } else {
- result_icon.text('warning');
- }
- }
-}
-
-function initQueue(data) {
- if (data.queueComplete.length) {
- data.queueComplete.forEach(item => {
- addToQueue(data.queueList[item]);
- });
- }
- if (data.currentItem) {
- addToQueue(data['queueList'][data.currentItem], true);
- }
- data.queue.forEach(item => {
- addToQueue(data.queueList[item]);
- });
-}
-
-function startDownload(uuid) {
- $('#bar_' + uuid)
- .removeClass('indeterminate')
- .addClass('determinate');
-}
-
-socket.on('startDownload', startDownload);
-
-function handleListClick(event) {
- if (!event.target.matches('.queue_icon[data-uuid]')) {
- return
- }
-
- let icon = event.target.innerText;
- let uuid = $(event.target).data('uuid');
-
- switch (icon) {
- case 'remove':
- socket.emit('removeFromQueue', uuid);
- break
- }
-}
-
-// Show/Hide Download Tab
-function toggleDownloadTab(ev) {
- ev.preventDefault();
-
- setTabWidth();
-
- tabContainerEl.style.transition = 'all 250ms ease-in-out';
-
- // Toggle returns a Boolean based on the action it performed
- let isHidden = tabContainerEl.classList.toggle('tab_hidden');
-
- if (!isHidden) {
- setTabWidth(cachedTabWidth);
- }
-
- localStorage.setItem('downloadTabOpen', !isHidden);
-}
-
-socket.on('init_downloadQueue', initQueue);
-socket.on('addedToQueue', addToQueue);
-
-function removeFromQueue(uuid) {
- let index = queue.indexOf(uuid);
- if (index > -1) {
- queue.splice(index, 1);
- $(`#download_${queueList[uuid].uuid}`).remove();
- delete queueList[uuid];
- }
-}
-
-socket.on('removedFromQueue', removeFromQueue);
-
-function finishDownload(uuid) {
- if (queue.indexOf(uuid) > -1) {
- toast(`${queueList[uuid].title} finished downloading.`, 'done');
- $('#bar_' + uuid).css('width', '100%');
- let result_icon = $('#download_' + uuid).find('.queue_icon');
- if (queueList[uuid].failed == 0) {
- result_icon.text('done');
- } else if (queueList[uuid].failed >= queueList[uuid].size) {
- result_icon.text('error');
- } else {
- result_icon.text('warning');
- }
- let index = queue.indexOf(uuid);
- if (index > -1) {
- queue.splice(index, 1);
- queueComplete.push(uuid);
- }
- if (queue.length <= 0) {
- toast('All downloads completed!', 'done_all');
- }
- }
-}
-
-socket.on('finishDownload', finishDownload);
-
-function removeAllDownloads(currentItem) {
- queueComplete = [];
- if (currentItem == '') {
- queue = [];
- queueList = {};
- $(listEl).html('');
- } else {
- queue = [currentItem];
- let tempQueueItem = queueList[currentItem];
- queueList = {};
- queueList[currentItem] = tempQueueItem;
- $('.download_object').each(function (index) {
- if ($(this).attr('id') != 'download_' + currentItem) $(this).remove();
- });
- }
-}
-
-socket.on('removedAllDownloads', removeAllDownloads);
-
-function removedFinishedDownloads() {
- queueComplete.forEach(item => {
- $('#download_' + item).remove();
- });
- queueComplete = [];
-}
-
-socket.on('removedFinishedDownloads', removedFinishedDownloads);
-
-function updateQueue(update) {
- if (update.uuid && queue.indexOf(update.uuid) > -1) {
- if (update.downloaded) {
- queueList[update.uuid].downloaded++;
- $('#download_' + update.uuid + ' .queue_downloaded').text(
- queueList[update.uuid].downloaded + queueList[update.uuid].failed
- );
- }
- if (update.failed) {
- queueList[update.uuid].failed++;
- $('#download_' + update.uuid + ' .queue_downloaded').text(
- queueList[update.uuid].downloaded + queueList[update.uuid].failed
- );
- if (queueList[update.uuid].failed == 1) {
- $('#download_' + update.uuid + ' .download_info_status').append(
- `( 1 error_outline ) `
- );
- } else {
- $('#download_' + update.uuid + ' .queue_failed').text(queueList[update.uuid].failed);
- }
- }
- if (update.progress) {
- queueList[update.uuid].progress = update.progress;
- $('#bar_' + update.uuid).css('width', update.progress + '%');
- }
- }
-}
-
-socket.on('updateQueue', updateQueue);
-
-var Downloads = {
- init,
- sendAddToQueue,
- addToQueue
-};
-
-const QualityModal = {
- // Defaults
- open: false,
- url: ''
-};
-
-function init$1() {
- QualityModal.element = document.getElementById('modal_quality');
-
- linkListeners$1();
-}
-
-function open(link) {
- QualityModal.url = link;
- QualityModal.element.style.display = 'block';
- QualityModal.element.classList.add('animated', 'fadeIn');
-}
-
-function linkListeners$1() {
- QualityModal.element.addEventListener('click', handleClick);
- QualityModal.element.addEventListener('webkitAnimationEnd', handleAnimationEnd);
-}
-
-function handleClick(event) {
- QualityModal.element.classList.add('animated', 'fadeOut');
-
- if (!event.target.matches('.quality-button')) {
- return
- }
-
- let bitrate = event.target.dataset.qualityValue;
-
- Downloads.sendAddToQueue(QualityModal.url, bitrate);
-}
-
-function handleAnimationEnd() {
- QualityModal.element.classList.remove('animated', QualityModal.open ? 'fadeOut' : 'fadeIn');
- QualityModal.element.style.display = QualityModal.open ? 'none' : 'block';
- QualityModal.open = !QualityModal.open;
-}
-
-var QualityModal$1 = {
- init: init$1,
- open
-};
-
-const ArtistTab = new Vue({
- data() {
- return {
- currentTab: '',
- sortKey: 'release_date',
- sortOrder: 'desc',
- title: '',
- image: '',
- type: '',
- link: '',
- head: null,
- body: null
- }
- },
- methods: {
- albumView,
- reset() {
- this.title = 'Loading...';
- this.image = '';
- this.type = '';
- this.currentTab = '';
- this.sortKey = 'release_date';
- this.sortOrder = 'desc';
- this.link = '';
- this.head = [];
- this.body = null;
- },
- addToQueue(e) {
- e.stopPropagation();
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal(e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- sortBy(key) {
- if (key == this.sortKey) {
- this.sortOrder = this.sortOrder == 'asc' ? 'desc' : 'asc';
- } else {
- this.sortKey = key;
- this.sortOrder = 'asc';
- }
- },
- changeTab(tab) {
- this.currentTab = tab;
- },
- checkNewRelease(date) {
- let g1 = new Date();
- let g2 = new Date(date);
- g2.setDate(g2.getDate() + 3);
- g1.setHours(0, 0, 0, 0);
-
- return g1.getTime() <= g2.getTime()
- },
- showArtist(data) {
- this.title = data.name;
- this.image = data.picture_xl;
- this.type = 'Artist';
- this.link = `https://www.deezer.com/artist/${data.id}`;
- this.currentTab = Object.keys(data.releases)[0];
- this.sortKey = 'release_date';
- this.sortOrder = 'desc';
- this.head = [
- { title: 'Title', sortKey: 'title' },
- { title: 'Release Date', sortKey: 'release_date' },
- { title: '', width: '32px' }
- ];
- if (_.isEmpty(data.releases)) {
- this.body = null;
- } else {
- this.body = data.releases;
- }
- }
- },
- computed: {
- showTable() {
- if (this.body) return _.orderBy(this.body[this.currentTab], this.sortKey, this.sortOrder)
- else return []
- }
- },
- mounted() {
- socket.on('show_artist', this.showArtist);
- }
-}).$mount('#artist_tab');
-
-/* ===== Globals ====== */
-window.preview_max_volume = 1;
-
-/* ===== Locals ===== */
-let preview_track = document.getElementById('preview-track');
-let preview_stopped = true;
-
-// init stuff
-function init$2() {
- preview_track.volume = 1;
- /*preview_max_volume = parseFloat(localStorage.getItem("previewVolume"))
- if (preview_max_volume === null){
- preview_max_volume = 0.8
- localStorage.setItem("previewVolume", preview_max_volume)
- }*/
-
- // start playing when track loaded
- preview_track.addEventListener('canplay', function () {
- preview_track.play();
- preview_stopped = false;
- $(preview_track).animate({ volume: preview_max_volume }, 500);
- });
-
- // auto fadeout when at the end of the song
- preview_track.addEventListener('timeupdate', function () {
- if (preview_track.currentTime > preview_track.duration - 1) {
- $(preview_track).animate({ volume: 0 }, 800);
- preview_stopped = true;
- $('a[playing] > .preview_controls').css({ opacity: 0 });
- $('*').removeAttr('playing');
- $('.preview_controls').text('play_arrow');
- $('.preview_playlist_controls').text('play_arrow');
- }
- });
-}
-
-// on modal closing
-function stopStackedTabsPreview() {
- if (
- $('.preview_playlist_controls').filter(function () {
- return $(this).attr('playing')
- }).length > 0
- ) {
- $(preview_track).animate({ volume: 0 }, 800);
- preview_stopped = true;
- $('.preview_playlist_controls').removeAttr('playing');
- $('.preview_playlist_controls').text('play_arrow');
- }
-}
-
-// on hover event
-function previewMouseEnter(e) {
- $(e.currentTarget).css({ opacity: 1 });
-}
-
-function previewMouseLeave(e) {
- let obj = e.currentTarget;
- if (($(obj).parent().attr('playing') && preview_stopped) || !$(obj).parent().attr('playing')) {
- $(obj).css({ opacity: 0 }, 200);
- }
-}
-
-// on click event
-function playPausePreview(e) {
- e.preventDefault();
- let obj = e.currentTarget;
- var icon = obj.tagName == 'I' ? $(obj) : $(obj).children('i');
- if ($(obj).attr('playing')) {
- if (preview_track.paused) {
- preview_track.play();
- preview_stopped = false;
- icon.text('pause');
- $(preview_track).animate({ volume: preview_max_volume }, 500);
- } else {
- preview_stopped = true;
- icon.text('play_arrow');
- $(preview_track).animate({ volume: 0 }, 250, 'swing', () => {
- preview_track.pause();
- });
- }
- } else {
- $('*').removeAttr('playing');
- $(obj).attr('playing', true);
- $('.preview_controls').text('play_arrow');
- $('.preview_playlist_controls').text('play_arrow');
- $('.preview_controls').css({ opacity: 0 });
- icon.text('pause');
- icon.css({ opacity: 1 });
- preview_stopped = false;
- $(preview_track).animate({ volume: 0 }, 250, 'swing', () => {
- preview_track.pause();
- $('#preview-track_source').prop('src', $(obj).data('preview'));
- preview_track.load();
- });
- }
-}
-
-var TrackPreview = {
- init: init$2,
- stopStackedTabsPreview,
- previewMouseEnter,
- previewMouseLeave,
- playPausePreview
-};
-
-const TracklistTab = new Vue({
- data: () => ({
- title: '',
- metadata: '',
- release_date: '',
- label: '',
- explicit: false,
- image: '',
- type: '',
- link: '',
- head: null,
- body: []
- }),
- methods: {
- artistView,
- albumView,
- playPausePreview: TrackPreview.playPausePreview,
- reset() {
- this.title = 'Loading...';
- this.image = '';
- this.metadata = '';
- this.label = '';
- this.release_date = '';
- this.explicit = false;
- this.type = '';
- this.head = [];
- this.body = [];
- },
- addToQueue(e) {
- e.stopPropagation();
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal(e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- toggleAll(e) {
- this.body.forEach(item => {
- if (item.type == 'track') {
- item.selected = e.currentTarget.checked;
- }
- });
- },
- selectedLinks() {
- var selected = [];
- if (this.body) {
- this.body.forEach(item => {
- if (item.type == 'track' && item.selected) selected.push(this.type == "Spotify Playlist" ? item.uri : item.link);
- });
- }
- return selected.join(';')
- },
- convertDuration(duration) {
- //convert from seconds only to mm:ss format
- let mm, ss;
- mm = Math.floor(duration / 60);
- ss = duration - mm * 60;
- //add leading zero if ss < 0
- if (ss < 10) {
- ss = '0' + ss;
- }
- return mm + ':' + ss
- },
- showAlbum(data) {
- this.type = 'Album';
- this.link = `https://www.deezer.com/album/${data.id}`;
- this.title = data.title;
- this.explicit = data.explicit_lyrics;
- this.label = data.label;
- this.metadata = `${data.artist.name} • ${data.tracks.length} songs`;
- this.release_date = data.release_date.substring(0, 10);
- this.image = data.cover_xl;
- this.head = [
- { title: 'music_note ', width: '24px' },
- { title: '#' },
- { title: 'Song' },
- { title: 'Artist' },
- { title: 'timer ', width: '40px' }
- ];
- if (_.isEmpty(data.tracks)) {
- console.log('show e lodash ok');
-
- this.body = null;
- } else {
- this.body = data.tracks;
- }
- },
- showPlaylist(data) {
- this.type = 'Playlist';
- this.link = `https://www.deezer.com/playlist/${data.id}`;
- this.title = data.title;
- this.image = data.picture_xl;
- this.release_date = data.creation_date.substring(0, 10);
- this.metadata = `by ${data.creator.name} • ${data.tracks.length} songs`;
- this.head = [
- { title: 'music_note ', width: '24px' },
- { title: '#' },
- { title: 'Song' },
- { title: 'Artist' },
- { title: 'Album' },
- { title: 'timer ', width: '40px' }
- ];
- if (_.isEmpty(data.tracks)) {
- this.body = null;
- } else {
- this.body = data.tracks;
- }
- },
- showSpotifyPlaylist(data) {
- this.type = 'Spotify Playlist';
- this.link = data.uri;
- this.title = data.name;
- this.image = data.images.length ? data.images[0].url : "https://e-cdns-images.dzcdn.net/images/cover/d41d8cd98f00b204e9800998ecf8427e/1000x1000-000000-80-0-0.jpg";
- this.release_date = "";
- this.metadata = `by ${data.owner.display_name} • ${data.tracks.length} songs`;
- this.head = [
- { title: 'music_note ', width: '24px' },
- { title: '#' },
- { title: 'Song' },
- { title: 'Artist' },
- { title: 'Album' },
- { title: 'timer ', width: '40px' }
- ];
- if (_.isEmpty(data.tracks)) {
- this.body = null;
- } else {
- this.body = data.tracks;
- }
- }
- },
- mounted() {
- socket.on('show_album', this.showAlbum);
- socket.on('show_playlist', this.showPlaylist);
- socket.on('show_spotifyplaylist', this.showSpotifyPlaylist);
- }
-}).$mount('#tracklist_tab');
-
-function isValidURL(text) {
- let lowerCaseText = text.toLowerCase();
-
- if (lowerCaseText.startsWith('http')) {
- if (lowerCaseText.indexOf('deezer.com') >= 0 || lowerCaseText.indexOf('open.spotify.com') >= 0) {
- return true
- }
- } else if (lowerCaseText.startsWith('spotify:')) {
- return true
- }
- return false
-}
-
-function convertDuration(duration) {
- // convert from seconds only to mm:ss format
- let mm, ss;
- mm = Math.floor(duration / 60);
- ss = duration - mm * 60;
- //add leading zero if ss < 0
- if (ss < 10) {
- ss = '0' + ss;
- }
- return mm + ':' + ss
-}
-
-function convertDurationSeparated(duration) {
- let hh, mm, ss;
- mm = Math.floor(duration / 60);
- hh = Math.floor(mm / 60);
- ss = duration - mm * 60;
- mm -= hh * 60;
- return [hh, mm, ss]
-}
-
-function numberWithDots(x) {
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')
-}
-
-// On scroll event, returns currentTarget = null
-// Probably on other events too
-function debounce(func, wait, immediate) {
- var timeout;
- return function () {
- var context = this;
- var args = arguments;
- var later = function () {
- timeout = null;
- if (!immediate) func.apply(context, args);
- };
- var callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) func.apply(context, args);
- }
-}
-
-const COUNTRIES = {
- AF: 'Afghanistan',
- AX: '\u00c5land Islands',
- AL: 'Albania',
- DZ: 'Algeria',
- AS: 'American Samoa',
- AD: 'Andorra',
- AO: 'Angola',
- AI: 'Anguilla',
- AQ: 'Antarctica',
- AG: 'Antigua and Barbuda',
- AR: 'Argentina',
- AM: 'Armenia',
- AW: 'Aruba',
- AU: 'Australia',
- AT: 'Austria',
- AZ: 'Azerbaijan',
- BS: 'Bahamas',
- BH: 'Bahrain',
- BD: 'Bangladesh',
- BB: 'Barbados',
- BY: 'Belarus',
- BE: 'Belgium',
- BZ: 'Belize',
- BJ: 'Benin',
- BM: 'Bermuda',
- BT: 'Bhutan',
- BO: 'Bolivia, Plurinational State of',
- BQ: 'Bonaire, Sint Eustatius and Saba',
- BA: 'Bosnia and Herzegovina',
- BW: 'Botswana',
- BV: 'Bouvet Island',
- BR: 'Brazil',
- IO: 'British Indian Ocean Territory',
- BN: 'Brunei Darussalam',
- BG: 'Bulgaria',
- BF: 'Burkina Faso',
- BI: 'Burundi',
- KH: 'Cambodia',
- CM: 'Cameroon',
- CA: 'Canada',
- CV: 'Cape Verde',
- KY: 'Cayman Islands',
- CF: 'Central African Republic',
- TD: 'Chad',
- CL: 'Chile',
- CN: 'China',
- CX: 'Christmas Island',
- CC: 'Cocos (Keeling) Islands',
- CO: 'Colombia',
- KM: 'Comoros',
- CG: 'Congo',
- CD: 'Congo, the Democratic Republic of the',
- CK: 'Cook Islands',
- CR: 'Costa Rica',
- CI: "C\u00f4te d'Ivoire",
- HR: 'Croatia',
- CU: 'Cuba',
- CW: 'Cura\u00e7ao',
- CY: 'Cyprus',
- CZ: 'Czech Republic',
- DK: 'Denmark',
- DJ: 'Djibouti',
- DM: 'Dominica',
- DO: 'Dominican Republic',
- EC: 'Ecuador',
- EG: 'Egypt',
- SV: 'El Salvador',
- GQ: 'Equatorial Guinea',
- ER: 'Eritrea',
- EE: 'Estonia',
- ET: 'Ethiopia',
- FK: 'Falkland Islands (Malvinas)',
- FO: 'Faroe Islands',
- FJ: 'Fiji',
- FI: 'Finland',
- FR: 'France',
- GF: 'French Guiana',
- PF: 'French Polynesia',
- TF: 'French Southern Territories',
- GA: 'Gabon',
- GM: 'Gambia',
- GE: 'Georgia',
- DE: 'Germany',
- GH: 'Ghana',
- GI: 'Gibraltar',
- GR: 'Greece',
- GL: 'Greenland',
- GD: 'Grenada',
- GP: 'Guadeloupe',
- GU: 'Guam',
- GT: 'Guatemala',
- GG: 'Guernsey',
- GN: 'Guinea',
- GW: 'Guinea-Bissau',
- GY: 'Guyana',
- HT: 'Haiti',
- HM: 'Heard Island and McDonald Islands',
- VA: 'Holy See (Vatican City State)',
- HN: 'Honduras',
- HK: 'Hong Kong',
- HU: 'Hungary',
- IS: 'Iceland',
- IN: 'India',
- ID: 'Indonesia',
- IR: 'Iran, Islamic Republic of',
- IQ: 'Iraq',
- IE: 'Ireland',
- IM: 'Isle of Man',
- IL: 'Israel',
- IT: 'Italy',
- JM: 'Jamaica',
- JP: 'Japan',
- JE: 'Jersey',
- JO: 'Jordan',
- KZ: 'Kazakhstan',
- KE: 'Kenya',
- KI: 'Kiribati',
- KP: "Korea, Democratic People's Republic of",
- KR: 'Korea, Republic of',
- KW: 'Kuwait',
- KG: 'Kyrgyzstan',
- LA: "Lao People's Democratic Republic",
- LV: 'Latvia',
- LB: 'Lebanon',
- LS: 'Lesotho',
- LR: 'Liberia',
- LY: 'Libya',
- LI: 'Liechtenstein',
- LT: 'Lithuania',
- LU: 'Luxembourg',
- MO: 'Macao',
- MK: 'Macedonia, the Former Yugoslav Republic of',
- MG: 'Madagascar',
- MW: 'Malawi',
- MY: 'Malaysia',
- MV: 'Maldives',
- ML: 'Mali',
- MT: 'Malta',
- MH: 'Marshall Islands',
- MQ: 'Martinique',
- MR: 'Mauritania',
- MU: 'Mauritius',
- YT: 'Mayotte',
- MX: 'Mexico',
- FM: 'Micronesia, Federated States of',
- MD: 'Moldova, Republic of',
- MC: 'Monaco',
- MN: 'Mongolia',
- ME: 'Montenegro',
- MS: 'Montserrat',
- MA: 'Morocco',
- MZ: 'Mozambique',
- MM: 'Myanmar',
- NA: 'Namibia',
- NR: 'Nauru',
- NP: 'Nepal',
- NL: 'Netherlands',
- NC: 'New Caledonia',
- NZ: 'New Zealand',
- NI: 'Nicaragua',
- NE: 'Niger',
- NG: 'Nigeria',
- NU: 'Niue',
- NF: 'Norfolk Island',
- MP: 'Northern Mariana Islands',
- NO: 'Norway',
- OM: 'Oman',
- PK: 'Pakistan',
- PW: 'Palau',
- PS: 'Palestine, State of',
- PA: 'Panama',
- PG: 'Papua New Guinea',
- PY: 'Paraguay',
- PE: 'Peru',
- PH: 'Philippines',
- PN: 'Pitcairn',
- PL: 'Poland',
- PT: 'Portugal',
- PR: 'Puerto Rico',
- QA: 'Qatar',
- RE: 'R\u00e9union',
- RO: 'Romania',
- RU: 'Russian Federation',
- RW: 'Rwanda',
- BL: 'Saint Barth\u00e9lemy',
- SH: 'Saint Helena, Ascension and Tristan da Cunha',
- KN: 'Saint Kitts and Nevis',
- LC: 'Saint Lucia',
- MF: 'Saint Martin (French part)',
- PM: 'Saint Pierre and Miquelon',
- VC: 'Saint Vincent and the Grenadines',
- WS: 'Samoa',
- SM: 'San Marino',
- ST: 'Sao Tome and Principe',
- SA: 'Saudi Arabia',
- SN: 'Senegal',
- RS: 'Serbia',
- SC: 'Seychelles',
- SL: 'Sierra Leone',
- SG: 'Singapore',
- SX: 'Sint Maarten (Dutch part)',
- SK: 'Slovakia',
- SI: 'Slovenia',
- SB: 'Solomon Islands',
- SO: 'Somalia',
- ZA: 'South Africa',
- GS: 'South Georgia and the South Sandwich Islands',
- SS: 'South Sudan',
- ES: 'Spain',
- LK: 'Sri Lanka',
- SD: 'Sudan',
- SR: 'Suriname',
- SJ: 'Svalbard and Jan Mayen',
- SZ: 'Swaziland',
- SE: 'Sweden',
- CH: 'Switzerland',
- SY: 'Syrian Arab Republic',
- TW: 'Taiwan, Province of China',
- TJ: 'Tajikistan',
- TZ: 'Tanzania, United Republic of',
- TH: 'Thailand',
- TL: 'Timor-Leste',
- TG: 'Togo',
- TK: 'Tokelau',
- TO: 'Tonga',
- TT: 'Trinidad and Tobago',
- TN: 'Tunisia',
- TR: 'Turkey',
- TM: 'Turkmenistan',
- TC: 'Turks and Caicos Islands',
- TV: 'Tuvalu',
- UG: 'Uganda',
- UA: 'Ukraine',
- AE: 'United Arab Emirates',
- GB: 'United Kingdom',
- US: 'United States',
- UM: 'United States Minor Outlying Islands',
- UY: 'Uruguay',
- UZ: 'Uzbekistan',
- VU: 'Vanuatu',
- VE: 'Venezuela, Bolivarian Republic of',
- VN: 'Viet Nam',
- VG: 'Virgin Islands, British',
- VI: 'Virgin Islands, U.S.',
- WF: 'Wallis and Futuna',
- EH: 'Western Sahara',
- YE: 'Yemen',
- ZM: 'Zambia',
- ZW: 'Zimbabwe'
-};
-
-var Utils = {
- isValidURL,
- convertDuration,
- convertDurationSeparated,
- numberWithDots,
- debounce,
- COUNTRIES
-};
-
-const LinkAnalyzerTab = new Vue({
- data() {
- return {
- title: '',
- subtitle: '',
- image: '',
- data: {},
- type: '',
- link: '',
- countries: []
- }
- },
- methods: {
- albumView,
- convertDuration: Utils.convertDuration,
- reset() {
- this.title = 'Loading...';
- this.subtitle = '';
- this.image = '';
- this.data = {};
- this.type = '';
- this.link = '';
- this.countries = [];
- },
- showTrack(data) {
- this.title =
- data.title +
- (data.title_version && data.title.indexOf(data.title_version) == -1 ? ' ' + data.title_version : '');
- this.subtitle = `by ${data.artist.name}\nin ${data.album.title}`;
- this.image = data.album.cover_xl;
- this.type = 'track';
- this.link = data.link;
- data.available_countries.forEach(cc => {
- let temp = [];
- let chars = [...cc].map(c => c.charCodeAt() + 127397);
- temp.push(String.fromCodePoint(...chars));
- temp.push(Utils.COUNTRIES[cc]);
- this.countries.push(temp);
- });
- this.data = data;
- },
- showAlbum(data) {
- console.log(data);
- this.title = data.title;
- this.subtitle = `by ${data.artist.name}\n${data.nb_tracks} tracks`;
- this.image = data.cover_xl;
- this.type = 'album';
- this.link = data.link;
- this.data = data;
- }
- },
- mounted() {
- socket.on('analyze_track', this.showTrack);
- socket.on('analyze_album', this.showAlbum);
- }
-}).$mount('#analyzer_tab');
-
-const HomeTab = new Vue({
- data() {
- return {
- tracks: [],
- albums: [],
- artists: [],
- playlists: []
- }
- },
- methods: {
- artistView,
- albumView,
- playlistView,
- playPausePreview: TrackPreview.playPausePreview,
- previewMouseEnter: TrackPreview.previewMouseEnter,
- previewMouseLeave: TrackPreview.previewMouseLeave,
- numberWithDots: Utils.numberWithDots,
- convertDuration: Utils.convertDuration,
- addToQueue(e) {
- e.stopPropagation();
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal(e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- initHome(data) {
- this.tracks = data.tracks.data;
- this.albums = data.albums.data;
- this.artists = data.artists.data;
- this.playlists = data.playlists.data;
- }
- },
- mounted() {
- socket.on('init_home', this.initHome);
- }
-}).$mount('#home_tab');
-
-const ChartsTab = new Vue({
- data() {
- return {
- country: '',
- id: 0,
- countries: [],
- chart: []
- }
- },
- methods: {
- artistView,
- albumView,
- playPausePreview: TrackPreview.playPausePreview,
- previewMouseEnter: TrackPreview.previewMouseEnter,
- previewMouseLeave: TrackPreview.previewMouseLeave,
- convertDuration: Utils.convertDuration,
- addToQueue(e) {
- e.stopPropagation();
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal(e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- getTrackList(e){
- this.country = e.currentTarget.dataset.title;
- localStorage.setItem('chart', this.country);
- this.id = e.currentTarget.dataset.id;
- socket.emit('getChartTracks', this.id);
- },
- setTracklist(data){
- this.chart = data;
- },
- changeCountry(){
- this.country = '';
- this.id = 0;
- },
- initCharts(data) {
- this.countries = data;
- this.country = localStorage.getItem('chart') || '';
- if (this.country){
- let i = 0;
- for (i; i < this.countries.length; i++) if (this.countries[i].title == this.country) break
- if (i != this.countries.length){
- this.id = this.countries[i].id;
- socket.emit('getChartTracks', this.id);
- }else {
- this.country = '';
- localStorage.setItem('chart', this.country);
- }
- }
- }
- },
- mounted() {
- socket.on('init_charts', this.initCharts);
- socket.on('setChartTracks', this.setTracklist);
- }
-}).$mount('#charts_tab');
-
-const FavoritesTab = new Vue({
- data() {
- return {
- tracks: [],
- albums: [],
- artists: [],
- playlists: [],
- spotifyPlaylists: []
- }
- },
- methods: {
- playlistView,
- artistView,
- albumView,
- spotifyPlaylistView,
- playPausePreview: TrackPreview.playPausePreview,
- previewMouseEnter: TrackPreview.previewMouseEnter,
- previewMouseLeave: TrackPreview.previewMouseLeave,
- convertDuration: Utils.convertDuration,
- addToQueue(e) {
- e.stopPropagation();
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal(e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- updated_userSpotifyPlaylists(data){this.spotifyPlaylists = data;},
- updated_userPlaylists(data){this.playlists = data;},
- updated_userAlbums(data){this.albums = data;},
- updated_userArtist(data){this.artists = data;},
- updated_userTracks(data){this.tracks = data;},
- initFavorites(data) {
- this.tracks = data.tracks;
- this.albums = data.albums;
- this.artists = data.artists;
- this.playlists = data.playlists;
- document.getElementById('favorites_playlist_tab').click();
- }
- },
- mounted() {
- socket.on('init_favorites', this.initFavorites);
- socket.on('updated_userSpotifyPlaylists', this.updated_userSpotifyPlaylists);
- socket.on('updated_userPlaylists', this.updated_userPlaylists);
- socket.on('updated_userAlbums', this.updated_userAlbums);
- socket.on('updated_userArtist', this.updated_userArtist);
- socket.on('updated_userTracks', this.updated_userTracks);
- }
-}).$mount('#favorites_tab');
-
-const SettingsTab = new Vue({
- data: () => ({
- settings: { tags: {} },
- lastSettings: {},
- spotifyFeatures: {},
- lastCredentials: {},
- defaultSettings: {},
- lastUser: '',
- spotifyUser: '',
- darkMode: false,
- slimDownloads: false
- }),
- computed: {
- changeDarkMode: {
- get() {
- return this.darkMode
- },
- set(wantDarkMode) {
- this.darkMode = wantDarkMode;
- document.documentElement.setAttribute('data-theme', wantDarkMode ? 'dark' : 'default');
- localStorage.setItem('darkMode', wantDarkMode);
- }
- },
- changeSlimDownloads: {
- get() {
- return this.slimDownloads
- },
- set(wantSlimDownloads) {
- this.slimDownloads = wantSlimDownloads;
- document.getElementById('download_list').classList.toggle('slim', wantSlimDownloads);
- localStorage.setItem('slimDownloads', wantSlimDownloads);
- }
- }
- },
- methods: {
- copyARLtoClipboard() {
- let copyText = this.$refs.loginInput;
-
- copyText.setAttribute('type', 'text');
- copyText.select();
- copyText.setSelectionRange(0, 99999);
- document.execCommand('copy');
- copyText.setAttribute('type', 'password');
-
- toast('ARL copied to clipboard', 'assignment');
- },
- saveSettings() {
- this.lastSettings = { ...this.settings };
- this.lastCredentials = { ...this.spotifyFeatures };
- let changed = false;
- if (this.lastUser != this.spotifyUser) {
- // force cloning without linking
- this.lastUser = (' ' + this.spotifyUser).slice(1);
- localStorage.setItem('spotifyUser', this.lastUser);
- changed = true;
- }
-
- socket.emit('saveSettings', this.lastSettings, this.lastCredentials, changed ? this.lastUser : false);
- console.log(this.darkMode);
- },
- loadSettings(settings, spotifyCredentials, defaults = null) {
- if (defaults) {
- this.defaultSettings = { ...defaults };
- }
-
- this.lastSettings = { ...settings };
- this.lastCredentials = { ...spotifyCredentials };
- this.settings = settings;
- this.spotifyFeatures = spotifyCredentials;
- },
- login() {
- let arl = this.$refs.loginInput.value;
- if (arl != '' && arl != localStorage.getItem('arl')) {
- socket.emit('login', arl, true);
- }
- },
- logout() {
- socket.emit('logout');
- },
- initSettings(settings, credentials, defaults) {
- this.loadSettings(settings, credentials, defaults);
- toast('Settings loaded!', 'settings');
- },
- updateSettings(settings, credentials) {
- this.loadSettings(settings, credentials);
- toast('Settings updated!', 'settings');
- },
- resetSettings() {
- this.settings = { ...this.defaultSettings };
- }
- },
- mounted() {
- socket.on('init_settings', this.initSettings);
- socket.on('updateSettings', this.updateSettings);
-
- let spotyUser = localStorage.getItem('spotifyUser');
-
- if ('' !== spotyUser) {
- this.lastUser = spotyUser;
- this.spotifyUser = spotyUser;
- }
-
- this.changeDarkMode = 'true' === localStorage.getItem('darkMode');
- this.changeSlimDownloads = 'true' === localStorage.getItem('slimDownloads');
- }
-}).$mount('#settings_tab');
-
-const MainSearch = new Vue({
- data: {
- names: {
- TOP_RESULT: 'Top Result',
- TRACK: 'Tracks',
- ARTIST: 'Artists',
- ALBUM: 'Albums',
- PLAYLIST: 'Playlists'
- },
- results: {
- query: '',
- allTab: {
- ORDER: [],
- TOP_RESULT: [],
- ALBUM: {},
- ARTIST: {},
- TRACK: {},
- PLAYLIST: {}
- },
- trackTab: {
- data: [],
- next: 0,
- total: 0,
- loaded: false
- },
- albumTab: {
- data: [],
- next: 0,
- total: 0,
- loaded: false
- },
- artistTab: {
- data: [],
- next: 0,
- total: 0,
- loaded: false
- },
- playlistTab: {
- data: [],
- next: 0,
- total: 0,
- loaded: false
- }
- }
- },
- methods: {
- artistView,
- albumView,
- playlistView,
- playPausePreview: TrackPreview.playPausePreview,
- previewMouseEnter: TrackPreview.previewMouseEnter,
- previewMouseLeave: TrackPreview.previewMouseLeave,
- handleClickTopResult(event) {
- let topResultType = this.results.allTab.TOP_RESULT[0].type;
-
- switch (topResultType) {
- case 'artist':
- this.artistView(event);
- break
- case 'album':
- this.albumView(event);
- break
- case 'playlist':
- this.playlistView(event);
- break
- }
- },
- changeSearchTab(section) {
- if (section != 'TOP_RESULT') {
- document.getElementById(`search_${section.toLowerCase()}_tab`).click();
- }
- },
- addToQueue: function (e) {
- Downloads.sendAddToQueue(e.currentTarget.dataset.link);
- },
- openQualityModal: function (e) {
- QualityModal$1.open(e.currentTarget.dataset.link);
- },
- numberWithDots: Utils.numberWithDots,
- convertDuration: Utils.convertDuration,
- search(type) {
- socket.emit('search', {
- term: this.results.query,
- type: type,
- start: this.results[type + 'Tab'].next,
- nb: 30
- });
- },
- scrolledSearch(type) {
- if (this.results[type + 'Tab'].next < this.results[type + 'Tab'].total) {
- socket.emit('search', {
- term: this.results.query,
- type: type,
- start: this.results[type + 'Tab'].next,
- nb: 30
- });
- }
- },
- handleMainSearch(result) {
- let resetObj = { data: [], next: 0, total: 0, loaded: false };
- this.results.allTab = result;
- this.results.query = result.QUERY;
- this.results.trackTab = { ...resetObj };
- this.results.albumTab = { ...resetObj };
- this.results.artistTab = { ...resetObj };
- this.results.playlistTab = { ...resetObj };
- document.getElementById('search_all_tab').click();
- document.getElementById('search_tab_content').style.display = 'block';
- document.getElementById('main_search_tablink').click();
- },
- handleSearch(result) {
- let next = 0;
-
- if (result.next) {
- next = parseInt(result.next.match(/index=(\d*)/)[1]);
- } else {
- next = result.total;
- }
-
- if (this.results[result.type + 'Tab'].total != result.total) {
- this.results[result.type + 'Tab'].total = result.total;
- }
-
- if (this.results[result.type + 'Tab'].next != next) {
- this.results[result.type + 'Tab'].next = next;
- this.results[result.type + 'Tab'].data = this.results[result.type + 'Tab'].data.concat(result.data);
- }
- this.results[result.type + 'Tab'].loaded = true;
- }
- },
- mounted() {
- socket.on('mainSearch', this.handleMainSearch);
- socket.on('search', this.handleSearch);
- }
-}).$mount('#search_tab');
-
-/* ===== Globals ====== */
-window.search_selected = '';
-window.main_selected = '';
-window.windows_stack = [];
-
-/* ===== Locals ===== */
-let currentStack = {};
-
-// Exporting this function out of the default export
-// because it's used in components that are needed
-// in this file too
-function artistView(ev) {
- let id = ev.currentTarget.dataset.id;
- ArtistTab.reset();
- socket.emit('getTracklist', { type: 'artist', id: id });
- showTab('artist', id);
-}
-
-// Exporting this function out of the default export
-// because it's used in components that are needed
-// in this file too
-function albumView(ev) {
- let id = ev.currentTarget.dataset.id;
- TracklistTab.reset();
- socket.emit('getTracklist', { type: 'album', id: id });
- showTab('album', id);
-}
-
-// Exporting this function out of the default export
-// because it's used in components that are needed
-// in this file too
-function playlistView(ev) {
- let id = ev.currentTarget.dataset.id;
- TracklistTab.reset();
- socket.emit('getTracklist', { type: 'playlist', id: id });
- showTab('playlist', id);
-}
-
-function spotifyPlaylistView(ev) {
- let id = ev.currentTarget.dataset.id;
- TracklistTab.reset();
- socket.emit('getTracklist', { type: 'spotifyplaylist', id: id });
- showTab('spotifyplaylist', id);
-}
-
-function analyzeLink(link) {
- console.log('Analyzing: ' + link);
- LinkAnalyzerTab.reset();
- socket.emit('analyzeLink', link);
-}
-
-function linkListeners$2() {
- document.getElementById('search_tab').addEventListener('click', handleSearchTabClick);
- document.getElementById('favorites_tab').addEventListener('click', handleFavoritesTabClick);
- document.getElementById('sidebar').addEventListener('click', handleSidebarClick);
-
- const backButtons = Array.from(document.getElementsByClassName('back-button'));
-
- backButtons.forEach(button => {
- button.addEventListener('click', backTab);
- });
-}
-
-/**
- * Handles click Event on the sidebar and changes tab
- * according to clicked icon.
- * Uses event delegation
- * @param {Event} event
- * @since 0.1.0
+var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t,e){return t(e={exports:{}},e.exports),e.exports}var n=e((function(e){
+/*!
+ * jQuery JavaScript Library v3.5.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2020-05-04T22:49Z
*/
-function handleSidebarClick(event) {
- if (!(event.target.matches('.main_tablinks') || event.target.parentElement.matches('.main_tablinks'))) {
- return
- }
-
- let sidebarEl = event.target.matches('.main_tablinks') ? event.target : event.target.parentElement;
- let targetID = sidebarEl.getAttribute('id');
-
- switch (targetID) {
- case 'main_search_tablink':
- changeTab(sidebarEl, 'main', 'search_tab');
- break
- case 'main_home_tablink':
- changeTab(sidebarEl, 'main', 'home_tab');
- break
- case 'main_charts_tablink':
- changeTab(sidebarEl, 'main', 'charts_tab');
- break
- case 'main_favorites_tablink':
- changeTab(sidebarEl, 'main', 'favorites_tab');
- break
- case 'main_analyzer_tablink':
- changeTab(sidebarEl, 'main', 'analyzer_tab');
- break
- case 'main_settings_tablink':
- changeTab(sidebarEl, 'main', 'settings_tab');
- break
- case 'main_about_tablink':
- changeTab(sidebarEl, 'main', 'about_tab');
- break
- }
-}
-
-function handleSearchTabClick(event) {
- let targetID = event.target.id;
-
- switch (targetID) {
- case 'search_all_tab':
- changeTab(event.target, 'search', 'main_search');
- break
- case 'search_track_tab':
- changeTab(event.target, 'search', 'track_search');
- break
- case 'search_album_tab':
- changeTab(event.target, 'search', 'album_search');
- break
- case 'search_artist_tab':
- changeTab(event.target, 'search', 'artist_search');
- break
- case 'search_playlist_tab':
- changeTab(event.target, 'search', 'playlist_search');
- break
- }
-}
-
-function handleFavoritesTabClick(event) {
- let targetID = event.target.id;
-
- switch (targetID) {
- case 'favorites_playlist_tab':
- changeTab(event.target, 'favorites', 'playlist_favorites');
- break
- case 'favorites_album_tab':
- changeTab(event.target, 'favorites', 'album_favorites');
- break
- case 'favorites_artist_tab':
- changeTab(event.target, 'favorites', 'artist_favorites');
- break
- case 'favorites_track_tab':
- changeTab(event.target, 'favorites', 'track_favorites');
- break
- }
-}
-
-function changeTab(sidebarEl, section, tabName) {
- windows_stack = [];
- currentStack = {};
- var i, tabcontent, tablinks;
- tabcontent = document.getElementsByClassName(section + '_tabcontent');
- for (i = 0; i < tabcontent.length; i++) {
- tabcontent[i].style.display = 'none';
- }
- tablinks = document.getElementsByClassName(section + '_tablinks');
- for (i = 0; i < tablinks.length; i++) {
- tablinks[i].classList.remove('active');
- }
- if (tabName == 'settings_tab' && main_selected != 'settings_tab') {
- SettingsTab.settings = { ...SettingsTab.lastSettings };
- SettingsTab.spotifyCredentials = { ...SettingsTab.lastCredentials };
- SettingsTab.spotifyUser = (' ' + SettingsTab.lastUser).slice(1);
- }
-
- document.getElementById(tabName).style.display = 'block';
-
- if ('main' === section) {
- main_selected = tabName;
- } else if ('search' === section) {
- search_selected = tabName;
- }
-
- // Not choosing .currentTarget beacuse the event
- // is delegated
- sidebarEl.classList.add('active');
-
- // Check if you need to load more content in the search tab
- if (
- main_selected == 'search_tab' &&
- ['track_search', 'album_search', 'artist_search', 'playlist_search'].indexOf(search_selected) != -1 &&
- MainSearch.results[search_selected.split('_')[0] + 'Tab'].data.length == 0
- ) {
- MainSearch.search(search_selected.split('_')[0]);
- }
-}
-
-function showTab(type, id, back = false) {
- if (windows_stack.length == 0) {
- windows_stack.push({ tab: main_selected });
- } else if (!back) {
- windows_stack.push(currentStack);
- }
-
- window.tab = type == 'artist' ? 'artist_tab' : 'tracklist_tab';
-
- currentStack = { type: type, id: id };
- let tabcontent = document.getElementsByClassName('main_tabcontent');
-
- for (let i = 0; i < tabcontent.length; i++) {
- tabcontent[i].style.display = 'none';
- }
- document.getElementById(tab).style.display = 'block';
- TrackPreview.stopStackedTabsPreview();
-}
-
-function backTab() {
- if (windows_stack.length == 1) {
- document.getElementById(`main_${main_selected}link`).click();
- } else {
- let tabObj = windows_stack.pop();
- if (tabObj.type == 'artist') {
- ArtistTab.reset();
- } else {
- TracklistTab.reset();
- }
- socket.emit('getTracklist', { type: tabObj.type, id: tabObj.id });
- showTab(tabObj.type, tabObj.id, true);
- }
- TrackPreview.stopStackedTabsPreview();
-}
-
-var Tabs = {
- linkListeners: linkListeners$2,
- artistView,
- albumView,
- playlistView,
- analyzeLink
-};
-
-function linkListeners$3() {
- document.getElementById('content').addEventListener('scroll', Utils.debounce(handleContentScroll, 100));
- document.getElementById('searchbar').addEventListener('keyup', handleSearchBarKeyup);
-}
-
-// Load more content when the search page is at the end
-function handleContentScroll(event) {
- let contentElement = event.target;
-
- if (contentElement.scrollTop + contentElement.clientHeight >= contentElement.scrollHeight) {
- if (
- main_selected === 'search_tab' &&
- ['track_search', 'album_search', 'artist_search', 'playlist_search'].indexOf(search_selected) != -1
- ) {
- MainSearch.scrolledSearch(search_selected.split('_')[0]);
- }
- }
-}
-
-function handleSearchBarKeyup(e) {
- if (e.keyCode == 13) {
- let term = this.value;
- if (Utils.isValidURL(term)) {
- if (e.ctrlKey) {
- QualityModal$1.open(term);
- } else {
- if (window.main_selected == 'analyzer_tab') {
- Tabs.analyzeLink(term);
- } else {
- Downloads.sendAddToQueue(term);
- }
- }
- } else {
- if (term != MainSearch.query || main_selected == 'search_tab') {
- document.getElementById('search_tab_content').style.display = 'none';
- socket.emit('mainSearch', { term: term });
- } else {
- document.getElementById('search_all_tab').click();
- document.getElementById('search_tab_content').style.display = 'block';
- document.getElementById('main_search_tablink').click();
- }
- }
- }
-}
-
-var Search = {
- linkListeners: linkListeners$3
-};
-
-/* ===== Socketio listeners ===== */
-
-// Debug messages for socketio
-socket.on('message', function (msg) {
- console.log(msg);
-});
-
-socket.on('logging_in', function () {
- toast('Logging in', 'loading', false, 'login-toast');
-});
-
-socket.on('logged_in', function (data) {
- switch (data.status) {
- case 1:
- case 3:
- toast('Logged in', 'done', true, 'login-toast');
- if (data.arl) {
- localStorage.setItem('arl', data.arl);
- $('#login_input_arl').val(data.arl);
- }
- $('#open_login_prompt').hide();
- if (data.user) {
- $('#settings_username').text(data.user.name);
- $('#settings_picture').attr(
- 'src',
- `https://e-cdns-images.dzcdn.net/images/user/${data.user.picture}/125x125-000000-80-0-0.jpg`
- );
- // $('#logged_in_info').show()
- document.getElementById('logged_in_info').classList.remove('hide');
- }
- break
- case 2:
- toast('Already logged in', 'done', true, 'login-toast');
- if (data.user) {
- $('#settings_username').text(data.user.name);
- $('#settings_picture').attr(
- 'src',
- `https://e-cdns-images.dzcdn.net/images/user/${data.user.picture}/125x125-000000-80-0-0.jpg`
- );
- // $('#logged_in_info').show()
- document.getElementById('logged_in_info').classList.remove('hide');
- }
- break
- case 0:
- toast("Couldn't log in", 'close', true, 'login-toast');
- localStorage.removeItem('arl');
- $('#login_input_arl').val('');
- $('#open_login_prompt').show();
- document.getElementById('logged_in_info').classList.add('hide');
- // $('#logged_in_info').hide()
- $('#settings_username').text('Not Logged');
- $('#settings_picture').attr('src', `https://e-cdns-images.dzcdn.net/images/user/125x125-000000-80-0-0.jpg`);
- break
- }
-});
-
-socket.on('logged_out', function () {
- toast('Logged out', 'done', true, 'login-toast');
- localStorage.removeItem('arl');
- $('#login_input_arl').val('');
- $('#open_login_prompt').show();
- document.getElementById('logged_in_info').classList.add('hide');
- // $('#logged_in_info').hide()
- $('#settings_username').text('Not Logged');
- $('#settings_picture').attr('src', `https://e-cdns-images.dzcdn.net/images/user/125x125-000000-80-0-0.jpg`);
-});
-
-/* ===== App initialization ===== */
-function startApp() {
- Downloads.init();
- QualityModal$1.init();
- Tabs.linkListeners();
- Search.linkListeners();
- TrackPreview.init();
-
- document.getElementById('logged_in_info').classList.add('hide');
-
- if (localStorage.getItem('arl')) {
- let arl = localStorage.getItem('arl');
-
- socket.emit('login', arl);
- $('#login_input_arl').val(arl);
- }
- if ('true' === localStorage.getItem('slimDownloads')) {
- document.getElementById('download_list').classList.add('slim');
- }
- let spotifyUser = localStorage.getItem('spotifyUser');
- if (spotifyUser != '') {
- socket.emit('update_userSpotifyPlaylists', spotifyUser);
- }
- // Open default tab
- document.getElementById('main_home_tablink').click();
-}
-
-document.addEventListener('DOMContentLoaded', startApp);
+!function(t,n){e.exports=t.document?n(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}}("undefined"!=typeof window?window:t,(function(t,e){var n=[],r=Object.getPrototypeOf,i=n.slice,o=n.flat?function(t){return n.flat.call(t)}:function(t){return n.concat.apply([],t)},a=n.push,u=n.indexOf,s={},l=s.toString,c=s.hasOwnProperty,f=c.toString,d=f.call(Object),p={},h=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType},v=function(t){return null!=t&&t===t.window},g=t.document,m={type:!0,src:!0,nonce:!0,noModule:!0};function y(t,e,n){var r,i,o=(n=n||g).createElement("script");if(o.text=t,e)for(r in m)(i=e[r]||e.getAttribute&&e.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function _(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?s[l.call(t)]||"object":typeof t}var b=function(t,e){return new b.fn.init(t,e)};function w(t){var e=!!t&&"length"in t&&t.length,n=_(t);return!h(t)&&!v(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}b.fn=b.prototype={jquery:"3.5.1",constructor:b,length:0,toArray:function(){return i.call(this)},get:function(t){return null==t?i.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=b.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return b.each(this,t)},map:function(t){return this.pushStack(b.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(i.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(b.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(b.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(H),G=new RegExp("^"+B+"$"),K={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+q),PSEUDO:new RegExp("^"+H),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Q=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),nt=function(t,e){var n="0x"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},rt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,it=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},ot=function(){d()},at=bt((function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{I.apply(j=M.call(w.childNodes),w.childNodes),j[w.childNodes.length].nodeType}catch(t){I={apply:j.length?function(t,e){N.apply(t,M.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ut(t,e,r,i){var o,u,l,c,f,h,m,y=e&&e.ownerDocument,w=e?e.nodeType:9;if(r=r||[],"string"!=typeof t||!t||1!==w&&9!==w&&11!==w)return r;if(!i&&(d(e),e=e||p,v)){if(11!==w&&(f=J.exec(t)))if(o=f[1]){if(9===w){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(y&&(l=y.getElementById(o))&&_(e,l)&&l.id===o)return r.push(l),r}else{if(f[2])return I.apply(r,e.getElementsByTagName(t)),r;if((o=f[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!C[t+" "]&&(!g||!g.test(t))&&(1!==w||"object"!==e.nodeName.toLowerCase())){if(m=t,y=e,1===w&&(U.test(t)||F.test(t))){for((y=tt.test(t)&&mt(e.parentNode)||e)===e&&n.scope||((c=e.getAttribute("id"))?c=c.replace(rt,it):e.setAttribute("id",c=b)),u=(h=a(t)).length;u--;)h[u]=(c?"#"+c:":scope")+" "+_t(h[u]);m=h.join(",")}try{return I.apply(r,y.querySelectorAll(m)),r}catch(e){C(t,!0)}finally{c===b&&e.removeAttribute("id")}}}return s(t.replace($,"$1"),e,r,i)}function st(){var t=[];return function e(n,i){return t.push(n+" ")>r.cacheLength&&delete e[t.shift()],e[n+" "]=i}}function lt(t){return t[b]=!0,t}function ct(t){var e=p.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function ft(t,e){for(var n=t.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=e}function dt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function pt(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function ht(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function vt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&at(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function gt(t){return lt((function(e){return e=+e,lt((function(n,r){for(var i,o=t([],n.length,e),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function mt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ut.support={},o=ut.isXML=function(t){var e=t.namespaceURI,n=(t.ownerDocument||t).documentElement;return!Q.test(e||n&&n.nodeName||"HTML")},d=ut.setDocument=function(t){var e,i,a=t?t.ownerDocument||t:w;return a!=p&&9===a.nodeType&&a.documentElement?(h=(p=a).documentElement,v=!o(p),w!=p&&(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",ot,!1):i.attachEvent&&i.attachEvent("onunload",ot)),n.scope=ct((function(t){return h.appendChild(t).appendChild(p.createElement("div")),void 0!==t.querySelectorAll&&!t.querySelectorAll(":scope fieldset div").length})),n.attributes=ct((function(t){return t.className="i",!t.getAttribute("className")})),n.getElementsByTagName=ct((function(t){return t.appendChild(p.createComment("")),!t.getElementsByTagName("*").length})),n.getElementsByClassName=Z.test(p.getElementsByClassName),n.getById=ct((function(t){return h.appendChild(t).id=b,!p.getElementsByName||!p.getElementsByName(b).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute("id")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&v){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&v){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode("id"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if("*"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&v)return e.getElementsByClassName(t)},m=[],g=[],(n.qsa=Z.test(p.querySelectorAll))&&(ct((function(t){var e;h.appendChild(t).innerHTML=" ",t.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+R+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||g.push("\\["+R+"*(?:value|"+P+")"),t.querySelectorAll("[id~="+b+"-]").length||g.push("~="),(e=p.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||g.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),t.querySelectorAll(":checked").length||g.push(":checked"),t.querySelectorAll("a#"+b+"+*").length||g.push(".#.+[+~]"),t.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ct((function(t){t.innerHTML=" ";var e=p.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&g.push("name"+R+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),h.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=Z.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=y.call(t,"*"),y.call(t,"[s!='']:x"),m.push("!=",H)})),g=g.length&&new RegExp(g.join("|")),m=m.length&&new RegExp(m.join("|")),e=Z.test(h.compareDocumentPosition),_=e||Z.test(h.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return f=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t==p||t.ownerDocument==w&&_(w,t)?-1:e==p||e.ownerDocument==w&&_(w,e)?1:c?O(c,t)-O(c,e):0:4&r?-1:1)}:function(t,e){if(t===e)return f=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,a=[t],u=[e];if(!i||!o)return t==p?-1:e==p?1:i?-1:o?1:c?O(c,t)-O(c,e):0;if(i===o)return dt(t,e);for(n=t;n=n.parentNode;)a.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?dt(a[r],u[r]):a[r]==w?-1:u[r]==w?1:0},p):p},ut.matches=function(t,e){return ut(t,null,null,e)},ut.matchesSelector=function(t,e){if(d(t),n.matchesSelector&&v&&!C[e+" "]&&(!m||!m.test(e))&&(!g||!g.test(e)))try{var r=y.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){C(e,!0)}return ut(e,p,null,[t]).length>0},ut.contains=function(t,e){return(t.ownerDocument||t)!=p&&d(t),_(t,e)},ut.attr=function(t,e){(t.ownerDocument||t)!=p&&d(t);var i=r.attrHandle[e.toLowerCase()],o=i&&L.call(r.attrHandle,e.toLowerCase())?i(t,e,!v):void 0;return void 0!==o?o:n.attributes||!v?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ut.escape=function(t){return(t+"").replace(rt,it)},ut.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},ut.uniqueSort=function(t){var e,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&t.slice(0),t.sort(A),f){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return c=null,t},i=ut.getText=function(t){var e,n="",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},(r=ut.selectors={cacheLength:50,createPseudo:lt,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||"").replace(et,nt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||ut.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&ut.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return K.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&V.test(n)&&(e=a(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=k[t+" "];return e||(e=new RegExp("(^|"+R+")"+t+"("+R+"|$)"))&&k(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(r){var i=ut.attr(r,t);return null==i?"!="===e:!e||(i+="","="===e?i===n:"!="===e?i!==n:"^="===e?n&&0===i.indexOf(n):"*="===e?n&&i.indexOf(n)>-1:"$="===e?n&&i.slice(-n.length)===n:"~="===e?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===e&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,r,i){var o="nth"!==t.slice(0,3),a="last"!==t.slice(-4),u="of-type"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,s){var l,c,f,d,p,h,v=o!==a?"nextSibling":"previousSibling",g=e.parentNode,m=u&&e.nodeName.toLowerCase(),y=!s&&!u,_=!1;if(g){if(o){for(;v;){for(d=e;d=d[v];)if(u?d.nodeName.toLowerCase()===m:1===d.nodeType)return!1;h=v="only"===t&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(_=(p=(l=(c=(f=(d=g)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[t]||[])[0]===x&&l[1])&&l[2],d=p&&g.childNodes[p];d=++p&&d&&d[v]||(_=p=0)||h.pop();)if(1===d.nodeType&&++_&&d===e){c[t]=[x,p,_];break}}else if(y&&(_=p=(l=(c=(f=(d=e)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[t]||[])[0]===x&&l[1]),!1===_)for(;(d=++p&&d&&d[v]||(_=p=0)||h.pop())&&((u?d.nodeName.toLowerCase()!==m:1!==d.nodeType)||!++_||(y&&((c=(f=d[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[t]=[x,_]),d!==e)););return(_-=i)===r||_%r==0&&_/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ut.error("unsupported pseudo: "+t);return i[b]?i(e):i.length>1?(n=[t,t,"",e],r.setFilters.hasOwnProperty(t.toLowerCase())?lt((function(t,n){for(var r,o=i(t,e),a=o.length;a--;)t[r=O(t,o[a])]=!(n[r]=o[a])})):function(t){return i(t,0,n)}):i}},pseudos:{not:lt((function(t){var e=[],n=[],r=u(t.replace($,"$1"));return r[b]?lt((function(t,e,n,i){for(var o,a=r(t,null,i,[]),u=t.length;u--;)(o=a[u])&&(t[u]=!(e[u]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:lt((function(t){return function(e){return ut(t,e).length>0}})),contains:lt((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||i(e)).indexOf(t)>-1}})),lang:lt((function(t){return G.test(t||"")||ut.error("unsupported lang: "+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=v?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===h},focus:function(t){return t===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:vt(!1),disabled:vt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return Y.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:gt((function(){return[0]})),last:gt((function(t,e){return[e-1]})),eq:gt((function(t,e,n){return[n<0?n+e:n]})),even:gt((function(t,e){for(var n=0;ne?e:n;--r>=0;)t.push(r);return t})),gt:gt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function xt(t,e,n,r,i){for(var o,a=[],u=0,s=t.length,l=null!=e;u-1&&(o[l]=!(a[l]=f))}}else m=xt(m===a?m.splice(h,m.length):m),i?i(null,a,m,s):I.apply(a,m)}))}function kt(t){for(var e,n,i,o=t.length,a=r.relative[t[0].type],u=a||r.relative[" "],s=a?1:0,c=bt((function(t){return t===e}),u,!0),f=bt((function(t){return O(e,t)>-1}),u,!0),d=[function(t,n,r){var i=!a&&(r||n!==l)||((e=n).nodeType?c(t,n,r):f(t,n,r));return e=null,i}];s1&&wt(d),s>1&&_t(t.slice(0,s-1).concat({value:" "===t[s-2].type?"*":""})).replace($,"$1"),n,s0,i=t.length>0,o=function(o,a,u,s,c){var f,h,g,m=0,y="0",_=o&&[],b=[],w=l,T=o||i&&r.find.TAG("*",c),k=x+=null==w?1:Math.random()||.1,S=T.length;for(c&&(l=a==p||a||c);y!==S&&null!=(f=T[y]);y++){if(i&&f){for(h=0,a||f.ownerDocument==p||(d(f),u=!v);g=t[h++];)if(g(f,a||p,u)){s.push(f);break}c&&(x=k)}n&&((f=!g&&f)&&m--,o&&_.push(f))}if(m+=y,n&&y!==m){for(h=0;g=e[h++];)g(_,b,a,u);if(o){if(m>0)for(;y--;)_[y]||b[y]||(b[y]=D.call(s));b=xt(b)}I.apply(s,b),c&&!o&&b.length>0&&m+e.length>1&&ut.uniqueSort(s)}return c&&(x=k,l=w),_};return n?lt(o):o}(o,i))).selector=t}return u},s=ut.select=function(t,e,n,i){var o,s,l,c,f,d="function"==typeof t&&t,p=!i&&a(t=d.selector||t);if(n=n||[],1===p.length){if((s=p[0]=p[0].slice(0)).length>2&&"ID"===(l=s[0]).type&&9===e.nodeType&&v&&r.relative[s[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(et,nt),e)||[])[0]))return n;d&&(e=e.parentNode),t=t.slice(s.shift().value.length)}for(o=K.needsContext.test(t)?0:s.length;o--&&(l=s[o],!r.relative[c=l.type]);)if((f=r.find[c])&&(i=f(l.matches[0].replace(et,nt),tt.test(s[0].type)&&mt(e.parentNode)||e))){if(s.splice(o,1),!(t=i.length&&_t(s)))return I.apply(n,i),n;break}}return(d||u(t,p))(i,e,!v,n,!e||tt.test(t)&&mt(e.parentNode)||e),n},n.sortStable=b.split("").sort(A).join("")===b,n.detectDuplicates=!!f,d(),n.sortDetached=ct((function(t){return 1&t.compareDocumentPosition(p.createElement("fieldset"))})),ct((function(t){return t.innerHTML=" ","#"===t.firstChild.getAttribute("href")}))||ft("type|href|height|width",(function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),n.attributes&&ct((function(t){return t.innerHTML=" ",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||ft("value",(function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue})),ct((function(t){return null==t.getAttribute("disabled")}))||ft(P,(function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null})),ut}(t);b.find=x,b.expr=x.selectors,b.expr[":"]=b.expr.pseudos,b.uniqueSort=b.unique=x.uniqueSort,b.text=x.getText,b.isXMLDoc=x.isXML,b.contains=x.contains,b.escapeSelector=x.escape;var T=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&b(t).is(n))break;r.push(t)}return r},k=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},S=b.expr.match.needsContext;function E(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function A(t,e,n){return h(e)?b.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?b.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?b.grep(t,(function(t){return u.call(e,t)>-1!==n})):b.filter(e,t,n)}b.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?b.find.matchesSelector(r,t)?[r]:[]:b.find.matches(t,b.grep(e,(function(t){return 1===t.nodeType})))},b.fn.extend({find:function(t){var e,n,r=this.length,i=this;if("string"!=typeof t)return this.pushStack(b(t).filter((function(){for(e=0;e1?b.uniqueSort(n):n},filter:function(t){return this.pushStack(A(this,t||[],!1))},not:function(t){return this.pushStack(A(this,t||[],!0))},is:function(t){return!!A(this,"string"==typeof t&&S.test(t)?b(t):t||[],!1).length}});var L,j=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(b.fn.init=function(t,e,n){var r,i;if(!t)return this;if(n=n||L,"string"==typeof t){if(!(r="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:j.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof b?e[0]:e,b.merge(this,b.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:g,!0)),C.test(r[1])&&b.isPlainObject(e))for(r in e)h(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return(i=g.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):h(t)?void 0!==n.ready?n.ready(t):t(b):b.makeArray(t,this)}).prototype=b.fn,L=b(g);var D=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function I(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}b.fn.extend({has:function(t){var e=b(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&b.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?b.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?u.call(b(t),this[0]):u.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(b.uniqueSort(b.merge(this.get(),b(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),b.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return T(t,"parentNode")},parentsUntil:function(t,e,n){return T(t,"parentNode",n)},next:function(t){return I(t,"nextSibling")},prev:function(t){return I(t,"previousSibling")},nextAll:function(t){return T(t,"nextSibling")},prevAll:function(t){return T(t,"previousSibling")},nextUntil:function(t,e,n){return T(t,"nextSibling",n)},prevUntil:function(t,e,n){return T(t,"previousSibling",n)},siblings:function(t){return k((t.parentNode||{}).firstChild,t)},children:function(t){return k(t.firstChild)},contents:function(t){return null!=t.contentDocument&&r(t.contentDocument)?t.contentDocument:(E(t,"template")&&(t=t.content||t),b.merge([],t.childNodes))}},(function(t,e){b.fn[t]=function(n,r){var i=b.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),this.length>1&&(N[t]||b.uniqueSort(i),D.test(t)&&i.reverse()),this.pushStack(i)}}));var M=/[^\x20\t\r\n\f]+/g;function O(t){return t}function P(t){throw t}function R(t,e,n,r){var i;try{t&&h(i=t.promise)?i.call(t).done(e).fail(n):t&&h(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}b.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return b.each(t.match(M)||[],(function(t,n){e[n]=!0})),e}(t):b.extend({},t);var e,n,r,i,o=[],a=[],u=-1,s=function(){for(i=i||t.once,r=e=!0;a.length;u=-1)for(n=a.shift();++u-1;)o.splice(n,1),n<=u&&u--})),this},has:function(t){return t?b.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||e||(o=n=""),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],a.push(n),e||s()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},b.extend({Deferred:function(e){var n=[["notify","progress",b.Callbacks("memory"),b.Callbacks("memory"),2],["resolve","done",b.Callbacks("once memory"),b.Callbacks("once memory"),0,"resolved"],["reject","fail",b.Callbacks("once memory"),b.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return b.Deferred((function(e){b.each(n,(function(n,r){var i=h(t[r[4]])&&t[r[4]];o[r[1]]((function(){var t=i&&i.apply(this,arguments);t&&h(t.promise)?t.promise().progress(e.notify).done(e.resolve).fail(e.reject):e[r[0]+"With"](this,i?[t]:arguments)}))})),t=null})).promise()},then:function(e,r,i){var o=0;function a(e,n,r,i){return function(){var u=this,s=arguments,l=function(){var t,l;if(!(e=o&&(r!==P&&(u=void 0,s=[t]),n.rejectWith(u,s))}};e?c():(b.Deferred.getStackHook&&(c.stackTrace=b.Deferred.getStackHook()),t.setTimeout(c))}}return b.Deferred((function(t){n[0][3].add(a(0,t,h(i)?i:O,t.notifyWith)),n[1][3].add(a(0,t,h(e)?e:O)),n[2][3].add(a(0,t,h(r)?r:P))})).promise()},promise:function(t){return null!=t?b.extend(t,i):i}},o={};return b.each(n,(function(t,e){var a=e[2],u=e[5];i[e[1]]=a.add,u&&a.add((function(){r=u}),n[3-t][2].disable,n[3-t][3].disable,n[0][2].lock,n[0][3].lock),a.add(e[3].fire),o[e[0]]=function(){return o[e[0]+"With"](this===o?void 0:this,arguments),this},o[e[0]+"With"]=a.fireWith})),i.promise(o),e&&e.call(o,o),o},when:function(t){var e=arguments.length,n=e,r=Array(n),o=i.call(arguments),a=b.Deferred(),u=function(t){return function(n){r[t]=this,o[t]=arguments.length>1?i.call(arguments):n,--e||a.resolveWith(r,o)}};if(e<=1&&(R(t,a.done(u(n)).resolve,a.reject,!e),"pending"===a.state()||h(o[n]&&o[n].then)))return a.then();for(;n--;)R(o[n],u(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;b.Deferred.exceptionHook=function(e,n){t.console&&t.console.warn&&e&&B.test(e.name)&&t.console.warn("jQuery.Deferred exception: "+e.message,e.stack,n)},b.readyException=function(e){t.setTimeout((function(){throw e}))};var q=b.Deferred();function H(){g.removeEventListener("DOMContentLoaded",H),t.removeEventListener("load",H),b.ready()}b.fn.ready=function(t){return q.then(t).catch((function(t){b.readyException(t)})),this},b.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--b.readyWait:b.isReady)||(b.isReady=!0,!0!==t&&--b.readyWait>0||q.resolveWith(g,[b]))}}),b.ready.then=q.then,"complete"===g.readyState||"loading"!==g.readyState&&!g.documentElement.doScroll?t.setTimeout(b.ready):(g.addEventListener("DOMContentLoaded",H),t.addEventListener("load",H));var W=function(t,e,n,r,i,o,a){var u=0,s=t.length,l=null==n;if("object"===_(n))for(u in i=!0,n)W(t,e,u,n[u],!0,o,a);else if(void 0!==r&&(i=!0,h(r)||(a=!0),l&&(a?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(b(t),n)})),e))for(;u1,null,!0)},removeData:function(t){return this.each((function(){Q.remove(this,t)}))}}),b.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=K.get(t,e),n&&(!r||Array.isArray(n)?r=K.access(t,e,b.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=b.queue(t,e),r=n.length,i=n.shift(),o=b._queueHooks(t,e);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===e&&n.unshift("inprogress"),delete o.stop,i.call(t,(function(){b.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return K.get(t,n)||K.access(t,n,{empty:b.Callbacks("once memory").add((function(){K.remove(t,[e+"queue",n])}))})}}),b.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ht=/^$|^module$|\/(?:java|ecma)script/i;ct=g.createDocumentFragment().appendChild(g.createElement("div")),(ft=g.createElement("input")).setAttribute("type","radio"),ft.setAttribute("checked","checked"),ft.setAttribute("name","t"),ct.appendChild(ft),p.checkClone=ct.cloneNode(!0).cloneNode(!0).lastChild.checked,ct.innerHTML="",p.noCloneChecked=!!ct.cloneNode(!0).lastChild.defaultValue,ct.innerHTML=" ",p.option=!!ct.lastChild;var vt={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function gt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&E(t,e)?b.merge([t],n):n}function mt(t,e){for(var n=0,r=t.length;n",""]);var yt=/<|?\w+;/;function _t(t,e,n,r,i){for(var o,a,u,s,l,c,f=e.createDocumentFragment(),d=[],p=0,h=t.length;p-1)i&&i.push(o);else if(l=rt(o),a=gt(f.appendChild(o),"script"),l&&mt(a),n)for(c=0;o=a[c++];)ht.test(o.type||"")&&n.push(o);return f}var bt=/^key/,wt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,xt=/^([^.]*)(?:\.(.+)|)/;function Tt(){return!0}function kt(){return!1}function St(t,e){return t===function(){try{return g.activeElement}catch(t){}}()==("focus"===e)}function Et(t,e,n,r,i,o){var a,u;if("object"==typeof e){for(u in"string"!=typeof n&&(r=r||n,n=void 0),e)Et(t,u,n,r,e[u],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=kt;else if(!i)return t;return 1===o&&(a=i,(i=function(t){return b().off(t),a.apply(this,arguments)}).guid=a.guid||(a.guid=b.guid++)),t.each((function(){b.event.add(this,e,i,r,n)}))}function Ct(t,e,n){n?(K.set(t,e,!1),b.event.add(t,e,{namespace:!1,handler:function(t){var r,o,a=K.get(this,e);if(1&t.isTrigger&&this[e]){if(a.length)(b.event.special[e]||{}).delegateType&&t.stopPropagation();else if(a=i.call(arguments),K.set(this,e,a),r=n(this,e),this[e](),a!==(o=K.get(this,e))||r?K.set(this,e,!1):o={},a!==o)return t.stopImmediatePropagation(),t.preventDefault(),o.value}else a.length&&(K.set(this,e,{value:b.event.trigger(b.extend(a[0],b.Event.prototype),a.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===K.get(t,e)&&b.event.add(t,e,Tt)}b.event={global:{},add:function(t,e,n,r,i){var o,a,u,s,l,c,f,d,p,h,v,g=K.get(t);if(V(t))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&b.find.matchesSelector(nt,i),n.guid||(n.guid=b.guid++),(s=g.events)||(s=g.events=Object.create(null)),(a=g.handle)||(a=g.handle=function(e){return void 0!==b&&b.event.triggered!==e.type?b.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(M)||[""]).length;l--;)p=v=(u=xt.exec(e[l])||[])[1],h=(u[2]||"").split(".").sort(),p&&(f=b.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=b.event.special[p]||{},c=b.extend({type:p,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&b.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=s[p])||((d=s[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(p,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),b.event.global[p]=!0)},remove:function(t,e,n,r,i){var o,a,u,s,l,c,f,d,p,h,v,g=K.hasData(t)&&K.get(t);if(g&&(s=g.events)){for(l=(e=(e||"").match(M)||[""]).length;l--;)if(p=v=(u=xt.exec(e[l])||[])[1],h=(u[2]||"").split(".").sort(),p){for(f=b.event.special[p]||{},d=s[p=(r?f.delegateType:f.bindType)||p]||[],u=u[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!i&&v!==c.origType||n&&n.guid!==c.guid||u&&!u.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(t,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(t,h,g.handle)||b.removeEvent(t,p,g.handle),delete s[p])}else for(p in s)b.event.remove(t,p+e[l],n,r,!0);b.isEmptyObject(s)&&K.remove(t,"handle events")}},dispatch:function(t){var e,n,r,i,o,a,u=new Array(arguments.length),s=b.event.fix(t),l=(K.get(this,"events")||Object.create(null))[s.type]||[],c=b.event.special[s.type]||{};for(u[0]=s,e=1;e=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==t.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:b.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&u.push({elem:l,handlers:o})}return l=this,s\s*$/g;function Dt(t,e){return E(t,"table")&&E(11!==e.nodeType?e:e.firstChild,"tr")&&b(t).children("tbody")[0]||t}function Nt(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function It(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function Mt(t,e){var n,r,i,o,a,u;if(1===e.nodeType){if(K.hasData(t)&&(u=K.get(t).events))for(i in K.remove(e,"handle events"),u)for(n=0,r=u[i].length;n1&&"string"==typeof g&&!p.checkClone&&Lt.test(g))return t.each((function(i){var o=t.eq(i);m&&(e[0]=g.call(this,i,o.html())),Pt(o,e,n,r)}));if(d&&(a=(i=_t(e,t[0].ownerDocument,!1,t,r)).firstChild,1===i.childNodes.length&&(i=a),a||r)){for(s=(u=b.map(gt(i,"script"),Nt)).length;f0&&mt(a,!s&>(t,"script")),u},cleanData:function(t){for(var e,n,r,i=b.event.special,o=0;void 0!==(n=t[o]);o++)if(V(n)){if(e=n[K.expando]){if(e.events)for(r in e.events)i[r]?b.event.remove(n,r):b.removeEvent(n,r,e.handle);n[K.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),b.fn.extend({detach:function(t){return Rt(this,t,!0)},remove:function(t){return Rt(this,t)},text:function(t){return W(this,(function(t){return void 0===t?b.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Pt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Dt(this,t).appendChild(t)}))},prepend:function(){return Pt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Dt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Pt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Pt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(b.cleanData(gt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return b.clone(this,t,e)}))},html:function(t){return W(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!At.test(t)&&!vt[(pt.exec(t)||["",""])[1].toLowerCase()]){t=b.htmlPrefilter(t);try{for(;n3,nt.removeChild(e)),u}}))}();var Ft=["Webkit","Moz","ms"],Ut=g.createElement("div").style,Vt={};function Gt(t){var e=b.cssProps[t]||Vt[t];return e||(t in Ut?t:Vt[t]=function(t){for(var e=t[0].toUpperCase()+t.slice(1),n=Ft.length;n--;)if((t=Ft[n]+e)in Ut)return t}(t)||t)}var Kt=/^(none|table(?!-c[ea]).+)/,Qt=/^--/,Yt={position:"absolute",visibility:"hidden",display:"block"},Xt={letterSpacing:"0",fontWeight:"400"};function Zt(t,e,n){var r=tt.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):e}function Jt(t,e,n,r,i,o){var a="width"===e?1:0,u=0,s=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(s+=b.css(t,n+et[a],!0,i)),r?("content"===n&&(s-=b.css(t,"padding"+et[a],!0,i)),"margin"!==n&&(s-=b.css(t,"border"+et[a]+"Width",!0,i))):(s+=b.css(t,"padding"+et[a],!0,i),"padding"!==n?s+=b.css(t,"border"+et[a]+"Width",!0,i):u+=b.css(t,"border"+et[a]+"Width",!0,i));return!r&&o>=0&&(s+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-o-s-u-.5))||0),s}function te(t,e,n){var r=qt(t),i=(!p.boxSizingReliable()||n)&&"border-box"===b.css(t,"boxSizing",!1,r),o=i,a=$t(t,e,r),u="offset"+e[0].toUpperCase()+e.slice(1);if(Bt.test(a)){if(!n)return a;a="auto"}return(!p.boxSizingReliable()&&i||!p.reliableTrDimensions()&&E(t,"tr")||"auto"===a||!parseFloat(a)&&"inline"===b.css(t,"display",!1,r))&&t.getClientRects().length&&(i="border-box"===b.css(t,"boxSizing",!1,r),(o=u in t)&&(a=t[u])),(a=parseFloat(a)||0)+Jt(t,e,n||(i?"border":"content"),o,r,a)+"px"}function ee(t,e,n,r,i){return new ee.prototype.init(t,e,n,r,i)}b.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=$t(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,a,u=U(e),s=Qt.test(e),l=t.style;if(s||(e=Gt(u)),a=b.cssHooks[e]||b.cssHooks[u],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(t,!1,r))?i:l[e];"string"===(o=typeof n)&&(i=tt.exec(n))&&i[1]&&(n=at(t,e,i),o="number"),null!=n&&n==n&&("number"!==o||s||(n+=i&&i[3]||(b.cssNumber[u]?"":"px")),p.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),a&&"set"in a&&void 0===(n=a.set(t,n,r))||(s?l.setProperty(e,n):l[e]=n))}},css:function(t,e,n,r){var i,o,a,u=U(e);return Qt.test(e)||(e=Gt(u)),(a=b.cssHooks[e]||b.cssHooks[u])&&"get"in a&&(i=a.get(t,!0,n)),void 0===i&&(i=$t(t,e,r)),"normal"===i&&e in Xt&&(i=Xt[e]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),b.each(["height","width"],(function(t,e){b.cssHooks[e]={get:function(t,n,r){if(n)return!Kt.test(b.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?te(t,e,r):Ht(t,Yt,(function(){return te(t,e,r)}))},set:function(t,n,r){var i,o=qt(t),a=!p.scrollboxSize()&&"absolute"===o.position,u=(a||r)&&"border-box"===b.css(t,"boxSizing",!1,o),s=r?Jt(t,e,r,u,o):0;return u&&a&&(s-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-Jt(t,e,"border",!1,o)-.5)),s&&(i=tt.exec(n))&&"px"!==(i[3]||"px")&&(t.style[e]=n,n=b.css(t,e)),Zt(0,n,s)}}})),b.cssHooks.marginLeft=zt(p.reliableMarginLeft,(function(t,e){if(e)return(parseFloat($t(t,"marginLeft"))||t.getBoundingClientRect().left-Ht(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),b.each({margin:"",padding:"",border:"Width"},(function(t,e){b.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[t+et[r]+e]=o[r]||o[r-2]||o[0];return i}},"margin"!==t&&(b.cssHooks[t+e].set=Zt)})),b.fn.extend({css:function(t,e){return W(this,(function(t,e,n){var r,i,o={},a=0;if(Array.isArray(e)){for(r=qt(t),i=e.length;a1)}}),b.Tween=ee,ee.prototype={constructor:ee,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||b.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var t=ee.propHooks[this.prop];return t&&t.get?t.get(this):ee.propHooks._default.get(this)},run:function(t){var e,n=ee.propHooks[this.prop];return this.options.duration?this.pos=e=b.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ee.propHooks._default.set(this),this}},ee.prototype.init.prototype=ee.prototype,ee.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=b.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){b.fx.step[t.prop]?b.fx.step[t.prop](t):1!==t.elem.nodeType||!b.cssHooks[t.prop]&&null==t.elem.style[Gt(t.prop)]?t.elem[t.prop]=t.now:b.style(t.elem,t.prop,t.now+t.unit)}}},ee.propHooks.scrollTop=ee.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},b.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},b.fx=ee.prototype.init,b.fx.step={};var ne,re,ie=/^(?:toggle|show|hide)$/,oe=/queueHooks$/;function ae(){re&&(!1===g.hidden&&t.requestAnimationFrame?t.requestAnimationFrame(ae):t.setTimeout(ae,b.fx.interval),b.fx.tick())}function ue(){return t.setTimeout((function(){ne=void 0})),ne=Date.now()}function se(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)i["margin"+(n=et[r])]=i["padding"+n]=t;return e&&(i.opacity=i.width=t),i}function le(t,e,n){for(var r,i=(ce.tweeners[e]||[]).concat(ce.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(t){return this.each((function(){b.removeAttr(this,t)}))}}),b.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?b.prop(t,e,n):(1===o&&b.isXMLDoc(t)||(i=b.attrHooks[e.toLowerCase()]||(b.expr.match.bool.test(e)?fe:void 0)),void 0!==n?null===n?void b.removeAttr(t,e):i&&"set"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+""),n):i&&"get"in i&&null!==(r=i.get(t,e))?r:null==(r=b.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!p.radioValue&&"radio"===e&&E(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(M);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),fe={set:function(t,e,n){return!1===e?b.removeAttr(t,n):t.setAttribute(n,n),n}},b.each(b.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=de[e]||b.find.attr;de[e]=function(t,e,r){var i,o,a=e.toLowerCase();return r||(o=de[a],de[a]=i,i=null!=n(t,e,r)?a:null,de[a]=o),i}}));var pe=/^(?:input|select|textarea|button)$/i,he=/^(?:a|area)$/i;function ve(t){return(t.match(M)||[]).join(" ")}function ge(t){return t.getAttribute&&t.getAttribute("class")||""}function me(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(M)||[]}b.fn.extend({prop:function(t,e){return W(this,b.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[b.propFix[t]||t]}))}}),b.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&b.isXMLDoc(t)||(e=b.propFix[e]||e,i=b.propHooks[e]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&"get"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=b.find.attr(t,"tabindex");return e?parseInt(e,10):pe.test(t.nodeName)||he.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),p.optSelected||(b.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),b.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){b.propFix[this.toLowerCase()]=this})),b.fn.extend({addClass:function(t){var e,n,r,i,o,a,u,s=0;if(h(t))return this.each((function(e){b(this).addClass(t.call(this,e,ge(this)))}));if((e=me(t)).length)for(;n=this[s++];)if(i=ge(n),r=1===n.nodeType&&" "+ve(i)+" "){for(a=0;o=e[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(u=ve(r))&&n.setAttribute("class",u)}return this},removeClass:function(t){var e,n,r,i,o,a,u,s=0;if(h(t))return this.each((function(e){b(this).removeClass(t.call(this,e,ge(this)))}));if(!arguments.length)return this.attr("class","");if((e=me(t)).length)for(;n=this[s++];)if(i=ge(n),r=1===n.nodeType&&" "+ve(i)+" "){for(a=0;o=e[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(u=ve(r))&&n.setAttribute("class",u)}return this},toggleClass:function(t,e){var n=typeof t,r="string"===n||Array.isArray(t);return"boolean"==typeof e&&r?e?this.addClass(t):this.removeClass(t):h(t)?this.each((function(n){b(this).toggleClass(t.call(this,n,ge(this),e),e)})):this.each((function(){var e,i,o,a;if(r)for(i=0,o=b(this),a=me(t);e=a[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||((e=ge(this))&&K.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":K.get(this,"__className__")||""))}))},hasClass:function(t){var e,n,r=0;for(e=" "+t+" ";n=this[r++];)if(1===n.nodeType&&(" "+ve(ge(n))+" ").indexOf(e)>-1)return!0;return!1}});var ye=/\r/g;b.fn.extend({val:function(t){var e,n,r,i=this[0];return arguments.length?(r=h(t),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?t.call(this,n,b(this).val()):t)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=b.map(i,(function(t){return null==t?"":t+""}))),(e=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,i,"value")||(this.value=i))}))):i?(e=b.valHooks[i.type]||b.valHooks[i.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(ye,""):null==n?"":n:void 0}}),b.extend({valHooks:{option:{get:function(t){var e=b.find.attr(t,"value");return null!=e?e:ve(b.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,a="select-one"===t.type,u=a?null:[],s=a?o+1:i.length;for(r=o<0?s:a?o:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),b.each(["radio","checkbox"],(function(){b.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=b.inArray(b(t).val(),e)>-1}},p.checkOn||(b.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})})),p.focusin="onfocusin"in t;var _e=/^(?:focusinfocus|focusoutblur)$/,be=function(t){t.stopPropagation()};b.extend(b.event,{trigger:function(e,n,r,i){var o,a,u,s,l,f,d,p,m=[r||g],y=c.call(e,"type")?e.type:e,_=c.call(e,"namespace")?e.namespace.split("."):[];if(a=p=u=r=r||g,3!==r.nodeType&&8!==r.nodeType&&!_e.test(y+b.event.triggered)&&(y.indexOf(".")>-1&&(_=y.split("."),y=_.shift(),_.sort()),l=y.indexOf(":")<0&&"on"+y,(e=e[b.expando]?e:new b.Event(y,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=_.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),n=null==n?[e]:b.makeArray(n,[e]),d=b.event.special[y]||{},i||!d.trigger||!1!==d.trigger.apply(r,n))){if(!i&&!d.noBubble&&!v(r)){for(s=d.delegateType||y,_e.test(s+y)||(a=a.parentNode);a;a=a.parentNode)m.push(a),u=a;u===(r.ownerDocument||g)&&m.push(u.defaultView||u.parentWindow||t)}for(o=0;(a=m[o++])&&!e.isPropagationStopped();)p=a,e.type=o>1?s:d.bindType||y,(f=(K.get(a,"events")||Object.create(null))[e.type]&&K.get(a,"handle"))&&f.apply(a,n),(f=l&&a[l])&&f.apply&&V(a)&&(e.result=f.apply(a,n),!1===e.result&&e.preventDefault());return e.type=y,i||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(m.pop(),n)||!V(r)||l&&h(r[y])&&!v(r)&&((u=r[l])&&(r[l]=null),b.event.triggered=y,e.isPropagationStopped()&&p.addEventListener(y,be),r[y](),e.isPropagationStopped()&&p.removeEventListener(y,be),b.event.triggered=void 0,u&&(r[l]=u)),e.result}},simulate:function(t,e,n){var r=b.extend(new b.Event,n,{type:t,isSimulated:!0});b.event.trigger(r,null,e)}}),b.fn.extend({trigger:function(t,e){return this.each((function(){b.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return b.event.trigger(t,e,n,!0)}}),p.focusin||b.each({focus:"focusin",blur:"focusout"},(function(t,e){var n=function(t){b.event.simulate(e,t.target,b.event.fix(t))};b.event.special[e]={setup:function(){var r=this.ownerDocument||this.document||this,i=K.access(r,e);i||r.addEventListener(t,n,!0),K.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=K.access(r,e)-1;i?K.access(r,e,i):(r.removeEventListener(t,n,!0),K.remove(r,e))}}}));var we=t.location,xe={guid:Date.now()},Te=/\?/;b.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(t){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+e),n};var ke=/\[\]$/,Se=/\r?\n/g,Ee=/^(?:submit|button|image|reset|file)$/i,Ce=/^(?:input|select|textarea|keygen)/i;function Ae(t,e,n,r){var i;if(Array.isArray(e))b.each(e,(function(e,i){n||ke.test(t)?r(t,i):Ae(t+"["+("object"==typeof i&&null!=i?e:"")+"]",i,n,r)}));else if(n||"object"!==_(e))r(t,e);else for(i in e)Ae(t+"["+i+"]",e[i],n,r)}b.param=function(t,e){var n,r=[],i=function(t,e){var n=h(e)?e():e;r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!b.isPlainObject(t))b.each(t,(function(){i(this.name,this.value)}));else for(n in t)Ae(n,t[n],e,i);return r.join("&")},b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=b.prop(this,"elements");return t?b.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!b(this).is(":disabled")&&Ce.test(this.nodeName)&&!Ee.test(t)&&(this.checked||!dt.test(t))})).map((function(t,e){var n=b(this).val();return null==n?null:Array.isArray(n)?b.map(n,(function(t){return{name:e.name,value:t.replace(Se,"\r\n")}})):{name:e.name,value:n.replace(Se,"\r\n")}})).get()}});var Le=/%20/g,je=/#.*$/,De=/([?&])_=[^&]*/,Ne=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ie=/^(?:GET|HEAD)$/,Me=/^\/\//,Oe={},Pe={},Re="*/".concat("*"),Be=g.createElement("a");function qe(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var r,i=0,o=e.toLowerCase().match(M)||[];if(h(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function He(t,e,n,r){var i={},o=t===Pe;function a(u){var s;return i[u]=!0,b.each(t[u]||[],(function(t,u){var l=u(e,n,r);return"string"!=typeof l||o||i[l]?o?!(s=l):void 0:(e.dataTypes.unshift(l),a(l),!1)})),s}return a(e.dataTypes[0])||!i["*"]&&a("*")}function We(t,e){var n,r,i=b.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&b.extend(!0,t,r),t}Be.href=we.href,b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:we.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(we.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Re,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?We(We(t,b.ajaxSettings),e):We(b.ajaxSettings,t)},ajaxPrefilter:qe(Oe),ajaxTransport:qe(Pe),ajax:function(e,n){"object"==typeof e&&(n=e,e=void 0),n=n||{};var r,i,o,a,u,s,l,c,f,d,p=b.ajaxSetup({},n),h=p.context||p,v=p.context&&(h.nodeType||h.jquery)?b(h):b.event,m=b.Deferred(),y=b.Callbacks("once memory"),_=p.statusCode||{},w={},x={},T="canceled",k={readyState:0,getResponseHeader:function(t){var e;if(l){if(!a)for(a={};e=Ne.exec(o);)a[e[1].toLowerCase()+" "]=(a[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=a[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(t,e){return null==l&&(t=x[t.toLowerCase()]=x[t.toLowerCase()]||t,w[t]=e),this},overrideMimeType:function(t){return null==l&&(p.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)k.always(t[k.status]);else for(e in t)_[e]=[_[e],t[e]];return this},abort:function(t){var e=t||T;return r&&r.abort(e),S(0,e),this}};if(m.promise(k),p.url=((e||p.url||we.href)+"").replace(Me,we.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(M)||[""],null==p.crossDomain){s=g.createElement("a");try{s.href=p.url,s.href=s.href,p.crossDomain=Be.protocol+"//"+Be.host!=s.protocol+"//"+s.host}catch(t){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),He(Oe,p,n,k),l)return k;for(f in(c=b.event&&p.global)&&0==b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Ie.test(p.type),i=p.url.replace(je,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Le,"+")):(d=p.url.slice(i.length),p.data&&(p.processData||"string"==typeof p.data)&&(i+=(Te.test(i)?"&":"?")+p.data,delete p.data),!1===p.cache&&(i=i.replace(De,"$1"),d=(Te.test(i)?"&":"?")+"_="+xe.guid+++d),p.url=i+d),p.ifModified&&(b.lastModified[i]&&k.setRequestHeader("If-Modified-Since",b.lastModified[i]),b.etag[i]&&k.setRequestHeader("If-None-Match",b.etag[i])),(p.data&&p.hasContent&&!1!==p.contentType||n.contentType)&&k.setRequestHeader("Content-Type",p.contentType),k.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Re+"; q=0.01":""):p.accepts["*"]),p.headers)k.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(!1===p.beforeSend.call(h,k,p)||l))return k.abort();if(T="abort",y.add(p.complete),k.done(p.success),k.fail(p.error),r=He(Pe,p,n,k)){if(k.readyState=1,c&&v.trigger("ajaxSend",[k,p]),l)return k;p.async&&p.timeout>0&&(u=t.setTimeout((function(){k.abort("timeout")}),p.timeout));try{l=!1,r.send(w,S)}catch(t){if(l)throw t;S(-1,t)}}else S(-1,"No Transport");function S(e,n,a,s){var f,d,g,w,x,T=n;l||(l=!0,u&&t.clearTimeout(u),r=void 0,o=s||"",k.readyState=e>0?4:0,f=e>=200&&e<300||304===e,a&&(w=function(t,e,n){for(var r,i,o,a,u=t.contents,s=t.dataTypes;"*"===s[0];)s.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(i in u)if(u[i]&&u[i].test(r)){s.unshift(i);break}if(s[0]in n)o=s[0];else{for(i in n){if(!s[0]||t.converters[i+" "+s[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==s[0]&&s.unshift(o),n[o]}(p,k,a)),!f&&b.inArray("script",p.dataTypes)>-1&&(p.converters["text script"]=function(){}),w=function(t,e,n,r){var i,o,a,u,s,l={},c=t.dataTypes.slice();if(c[1])for(a in t.converters)l[a.toLowerCase()]=t.converters[a];for(o=c.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!s&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),s=o,o=c.shift())if("*"===o)o=s;else if("*"!==s&&s!==o){if(!(a=l[s+" "+o]||l["* "+o]))for(i in l)if((u=i.split(" "))[1]===o&&(a=l[s+" "+u[0]]||l["* "+u[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=u[0],c.unshift(u[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:"parsererror",error:a?t:"No conversion from "+s+" to "+o}}}return{state:"success",data:e}}(p,w,k,f),f?(p.ifModified&&((x=k.getResponseHeader("Last-Modified"))&&(b.lastModified[i]=x),(x=k.getResponseHeader("etag"))&&(b.etag[i]=x)),204===e||"HEAD"===p.type?T="nocontent":304===e?T="notmodified":(T=w.state,d=w.data,f=!(g=w.error))):(g=T,!e&&T||(T="error",e<0&&(e=0))),k.status=e,k.statusText=(n||T)+"",f?m.resolveWith(h,[d,T,k]):m.rejectWith(h,[k,T,g]),k.statusCode(_),_=void 0,c&&v.trigger(f?"ajaxSuccess":"ajaxError",[k,p,f?d:g]),y.fireWith(h,[k,T]),c&&(v.trigger("ajaxComplete",[k,p]),--b.active||b.event.trigger("ajaxStop")))}return k},getJSON:function(t,e,n){return b.get(t,e,n,"json")},getScript:function(t,e){return b.get(t,void 0,e,"script")}}),b.each(["get","post"],(function(t,e){b[e]=function(t,n,r,i){return h(n)&&(i=i||r,r=n,n=void 0),b.ajax(b.extend({url:t,type:e,dataType:i,data:n,success:r},b.isPlainObject(t)&&t))}})),b.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),b._evalUrl=function(t,e,n){return b.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){b.globalEval(t,e,n)}})},b.fn.extend({wrapAll:function(t){var e;return this[0]&&(h(t)&&(t=t.call(this[0])),e=b(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return h(t)?this.each((function(e){b(this).wrapInner(t.call(this,e))})):this.each((function(){var e=b(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=h(t);return this.each((function(n){b(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){b(this).replaceWith(this.childNodes)})),this}}),b.expr.pseudos.hidden=function(t){return!b.expr.pseudos.visible(t)},b.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},b.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(t){}};var $e={0:200,1223:204},ze=b.ajaxSettings.xhr();p.cors=!!ze&&"withCredentials"in ze,p.ajax=ze=!!ze,b.ajaxTransport((function(e){var n,r;if(p.cors||ze&&!e.crossDomain)return{send:function(i,o){var a,u=e.xhr();if(u.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)u[a]=e.xhrFields[a];for(a in e.mimeType&&u.overrideMimeType&&u.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)u.setRequestHeader(a,i[a]);n=function(t){return function(){n&&(n=r=u.onload=u.onerror=u.onabort=u.ontimeout=u.onreadystatechange=null,"abort"===t?u.abort():"error"===t?"number"!=typeof u.status?o(0,"error"):o(u.status,u.statusText):o($e[u.status]||u.status,u.statusText,"text"!==(u.responseType||"text")||"string"!=typeof u.responseText?{binary:u.response}:{text:u.responseText},u.getAllResponseHeaders()))}},u.onload=n(),r=u.onerror=u.ontimeout=n("error"),void 0!==u.onabort?u.onabort=r:u.onreadystatechange=function(){4===u.readyState&&t.setTimeout((function(){n&&r()}))},n=n("abort");try{u.send(e.hasContent&&e.data||null)}catch(t){if(n)throw t}},abort:function(){n&&n()}}})),b.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return b.globalEval(t),t}}}),b.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),b.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(r,i){e=b("