Graphic changes

*Moved menu top top
*Added grid view
*Fixed Album & Artist art not loading.
This commit is contained in:
Rasmus Eeg Møller
2012-08-29 16:47:31 +02:00
parent 87c9ebca28
commit 668ce6e311
18 changed files with 776 additions and 872 deletions
+104
View File
@@ -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: "&sup3;"; }
.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"; }
+10 -7
View File
@@ -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>
+78 -67
View File
@@ -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">&sup1;</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() == '&sup1;' ? '&sup2;' : '&sup1;';
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>
-190
View File
@@ -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>
-190
View File
@@ -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>
+49 -80
View File
@@ -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
View File
@@ -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; }
+20 -39
View File
@@ -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);
}
/*
+6 -9
View File
@@ -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>
+80 -26
View File
@@ -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);
}
});
}
+20 -4
View File
@@ -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();
});
});
+2 -2
View File
@@ -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>
+13 -20
View File
@@ -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>
+140
View File
@@ -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>
+17 -7
View File
@@ -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>
+6 -6
View File
@@ -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>
+41 -24
View File
@@ -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>
+11 -15
View File
@@ -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>&#215;</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>