mirror of
https://github.com/rembo10/headphones.git
synced 2026-06-29 13:53:59 +01:00
Graphic changes
*Moved menu top top *Added grid view *Fixed Album & Artist art not loading.
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
@font-face{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
src: url('../fonts/websymbols-regular-webfont.eot');
|
||||
src: url('../fonts/websymbols-regular-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('../fonts/websymbols-regular-webfont.woff') format('woff'),
|
||||
url('../fonts/websymbols-regular-webfont.ttf') format('truetype'),
|
||||
url('../fonts/websymbols-regular-webfont.svg#WebSymbolsRegular') format('svg');
|
||||
}
|
||||
.wsr{font-family: 'WebSymbolsRegular';}
|
||||
.wsr.Wanted:Before{content: "I";}
|
||||
.wsr.Skipped:Before{content: "I";}
|
||||
|
||||
|
||||
/*Icons for content management systems*/
|
||||
.wsr.Image:Before{content: "I";}
|
||||
.wsr.Settings:Before{content: "S";}
|
||||
.wsr.Cloud:Before{content: "C";}
|
||||
.wsr.Folder:Before{ content: "F";}
|
||||
.wsr.Archive:Before{content: "Z";}
|
||||
.wsr.Movie:Before{content: "M";}
|
||||
.wsr.Code:Before{content: "H";}
|
||||
.wsr.Text:Before{content: "T";}
|
||||
.wsr.Terminal:Before{content: "_";}
|
||||
.wsr.Attachment:Before{content: "A";}
|
||||
.wsr.Logout:Before{ content: "X";}
|
||||
.wsr.Text:Before{content: "T";}
|
||||
.wsr.Indent:Before{ content: "n";}
|
||||
.wsr.Outdent:Before{ content: "o"; }
|
||||
.wsr.List:Before{ content: "p";}
|
||||
.wsr.NumberList:Before{ content: "q"; }
|
||||
.wsr.Move:Before { content: "~"; }
|
||||
.wsr.User:Before { content: "U"; }
|
||||
.wsr.OpenedLock:Before{ content: "w"; }
|
||||
.wsr.ClosedLock:Before{ content: "x"; }
|
||||
.wsr.PortraitView:Before{ content: "a"; }
|
||||
.wsr.AlbumView:Before{ content: "b"; }
|
||||
.wsr.Center:Before{ content: "`"; }
|
||||
|
||||
/*Gallery navigation icons*/
|
||||
.wsr.ZoomIn:Before{ content: "+"; }
|
||||
.wsr.ZoomOut:Before{ content: "-"; }
|
||||
.wsr.Up:Before{ content: ":"; }
|
||||
.wsr.Down:Before{ content: ";"; }
|
||||
.wsr.Close:Before{ content: "×"; }
|
||||
.wsr.Scale:Before{ content: "&"; }
|
||||
.wsr.Back:Before{ content: "("; }
|
||||
.wsr.Forward:Before{ content: ")"; }
|
||||
.wsr.BackArrow:Before{ content: "<"; }
|
||||
.wsr.ForwardArrow:Before{ content: ">"; }
|
||||
.wsr.Rotate:Before{ content: "*"; }
|
||||
.wsr.CloseX:Before{ content: "'"; }
|
||||
|
||||
|
||||
/*Social networks*/
|
||||
.wsr.Twitter:Before{ content: "'"; }
|
||||
|
||||
|
||||
/*Icons for service sites*/
|
||||
.wsr.Favorite:Before{ content: "R"; }
|
||||
.wsr.Tag:Before{ content: ","; }
|
||||
.wsr.Comment:Before{ content: "c"; }
|
||||
.wsr.Chat:Before{ content: "d"; }
|
||||
.wsr.OpenedChat:Before{ content: "e"; }
|
||||
.wsr.Rating:Before{ content: "u"; }
|
||||
.wsr.MapPin:Before{ content: "?"; }
|
||||
.wsr.Like:Before{ content: "N"; }
|
||||
.wsr.Unlike:Before{ content: "O"; }
|
||||
.wsr.Search:Before{ content: "L"; }
|
||||
.wsr.Reblog:Before{ content: "J"; }
|
||||
.wsr.OpenNewWindow:Before{ content: "D"; }
|
||||
.wsr.Clock:Before{ content: "P"; }
|
||||
.wsr.Link:Before{ content: "K"; }
|
||||
|
||||
/*Other*/
|
||||
.wsr.Mail:Before{ content: "@"; }
|
||||
.wsr.SortUp:Before{ content: "{"; }
|
||||
.wsr.SortDown:Before{ content: "}"; }
|
||||
.wsr.Unfold:Before{ content: "["; }
|
||||
.wsr.Icon:Before{ content: "¹"; }
|
||||
.wsr.List:Before{ content: "²"; }
|
||||
.wsr.ListWithIcons:Before{ content: "³"; }
|
||||
.wsr.Reply:Before{ content: "h"; }
|
||||
.wsr.ReplyAll:Before{ content: "i"; }
|
||||
.wsr.Forward:Before{ content: "j"; }
|
||||
.wsr.Fullscreen:Before{ content: "%"; }
|
||||
.wsr.Done:Before{ content: "."; }
|
||||
.wsr.Approved:Before{ content: "/"; }
|
||||
.wsr.Alert:Before{ content: "W"; }
|
||||
.wsr.Synchronize:Before{ content: "V"; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,13 @@
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="nav-sub-container">
|
||||
<ul id="nav-sub">
|
||||
<li><a href="deleteAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Delete Album</a></li>
|
||||
%if album['Status'] == 'Skipped':
|
||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False">Mark Album as Wanted</a></li>
|
||||
@@ -18,10 +24,7 @@
|
||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True">Try New Version</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
</div>
|
||||
<div class="table_wrapper">
|
||||
<a id="btnBack" class="btnStatus" href="artistPage?ArtistID=${album['ArtistID']}">
|
||||
Back to ${album['ArtistName']}
|
||||
@@ -125,7 +128,7 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
getAlbumInfo("${album['ArtistName']}","${album['AlbumTitle']}","#albumheader .albumArt",3);
|
||||
@@ -155,4 +158,4 @@
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
@@ -3,38 +3,40 @@
|
||||
from headphones import db
|
||||
%>
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
<li><a href="refreshArtist?ArtistID=${artist['ArtistID']}">Refresh Artist</a></li>
|
||||
<li><a href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a></li>
|
||||
<%def name="body()">
|
||||
<div id="nav-sub-container">
|
||||
<ul id="nav-sub">
|
||||
<li><a href="refreshArtist?ArtistID=${artist['ArtistID']}"><span class="wsr Synchronize"></span> Refresh</a></li>
|
||||
<li><a href="deleteArtist?ArtistID=${artist['ArtistID']}"><span class="wsr Close"></span> Delete Artist</a></li>
|
||||
%if artist['Status'] == 'Paused':
|
||||
<li><a href="resumeArtist?ArtistID=${artist['ArtistID']}">Resume Artist</a></li>
|
||||
<li><a href="resumeArtist?ArtistID=${artist['ArtistID']}" ><span class="wsr Clock"></span> Resume</a></li>
|
||||
%else:
|
||||
<li><a href="pauseArtist?ArtistID=${artist['ArtistID']}">Pause Artist</a></li>
|
||||
<li><a href="pauseArtist?ArtistID=${artist['ArtistID']}"><span class="wsr Clock"></span> Pause</a></li>
|
||||
%endif
|
||||
%if artist['IncludeExtras']:
|
||||
<li><a href="removeExtras?ArtistID=${artist['ArtistID']}">Remove Extras</a></li>
|
||||
<li><a href="removeExtras?ArtistID=${artist['ArtistID']}"><span class="wsr Tag"></span> Remove Extras</a></li>
|
||||
%else:
|
||||
<li><a href="getExtras?ArtistID=${artist['ArtistID']}">Get Extras</a></li>
|
||||
<li><a href="getExtras?ArtistID=${artist['ArtistID']}"><span class="wsr Tag"></span> Get Extras</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="paddingheader">
|
||||
<h1>${artist['ArtistName']}</h1>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h3><span>W</span>Album information for this artist is currently being loaded</h3>
|
||||
%endif
|
||||
<ul id="switchViews">
|
||||
<li class="active"><span class="web-symbol">¹</span></li>
|
||||
<ul id="nav-view">
|
||||
<li><span class="wsr Icon"></span> Viewport</li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="ajax" action="markAlbums" method="get">
|
||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||
<p class="indented">Mark selected albums as
|
||||
<div class="artist-bio-container">
|
||||
<div class="artist-art">
|
||||
<img src="" alt="${artist['ArtistName']}" />
|
||||
</div>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h1><span class="wsr Loading loader"></span> Loading albums informations...</h1>
|
||||
%else:
|
||||
<h1>${artist['ArtistName']}</h1>
|
||||
%endif
|
||||
<span class="artist-bio"></span>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<p class="indented">Mark as:
|
||||
<select class="styled" name="action">
|
||||
<option value="Wanted">Wanted</option>
|
||||
<option value="WantedNew">Wanted (new only)</option>
|
||||
@@ -47,24 +49,27 @@
|
||||
%for album in albums:
|
||||
<%
|
||||
%>
|
||||
<div class="album-container">
|
||||
<div class="album-image-container">
|
||||
<input class="album-select" type="checkbox" name="${album['AlbumID']}" />
|
||||
<img class="album-image" />
|
||||
<div class="image-container">
|
||||
<div class="image-box ${album['Status']}">
|
||||
<div class="image-tag ${album['Status']}"></div>
|
||||
<img />
|
||||
<div class="image-actions">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Like"><span class="wsr Like"></span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="wsr" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unlike"><span class="wsr Unlike"></span></a>
|
||||
%else:
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
<a class="wsr List" href="albumPage?AlbumID=${album['AlbumID']}" title="View"></a>
|
||||
</div>
|
||||
<input class="image-select" type="checkbox" name="${album['AlbumID']}" />
|
||||
</div>
|
||||
<div class="album-actions">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
<div class="album-info">
|
||||
<b>${artist['ArtistName']}</b> <br />
|
||||
<span>${album['AlbumTitle']}</span>
|
||||
|
||||
<div class="image-info">
|
||||
<b style="display: none;">${artist['ArtistName']}</b>
|
||||
<span><a href="albumPage?AlbumID=${album['AlbumID']}" title="${album['AlbumID']}">${album['AlbumTitle']}</a></span>
|
||||
</div>
|
||||
</div>
|
||||
%endfor
|
||||
@@ -114,18 +119,18 @@
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"></td>
|
||||
<td id="select"><input class="styled" type="checkbox" name="${album['AlbumID']}" class="checkbox" /></th>
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<a href="albumPage?AlbumID=${album['AlbumID']}" title="${album['AlbumID']}">
|
||||
<div class="status">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
<a class="wsr" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
</a>
|
||||
@@ -159,29 +164,14 @@
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script>
|
||||
function getAlbumInfoGrid() {
|
||||
$(".album-container").each(function() {
|
||||
$(this).fadeIn("slow", function(){
|
||||
var element = $(this).find("img.album-image");
|
||||
var artistname = $(this).find(".album-info b").text();
|
||||
var albumname = $(this).find(".album-info span").text();
|
||||
getAlbumInfo(artistname,albumname,element,2);
|
||||
});
|
||||
});
|
||||
}
|
||||
$(document).ready(function(){
|
||||
//ListView
|
||||
getAlbumInfoGrid();
|
||||
//Load Art
|
||||
getAlbumArt();
|
||||
getArtistArt();
|
||||
//GridView
|
||||
$("#gridView").show();
|
||||
$("#listView").hide();
|
||||
enit();
|
||||
$("#switchViews li").click(function(){
|
||||
$("#gridView").toggle();
|
||||
$("#listView").toggle();
|
||||
var text = $(this).children("span").text() == '¹' ? '²' : '¹';
|
||||
enit();
|
||||
});
|
||||
|
||||
$('#album_table').dataTable({
|
||||
"aoColumns": [
|
||||
@@ -191,17 +181,38 @@
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
null
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ artist per page",
|
||||
"sLengthMenu":"Show _MENU_ albums per page",
|
||||
"sEmptyTable": "No artist information available",
|
||||
"sInfo":"Showing _TOTAL_ artist",
|
||||
"sInfoEmpty":"No artist found",
|
||||
"sInfoFiltered":"(Filtered from _MAX_ total artist)"},
|
||||
"sInfo":"Showing _TOTAL_ albums",
|
||||
"sInfoEmpty":"No album found",
|
||||
"sInfoFiltered":"(Filtered from _MAX_ total albums)"},
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||
});
|
||||
});
|
||||
function getArtistArt() {
|
||||
$(".artist-bio-container").each(function(){
|
||||
var artistid = "${artist['ArtistId']}";
|
||||
var artistname = $(this).find("img").attr("title");
|
||||
var image = $(this).find("img");
|
||||
if ( !image.hasClass('done') ) {
|
||||
image.addClass('done');
|
||||
getArtistInfo(artistname,image,3,artistid);
|
||||
}
|
||||
});
|
||||
}
|
||||
function getAlbumArt() {
|
||||
$(".image-container").each(function() {
|
||||
$(this).fadeIn("slow", function(){
|
||||
var element = $(this).find("img");
|
||||
var artistname = $(this).find(".image-info b").text();
|
||||
var albumname = $(this).find(".image-info span").text();
|
||||
getAlbumInfo(artistname,albumname,element,2);
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</%def>
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
<%inherit file="base.html"/>
|
||||
<%!
|
||||
from headphones import db
|
||||
%>
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
<li><a href="refreshArtist?ArtistID=${artist['ArtistID']}">Refresh Artist</a></li>
|
||||
<li><a href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a></li>
|
||||
%if artist['Status'] == 'Paused':
|
||||
<li><a href="resumeArtist?ArtistID=${artist['ArtistID']}">Resume Artist</a></li>
|
||||
%else:
|
||||
<li><a href="pauseArtist?ArtistID=${artist['ArtistID']}">Pause Artist</a></li>
|
||||
%endif
|
||||
%if artist['IncludeExtras']:
|
||||
<li><a href="removeExtras?ArtistID=${artist['ArtistID']}">Remove Extras</a></li>
|
||||
%else:
|
||||
<li><a href="getExtras?ArtistID=${artist['ArtistID']}">Get Extras</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="paddingheader">
|
||||
<h1>${artist['ArtistName']}</h1>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h3><span>W</span>Album information for this artist is currently being loaded</h3>
|
||||
%endif
|
||||
</div>
|
||||
<form class="ajax" action="markAlbums" method="get">
|
||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||
<p class="indented">Mark selected albums as
|
||||
<select class="styled" name="action">
|
||||
<option value="Wanted">Wanted</option>
|
||||
<option value="WantedNew">Wanted (new only)</option>
|
||||
<option value="Skipped">Skipped</option>
|
||||
<option value="Downloaded">Downloaded</option>
|
||||
</select>
|
||||
<input type="submit" value="GO">
|
||||
</p>
|
||||
%for album in albums:
|
||||
<%
|
||||
%>
|
||||
<div class="album-container">
|
||||
<input type="checkbox" name="${album['AlbumID']}" />
|
||||
<img class="image" />
|
||||
<div class="album-actions">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
<div>
|
||||
<b>${artist['ArtistName']}</b> <br />
|
||||
${album['AlbumTitle']}
|
||||
</div>
|
||||
</div>
|
||||
%endfor
|
||||
<table class="display" id="album_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="select"><input id="mainCheckbox" name="head" type="checkbox" onClick="toggle(this);headToggle();" /></th>
|
||||
<th id="albumart"></th>
|
||||
<th id="albumname">Name</th>
|
||||
<th id="reldate">Date</th>
|
||||
<th id="type">Type</th>
|
||||
<th id="have">Have</th>
|
||||
<th id="bitrate">Bitrate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for album in albums:
|
||||
<%
|
||||
if album['Status'] == 'Skipped':
|
||||
grade = 'Z'
|
||||
elif album['Status'] == 'Wanted':
|
||||
grade = 'X'
|
||||
elif album['Status'] == 'Snatched':
|
||||
grade = 'C'
|
||||
else:
|
||||
grade = 'A'
|
||||
|
||||
myDB = db.DBConnection()
|
||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']]))
|
||||
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
|
||||
avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if avgbitrate:
|
||||
bitrate = str(int(avgbitrate)/1000) + ' kbps'
|
||||
else:
|
||||
bitrate = ''
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"></td>
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<a href="albumPage?AlbumID=${album['AlbumID']}" title="${album['AlbumID']}">
|
||||
<div class="status">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
||||
<td id="reldate">${album['ReleaseDate']}</td>
|
||||
<td id="type">${album['Type']}</td>
|
||||
<td id="have">
|
||||
<div class="progress-container" title="You have ${havetracks} of a total ${totaltracks}">
|
||||
<span title="${percent}">${percent}</span>
|
||||
<div style="width:${percent}%">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td id="bitrate">${bitrate}</td>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</%def>
|
||||
|
||||
<%def name="headIncludes()">
|
||||
|
||||
%if artist['Status'] == 'Loading':
|
||||
<meta http-equiv="refresh" content="5">
|
||||
%endif
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script>
|
||||
|
||||
function getArtistArt() {
|
||||
$(".album-container").each(function() {
|
||||
var id = $(this).children("input").attr("name");
|
||||
var artist = $("#paddingheader h1").text();
|
||||
var image = $(this).children("img");
|
||||
if ( !image.hasClass("done") ) {
|
||||
getArtistInfo(artist,image,2,id);
|
||||
image.addClass("done");
|
||||
$(this).fadeIn();
|
||||
}
|
||||
});
|
||||
}
|
||||
$(document).ready(function(){
|
||||
getArtistArt();
|
||||
$('#album_table').dataTable({
|
||||
"aoColumns": [
|
||||
{ "bSortable": false},
|
||||
{ "bSortable": false},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ artist per page",
|
||||
"sEmptyTable": "No artist information available",
|
||||
"sInfo":"Showing _TOTAL_ artist",
|
||||
"sInfoEmpty":"No artist found",
|
||||
"sInfoFiltered":"(Filtered from _MAX_ total artist)"},
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</%def>
|
||||
@@ -1,190 +0,0 @@
|
||||
<%inherit file="base.html"/>
|
||||
<%!
|
||||
from headphones import db
|
||||
%>
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
<li><a href="refreshArtist?ArtistID=${artist['ArtistID']}">Refresh Artist</a></li>
|
||||
<li><a href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a></li>
|
||||
%if artist['Status'] == 'Paused':
|
||||
<li><a href="resumeArtist?ArtistID=${artist['ArtistID']}">Resume Artist</a></li>
|
||||
%else:
|
||||
<li><a href="pauseArtist?ArtistID=${artist['ArtistID']}">Pause Artist</a></li>
|
||||
%endif
|
||||
%if artist['IncludeExtras']:
|
||||
<li><a href="removeExtras?ArtistID=${artist['ArtistID']}">Remove Extras</a></li>
|
||||
%else:
|
||||
<li><a href="getExtras?ArtistID=${artist['ArtistID']}">Get Extras</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="paddingheader">
|
||||
<h1>${artist['ArtistName']}</h1>
|
||||
%if artist['Status'] == 'Loading':
|
||||
<h3><span>W</span>Album information for this artist is currently being loaded</h3>
|
||||
%endif
|
||||
</div>
|
||||
<form class="ajax" action="markAlbums" method="get">
|
||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||
<p class="indented">Mark selected albums as
|
||||
<select class="styled" name="action">
|
||||
<option value="Wanted">Wanted</option>
|
||||
<option value="WantedNew">Wanted (new only)</option>
|
||||
<option value="Skipped">Skipped</option>
|
||||
<option value="Downloaded">Downloaded</option>
|
||||
</select>
|
||||
<input type="submit" value="GO">
|
||||
</p>
|
||||
%for album in albums:
|
||||
<%
|
||||
%>
|
||||
<div class="album-container">
|
||||
<input type="checkbox" name="${album['AlbumID']}" />
|
||||
<img class="image" />
|
||||
<div class="album-actions">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
<div>
|
||||
<b>${artist['ArtistName']}</b> <br />
|
||||
${album['AlbumTitle']}
|
||||
</div>
|
||||
</div>
|
||||
%endfor
|
||||
<table class="display" id="album_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="select"><input id="mainCheckbox" name="head" type="checkbox" onClick="toggle(this);headToggle();" /></th>
|
||||
<th id="albumart"></th>
|
||||
<th id="albumname">Name</th>
|
||||
<th id="reldate">Date</th>
|
||||
<th id="type">Type</th>
|
||||
<th id="have">Have</th>
|
||||
<th id="bitrate">Bitrate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for album in albums:
|
||||
<%
|
||||
if album['Status'] == 'Skipped':
|
||||
grade = 'Z'
|
||||
elif album['Status'] == 'Wanted':
|
||||
grade = 'X'
|
||||
elif album['Status'] == 'Snatched':
|
||||
grade = 'C'
|
||||
else:
|
||||
grade = 'A'
|
||||
|
||||
myDB = db.DBConnection()
|
||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']]))
|
||||
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
|
||||
avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if avgbitrate:
|
||||
bitrate = str(int(avgbitrate)/1000) + ' kbps'
|
||||
else:
|
||||
bitrate = ''
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"></td>
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<a href="albumPage?AlbumID=${album['AlbumID']}" title="${album['AlbumID']}">
|
||||
<div class="status">
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Mark Wanted"><span>O</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark Wanted"><span>N</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try new"><span>J</span></a>
|
||||
%endif
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
||||
<td id="reldate">${album['ReleaseDate']}</td>
|
||||
<td id="type">${album['Type']}</td>
|
||||
<td id="have">
|
||||
<div class="progress-container" title="You have ${havetracks} of a total ${totaltracks}">
|
||||
<span title="${percent}">${percent}</span>
|
||||
<div style="width:${percent}%">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td id="bitrate">${bitrate}</td>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</%def>
|
||||
|
||||
<%def name="headIncludes()">
|
||||
|
||||
%if artist['Status'] == 'Loading':
|
||||
<meta http-equiv="refresh" content="5">
|
||||
%endif
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script>
|
||||
|
||||
function getArtistArt() {
|
||||
$(".album-container").each(function() {
|
||||
var id = $(this).children("input").attr("name");
|
||||
var artist = $("#paddingheader h1").text();
|
||||
var image = $(this).children("img");
|
||||
if ( !image.hasClass("done") ) {
|
||||
getArtistInfo(artist,image,2,id);
|
||||
image.addClass("done");
|
||||
$(this).fadeIn();
|
||||
}
|
||||
});
|
||||
}
|
||||
$(document).ready(function(){
|
||||
getArtistArt();
|
||||
$('#album_table').dataTable({
|
||||
"aoColumns": [
|
||||
{ "bSortable": false},
|
||||
{ "bSortable": false},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ artist per page",
|
||||
"sEmptyTable": "No artist information available",
|
||||
"sInfo":"Showing _TOTAL_ artist",
|
||||
"sInfoEmpty":"No artist found",
|
||||
"sInfoFiltered":"(Filtered from _MAX_ total artist)"},
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</%def>
|
||||
@@ -22,6 +22,7 @@
|
||||
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
||||
<!--Main Stylesheet-->
|
||||
<link rel="stylesheet" href="interfaces/brink/css/style.css">
|
||||
<link rel="stylesheet" href="interfaces/brink/css/websymbol.css">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="interfaces/brink/css/theme/default.css">
|
||||
|
||||
@@ -45,7 +46,7 @@
|
||||
|
||||
<!--Datatables-->
|
||||
<script type="text/javascript" src="/js/libs/jquery.dataTables.min.js"></script>
|
||||
<link rel="stylesheet" href="interfaces/brink/css/jquery.dataTables_themeroller.css">
|
||||
<link rel="stylesheet" href="interfaces/brink/CSS/jquery.dataTables_themeroller.css">
|
||||
|
||||
${next.headIncludes()}
|
||||
${next.javascriptIncludes()}
|
||||
@@ -58,53 +59,52 @@
|
||||
<script src="js/libs/modernizr-1.7.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
% if not headphones.CURRENT_VERSION:
|
||||
<script type="text/javascript">
|
||||
noty({
|
||||
"text":"You're running an unknown version of Headphones.<br />It's recommended that you update now!",
|
||||
"type":"success",
|
||||
buttons: [
|
||||
{type: 'button green', text: 'Update', click: function($noty) {
|
||||
$(this).click(function(){
|
||||
document.location.href='update';
|
||||
});
|
||||
$noty.close
|
||||
noty({force: true, text: 'Headphones is now updating, please be patient', type: 'success'});
|
||||
}
|
||||
},
|
||||
{type: 'button pink', text: 'Cancel', click: function($noty) {
|
||||
$noty.close();
|
||||
noty({force: true, text: 'You can update anytime from the tools menu', type: 'information'});
|
||||
}
|
||||
}
|
||||
],
|
||||
closable: false,
|
||||
timeout: false
|
||||
});
|
||||
</script>
|
||||
$("#commits-behind").fadeIn('slow').text("New version available");
|
||||
% elif headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.INSTALL_TYPE != 'win':
|
||||
<script>
|
||||
noty({
|
||||
"text":"A newer version is available."
|
||||
+ "<br />You're ${headphones.COMMITS_BEHIND} commits behind"
|
||||
+ "<a href='http://github.com/rembo10/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}'>Version</a>"
|
||||
+ "<a href='update'>Update</a>",
|
||||
"type":"success"
|
||||
});
|
||||
$(document).ready(function(){
|
||||
$("#commitsBehind").text("Update (${headphones.COMMITS_BEHIND})")
|
||||
});
|
||||
</script>
|
||||
$("#commits-behind").fadeIn('slow').text("(${headphones.COMMITS_BEHIND})");
|
||||
% else:
|
||||
$("#commits-behind").hide()
|
||||
% endif
|
||||
});
|
||||
</script>
|
||||
|
||||
<div class="custom_container"></div>
|
||||
<table id="table_body">
|
||||
<tr>
|
||||
<td id="header" colspan="2">
|
||||
<div id="logo">
|
||||
<img src="/images/headphoneslogo.png" alt="headphones" />
|
||||
</div>
|
||||
|
||||
<ul id="nav">
|
||||
<li><a href="home" accesskey="1">
|
||||
<span class="wsr User"></span> Artist
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="upcoming" accesskey="2">
|
||||
<span class="wsr">N</span> Upcoming
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="extras" accesskey="3">
|
||||
<span class="wsr">R</span> Suggestions
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="manage" accesskey="4">
|
||||
<span class="wsr">_</span> Manage
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="history" accesskey="5">
|
||||
<span class="wsr">Z</span> History
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="logs" accesskey="6">
|
||||
<span class="wsr">a</span> Logs
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="config" accesskey="7">
|
||||
<span class="wsr">S</span> Settings
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="searchbar">
|
||||
<form action="search" method="get">
|
||||
<select name="type">
|
||||
@@ -112,46 +112,13 @@
|
||||
<option value="album">Album</option>
|
||||
</select>
|
||||
<input type="text" value="" name="name" accesskey="s" placeholder="Search..." />
|
||||
<input class="web-symbol" type="submit" value="L"/>
|
||||
<input class="wsr" type="submit" value="L" />
|
||||
</form>
|
||||
</div>
|
||||
${next.headerIncludes()}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="nav-container">
|
||||
<ul id="nav">
|
||||
<li><a href="home" accesskey="1">
|
||||
<span>U</span>Home
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="upcoming" accesskey="2">
|
||||
<span>N</span>Upcoming
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="extras" accesskey="3">
|
||||
<span>R</span>Suggestions
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="manage" accesskey="4">
|
||||
<span>_</span>Manage
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="history" accesskey="5">
|
||||
<span>Z</span>History
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="logs" accesskey="6">
|
||||
<span>a</span>Logs
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="config" accesskey="7">
|
||||
<span>S</span>Settings
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div></div>
|
||||
</td>
|
||||
<td id="content-container">
|
||||
<div id="main" class="main">
|
||||
${next.body()}
|
||||
@@ -161,14 +128,16 @@
|
||||
<tr id="footer" >
|
||||
<td colspan="2">
|
||||
<div class="btn left">
|
||||
<a href="forceSearch"><span>I</span>Wanted Albums</a>
|
||||
<a href="forceUpdate"><span>U</span>Active Artists</a>
|
||||
<a href="forcePostProcess"><span>J</span>Post-Process</a>
|
||||
<a href="checkGithub"><span>V</span>Update<label id="commits"></label></a>
|
||||
<a href="forceSearch"><span class="wsr">I</span> Wanted Albums</a>
|
||||
<a href="forceUpdate"><span class="wsr">U</span> Active Artists</a>
|
||||
<a href="forcePostProcess"><span class="wsr">J</span> Post-Process</a>
|
||||
<a href="checkGithub" onclick="javascript:return confirm('Do you wish to Update Headphones now?')"><span class="wsr">V</span> Update
|
||||
<span id="commits-behind"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn right">
|
||||
<a href="restart" onclick="javascript:return confirm('Restart HP?')"><span>J</span>Restart</a>
|
||||
<a href="shutdown" onclick="javascript:return confirm('Shutdown HP?')"><span>X</span>Shut Down</a>
|
||||
<a href="restart" onclick="javascript:return confirm('Do you wish to Restart Headphones?')"><span class="wsr">J</span> Restart</a>
|
||||
<a href="shutdown" onclick="javascript:return confirm('Do you wish to Shutdown Headphones?')"><span class="wsr">X</span> Shut Down</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
+179
-186
@@ -3,20 +3,9 @@ body {
|
||||
padding: 0px;
|
||||
font-family: Verdana, Tahoma, Arial, sans-serif;
|
||||
overflow: hidden;
|
||||
font-size: 100%;}
|
||||
|
||||
@font-face{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
src: url('../fonts/websymbols-regular-webfont.eot');
|
||||
src: url('../fonts/websymbols-regular-webfont.eot?#iefix') format('embedded-opentype'),
|
||||
url('../fonts/websymbols-regular-webfont.woff') format('woff'),
|
||||
url('../fonts/websymbols-regular-webfont.ttf') format('truetype'),
|
||||
url('../fonts/websymbols-regular-webfont.svg#WebSymbolsRegular') format('svg');
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
.web-symbol{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
}
|
||||
/*
|
||||
* Univarsal
|
||||
* */
|
||||
@@ -34,9 +23,6 @@ body {
|
||||
* Links Styles
|
||||
* */
|
||||
|
||||
a span{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
}
|
||||
a:link {
|
||||
color: rgb(200,200,200);
|
||||
text-decoration: none;
|
||||
@@ -54,19 +40,6 @@ a:active {/*colour in NN4.xx is red*/
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.symbol-link a {
|
||||
color: #fff;
|
||||
float: right;
|
||||
}
|
||||
.symbol-link a span{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
display: inline;
|
||||
}
|
||||
.symbol-link a p {
|
||||
display: inline;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#container { width: 100%; margin: auto; }
|
||||
h1,h2,h3,h4,h5,h6{padding-left: 10px,}
|
||||
|
||||
@@ -86,16 +59,6 @@ h4 { padding: .6px; font-size: 0.8em; color: rgba(0,0,0,0.6); text-shadow: 1px 1
|
||||
|
||||
p { color: rgb(160,160,160); text-shadow: 1px 1px 1px #000; margin-top: 8px; margin-bottom: 8px; }
|
||||
|
||||
#paddingheader { width: 100%; border-bottom: 2px solid rgb(0,145,255); background: #000; }
|
||||
#switchViews { float: left; list-style-type: none; margin: 0; padding: 0; border: 1px solid rgba(255,255,255,0.1); }
|
||||
#switchViews li{ border-right: 1px solid rgba(255,255,255,0.1); padding: 5px; margin: 0; line-height: 25px; cursor: pointer; display: inline-block;}
|
||||
#switchViews:last-child{
|
||||
border-right: 0;
|
||||
}
|
||||
#switchViews li:hover{
|
||||
background: rgba(0,145,255,0.1);
|
||||
}
|
||||
|
||||
/*#table_body*/
|
||||
#table_body{
|
||||
width: 100%;
|
||||
@@ -143,129 +106,107 @@ div.custom_container /*Makes use of noty*/
|
||||
{
|
||||
width: 320px;
|
||||
position: fixed;
|
||||
bottom: 25px;
|
||||
top: 25px;
|
||||
right: 25px;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
/*Menu*/
|
||||
#nav-container{
|
||||
vertical-align: top;
|
||||
width: 200px;
|
||||
border-right: 1px solid rgba(0,0,0,0.1);
|
||||
/*Commits*/
|
||||
span#commits-behind {
|
||||
position: relative;
|
||||
}
|
||||
span#commits-behind {
|
||||
position: absolute;
|
||||
background-color: red;
|
||||
margin-top: -12px;
|
||||
padding: 2px;
|
||||
border: 1px solid white;
|
||||
text-align: center;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/*Menu*/
|
||||
ul#nav
|
||||
{
|
||||
list-style-type: none;
|
||||
width: 200px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
float: left;
|
||||
height: 100%;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
|
||||
ul#nav li
|
||||
{
|
||||
display: block;
|
||||
width: 100%;
|
||||
float: left;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.2);
|
||||
border-top: 1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
#nav li a{
|
||||
color: #7597A8;
|
||||
padding-left: 10px;
|
||||
line-height: 2em;
|
||||
display: block;
|
||||
}
|
||||
#nav li a span{
|
||||
font-family: 'WebSymbolsRegular';
|
||||
display: inline-block;
|
||||
width: 30px;
|
||||
line-height: 3em;
|
||||
font-size: 1em;
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
}
|
||||
#nav li a{
|
||||
ul#nav li a:hover{
|
||||
background-color: rgba(8,160,255,0.1);
|
||||
color: rgba(0,145,255,0.8);
|
||||
text-shadow: 1px 1px rgba(0,0,0,0.9);
|
||||
}
|
||||
|
||||
ul#nav li:hover {
|
||||
background: -moz-linear-gradient(top, rgba(80,80,80,0.5) 0%, rgba(40,40,40,0.5) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(80,80,80,0.5)), color-stop(100%,rgba(40,40,40,0.5))); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(80,80,80,0.5) 0%,rgba(40,40,40,0.5) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(80,80,80,0.5) 0%,rgba(40,40,40,0.5) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(80,80,80,0.5) 0%,rgba(40,40,40,0.5) 100%); /* IE10+ */
|
||||
background: linear-gradient(top, rgba(80,80,80,0.5) 0%,rgba(40,40,40,0.5) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#80505050', endColorstr='#80282828',GradientType=0 ); /* IE6-9 */
|
||||
ul#nav li a{
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
display: block;
|
||||
color: rgba(0,0,0,0.9);
|
||||
text-shadow: 1px 1px rgba(0,145,255,0.2);
|
||||
}
|
||||
|
||||
#nav li.selected,
|
||||
#nav li:hover.selected
|
||||
{
|
||||
background: rgb(62,80,89); /* Old browsers */
|
||||
background: -moz-linear-gradient(top, rgba(62,80,89,1) 1%, rgba(53,70,76,1) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,rgba(62,80,89,1)), color-stop(100%,rgba(53,70,76,1))); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(62,80,89,1) 1%,rgba(53,70,76,1) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(62,80,89,1) 1%,rgba(53,70,76,1) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(62,80,89,1) 1%,rgba(53,70,76,1) 100%); /* IE10+ */
|
||||
background: linear-gradient(top, rgba(62,80,89,1) 1%,rgba(53,70,76,1) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3e5059', endColorstr='#35464c',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
|
||||
ul#nav li.selected span,
|
||||
ul#nav li.selected a,
|
||||
ul#nav li.selected a:hover{color: #ffffff;}
|
||||
ul#nav li a:hover { color: #ffffff; }
|
||||
|
||||
/* *
|
||||
* Sub navigation
|
||||
*/
|
||||
div#subhead_container
|
||||
{
|
||||
height: 40px;
|
||||
float:left;
|
||||
|
||||
#nav-sub-container {
|
||||
width: 100%;
|
||||
border-bottom: 1px solid rgb(0,145,255);
|
||||
background: #000;
|
||||
height: 2.3em;
|
||||
}
|
||||
|
||||
ul#subhead_menu
|
||||
{
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
ul#subhead_menu li
|
||||
{
|
||||
float: left;
|
||||
#nav-sub-container ul li {
|
||||
font-size: .8em;
|
||||
text-align: center;
|
||||
line-height: 2.8em;
|
||||
border-right: 1px solid rgba(255,255,255,0.1);
|
||||
border-left: 1px solid rgba(0,0,0,0.3);
|
||||
display: inline;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
ul#subhead_menu li:hover
|
||||
{
|
||||
background-image: linear-gradient(bottom, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.4) 100%);
|
||||
background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.4) 100%);
|
||||
background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.4) 100%);
|
||||
background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.4) 100%);
|
||||
background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.4) 100%);
|
||||
border-right: 1px solid rgba(0,0,0,0.3);
|
||||
border-left: 1px solid rgba(255,255,255,0.1);
|
||||
ul#nav-sub { float: left; }
|
||||
ul#nav-view { float:right; }
|
||||
|
||||
ul#nav-sub,
|
||||
ul#nav-view {
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
ul#subhead_menu li a {
|
||||
ul#nav-view li,
|
||||
ul#nav-sub li {
|
||||
float: left;
|
||||
border-right: 1px solid rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
ul#nav-view li,
|
||||
ul#nav-sub li a {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 0 10px 0 10px;
|
||||
color: #7597A8;
|
||||
font-size: 0.8em;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
color: rgba(255,255,255,.3);
|
||||
}
|
||||
ul#subhead_menu li a:hover { color: rgb(255,255,255); font-weight: bold; }
|
||||
/*
|
||||
* end Sub navigation
|
||||
* */
|
||||
|
||||
#content-container{
|
||||
ul#nav-view li:hover,
|
||||
ul#nav-sub li:hover a {
|
||||
color: rgb(0,145,255);
|
||||
border-bottom: 2px solid rgb(0,145,255);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
ul#content-container{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@@ -388,8 +329,6 @@ table#artist_table th#name { text-align: left; min-width: 150px; }
|
||||
table#artist_table th#album { text-align: left; min-width: 100px; }
|
||||
table#artist_table th#have { text-align: center; min-width: 50px; }
|
||||
|
||||
table#artist_table tr { border-top: 1px solid rgba(255,255,255,0.2);border-bottom: 1px solid rgba(0,0,0,0.2); }
|
||||
|
||||
table#artist_table td#select { vertical-align: middle; text-align: center; }
|
||||
table#artist_table td#albumart { vertical-align: middle; text-align: left; }
|
||||
table#artist_table td#name { vertical-align: middle; text-align: left; }
|
||||
@@ -406,62 +345,114 @@ table#album_table th#status {vertical-align: middle; width: 175px; text-align: l
|
||||
table#album_table th#type {vertical-align: middle; width: 175px; text-align: left; min-width: 60px; max-width: 100px; }
|
||||
table#album_table th#bitrate {vertical-align: middle; text-align: left; min-width: 60px; }
|
||||
/* Album tabledata */
|
||||
table#album_table tr { border-top: 1px solid rgba(255,255,255,0.2); border-bottom: 1px solid rgba(0,0,0,0.2); }
|
||||
table#album_table td#select { vertical-align: middle; text-align: left; }
|
||||
table#album_table td#albumart { vertical-align: middle; text-align: left; }
|
||||
/*Artist Bio*/
|
||||
.artist-bio-container{
|
||||
width: 100%;
|
||||
height: 240px;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
position: relative;
|
||||
}
|
||||
.artist-bio-container .artist-art{
|
||||
width: 240px;
|
||||
max-height: 240px;
|
||||
float: left;
|
||||
margin: 10px;
|
||||
box-shadow: 0 0 6px #000;
|
||||
-moz-box-shadow: 0 0 6px #000;
|
||||
-webkit-box-shadow: 0 0 6px #000;
|
||||
-o-box-shadow: 0 0 6px #000;
|
||||
overflow: hidden;
|
||||
}
|
||||
.artist-bio-container .artist-art img{
|
||||
width: 100%;
|
||||
}
|
||||
.artist-bio-container .artist-bio{
|
||||
float: left;
|
||||
font-size: .8em;
|
||||
display: block;
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.album-container {
|
||||
/*Grid View Artist*/
|
||||
.image-container {
|
||||
position: relative;
|
||||
display: none;
|
||||
float: left;
|
||||
width: 126px;
|
||||
margin: 10px 10px 10px 10px;
|
||||
}
|
||||
.album-container .album-image-container{
|
||||
height: 126px;
|
||||
height: 126px;
|
||||
position: relative;
|
||||
.image-tag {
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 10px;
|
||||
width: .6em;
|
||||
height: 1.2em;
|
||||
border-radius: 0 0 2px 2px;
|
||||
box-shadow: 1px 2px 2px #000;
|
||||
display: none;
|
||||
}
|
||||
.album-container .album-image-container .album-image {
|
||||
.image-tag.Wanted {
|
||||
background-color: rgb(0,175,255);
|
||||
display: block;
|
||||
}
|
||||
.image-tag.Downloaded {
|
||||
background-color: #5DD345;
|
||||
display: block;
|
||||
}
|
||||
.image-container .image-box{
|
||||
height: 126px;
|
||||
width: 126px;
|
||||
position: relative;
|
||||
box-shadow: 0 0 6px #000;
|
||||
-moz-box-shadow: 0 0 6px #000;
|
||||
-webkit-box-shadow: 0 0 6px #000;
|
||||
overflow: hidden;
|
||||
}
|
||||
.image-container .image-box img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
min-height: 100%;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
z-index: 1;
|
||||
border: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.album-container input {
|
||||
box-shadow: 0 0 6px #000;
|
||||
-moz-box-shadow: 0 0 6px #000;
|
||||
-webkit-box-shadow: 0 0 6px #000;
|
||||
.image-container input {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
z-index: 2;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
text-align: right;
|
||||
}
|
||||
.album-container input:checked {
|
||||
.image-container input:checked {
|
||||
content: "";
|
||||
background: rgba(0,0,0,0.1);
|
||||
box-shadow: 0 0 10px rgb(0,145,255);
|
||||
-moz-box-shadow: 0 0 10px rgb(0,145,255);
|
||||
-webkit-box-shadow: 0 0 10px rgb(0,145,255);
|
||||
}
|
||||
.album-container .album-actions {
|
||||
.image-container .image-actions {
|
||||
display: none;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 4;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
font-size: 1.3em;
|
||||
line-height: 26px;
|
||||
height: 20%;
|
||||
font-size: 1em;
|
||||
line-height: 1.5em;
|
||||
text-align: center;
|
||||
background-color: rgba(0,0,0,0.8);
|
||||
border-radius: 0em 0em 0.5em 0.5em;
|
||||
-moz-border-radius: 0em 0em 0.5em 0.5em;
|
||||
-webkit-border-radius: 0em 0em 0.5em 0.5em;
|
||||
-o-border-radius: 0em 0em 0.5em 0.5em;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
.album-container .album-info{
|
||||
.image-container:hover .image-actions{
|
||||
display: block;
|
||||
}
|
||||
.image-container .image-info{
|
||||
text-align: left;
|
||||
font-size: 0.7em;
|
||||
position: relative;
|
||||
@@ -471,41 +462,44 @@ table#album_table td#albumart { vertical-align: middle; text-align: left; }
|
||||
height: 40px;
|
||||
text-shadow: 1px 1px 2px #000;
|
||||
overflow: hidden;
|
||||
border-bottom: 1px solid rgba(0,145,255,0.1);
|
||||
border-bottom: 1px solid rgba(0,0,0,0.1);
|
||||
}
|
||||
/* Album art image sizes */
|
||||
.album-art-small
|
||||
.album-art-small
|
||||
{
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
position: relative;
|
||||
width: 61px;
|
||||
height: 61px;
|
||||
float: left;
|
||||
overflow: visible;
|
||||
border: 0;
|
||||
background-color: rgba(0,0,0,0.1);
|
||||
background-color: rgb(255,255,255);
|
||||
position: relative;
|
||||
background: url('images/no-cover.png');
|
||||
text-align: center;
|
||||
box-shadow: 0 0 3px #000;
|
||||
-moz-box-shadow: 0 0 3px #000;
|
||||
-webkit-box-shadow: 0 0 3px #000;
|
||||
-o-box-shadow: 0 0 3px #000;
|
||||
}
|
||||
.album-art-small img { width: 100%; height: 100%; }
|
||||
.album-art-small .album-actions {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
.artist-status div{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
line-height: 3.8em;
|
||||
text-align: center;
|
||||
}
|
||||
.album-art-small img { width: 100%; height: 100%; z-index: 200; border: 0; }
|
||||
|
||||
.status {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: -2em;
|
||||
width: 2em;
|
||||
text-align: center;
|
||||
height: 100%;
|
||||
font-size: 1.2em;
|
||||
background-color: rgba(0,0,0,0.8);
|
||||
text-align: center;
|
||||
z-index: 99;
|
||||
line-height: 1.5em;
|
||||
color: #fff;
|
||||
transition: height 0.2s;
|
||||
-moz-transition: height 0.2s; /* Firefox 4 */
|
||||
-webkit-transition: height 0.2s; /* Safari and Chrome */
|
||||
-o-transition: height 0.2s; /* Opera */
|
||||
vertical-align: middle;
|
||||
}
|
||||
div.status:hover { }
|
||||
.album-art-big
|
||||
{
|
||||
@@ -561,10 +555,11 @@ table#track_table td#name { vertical-align: middle; text-align: left; font-size:
|
||||
table#track_table td#duration { vertical-align: middle; text-align: left; font-size: 12px; overflow: hidden; }
|
||||
table#track_table td#location { vertical-align: middle; text-align: left; font-size: 12px; overflow: hidden; }
|
||||
table#track_table td#bitrate { vertical-align: middle; text-align: left; font-size: 12px; overflow: hidden; }
|
||||
table#history_table { width: 100%; font-size: 12px; }
|
||||
|
||||
|
||||
|
||||
/* History table*/
|
||||
|
||||
table#history_table { width: 100%; font-size: 12px; }
|
||||
table#history_table td#dateadded { vertical-align: middle; text-align: left; min-width: 150px; font-size: 14px; }
|
||||
table#history_table td#filename { vertical-align: middle; text-align: left; min-width: 100px; font-size: 15px; }
|
||||
table#history_table td#size { vertical-align: middle; text-align: left; min-width: 75px; font-size: 14px; }
|
||||
@@ -575,8 +570,6 @@ table#history_table td#action { vertical-align: middle; text-align: left; font-s
|
||||
Log
|
||||
*/
|
||||
table#log_table { width: 100%; }
|
||||
table#log_table td { padding: 3px 5px 3px 10px; }
|
||||
|
||||
table#log_table th#timestamp { text-align: left; min-width: 150px; }
|
||||
table#log_table th#level { text-align: left; min-width: 60px; }
|
||||
table#log_table th#message { text-align: left; min-width: 500px; }
|
||||
|
||||
@@ -11,10 +11,6 @@ body{
|
||||
background: #192126;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#nav-container{
|
||||
background: #222D33;
|
||||
}
|
||||
#header
|
||||
{
|
||||
background: rgb(57,69,81); /* Old browsers */
|
||||
@@ -26,17 +22,6 @@ background: -ms-linear-gradient(top, rgba(57,69,81,1) 0%,rgba(36,43,51,1) 100%);
|
||||
background: linear-gradient(top, rgba(57,69,81,1) 0%,rgba(36,43,51,1) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#394551', endColorstr='#242b33',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
#nav li
|
||||
{
|
||||
background: rgb(45,54,63); /* Old browsers */
|
||||
background: -moz-linear-gradient(top, rgba(45,54,63,1) 0%, rgba(36,43,51,1) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(45,54,63,1)), color-stop(100%,rgba(36,43,51,1))); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(45,54,63,1) 0%,rgba(36,43,51,1) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(45,54,63,1) 0%,rgba(36,43,51,1) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(45,54,63,1) 0%,rgba(36,43,51,1) 100%); /* IE10+ */
|
||||
background: linear-gradient(top, rgba(45,54,63,1) 0%,rgba(36,43,51,1) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2d363f', endColorstr='#242b33',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
#footer{
|
||||
background: rgb(45,54,63); /* Old browsers */
|
||||
background: -moz-linear-gradient(top, rgba(45,54,63,1) 0%, rgba(36,43,51,1) 100%); /* FF3.6+ */
|
||||
@@ -48,31 +33,17 @@ background: linear-gradient(top, rgba(45,54,63,1) 0%,rgba(36,43,51,1) 100%); /*
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2d363f', endColorstr='#242b33',GradientType=0 ); /* IE6-9 */
|
||||
border-top: 1px solid rgb(100,122,132);
|
||||
}
|
||||
#nav li:hover{
|
||||
background: rgb(55,65,76); /* Old browsers */
|
||||
background: -moz-linear-gradient(top, rgba(55,65,76,1) 0%, rgba(45,53,63,1) 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(55,65,76,1)), color-stop(100%,rgba(45,53,63,1))); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, rgba(55,65,76,1) 0%,rgba(45,53,63,1) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, rgba(55,65,76,1) 0%,rgba(45,53,63,1) 100%); /* Opera 11.10+ */
|
||||
background: -ms-linear-gradient(top, rgba(55,65,76,1) 0%,rgba(45,53,63,1) 100%); /* IE10+ */
|
||||
background: linear-gradient(top, rgba(55,65,76,1) 0%,rgba(45,53,63,1) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#37414c', endColorstr='#2d353f',GradientType=0 ); /* IE6-9 */
|
||||
}
|
||||
|
||||
#subhead_container{
|
||||
}
|
||||
/*Tooltip popup Color*/
|
||||
.tooltip span
|
||||
{
|
||||
background-image: linear-gradient(bottom, rgb(219,219,140) 0%, rgb(240,240,178) 100%);
|
||||
background-image: -o-linear-gradient(bottom, rgb(219,219,140) 0%, rgb(240,240,178) 100%);
|
||||
background-image: -moz-linear-gradient(bottom, rgb(219,219,140) 0%, rgb(240,240,178) 100%);
|
||||
background-image: -webkit-linear-gradient(bottom, rgb(219,219,140) 0%, rgb(240,240,178) 100%);
|
||||
background-image: -ms-linear-gradient(bottom, rgb(219,219,140) 0%, rgb(240,240,178) 100%);
|
||||
/*Font Color*/
|
||||
color: #000;
|
||||
}
|
||||
/*Tablehead color*/
|
||||
table.display {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.display tbody tr td{
|
||||
background: #192126; /* Old browsers */
|
||||
background: rgba(0,0,0,.1); /* Old browsers */
|
||||
border-bottom: 1px solid rgba(0,0,0,.1);
|
||||
border-top: 1px solid rgba(0,0,0,.1);
|
||||
padding: 5px 10px 5px 10px;
|
||||
}
|
||||
table.display thead tr th
|
||||
{
|
||||
background: rgb(53,68,76); /* Old browsers */
|
||||
@@ -83,6 +54,16 @@ table.display thead tr th
|
||||
background: -ms-linear-gradient(top, rgba(53,68,76,1) 0%,rgba(44,57,63,1) 100%); /* IE10+ */
|
||||
background: linear-gradient(top, rgba(53,68,76,1) 0%,rgba(44,57,63,1) 100%); /* W3C */
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#35444c', endColorstr='#2c393f',GradientType=0 ); /* IE6-9 */
|
||||
border-top: 1px solid rgba(255,255,255,0.2);
|
||||
border-bottom: 1px solid rgba(0,0,0,0.2);
|
||||
border-collapse: collapse;
|
||||
padding: .4em;
|
||||
font-size: .8em;
|
||||
color: rgba(0,0,0,0.9);
|
||||
text-shadow: 1px 1px rgba(255,255,255,0.1);
|
||||
-moz-text-shadow: 1px 1px rgba(0,145,255,0.1);
|
||||
border-right: 1px solid rgba(0,0,0,.1);
|
||||
border-left: 1px solid rgba(255,255,255,.1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -3,18 +3,15 @@
|
||||
from headphones import helpers
|
||||
%>
|
||||
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
<%def name="body()">
|
||||
<div id="nav-sub-container">
|
||||
<ul id="nav-sub">
|
||||
<li><a href="clearhistory?type=all">Clear All History</a></li>
|
||||
<li><a href="clearhistory?type=Processed">Clear Processed</a></li>
|
||||
<li><a href="clearhistory?type=Unprocessed">Clear Unprocessed</a></li>
|
||||
<li><a href="clearhistory?type=Snatched">Clear Snatched</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
</div>
|
||||
<table class="display" id="history_table">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -60,7 +57,7 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function()
|
||||
{
|
||||
@@ -80,4 +77,4 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
@@ -4,6 +4,44 @@
|
||||
%>
|
||||
|
||||
<%def name="body()">
|
||||
<div id="nav-sub-container">
|
||||
<ul id="nav-view">
|
||||
<li><span class="wsr Icon"></span> Viewport</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="gridView">
|
||||
%for artist in artists:
|
||||
<%
|
||||
totaltracks = artist['TotalTracks']
|
||||
havetracks = artist['HaveTracks']
|
||||
if not havetracks:
|
||||
havetracks = 0
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
%>
|
||||
<div class="image-container">
|
||||
<div class="image-box">
|
||||
<img />
|
||||
<div class="image-actions">
|
||||
%if artist['Status'] == 'Loading':
|
||||
<span class="wsr Loading loader"></span>
|
||||
%else:
|
||||
${havetracks}/${totaltracks}
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="image-info">
|
||||
<b title="${artist['ArtistID']}"><a href="artistPage?ArtistID=${artist['ArtistID']}">${artist['ArtistName']}</a></b>
|
||||
</div>
|
||||
</div>
|
||||
%endfor
|
||||
</div>
|
||||
<div id="listView">
|
||||
<table class="display" id="artist_table">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -48,33 +86,34 @@
|
||||
grade = 'X'
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<div class="status ${artist['Status']}">
|
||||
<div>
|
||||
%if artist['Status'] == 'Active':
|
||||
<span class="web-symbol">/</span>
|
||||
%else:
|
||||
<span class="web-symbol loader"></span>
|
||||
%endif
|
||||
|
||||
<tr class="grade${grade}">
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<img />
|
||||
<div class="album-actions">
|
||||
%if artist['Status'] == 'Loading':
|
||||
<div>
|
||||
<span class="wsr Loading loader"></span>
|
||||
</div>
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
<img />
|
||||
</div>
|
||||
</td>
|
||||
<td id="name"><span title="${artist['ArtistSortName']}"></span><a href="artistPage?ArtistID=${artist['ArtistID']}">${artist['ArtistName']}</a></td>
|
||||
<td id="album"><span title="${releasedate}"></span><a href="albumPage?AlbumID=${artist['AlbumID']}">${albumdisplay}</a></td>
|
||||
<td id="have"><span title="${percent}"></span>
|
||||
<div class="progress-container" title="You have ${havetracks} of ${totaltracks} total.">
|
||||
<span class="havetracks">${havetracks}/${totaltracks}</span>
|
||||
<div style="width:${percent}%"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</td>
|
||||
<td id="name"><span title="${artist['ArtistSortName']}"></span><a href="artistPage?ArtistID=${artist['ArtistID']}">${artist['ArtistName']}</a></td>
|
||||
<td id="album"><span title="${releasedate}"></span><a href="albumPage?AlbumID=${artist['AlbumID']}">${albumdisplay}</a></td>
|
||||
<td id="have"><span title="${percent}"></span>
|
||||
<div class="progress-container" title="You have ${havetracks} of ${totaltracks} total.">
|
||||
<span class="havetracks">${havetracks}/${totaltracks}</span>
|
||||
<div style="width:${percent}%"></div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="headIncludes()">
|
||||
@@ -85,7 +124,12 @@
|
||||
<script type="text/javascript" src="js/libs/jquery.dataTables.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
//GridView
|
||||
$("#gridView").show();
|
||||
$("#listView").hide();
|
||||
enit();
|
||||
getArtistArt();
|
||||
|
||||
$('#artist_table').dataTable(
|
||||
{
|
||||
"aaSorting": [
|
||||
@@ -94,15 +138,25 @@
|
||||
"bFilter": true
|
||||
});
|
||||
});
|
||||
|
||||
function getArtistArt() {
|
||||
$(".image-container").each(function() {
|
||||
$(this).fadeIn('fast', function(){
|
||||
var image = $(this).find("img");
|
||||
var artist = $(this).find(".image-info b").text();
|
||||
var id = $(this).find(".image-info b").attr('title');
|
||||
if ( !image.hasClass('done') ) {
|
||||
image.addClass('done');
|
||||
getArtistInfo(artist,image,2,id);
|
||||
}
|
||||
});
|
||||
});
|
||||
$("table#artist_table tr td#name").each(function(){
|
||||
var id = $(this).children('a').attr('title');
|
||||
var artist = $(this).children('a').text();
|
||||
var id = $(this).children("a").attr("title");
|
||||
var artist = $(this).children("a").text();
|
||||
var image = $(this).parent().find("td#albumart img");
|
||||
if ( !image.hasClass('done') ) {
|
||||
image.addClass('done');
|
||||
getArtistInfo(artist,image,1,id);
|
||||
getArtistInfo(artist,image,2,id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -24,10 +24,10 @@ function getArtistInfo(name,imgElem,size,artistID) {
|
||||
}
|
||||
var artistBio = artistBio;
|
||||
var image = imgElem;
|
||||
var bio = $('#artistBio');
|
||||
var bio = $('.artist-bio-container .artist-bio');
|
||||
$(image).attr("src",imageUrl).removeAttr("width").removeAttr("height").hide().fadeIn();
|
||||
if ( bio.length > 0 ) $(bio).append(artistBio);
|
||||
$(image).wrap('<a href="albumPage?AlbumID='+ artistID +'"></a>');
|
||||
$(image).wrap('<a href="artistPage?ArtistID='+ artistID +'"></a>');
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -51,10 +51,10 @@ function getArtistInfo(name,imgElem,size,artistID) {
|
||||
}
|
||||
var artistBio = artistBio;
|
||||
var image = imgElem;
|
||||
var bio = $('#artistBio');
|
||||
var bio = $('.artist-bio-container .artist-bio');
|
||||
$(image).attr("src",imageUrl).removeAttr("width").removeAttr("height").hide().fadeIn();
|
||||
if ( bio.length > 0 ) $(bio).append(artistBio);
|
||||
$(image).wrap('<a href="'+ imageLarge +'" rel="dialog" title="' + artist + '"></a>');
|
||||
$(image).wrap('<a href="artistPage?ArtistID=' + artistID + '" rel="dialog" title="' + artist + '"></a>');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -179,4 +179,20 @@ function enit()
|
||||
|
||||
$(mainWindow).jScrollPane({ showArrows: true, animateScroll: true });
|
||||
}
|
||||
$(document).ready(function(){
|
||||
$("ul#nav-view li").toggle(function() {
|
||||
$(this).children("span").removeClass("Icon");
|
||||
$(this).children("span").addClass("List");
|
||||
$("#gridView").hide();
|
||||
$("#listView").show();
|
||||
enit();
|
||||
}, function() {
|
||||
$(this).children("span").removeClass("List");
|
||||
$(this).children("span").addClass("Icon");
|
||||
$("#gridView").show();
|
||||
$("#listView").hide();
|
||||
enit();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function()
|
||||
{
|
||||
@@ -50,4 +50,4 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
@@ -5,44 +5,41 @@
|
||||
%>
|
||||
<%def name="headerIncludes()">
|
||||
<div id="subhead_container">
|
||||
<ul id="subhead_menu">
|
||||
<li><a href="manageArtists">Manage Artists</a></li>
|
||||
%if not headphones.ADD_ARTISTS:
|
||||
<li><a href="manageNew">Manage New Artists</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="body()">
|
||||
<div class="table_wrapper">
|
||||
<div id="nav-sub-container">
|
||||
<ul id="nav-sub">
|
||||
<li>Manage: </li>
|
||||
<li><a href="manageAlbums">Albums</a></li>
|
||||
<li><a href="manageArtists">Artists</a></li>
|
||||
%if not headphones.ADD_ARTISTS:
|
||||
<li><a href="manageNew">New Artists</a></li>
|
||||
%endif
|
||||
</ul>
|
||||
</div>
|
||||
<h1>Scan Music Library</h1>
|
||||
<table class="configtable">
|
||||
<tr>
|
||||
<td>
|
||||
<p>
|
||||
Where do you keep your music?
|
||||
Local Music Directory:
|
||||
</p>
|
||||
<form action="musicScan" method="GET">
|
||||
%if headphones.MUSIC_DIR:
|
||||
<input type="text" value="${headphones.MUSIC_DIR}" name="path" size="60" />
|
||||
<div class="tooltip">
|
||||
<span>
|
||||
You can put in any directory, and it will scan for audio files in that folder
|
||||
(including all subdirectories)<br />
|
||||
For example: '/Users/name/Music'
|
||||
</span>
|
||||
</div>
|
||||
%else:
|
||||
<p>
|
||||
<input type="text" value="Enter a Music Directory to scan" onfocus="if (this.value==this.defaultValue) this.value='';" name="path" size="60" />
|
||||
<div class="tooltip">
|
||||
<span>
|
||||
<input type="text" placeholder="Music Directory" onfocus="if (this.value==this.defaultValue) this.value='';" name="path" size="60" />
|
||||
You can put in any directory, and it will scan for audio files in that folder
|
||||
(including all subdirectories)<br />
|
||||
For example: '/Users/name/Music'
|
||||
</span>
|
||||
</div>
|
||||
</p>
|
||||
%endif
|
||||
<br />
|
||||
@@ -50,11 +47,7 @@
|
||||
<input class="styled" type="checkbox" name="autoadd" value="1" ${checked(headphones.ADD_ARTISTS)} /> Automatically add new artists
|
||||
</p>
|
||||
<input type="submit" />
|
||||
<div class="tooltip">
|
||||
<span>
|
||||
This process runs in the background.
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<%inherit file="base.html" />
|
||||
<%!
|
||||
from headphones import db
|
||||
import headphones
|
||||
%>
|
||||
|
||||
|
||||
<%def name="body()">
|
||||
<div class="table_wrapper">
|
||||
<div id="manageheader" class="title">
|
||||
<h1 class="clearfix"><img src="interfaces/default/images/icon_manage.png" alt="manage"/>Manage Albums</h1>
|
||||
</div>
|
||||
<form action="markAlbums" method="get" id="markAlbums">
|
||||
<div id="markalbum">Mark selected albums as
|
||||
<select name="action" onChange="doAjaxCall('markAlbums',$(this),'table',true);" data-error="You didn't select any albums">
|
||||
<option disabled="disabled" selected="selected">Choose...</option>
|
||||
<option value="Wanted">Wanted</option>
|
||||
<option value="WantedNew">Wanted (new only)</option>
|
||||
<option value="WantedLossless">Wanted (lossless)</option>
|
||||
<option value="Skipped">Skipped</option>
|
||||
<option value="Downloaded">Downloaded</option>
|
||||
</select>
|
||||
<input type="hidden" value="Go">
|
||||
</div>
|
||||
<table class="display" id="album_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||
<th id="albumname">Album</th>
|
||||
<th id="artistname">Artist</th>
|
||||
<th id="reldate">Date</th>
|
||||
<th id="type">Type</th>
|
||||
<th id="status">Status</th>
|
||||
<th id="have">Have</th>
|
||||
<th id="bitrate">Bitrate</th>
|
||||
<th id="albumformat">Format</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for album in albums:
|
||||
<%
|
||||
if album['Status'] == 'Skipped':
|
||||
grade = 'Z'
|
||||
elif album['Status'] == 'Wanted':
|
||||
grade = 'X'
|
||||
elif album['Status'] == 'Snatched':
|
||||
grade = 'C'
|
||||
else:
|
||||
grade = 'A'
|
||||
|
||||
myDB = db.DBConnection()
|
||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']]))
|
||||
|
||||
try:
|
||||
percent = (havetracks*100.0)/totaltracks
|
||||
if percent > 100:
|
||||
percent = 100
|
||||
except (ZeroDivisionError, TypeError):
|
||||
percent = 0
|
||||
totaltracks = '?'
|
||||
|
||||
avgbitrate = myDB.action("SELECT AVG(BitRate) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if avgbitrate:
|
||||
bitrate = str(int(avgbitrate)/1000) + ' kbps'
|
||||
else:
|
||||
bitrate = ''
|
||||
|
||||
albumformatcount = myDB.action("SELECT COUNT(DISTINCT Format) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
if albumformatcount == 1:
|
||||
albumformat = myDB.action("SELECT DISTINCT Format FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||
elif albumformatcount > 1:
|
||||
albumformat = 'Mixed'
|
||||
else:
|
||||
albumformat = ''
|
||||
|
||||
lossy_formats = [str.upper(fmt) for fmt in headphones.LOSSY_MEDIA_FORMATS]
|
||||
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"><input type="checkbox" name="${album['AlbumID']}" class="checkbox" /></td>
|
||||
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
||||
<td id="artistname"><a href="artistPage?ArtistID=${album['ArtistID']}">${album['ArtistName']}</a></td>
|
||||
<td id="reldate">${album['ReleaseDate']}</td>
|
||||
<td id="type">${album['Type']}</td>
|
||||
<td id="status">${album['Status']}</td>
|
||||
<td id="have"><span title="${percent}"><span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
||||
<td id="bitrate">${bitrate}</td>
|
||||
<td id="albumformat">${albumformat}</td>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</%def>
|
||||
|
||||
<%def name="headIncludes()">
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
|
||||
function initThisPage() {
|
||||
$('#album_table').dataTable({
|
||||
"bDestroy": true,
|
||||
"aoColumns": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
{ "sType": "title-numeric"},
|
||||
null,
|
||||
null
|
||||
],
|
||||
"aoColumnDefs": [
|
||||
{ 'bSortable': false, 'aTargets': [ 0 ] }
|
||||
],
|
||||
"oLanguage": {
|
||||
"sLengthMenu":"Show _MENU_ albums per page",
|
||||
"sEmptyTable": "No album information available",
|
||||
"sInfo":"Showing _TOTAL_ albums",
|
||||
"sInfoEmpty":"No albums to manage.",
|
||||
"sInfoFiltered":"(filtered from _MAX_ total albums)",
|
||||
"sSearch": ""},
|
||||
"bPaginate": false,
|
||||
"aaSorting": [[5, 'desc']]
|
||||
|
||||
});
|
||||
resetFilters("albums");
|
||||
}
|
||||
$(document).ready(function() {
|
||||
initThisPage();
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<%inherit file="base.html" />
|
||||
|
||||
<%def name="body()">
|
||||
<div id="paddingheader">
|
||||
<div id="nav-sub-container">
|
||||
<h1>Manage Artists<h1>
|
||||
</div>
|
||||
<form action="markArtists" method="get">
|
||||
@@ -19,8 +19,8 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||
<th id="name">Artist Name</th>
|
||||
<th id="status">Status</th>
|
||||
<th id="name">Artist Name</th>
|
||||
<th id="album">Latest Album</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -46,8 +46,18 @@
|
||||
%>
|
||||
<tr class="grade${grade}">
|
||||
<td id="select"><input type="checkbox" name="${artist['ArtistID']}" class="checkbox" /></td>
|
||||
<td id="status">
|
||||
|
||||
%if artist['Status'] == 'Paused':
|
||||
<span class="wsr Clock"></span>
|
||||
%elif artist['Status'] == 'Loading':
|
||||
<span class="wsr Loading loader"></span>
|
||||
%else:
|
||||
<span class="wsr Approved"></span>
|
||||
%endif
|
||||
|
||||
</td>
|
||||
<td id="name"><span title="${artist['ArtistSortName']}"></span><a href="artistPage?ArtistID=${artist['ArtistID']}">${artist['ArtistName']}</a></td>
|
||||
<td id="status">${artist['Status']}</td>
|
||||
<td id="album"><span title="${releasedate}"></span><a href="albumPage?AlbumID=${artist['AlbumID']}">${albumdisplay}</a></td>
|
||||
</tr>
|
||||
%endfor
|
||||
@@ -61,22 +71,22 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function()
|
||||
{
|
||||
$('#artist_table').dataTable(
|
||||
{
|
||||
"bDestroy": true,
|
||||
"aoColumns": [
|
||||
{ "bSortable": false},
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
],
|
||||
"bStateSave": true,
|
||||
"bPaginate": false
|
||||
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
@@ -3,7 +3,7 @@
|
||||
import headphones
|
||||
%>
|
||||
<%def name="body()">
|
||||
<div id="paddingheader">
|
||||
<div id="nav-sub-container">
|
||||
<h1>Manage New Artists<h1>
|
||||
<h3><a href="musicScan?path=${headphones.MUSIC_DIR}&redirect=manageNew">Scan Music Library</a></h3>
|
||||
</div>
|
||||
@@ -20,10 +20,10 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%for artist in newartists:
|
||||
%for artist in headphones.NEW_ARTISTS:
|
||||
<tr class="gradeZ">
|
||||
<td id="select"><input type="checkbox" name="${artist['ArtistName']}" class="checkbox" /></td>
|
||||
<td id="name">${artist['ArtistName']}</a></td>
|
||||
<td id="select"><input type="checkbox" name="${artist}" class="checkbox" /></td>
|
||||
<td id="name">${artist}</a></td>
|
||||
</tr>
|
||||
%endfor
|
||||
</tbody>
|
||||
@@ -36,7 +36,7 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function()
|
||||
{
|
||||
@@ -49,4 +49,4 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
@@ -2,17 +2,17 @@
|
||||
|
||||
<%def name="body()">
|
||||
|
||||
<div id="paddingheader">
|
||||
<div id="nav-sub-container">
|
||||
<h1><span>L</span>Search Results</h1>
|
||||
</div>
|
||||
<table class="display" id="searchresults_table">
|
||||
<thead>
|
||||
<tr>
|
||||
%if type == 'album':
|
||||
<th id="albumart"></th>
|
||||
<th id="album-art"></th>
|
||||
<th id="albumname">Album Name</th>
|
||||
%elif type == 'artist':
|
||||
<th id="artistart"></th>
|
||||
<th id="artist-art"></th>
|
||||
%endif
|
||||
<th id="artistname">Artist Name</th>
|
||||
<th id="score">Score</th>
|
||||
@@ -29,33 +29,36 @@
|
||||
grade = 'Z'
|
||||
%>
|
||||
|
||||
<tr class="grade${grade}">
|
||||
<tr class="grade${grade}" for="${result['id']}">
|
||||
%if type == 'album':
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<div class="status">
|
||||
<div>
|
||||
<a class="web-symbol" href="addReleaseById?rid=${result['albumid']}" title="Add to collection"><span>+</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<img />
|
||||
</div>
|
||||
</td>
|
||||
<td id="albumname"><a href="${result['albumurl']}">${result['title']}</a></td>
|
||||
%elif type == 'artist':
|
||||
<td id="artistart">
|
||||
<input type="hidden" value="${result['id']}" />
|
||||
<div class="album-art-small">
|
||||
<img alt="${result['uniquename']}"/>
|
||||
</div>
|
||||
</td>
|
||||
%endif
|
||||
<td id="artistname"><a href="${result['url']}" for="${result['id']}">${result['uniquename']}</a></td>
|
||||
<td id="artistname">${result['uniquename']}</td>
|
||||
<td id="score">
|
||||
<div class="searchscore" title="The match result is: ${result['score']}%">
|
||||
<div class="progress-container" title="Match result is ${result['score']}%">
|
||||
<span class="searchmatch">${result['score']}%</span>
|
||||
<div style="width: ${result['score']}%"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
%if type == 'album':
|
||||
<td id="add"></td>
|
||||
<td id="add"><a class="wsr" href="addReleaseById?rid=${result['albumid']}" title="Add to collection"><span class="wsr ZoomIn"></span></a></td>
|
||||
%elif type == 'artist':
|
||||
<td id="add"><a class="btnAdd" href="addArtist?artistid=${result['id']}" title="Add this Artist"></a></td>
|
||||
<td id="add"><a class="btnAdd" href="addArtist?artistid=${result['id']}" title="Add to collection"><span class="wsr ZoomIn"></span></a>
|
||||
<a href="${result['url']}" for="${result['id']}" title="View online" target="_blank"><span class="wsr Link"></span></a></td>
|
||||
%endif
|
||||
</tr>
|
||||
%endfor
|
||||
@@ -71,19 +74,33 @@
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
function getArtistArt() {
|
||||
$("table#searchresults_table tr td#artistname").each(function(){
|
||||
var id = $(this).attr('for');
|
||||
var artist = $(this).children('a').text();
|
||||
var image = $(this).parent().find("td#albumart img");
|
||||
if ( !image.hasClass('done') ) {
|
||||
image.addClass('done');
|
||||
getArtistInfo(artist,image,1,id);
|
||||
}
|
||||
});
|
||||
}
|
||||
$(document).ready(function(){
|
||||
%if type == 'album':
|
||||
getAlbumArt();
|
||||
function getAlbumArt() {
|
||||
$("table#searchresults_table tr").each(function() {
|
||||
$(this).fadeIn("slow", function(){
|
||||
var element = $(this).find("#albumart img");
|
||||
var artistname = $(this).find("#artistname").text();
|
||||
var albumname = $(this).find("#albumname").text();
|
||||
getAlbumInfo(artistname,albumname,element,2);
|
||||
});
|
||||
});
|
||||
}
|
||||
%elif type == 'artist':
|
||||
getArtistArt();
|
||||
function getArtistArt() {
|
||||
$("table#searchresults_table tr").each(function(){
|
||||
var id = $(this).attr('for');
|
||||
var artist = $(this).children('td#artistname').text();
|
||||
var image = $(this).find("td#artistart img");
|
||||
if ( !image.hasClass('done') ) {
|
||||
image.addClass('done');
|
||||
getArtistInfo(artist,image,1,id);
|
||||
}
|
||||
});
|
||||
}
|
||||
%endif
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
@@ -66,20 +66,16 @@
|
||||
<td id="select"><input class="styled" type="checkbox" name="${album['AlbumID']}" class="checkbox" /></th>
|
||||
<td id="albumart">
|
||||
<div class="album-art-small">
|
||||
<div class="status ${album['Status']}">
|
||||
<div>
|
||||
%if album['Status'] == 'Skipped':
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Get this album"><span>N</span></a>
|
||||
%elif album['Status'] == 'Wanted':
|
||||
<a class="web-symbol" href="#" title="Mark downloaded"><span>/</span></a>
|
||||
<a class="web-symbol" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark"><span>×</span></a>
|
||||
%else:
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry the same nbz"><span>*</span></a>
|
||||
<a class="web-symbol" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try a new download, skipping all previously tried nzbs">J</a>
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
<img />
|
||||
<div class="album-actions">
|
||||
%if album['Status'] == 'Wanted':
|
||||
<a class="wsr" href="#" title="Mark downloaded"><span>/</span></a>
|
||||
<a class="wsr" href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Unmark"><span class="wsr Unlike"></span></a>
|
||||
%else:
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry the same nbz"><span class="wsr Rotate">*</span></a>
|
||||
<a class="wsr" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try a new download, skipping all previously tried nzbs"><span class="wsr Reblog"></span></a>
|
||||
%endif
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td id="artistname">
|
||||
@@ -102,7 +98,7 @@
|
||||
</%def>
|
||||
|
||||
<%def name="javascriptIncludes()">
|
||||
<script src="interfaces/brink/js/libs/jquery.dataTables.min.js"></script>
|
||||
<script src="interfaces/brink/JS/libs/jquery.dataTables.min.js"></script>
|
||||
<script>
|
||||
function getArtistArt() {
|
||||
$("table#upcoming_table tr td#artistname").each(function(){
|
||||
@@ -145,4 +141,4 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</%def>
|
||||
</%def>
|
||||
Reference in New Issue
Block a user