From 38e9af762be977140b31bdb68e272aead2a4ff5a Mon Sep 17 00:00:00 2001 From: Remy Date: Sat, 6 Aug 2011 18:23:58 -0700 Subject: [PATCH] Added album page, checkboxes to artist page, more interface fixes --- data/css/data_table.css | 2 ++ data/css/style.css | 32 ++++++++++++++++---- data/images/checkmark.png | Bin 3043 -> 1644 bytes data/interfaces/default/artist.html | 4 +++ data/interfaces/default/index.html | 10 +++++-- data/interfaces/default/logs.html | 8 ++++- data/js/plugins.js | 8 ++++- headphones/webserve.py | 45 +++------------------------- 8 files changed, 59 insertions(+), 50 deletions(-) diff --git a/data/css/data_table.css b/data/css/data_table.css index 5846855c..86161738 100644 --- a/data/css/data_table.css +++ b/data/css/data_table.css @@ -166,10 +166,12 @@ table.display td.center { */ table.display tr.odd.gradeA { background-color: #ddffdd; + font-weight: bold; } table.display tr.even.gradeA { background-color: #ddffdd; + font-weight: bold; } table.display tr.odd.gradeC { diff --git a/data/css/style.css b/data/css/style.css index 8f491b56..a5288327 100755 --- a/data/css/style.css +++ b/data/css/style.css @@ -106,6 +106,10 @@ body { background-color: #EBF4FB; min-width: 907px; } header { min-height: 68px; width: 100%; min-width: 907px; padding-left: 0px; padding-right: 10px; background-color: #CDC9C9; position: fixed; z-index: 998; } +h1 { font-size: 24px; } +h2 { font-size: 20px; } +h3 { font-size: 16px; } + div#updatebar { text-align: center; min-width: 970px; width: 100%; background-color: light-blue; float: left; } div#logo { float: left; padding-left: 10px; } @@ -124,25 +128,29 @@ div#searchbar { margin: 24px 30px auto auto; float: right; } div#main { margin: 0; padding: 80px 0 0 0; } +.table_wrapper { border-radius: 20px; -webkit-border-radius: 20px; -moz-border-radius: 20px; width: 88%; margin: 20px auto 0 auto; padding: 25px; background-color: white; position: relative; min-height: 200px; clear: both; _height: 302px; zoom: 1; } + table#artist_table { background-color: white; width: 100%; padding: 20px; } table#artist_table th#name { text-align: left; min-width: 200px; } -table#artist_table th#status { text-align: center; } +table#artist_table th#status { text-align: left; min-width: 50px; } table#artist_table th#album { text-align: center; min-width: 300px; } table#artist_table th#have { text-align: center; } table#artist_table td#name { vertical-align: middle; text-align: left; min-width:200px; } -table#artist_table td#status { vertical-align: middle; text-align: center; } +table#artist_table td#status { vertical-align: middle; text-align: left; min-width: 50px; } table#artist_table td#album { vertical-align: middle; text-align: center; min-width: 300px; } table#artist_table td#have { vertical-align: middle; } div#paddingheader { padding-top: 48px; font-size: 24px; font-weight: bold; text-align: center; } table#album_table { background-color: white; } +table#album_table th#checkbox { text-align: left; min-width: 25px; } table#album_table th#albumart { text-align: left; min-width: 50px; } table#album_table th#albumname { text-align: center; min-width: 150px; } table#album_table th#reldate { width: 175px; text-align: center; min-width: 100px; } table#album_table th#status { width: 175px; text-align: center; min-width: 100px; } table#album_table th#type { width: 175px; text-align: center; min-width: 100px; } +table#album_table td#checkbox { vertical-align: middle; text-align: left; } table#album_table td#albumart { vertical-align: middle; text-align: left; } table#album_table td#albumname { vertical-align: middle; text-align: center; } table#album_table td#reldate { vertical-align: middle; text-align: center; } @@ -150,13 +158,27 @@ table#album_table td#status { vertical-align: middle; text-align: center; } table#album_table td#type { vertical-align: middle; text-align: center; } table#album_table td#have { vertical-align: middle; } +img.albumArt { float: left; padding-right: 5px; } +div#albumheader { height: 200px; } +div#track_wrapper { padding-top: 20px; text-align: center; font-size: 16px; } + +table#track_table th#number { text-align: left; min-width: 50px; } +table#track_table th#name { text-align: center; min-width: 350px; } +table#track_table th#duration { width: 175px; text-align: center; min-width: 100px; } +table#track_table th#have { width: 175px; text-align: center; min-width: 100px; } + +table#track_table td#number { vertical-align: middle; text-align: left; } +table#track_table td#name { vertical-align: middle; text-align: center; } +table#track_table td#duration { vertical-align: middle; text-align: center; } +table#track_table td#have { vertical-align: middle; text-align: center; } + table#history_table { background-color: white; width: 100%; } table#log_table { background-color: white; } -table#log_table th#timestamp { text-align: left; min-width: 100px; } -table#log_table th#level { text-align: left; min-width: 100px; } -table#log_table th#thread { text-align: left; min-width: 100px; } +table#log_table th#timestamp { text-align: left; min-width: 200px; } +table#log_table th#level { text-align: left; min-width: 75px; } +table#log_table th#thread { text-align: left; min-width: 75px; } table#log_table th#message { text-align: left; min-width: 200px; } div.progress-container { border: 1px solid #ccc; width: 100px; height: 14px; margin: 2px 5px 2px 0; padding: 1px; float: left; background: white; } diff --git a/data/images/checkmark.png b/data/images/checkmark.png index d265c512545a48095195c0d1a4550174dda40080..11f2053056942cf01f37ae4d9664a58a0b7b48d9 100644 GIT binary patch literal 1644 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 diff --git a/data/interfaces/default/artist.html b/data/interfaces/default/artist.html index 4dd0ca1e..c299677a 100644 --- a/data/interfaces/default/artist.html +++ b/data/interfaces/default/artist.html @@ -22,9 +22,11 @@
${artist['ArtistName']}
+
+ @@ -59,6 +61,7 @@ %> + @@ -88,6 +91,7 @@ null, null, null, + null, { "sType": "title-numeric"} ], "oLanguage": { diff --git a/data/interfaces/default/index.html b/data/interfaces/default/index.html index ee79b359..595aae3d 100644 --- a/data/interfaces/default/index.html +++ b/data/interfaces/default/index.html @@ -28,15 +28,21 @@ percent = 0 totaltracks = '?' - if artist['ReleaseDate']: + if artist['ReleaseDate'] and artist['LatestAlbum']: releasedate = artist['ReleaseDate'] + albumdisplay = '%s (%s)' % (artist['LatestAlbum'], artist['ReleaseDate']) if releasedate > helpers.today(): grade = 'A' else: grade = 'Z' + elif artist['LatestAlbum']: + releasedate = '' + grade = 'Z' + albumdisplay = artist['LatestAlbum'] else: releasedate = '' grade = 'Z' + albumdisplay = 'None' if artist['Status'] == 'Paused': grade = 'X' @@ -45,7 +51,7 @@ - + %endfor diff --git a/data/interfaces/default/logs.html b/data/interfaces/default/logs.html index c4525033..a4a146a6 100644 --- a/data/interfaces/default/logs.html +++ b/data/interfaces/default/logs.html @@ -19,7 +19,13 @@ out_tuple = helpers.extract_logline(line) %> %if out_tuple: - + <% + if out_tuple[1] == 'WARNING' or out_tuple[1] == 'ERROR': + grade = 'X' + else: + grade = 'Z' + %> + diff --git a/data/js/plugins.js b/data/js/plugins.js index 7db34fad..bafe8161 100755 --- a/data/js/plugins.js +++ b/data/js/plugins.js @@ -32,4 +32,10 @@ jQuery.fn.dataTableExt.oSort['title-numeric-desc'] = function(a,b) { x = parseFloat( x ); y = parseFloat( y ); return ((x < y) ? 1 : ((x > y) ? -1 : 0)); -}; \ No newline at end of file +}; + +function toggle(source) { + checkboxes = document.getElementsByName('mbid'); + for(var i in checkboxes) + checkboxes[i].checked = source.checked; +} \ No newline at end of file diff --git a/headphones/webserve.py b/headphones/webserve.py index 4c76a26a..8e3359e2 100644 --- a/headphones/webserve.py +++ b/headphones/webserve.py @@ -46,48 +46,11 @@ class WebInterface(object): def albumPage(self, AlbumID): - page = [templates._header] - page.append(templates._logobar) - page.append(templates._nav) myDB = db.DBConnection() - - results = myDB.select('SELECT ArtistID, ArtistName, AlbumTitle, TrackTitle, TrackDuration, TrackID, AlbumASIN from tracks WHERE AlbumID=?', [AlbumID]) - - if results[0][6]: - albumart = '''


''' % results[0][6] - else: - albumart = '' - i = 0 - page.append('''
Album Name Release Date
${album['AlbumTitle']} ${album['ReleaseDate']}
${artist['ArtistName']} ${artist['Status']}${artist['LatestAlbum']} ${releasedate}${albumdisplay}
${havetracks}/${totaltracks}
${out_tuple[0]} ${out_tuple[1]} ${out_tuple[2]}
- %s - %s
- Download
%s
-
- - - - - ''' % (results[0][0], results[0][1], results[0][2], AlbumID, results[0][0], albumart)) - while i < len(results): - trackmatches = myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle like ? AND TrackTitle like ?', [results[i][1], results[i][2], results[i][3]]) - - if len(trackmatches): - have = '' - else: - have = '' - if results[i][4]: - duration = helpers.convert_milliseconds(int(results[i][4])) - else: - duration = 'n/a' - page.append(''' - - - ''' % (i+1, results[i][3], results[i][5], duration, have)) - i = i+1 - - page.append('''
Track #Track TitleDuration
%s%s (link)%s%s
''') - page.append(templates._footer % headphones.CURRENT_VERSION) - return page - + album = myDB.action('SELECT * from albums WHERE AlbumID=?', [AlbumID]).fetchone() + tracks = myDB.select('SELECT * from tracks WHERE AlbumID=?', [AlbumID]) + title = album['ArtistName'] + ' - ' + album['AlbumTitle'] + return serve_template(templatename="album.html", title=title, album=album, tracks=tracks) albumPage.exposed = True