// This skin works by taking what is basically a default layout // and jQuery-ing it to feck to move things around. // The biggest problem with this skin is that if we change stuff in the UI, it usually fucks it up. // So be careful to test it. jQuery.fn.menuReveal = function(callback) { // 'self' is the menu being opened, which will alresady have contents var self = this; var id = this.attr('id'); debug.trace("UI","Revealing",'#'+id); if ($('[name="'+id+'"]').hasClass('podcast')) { var p = $('[name="'+id+'"]').parent(); p.addClass('tagholder_wide dropshadow').find('.containerbox.vertical').addClass('tleft bumpad'); p.find('.helpfulalbum.expand').removeClass('expand').addClass('fixed'); this.detach().addClass('minwidthed2').appendTo(p); } else if ($('[name="'+id+'"]').hasClass('radio')) { $('.collectionpanel').hide(); // We can't remove the radio plugin panels, but we need to mark which ones are closed // Otherwise showPanel will reopen ALL the ones that have been opened if we switch away and // back to the radio stations panel. $('.collectionpanel.radiolist').addClass('closed'); if (self.hasClass('dropmenu')) { self.find('.holderthing').removeClass('holderthing').addClass('containerbox wrap'); self.detach().removeClass('dropmenu').addClass('collectionpanel radiolist containerbox wrap noselection').insertBefore($('#infoholder')); setDraggable('#'+id); } self.removeClass('closed'); } else if ($('[name="'+id+'"]').hasClass('radiochannel')) { var p = $('[name="'+id+'"]').parent(); p.addClass('tagholder_wide dropshadow').find('.containerbox.radiochannel').addClass('tleft bumpad'); p.find('.helpfulalbum.expand').removeClass('expand').addClass('fixed'); this.detach().addClass('minwidthed2').appendTo(p); } this.show(0, function() { if (callback) callback.call(self); if (self.hasClass('containerbox')) { self.css('display', 'flex'); } layoutProcessor.adjustBoxSizes(); }); return self; } jQuery.fn.menuHide = function(callback) { var self = this; debug.trace('UI',"Menu Hide",self); this.hide(0, function() { // Revert back to their default state so the open functions work debug.trace("UI","Hidden",self.parent()); if (self.parent().hasClass('album')) { debug.log("UI","Hiding album"); self.parent().parent().removeClass('tagholder_wide dropshadow'); self.parent().parent().find('.helpfulalbum.fixed').removeClass('fixed').addClass('expand'); self.parent().parent().find('.containerbox.wrap').children('.minwidthed2').remove(); } else if (self.parent().hasClass('playlist') || self.parent().hasClass('userplaylist')) { debug.log("UI","Hiding playlist"); self.parent().parent().removeClass('tagholder_wide dropshadow'); self.parent().parent().find('.helpfulalbum.fixed').removeClass('fixed').addClass('expand'); self.parent().parent().find('.containerbox.wrap').children('.minwidthed2').remove(); } else if (self.prev().hasClass('podcast')) { self.parent().find('.containerbox.vertical').removeClass('tleft bumpad'); self.parent().find('.helpfulalbum.fixed').not('.podcastcounts').removeClass('fixed').addClass('expand'); self.parent().removeClass('tagholder_wide dropshadow'); self.removeClass('minwidthed2'); } else if (self.prev().hasClass('radiochannel')) { self.parent().find('.containerbox.radiochannel').removeClass('tleft bumpad'); self.parent().find('.helpfulalbum.fixed').removeClass('fixed').addClass('expand'); self.parent().removeClass('tagholder_wide dropshadow'); self.removeClass('minwidthed2'); } else if (self.hasClass('radiolist')) { self.addClass('closed'); } if (callback) callback.call(self); layoutProcessor.adjustBoxSizes(); }); return this; } jQuery.fn.isOpen = function() { if ($('#'+this.attr('name')).is(':visible')) { return true; } else { return false; } } jQuery.fn.isClosed = function() { if ($('#'+this.attr('name')).is(':visible')) { return false; } else { return true; } } jQuery.fn.makeSpinner = function() { if (this.hasClass('icon-toggle-closed') || this.hasClass('icon-toggle-open') || this.hasClass('podicon')) { return this.each(function() { var originalclasses = new Array(); var classes = ''; if ($(this).attr("class")) { var classes = $(this).attr("class").split(/\s/); } for (var i = 0, len = classes.length; i < len; i++) { if (classes[i] == "invisible" || (/^icon/.test(classes[i]))) { originalclasses.push(classes[i]); $(this).removeClass(classes[i]); } } $(this).attr("originalclass", originalclasses.join(" ")); $(this).addClass('icon-spin6 spinner'); }); } else { this.addClass('clickflash'); return this; } } jQuery.fn.stopSpinner = function() { if (this.hasClass('spinner')) { this.each(function() { $(this).removeClass('icon-spin6 spinner'); if ($(this).attr("originalclass")) { $(this).addClass($(this).attr("originalclass")); $(this).removeAttr("originalclass"); } }); } else { this.removeClass('clickflash'); } return this; } jQuery.fn.adjustBoxSizes = function() { this.each(function() { var h = $(this); var width = calcPercentWidth(h, '.collectionitem', 260, h.width()); h.find(".collectionitem").css('width', width.toString()+'%'); h.find(".tagholder_wide").css("width", "100%"); h.find(".brick_wide").css("width", "100%"); }); } jQuery.fn.animatePanel = function(options) { var settings = $.extend({},options); var panel = this.attr("id"); this.css('width', settings[panel]+'%'); } function showHistory() { layoutProcessor.sourceControl('infoholder'); } var layoutProcessor = function() { var my_scrollers = [ "#sources", "#infopane", ".topdropmenu", ".drop-box" ]; var rtime = ''; var ptime = ''; var headers = Array(); var currheader = 0; var headertimer; var loading_ui = true; function showPanel(source) { debug.log("UI","Showing Panel",source); $('#'+source).show(0, function() { $('.collectionpanel.'+source).not('.closed').show(0, function() { layoutProcessor.adjustBoxSizes(); }); switch (source) { case 'pluginplaylistslist': layoutProcessor.adjustBoxSizes(); break; case 'albumlist': case 'audiobooklist': if (prefs.sortcollectionby != 'artist') { layoutProcessor.adjustBoxSizes(); } break; case 'playlistslist': layoutProcessor.adjustBoxSizes(); break; case 'podcastslist': fanooglePodcasts(); $('#infopane').mCustomScrollbar('scrollTo', '#podcastslist'); break; case 'historypanel': $('#infoholder').show(0, browser.rePoint); break; case 'infoholder': browser.rePoint(); break; case 'pluginholder': browser.rePoint(); layoutProcessor.adjustBoxSizes(); break; } }); } function fanooglePodcasts() { if (!$('#fruitbat').hasClass('contaierbox')) { $('#fruitbat').removeClass('fullwidth').addClass('containerbox wrap'); $('#podcast_search').removeClass('fullwidth').addClass('containerbox wrap'); } layoutProcessor.adjustBoxSizes(); } function setBottomPanelWidths() { var widths = getPanelWidths(); $("#sources").css("width", widths.sources+"%"); $("#infopane").css("width", widths.infopane+"%"); } function getPanelWidths() { var sourcesweight = (prefs.sourceshidden) ? 0 : 1; var browserweight = (prefs.hidebrowser) ? 0 : 1; var sourceswidth = prefs.sourceswidthpercent*sourcesweight; var ws = getWindowSize(); var percenttofill = (ws.x - $('#headerbar').outerWidth(true))/ws.x; var browserwidth = ((100*percenttofill) - sourceswidth)*browserweight; if (browserwidth < 0) browserwidth = 0; return ({infopane: browserwidth, sources: sourceswidth}); } function animatePanels() { var widths = getPanelWidths(); widths.speed = { sources: 400, infopane: 400 }; $("#sources").animatePanel(widths); $("#infopane").animatePanel(widths); } return { supportsDragDrop: true, hasCustomScrollbars: true, usesKeyboard: true, sortFaveRadios: false, openOnImage: true, setupCollectionDisplay: function() { $('.collectionpanel.albumlist').remove(); $('.collectionpanel.searcher').remove(); $('.collectionpanel.audiobooklist').remove(); switch (prefs.sortcollectionby) { case 'artist': if ($('#collection').hasClass('containerbox')) { $('.collectionpanel').hide(0); $('#collection').empty().detach() .removeClass('containerbox wrap collectionpanel').css('display', '') .addClass('noborder') .appendTo($('#albumlist')); $('#searchresultholder').detach().empty() .removeClass('containerbox wrap collectionpanel').css('display', '') .addClass('noborder') .appendTo($('#searcher')); $('#audiobooks').detach().empty() .removeClass('containerbox wrap collectionpanel').css('display', '') .addClass('noborder') .appendTo($('#audiobooklist')); $('#collection, #searchresultholder, #audiobooks').off('click').off('dblclick'); } break; case 'album': case 'albumbyartist': if (!$('#collection').hasClass('containerbox')) { $('.collectionpanel').hide(0); $('#collection').empty().detach() .removeClass('noborder') .addClass('containerbox wrap collectionpanel').css('display', '') .insertBefore($('#infoholder')); $('#searchresultholder').detach().empty() .removeClass('noborder') .addClass('containerbox wrap collectionpanel').css('display', '') .insertBefore($('#infoholder')); $('#audiobooks').empty().detach() .removeClass('noborder') .addClass('containerbox wrap collectionpanel').css('display', '') .insertBefore($('#infoholder')); } break; } }, changeCollectionSortMode: function() { layoutProcessor.setupCollectionDisplay(); collectionHelper.forceCollectionReload(); }, adjustBoxSizes: function() { debug.log("UI", "adjusting Box Sizes"); $('.collectionpanel').adjustBoxSizes(); $('#fruitbat:visible').adjustBoxSizes(); $('#podcast_search:visible').adjustBoxSizes(); $('#infopane #collection').adjustBoxSizes(); $('#infopane #searchresultholder').adjustBoxSizes(); $('#storedplaylists:visible').adjustBoxSizes(); $('#pluginplaylistslist:visible').adjustBoxSizes(); }, postAlbumActions: function(panel) { layoutProcessor.adjustBoxSizes(); }, hackForSkinsThatModifyStuff: function(id) { $(id+'.holderthing').removeClass('holderthing').addClass('containerbox wrap'); }, afterHistory: function() { setTimeout(function() { $("#infoholder").mCustomScrollbar("scrollTo",0) }, 500); }, addInfoSource: function(name, obj) { $("#chooserbuttons").append($('', { onclick: "browser.switchsource('"+name+"')", title: language.gettext(obj.text), class: obj.icon+' topimg sep fixed tooltip', id: "button_source"+name })); }, setupInfoButtons: function() { $("#button_source"+prefs.infosource).addClass("currentbun"); }, goToBrowserPanel: function(panel) { $("#infopane").mCustomScrollbar('update'); $("#infopane").mCustomScrollbar("scrollTo","#"+panel+"information"); }, goToBrowserPlugin: function(panel) { layoutProcessor.sourceControl('pluginholder'); setTimeout(function() { layoutProcessor.goToBrowserPanel(panel); }, 500); }, goToBrowserSection: function(section) { layoutProcessor.sourceControl('pluginholder'); $("#infopane").mCustomScrollbar("scrollTo",section); }, toggleAudioOutpts: function() { prefs.save({outputsvisible: !$('#outputbox').is(':visible')}); $("#outputbox").animate({width: 'toggle'},'fast',function() { infobar.biggerize(); }); }, hidePanel: function(panel, is_hidden, new_state) { if (is_hidden != new_state) { if (new_state && prefs.chooser == panel) { $("#"+panel).fadeOut('fast'); var s = ["albumlist", "specialplugins", "searcher", "filelist", "radiolist", "audiobooklist", "playlistslist", "podcastslist", "pluginplaylistslist"]; for (var i in s) { if (s[i] != panel && !prefs["hide_"+s[i]]) { layoutProcessor.sourceControl(s[i]); break; } } } if (!new_state && prefs.chooser == panel) { $("#"+panel).fadeIn('fast'); } } }, setTagAdderPosition: function(position) { $("#tagadder").css({top: Math.min(position.y+8, $(window).height() - $('#tagadder').height()), left: Math.min($(window).width() - $('#tagadder').width(), position.x-16)}); }, setPlaylistHeight: function() { $('#phacker').fanoogleMenus(); }, playlistControlHotKey: function(button) { if (!$("#playlistbuttons").is(':visible')) { togglePlaylistButtons() } $("#"+button).trigger('click'); }, updateInfopaneScrollbars: function() { $('#infopane').mCustomScrollbar('update'); }, playlistLoading: function() { infobar.smartradio(language.gettext('label_smartsetup')); }, scrollPlaylistToCurrentTrack: function() { if (prefs.scrolltocurrent) { var scrollto = playlist.getCurrentTrackElement();; if (scrollto.length > 0) { debug.log("LAYOUT","Scrolling Playlist To Song:",player.status.songid); $('#phacker').mCustomScrollbar("stop"); $('#phacker').mCustomScrollbar("update"); var pospixels = Math.round(scrollto.position().top - ($("#sortable").parent().parent().height()/2)); pospixels = Math.min($("#sortable").parent().height(), Math.max(pospixels, 0)); $('#phacker').mCustomScrollbar( "scrollTo", pospixels, { scrollInertia: 0 } ); } } }, preHorse: function() { }, hideBrowser: function() { }, addCustomScrollBar: function(value) { $(value).mCustomScrollbar({ theme: "light-thick", scrollInertia: 300, contentTouchScroll: 25, mouseWheel: { scrollAmount: parseInt(prefs.wheelscrollspeed), }, alwaysShowScrollbar: 1, advanced: { updateOnContentResize: true, updateOnImageLoad: false, autoScrollOnFocus: false, autoUpdateTimeout: 500, } }); }, scrollCollectionTo: function(jq) { if (jq) { debug.log("LAYOUT","Scrolling Collection To",jq); if (prefs.sortcollectionby == 'artist') { $("#sources").mCustomScrollbar('update').mCustomScrollbar('scrollTo', jq, { scrollInertia: 1000, scrollEasing: 'easeOut' } ); } else { $("#infopane").mCustomScrollbar('update').mCustomScrollbar('scrollTo', jq, { scrollInertia: 1000, scrollEasing: 'easeOut' } ); } } else { debug.log("LAYOUT","Was asked to scroll collection to something non-existent",2); } }, expandInfo: function(side) { switch(side) { case "left": var p = !prefs.sourceshidden; prefs.save({sourceshidden: p}); break; } animatePanels(); return false; }, sourceControl: function(source) { debug.log("LAYOUT","Source Control",source); if ($('#'+source).length == 0) { prefs.save({chooser: 'albumlist'}); source = 'albumlist'; } if (loading_ui && source == 'pluginholder') { source = 'specialplugins'; } if (loading_ui || source != prefs.chooser) { switch (source) { case 'albumlist': $('.collectionpanel').hide(0); $('#infopane #collection').show(0); if (prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; case 'searcher': $('.collectionpanel').hide(0); $('#infopane #searchresultholder').show(0); if (prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; case 'audiobooklist': $('.collectionpanel').hide(0); $('#infopane #audiobooks').show(0); if (prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; case 'infoholder': case 'pluginholder': case 'podcastslist': case 'playlistslist': case 'pluginplaylistslist': $('.collectionpanel').hide(0); if (!prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; case 'historypanel': $('.collectionpanel').not('#infoholder').hide(0); if (prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; default: $('.collectionpanel').hide(0); if (prefs.sourceshidden) { layoutProcessor.expandInfo('left'); } break; } loading_ui = false; $('#'+prefs.chooser).hide(0); showPanel(source); prefs.save({chooser: source}); } else { showPanel(source); } return false; }, adjustLayout: function() { var ws = getWindowSize(); // Height of the bottom pane (chooser, info, playlist container) var newheight = ws.y - $("#bottompage").offset().top; $("#bottompage").css("height", newheight+"px"); var newwidth = ws.x - $('#infobar').offset().left; $('#infobar').css('width', newwidth+'px'); infobar.biggerize(); browser.rePoint(); $('.topdropmenu').fanoogleMenus(); setBottomPanelWidths(); layoutProcessor.adjustBoxSizes(); }, displayCollectionInsert: function(details) { debug.log("UI","Displaying Collection Insert",details); infobar.notify(language.gettext('label_addedtocol')); infobar.markCurrentTrack(); if (prefs.chooser == 'albumlist') { layoutProcessor.postAlbumActions(); switch (prefs.sortcollectionby) { case 'artist': layoutProcessor.scrollCollectionTo($('[name="aartist'+details.artistindex+'"]')); break; case 'album': case 'albumbyartist': layoutProcessor.scrollCollectionTo($('[name="aalbum'+details.albumindex+'"]')); break; } } }, playlistupdate: function(upcoming) { var time = 0; for(var i in upcoming) { time += upcoming[i].duration; } if (time > 0) { headers['upcoming'] = "Up Next : "+upcoming.length+" tracks, "+formatTimeString(time); } else { headers['upcoming'] = ''; } layoutProcessor.doFancyHeaderStuff(); }, notifyAddTracks: function() { if (!playlist.radioManager.isRunning()) { clearTimeout(headertimer); $('#plmode').fadeOut(500, function() { $('#plmode').html(language.gettext('label_addingtracks')).fadeIn(500); }); } }, doFancyHeaderStuff: function() { clearTimeout(headertimer); var lines = Array(); for (var i in headers) { if (headers[i] != '') { lines.push(headers[i]); } } if (lines.length == 0 && $('#plmode').html() != '') { $('#plmode').fadeOut(500, function() { $('#plmode').html('').fadeIn(500); }); } else if (lines.length == 1 && $('#plmode').html() != lines[0]) { $('#plmode').fadeOut(500, function() { $('#plmode').html(lines[0]).fadeIn(500); }); } else { currheader++; if (currheader >= lines.length) { currheader = 0; } if ($('#plmode').html() != lines[currheader]) { $('#plmode').fadeOut(500, function() { $('#plmode').html(lines[currheader]).fadeIn(500, function() { headertimer = setTimeout(layoutProcessor.doFancyHeaderStuff, 5000); }); }); } else { headertimer = setTimeout(layoutProcessor.doFancyHeaderStuff, 5000); } } }, setProgressTime: function(stats) { if (stats !== null) { rtime = stats.remainString; ptime = stats.durationString; $("#playposss").html(stats.progressString); } if (prefs.displayremainingtime) { $("#tracktimess").html(rtime); } else { $("#tracktimess").html(ptime); } }, toggleRemainTime: function() { prefs.save({displayremainingtime: !prefs.displayremainingtime}); layoutProcessor.setProgressTime(null); }, setRadioModeHeader: function(html) { if (html != headers['radiomode']) { headers['radiomode'] = html; layoutProcessor.doFancyHeaderStuff(); } }, makeCollectionDropMenu: function(element, name) { // Creates a nonexisted drop menu to hold contents. // 'element' is the PARENT menu element that has been clicked on. if (element.hasClass('album') || element.hasClass('playlist') || element.hasClass('userplaylist')) { // This is for an album clicked on in the album browser pane. var x = $('#'+name); element.parent().addClass('tagholder_wide dropshadow'); element.parent().find('.helpfulalbum.expand').removeClass('expand').addClass('fixed'); if (x.length == 0) { element.parent().find('.containerbox.wrap').append($('
', {id: name, class: 'notfilled minwidthed2 expand'})); } } else if (element.hasClass('directory')) { var n = element.attr('name'); if (n.indexOf('_') == -1) { $('.collectionpanel.filelist').remove(); $('.collectionpanel').hide(0); $('#filelist .highlighted').removeClass('highlighted'); element.addClass('highlighted'); var t = $('
', {id: name, class: 'collectionpanel filelist containerbox wrap noselection notfilled'}).insertBefore($('#infoholder')); setDraggable('#'+name); } else { var t= ($('
', {id: name, class: 'indent containerbox wrap notfilled'})).insertAfter(element); } } else if (element.hasClass('searchdir')) { } else { // This is for an artist clicked on in the artist list. var t; var x = $('#'+name); if (element.parent().prop('id') == 'collection') { $('.collectionpanel.albumlist').remove(); $('#collection .highlighted').removeClass('highlighted'); if (x.length == 0) { t = $('
', {id: name, class: 'collectionpanel albumlist containerbox wrap noselection notfilled'}).insertBefore($('#infoholder')); } } else if (element.parent().prop('id') == 'audiobooks') { $('.collectionpanel.audiobooklist').remove(); $('#audiobooks .highlighted').removeClass('highlighted'); if (x.length == 0) { t = $('
', {id: name, class: 'collectionpanel audiobooklist containerbox wrap noselection notfilled'}).insertBefore($('#infoholder')); } } else { $('.collectionpanel.searcher').remove(); $('#searchresultholder .highlighted').removeClass('highlighted'); if (x.length == 0) { t = $('
', {id: name, class: 'collectionpanel searcher containerbox wrap noselection notfilled'}).insertBefore($('#infoholder')); } } $('.collectionpanel').hide(0); element.addClass('highlighted'); setDraggable('#'+name); } }, getArtistDestinationDiv: function(menutoopen) { switch (prefs.sortcollectionby) { case 'artist': return $("#"+menutoopen).parent().parent().parent(); break; default: return $('[name="'+menutoopen+'"]').parent(); break; } }, setupPersonalRadio: function() { $('#pluginplaylistslist .menuitem').not('.dropdown').not('.spacer').wrap('
'); $('#pluginplaylistslist .combobox-entry').parent().parent().parent().parent().addClass('brick_wide helpfulalbum'); // $('#pluginplaylistslist .enter').not('.combobox-entry').parent().parent().parent().parent().parent().addClass('brick_wide helpfulalbum'); $('#pluginplaylistslist .collectionitem').not('.brick_wide').children('.menuitem.containerbox').addClass('vertical helpfulalbum'); // $('#pluginplaylistslist .collectionitem i.icon-toggle-closed').parent().removeClass('vertical'); $('#pluginplaylistslist div[class$="-stars"]').removeClass('svg-square').addClass('rating-icon-big').css('height', '32px'); // $('#pluginplaylistslist .toggledown').each(function() { // var s = $(this).prev(); // $(this).detach().addClass('helpfulalbum').appendTo(s); // }); }, setupPersonalRadioAdditions: function() { $('#pluginplaylistslist [name^="spotiCrazyRadio"]').addClass('vertical helpfulalbum').wrap('
'); layoutProcessor.adjustBoxSizes(); }, initialise: function() { debug.log("SKIN","Initialising..."); if (prefs.outputsvisible) { layoutProcessor.toggleAudioOutpts(); } $("#sortable").disableSelection(); setDraggable('#collection'); setDraggable('#filecollection'); setDraggable('#searchresultholder'); setDraggable("#podcastslist"); setDraggable("#audiobooks"); setDraggable("#somafmlist"); setDraggable("#communityradiolist"); setDraggable("#icecastlist"); setDraggable("#tuneinlist"); setDraggable('#artistinformation'); setDraggable('#albuminformation'); setDraggable('#storedplaylists'); $("#sortable").acceptDroppedTracks({ scroll: true, scrollparent: '#phacker' }); $("#sortable").sortableTrackList({ items: '.sortable', outsidedrop: playlist.dragstopped, insidedrop: playlist.dragstopped, scroll: true, scrollparent: '#phacker', scrollspeed: 80, scrollzone: 120 }); $("#pscroller").acceptDroppedTracks({ ondrop: playlist.draggedToEmpty, coveredby: '#sortable' }); animatePanels(); $(".topdropmenu").floatingMenu({ handleClass: 'dragmenu', addClassTo: 'configtitle', siblings: '.topdropmenu' }); $("#tagadder").floatingMenu({ handleClass: 'configtitle', handleshow: false }); $(".stayopen").not('.dontstealmyclicks').on('click', function(ev) {ev.stopPropagation() }); // $(".enter").on('keyup', onKeyUp ); $.each(my_scrollers, function( index, value ) { layoutProcessor.addCustomScrollBar(value); }); $("#sources").find('.mCSB_draggerRail').resizeHandle({ side: 'left', donefunc: setBottomPanelWidths }); shortcuts.load(); $("#collectionsearcher input").on('keyup', function(event) { if (event.keyCode == 13) { player.controller.search('search'); } } ); setControlClicks(); $('.choose_albumlist').on('click', function(){layoutProcessor.sourceControl('albumlist')}); $('.choose_searcher').on('click', function(){layoutProcessor.sourceControl('searcher')}); $('.choose_filelist').on('click', function(){layoutProcessor.sourceControl('filelist')}); $('.choose_radiolist').on('click', function(){layoutProcessor.sourceControl('radiolist')}); $('.choose_podcastslist').on('click', function(){layoutProcessor.sourceControl('podcastslist')}); $('.choose_audiobooklist').on('click', function(){layoutProcessor.sourceControl('audiobooklist')}); $('.choose_playlistslist').on('click', function(){layoutProcessor.sourceControl('playlistslist')}); $('.choose_pluginplaylistslist').on('click', function(){layoutProcessor.sourceControl('pluginplaylistslist')}); $('.choose_specialplugins').on('click', function(){layoutProcessor.sourceControl('specialplugins')}); $('.choose_infopanel').on('click', function(){layoutProcessor.sourceControl('infoholder')}); $('.choose_history').on('click', function(){layoutProcessor.sourceControl('historypanel')}); $('.open_albumart').on('click', openAlbumArtManager); $("#ratingimage").on('click', nowplaying.setRating); $('.icon-rss.npicon').on('click', function(){podcasts.doPodcast('nppodiput')}); $('#expandleft').on('click', function(){layoutProcessor.expandInfo('left')}); $('.clear_playlist').on('click', playlist.clear); $("#playlistname").parent().next('button').on('click', player.controller.savePlaylist); document.body.addEventListener('drop', function(e) { e.preventDefault(); }, false); $('#albumcover').on('dragenter', infobar.albumImage.dragEnter); $('#albumcover').on('dragover', infobar.albumImage.dragOver); $('#albumcover').on('dragleave', infobar.albumImage.dragLeave); $("#albumcover").on('drop', infobar.albumImage.handleDrop); $("#tracktimess").on('click', layoutProcessor.toggleRemainTime); $(document).on('mouseenter', '.clearbox', makeHoverWork); $(document).on('mouseleave', '.clearbox', makeHoverWork); $(document).on('mousemove', '.clearbox', makeHoverWork); $(document).on('mouseenter', '.combobox-entry', makeHoverWork); $(document).on('mouseleave', '.combobox-entry', makeHoverWork); $(document).on('mousemove', '.combobox-entry', makeHoverWork); $(document).on('mouseenter', '.tooltip', makeToolTip); $(document).on('mouseleave', '.tooltip', stopToolTip); $('#plmode').detach().appendTo('#amontobin').addClass('tright'); $('#volume').volumeControl({ orientation: 'vertical', command: player.controller.volume }); }, // Optional Additions findAlbumDisplayer: function(key) { return $('.containerbox.wrap[name="'+key+'"]').parent(); }, findArtistDisplayer: function(key) { return $('div.menu[name="'+key+'"]'); }, insertAlbum: function(v) { var albumindex = v.id; $('#aalbum'+albumindex).html(v.tracklist); var dropdown = $('#'+v.why+'album'+albumindex).is(':visible'); uiHelper.findAlbumDisplayer(v.why+'album'+albumindex).remove(); switch (v.type) { case 'insertAfter': debug.log("Insert After",v.where); $(v.html).insertAfter(uiHelper.findAlbumDisplayer(v.where)); break; case 'insertAtStart': debug.log("Insert At Start",v.where); $(v.html).insertAfter($('#'+v.where).find('.clickalbum.ninesix.tagholder_wide')); break; } if (dropdown) { uiHelper.findAlbumDisplayer(v.why+'album'+albumindex).find('.menu').trigger('click'); infobar.markCurrentTrack(); } layoutProcessor.postAlbumActions(); }, insertArtist: function(v) { switch (v.type) { case 'insertAfter': debug.log("Insert After",v.where); switch (prefs.sortcollectionby) { case 'album': case 'albumbyartist': $(v.html).insertAfter(uiHelper.findAlbumDisplayer(v.where)); break; case 'artist': $(v.html).insertAfter(uiHelper.findArtistDisplayer(v.where)); break; } break; case 'insertAtStart': debug.log("Insert At Start",v.where); $(v.html).prependTo($('#'+v.where)); break; } layoutProcessor.postAlbumActions(); }, emptySearchResults: function() { $('.collectionpanel.searcher').remove(); $('#searchresultholder').empty(); }, fixupArtistDiv(jq, name) { jq.addClass('containerbox wrap'); }, postPodcastSubscribe: function(data, index) { $('.menu[name="podcast_'+index+'"]').parent().fadeOut('fast', function() { $('.menu[name="podcast_'+index+'"]').parent().remove(); $('#podcast_'+index).remove(); $("#fruitbat").html(data); infobar.notify(language.gettext('label_subscribed')); podcasts.doNewCount(); layoutProcessor.postAlbumActions(); }); }, createPluginHolder: function(icon, title, id, panel) { var d = $('
', {class: 'topdrop'}).prependTo('#righthandtop'); var i = $('', {class: 'tooltip', title: title, id: id}).appendTo(d); i.addClass(icon); i.addClass('smallpluginicon clickicon'); return d; } } }();