Merge branch 'elmarkou'
@@ -0,0 +1,136 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
<%!
|
||||||
|
from headphones import db, helpers
|
||||||
|
myDB = db.DBConnection()
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%def name="headerIncludes()">
|
||||||
|
<div id="subhead_container">
|
||||||
|
<ul id="subhead_menu">
|
||||||
|
<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>
|
||||||
|
%elif album['Status'] == 'Wanted':
|
||||||
|
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True">Force Check</a></li>
|
||||||
|
<li><a href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Mark Album as Skipped</a></li>
|
||||||
|
%else:
|
||||||
|
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False">Retry Download</a></li>
|
||||||
|
<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 class="table_wrapper">
|
||||||
|
<h2><a href="artistPage?ArtistID=${album['ArtistID']}"><- Back to ${album['ArtistName']}</a></h2>
|
||||||
|
<div id="albumheader">
|
||||||
|
<img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.LZZZZZZZ.jpg" height="200" width="200" alt="albumart" class="albumArt">
|
||||||
|
<h1><a href="http://musicbrainz.org/release-group/${album['AlbumID']}">${album['AlbumTitle']}</a></h1>
|
||||||
|
<h2><a href="http://musicbrainz.org/artist/${album['ArtistID']}">${album['ArtistName']}</a></h2>
|
||||||
|
<br>
|
||||||
|
<%
|
||||||
|
totalduration = myDB.action("SELECT SUM(TrackDuration) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||||
|
totaltracks = len(myDB.select("SELECT TrackTitle from tracks WHERE AlbumID=?", [album['AlbumID']]))
|
||||||
|
try:
|
||||||
|
albumduration = helpers.convert_milliseconds(totalduration)
|
||||||
|
except:
|
||||||
|
albumduration = 'n/a'
|
||||||
|
|
||||||
|
%>
|
||||||
|
<h3>Tracks: ${totaltracks}</h3>
|
||||||
|
<h3>Duration: ${albumduration}</h3>
|
||||||
|
%if description:
|
||||||
|
<h3>Description: </h3>
|
||||||
|
${description['Summary']}
|
||||||
|
%endif
|
||||||
|
</div>
|
||||||
|
<div id="track_wrapper">
|
||||||
|
<table class="display" id="track_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="number">#</th>
|
||||||
|
<th id="name">Track Title</th>
|
||||||
|
<th id="duration">Duration</th>
|
||||||
|
<th id="location">Local File</th>
|
||||||
|
<th id="bitrate">Bit Rate</th>
|
||||||
|
<th id="format">Format</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for track in tracks:
|
||||||
|
<%
|
||||||
|
if track['Location']:
|
||||||
|
grade = 'A'
|
||||||
|
location = track['Location']
|
||||||
|
else:
|
||||||
|
grade = 'X'
|
||||||
|
location = ''
|
||||||
|
|
||||||
|
if track['BitRate']:
|
||||||
|
bitrate = str(track['BitRate']/1000) + ' kbps'
|
||||||
|
else:
|
||||||
|
bitrate = ''
|
||||||
|
|
||||||
|
try:
|
||||||
|
trackduration = helpers.convert_milliseconds(track['TrackDuration'])
|
||||||
|
except:
|
||||||
|
trackduration = 'n/a'
|
||||||
|
|
||||||
|
if not track['Format']:
|
||||||
|
format = 'Unknown'
|
||||||
|
else:
|
||||||
|
format = track['Format']
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
<td id="number">${track['TrackNumber']}</td>
|
||||||
|
<td id="name">${track['TrackTitle']}</td>
|
||||||
|
<td id="duration">${trackduration}</td>
|
||||||
|
<td id="location">${location}</td>
|
||||||
|
<td id="bitrate">${bitrate}</td>
|
||||||
|
<td id="format">${format}</td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
<%
|
||||||
|
unmatched = myDB.select('SELECT * from have WHERE ArtistName LIKE ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']])
|
||||||
|
%>
|
||||||
|
%if unmatched:
|
||||||
|
%for track in unmatched:
|
||||||
|
<%
|
||||||
|
duration = helpers.convert_seconds(float(track['TrackLength']))
|
||||||
|
%>
|
||||||
|
<tr class="gradeC">
|
||||||
|
<td id="number">${track['TrackNumber']}</td>
|
||||||
|
<td id="name">${track['TrackTitle']}</td>
|
||||||
|
<td id="duration">${duration}</td>
|
||||||
|
<td id="location">${track['Location']}</td>
|
||||||
|
<td id="bitrate">${int(track['BitRate'])/1000} kbps</td>
|
||||||
|
<td id="format">${track['Format']}</td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
%endif
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#track_table').dataTable(
|
||||||
|
{
|
||||||
|
"aaSorting": [],
|
||||||
|
"bFilter": false,
|
||||||
|
"bInfo": false,
|
||||||
|
"bPaginate": false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
<%!
|
||||||
|
from headphones import db
|
||||||
|
import headphones
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%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><a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a><h1>
|
||||||
|
%if artist['Status'] == 'Loading':
|
||||||
|
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
||||||
|
%endif
|
||||||
|
</div>
|
||||||
|
<form action="markAlbums" method="get"><input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||||
|
<p class="indented">Mark selected albums as
|
||||||
|
<select 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>
|
||||||
|
<table class="display" id="album_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||||
|
<th id="albumart"></th>
|
||||||
|
<th id="albumname">Name</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="albumart"><img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.MZZZZZZZ.jpg" height="50" width="50"></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="status">${album['Status']}
|
||||||
|
%if album['Status'] == 'Skipped':
|
||||||
|
[<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">want</a>]
|
||||||
|
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
||||||
|
[<a href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">skip</a>]
|
||||||
|
%else:
|
||||||
|
[<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry the same download again">retry</a>][<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try a new download, skipping all previously tried nzbs">new</a>]
|
||||||
|
%endif
|
||||||
|
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
||||||
|
[<a id="wantlossless" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True">want lossless</a>]
|
||||||
|
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
||||||
|
[<a id="wantlossless" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True">retry lossless</a>]
|
||||||
|
%endif
|
||||||
|
</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>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
%if artist['Status'] == 'Loading':
|
||||||
|
<meta http-equiv="refresh" content="5">
|
||||||
|
%endif
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#album_table').dataTable(
|
||||||
|
{
|
||||||
|
"aoColumns": [
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
{ "sType": "title-numeric"},
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
],
|
||||||
|
"oLanguage": {
|
||||||
|
"sLengthMenu":"Show _MENU_ albums per page",
|
||||||
|
"sEmptyTable": "No album information available",
|
||||||
|
"sInfo":"Showing _TOTAL_ albums",
|
||||||
|
"sInfoEmpty":"Showing 0 to 0 of 0 albums",
|
||||||
|
"sInfoFiltered":"(filtered from _MAX_ total albums)"},
|
||||||
|
"bPaginate": false,
|
||||||
|
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
<%
|
||||||
|
import headphones
|
||||||
|
from headphones import version
|
||||||
|
%>
|
||||||
|
<!doctype html>
|
||||||
|
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
|
||||||
|
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
|
||||||
|
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
|
||||||
|
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
|
||||||
|
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
|
||||||
|
<title>Headphones - ${title}</title>
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="author" content="">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="images/favicon.ico">
|
||||||
|
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
||||||
|
<link rel="stylesheet" href="css/style.css?v=2">
|
||||||
|
${next.headIncludes()}
|
||||||
|
|
||||||
|
<script src="js/libs/modernizr-1.7.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<header>
|
||||||
|
% if not headphones.CURRENT_VERSION:
|
||||||
|
<div id="updatebar">
|
||||||
|
You're running an unknown version of Headphones. <a class="blue" href="update">Click here to update</a>
|
||||||
|
</div>
|
||||||
|
% elif headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.INSTALL_TYPE != 'win':
|
||||||
|
<div id="updatebar">
|
||||||
|
A <a class="blue" href="http://github.com/rembo10/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}"> newer version</a> is available. You're ${headphones.COMMITS_BEHIND} commits behind. <a class="blue" href="update">Click here to update</a>
|
||||||
|
</div>
|
||||||
|
% endif
|
||||||
|
<div id="logo">
|
||||||
|
<a href="home"><img src="images/headphoneslogo.png" alt="headphones"></a>
|
||||||
|
</div>
|
||||||
|
<ul id="nav">
|
||||||
|
<li><a href="home">home</a></li>
|
||||||
|
<li><a href="upcoming">upcoming</a></li>
|
||||||
|
<li><a href="extras">extras</a></li>
|
||||||
|
<li><a href="manage">manage</a></li>
|
||||||
|
<li><a href="history">history</a></li>
|
||||||
|
<li><a href="logs">logs</a></li>
|
||||||
|
<li><a href="config">settings</a></li>
|
||||||
|
</ul>
|
||||||
|
<div id="searchbar">
|
||||||
|
<form action="search" method="get">
|
||||||
|
<input type="text" value="" onfocus="if(this.value==this.defaultValue) this.value='';" name="name" />
|
||||||
|
<select name="type">
|
||||||
|
<option value="artist">Artist</option>
|
||||||
|
<option value="album">Album</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" value="Add"/>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div id="subhead">
|
||||||
|
${next.headerIncludes()}
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div id="main" class="main">
|
||||||
|
${next.body()}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div id="version">
|
||||||
|
Version: ${headphones.CURRENT_VERSION}
|
||||||
|
%if version.HEADPHONES_VERSION != 'master':
|
||||||
|
(${version.HEADPHONES_VERSION})
|
||||||
|
%endif
|
||||||
|
</div>
|
||||||
|
<div id="donate">
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||||
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
|
<input type="hidden" name="hosted_button_id" value="93FFC6WDV97QS">
|
||||||
|
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||||
|
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||||||
|
</form>
|
||||||
|
<br>
|
||||||
|
powered by musicbrainz (<a href="http://metabrainz.org/donate/index.html">donate</a>)
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
|
||||||
|
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.6.2.min.js"%3E%3C/script%3E'))</script>
|
||||||
|
${next.javascriptIncludes()}
|
||||||
|
|
||||||
|
<script src="js/plugins.js"></script>
|
||||||
|
<script src="js/script.js"></script>
|
||||||
|
|
||||||
|
<!--[if lt IE 7 ]>
|
||||||
|
<script src="js/libs/dd_belatedpng.js"></script>
|
||||||
|
<script> DD_belatedPNG.fix('img, .png_bg');</script>
|
||||||
|
<![endif]-->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()"></%def>
|
||||||
|
<%def name="headIncludes()"></%def>
|
||||||
|
<%def name="headerIncludes()"></%def>
|
||||||
@@ -0,0 +1,669 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
<%!
|
||||||
|
import headphones
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%def name="headerIncludes()">
|
||||||
|
<div id="subhead_container">
|
||||||
|
<ul id="subhead_menu">
|
||||||
|
<li><a href="shutdown">Shut Down</a></li>
|
||||||
|
<li><a href="restart">Restart</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
|
<%def name="body()">
|
||||||
|
<div id="paddingheader">
|
||||||
|
<h1><h1>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<form action="configUpdate" method="post">
|
||||||
|
<a name="web_interface"><h1><u>Web Interface</u></h1></a>
|
||||||
|
|
||||||
|
<table class="configtable" summary="Web Interface">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>HTTP Host:</h3>
|
||||||
|
<input type="text" name="http_host" value="${config['http_host']}" size="30" maxlength="40"><br>
|
||||||
|
<i class="smalltext">e.g. localhost or 0.0.0.0</i>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h3>HTTP Username:</h3>
|
||||||
|
<input type="text" name="http_username" value="${config['http_user']}" size="30" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>HTTP Port:</h3>
|
||||||
|
<input type="text" name="http_port" value="${config['http_port']}" size="10" maxlength="40">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>HTTP Password:</h3>
|
||||||
|
<input type="password" name="http_password" value="${config['http_pass']}" size="30" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Launch Browser on Startup: <input type="checkbox" name="launch_browser" value="1" ${config['launch_browser']} /></h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Enable API: <input type="checkbox" name="api_enabled" id="api_enabled" value="1" ${config['api_enabled']} /></h3>
|
||||||
|
<div id="apioptions">
|
||||||
|
<br>
|
||||||
|
<h3>API key:<input type="text" name="api_key" id="api_key" value="${config['api_key']}" size="30"><input type="button" value="Generate" id="generate_api"></h3><br><br>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>NZB Search Interval:</h3>
|
||||||
|
<input type="text" name="nzb_search_interval" value="${config['nzb_search_interval']}" size="4" maxlength="10">mins
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Download Scan Interval:</h3>
|
||||||
|
<input type="text" name="download_scan_interval" value="${config['download_scan_interval']}" size="4" maxlength="10">mins
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Library Scan Interval:</h3>
|
||||||
|
<input type="text" name="libraryscan_interval" value="${config['libraryscan_interval']}" size="4" maxlength="10">mins
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<a name="download"><h1><u>Download Settings</u></h1></a>
|
||||||
|
<table class="configtable" summary="Download Settings">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>SABnzbd:</h2>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>SABnzbd Host:</h3><input type="text" name="sab_host" value="${config['sab_host']}" size="30" maxlength="40"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">usually http://localhost:8080</i>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>SABnzbd Username:</h3><input type="text" name="sab_username" value="${config['sab_user']}" size="20" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>SABnzbd API:</h3><input type="text" name="sab_apikey" value="${config['sab_api']}" size="36" maxlength="40">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>SABnzbd Password:</h3><input type="password" name="sab_password" value="${config['sab_pass']}" size="20" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>SABnzbd Category:</h3><input type="text" name="sab_category" value="${config['sab_cat']}" size="20" maxlength="40">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Music Download Directory:</h3><input type="text" name="download_dir" value="${config['download_dir']}" size="50"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">Full path to the directory where SAB downloads your music<br>
|
||||||
|
e.g. /Users/name/Downloads/music</i>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Use Black Hole: <input type="checkbox" name="blackhole" value=1 ${config['use_blackhole']} /></h3>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Black Hole Directory:</h3><input type="text" name="blackhole_dir" value="${config['blackhole_dir']}" size="50"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">Folder your Download program watches for NZBs</i>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Usenet Retention:<input type="text" name="usenet_retention" value="${config['usenet_retention']}" size="5" maxlength="10"></h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<br><br><br><br><h2>Torrent:</h2>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Black Hole Directory:</h3><input type="text" name="torrentblackhole_dir" value="${config['torrentblackhole_dir']}" size="50"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">Folder your Download program watches for Torrents</i>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Minimum seeders:</h3><input type="text" name="numberofseeders" value="${config['numberofseeders']}" size="5"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">Number of minimum seeders a torrent must have to be accepted</i>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Music Download Directory:</h3><input type="text" name="download_torrent_dir" value="${config['download_torrent_dir']}" size="50"><br>
|
||||||
|
|
||||||
|
<i class="smalltext">Full path to the directory where your torrent client downloads your music<br>
|
||||||
|
e.g. /Users/name/Downloads/music</i>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<a name="providers"><h1><u>Search Providers</u></h1></a>
|
||||||
|
<table class="configtable" summary="Search Providers">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>SABnzbd:</h2>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>NZBMatrix: <input type="checkbox" name="nzbmatrix" value="1" ${config['use_nzbmatrix']} /></h3>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>NZBMatrix Username: </h3>
|
||||||
|
<input type="text" name="nzbmatrix_username" value="${config['nzbmatrix_user']}" size="30" maxlength="40">
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>NZBMatrix API: </h3>
|
||||||
|
<input type="text" name="nzbmatrix_apikey" value="${config['nzbmatrix_api']}" size="36" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>Newznab: <input type="checkbox" name="newznab" value="1" ${config['use_newznab']} /></h3>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Newznab Host: </h3>
|
||||||
|
<input type="text" name="newznab_host" value="${config['newznab_host']}" size="30" maxlength="40"><br>
|
||||||
|
<i class="smalltext">e.g. http://nzb.su</i>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Newznab API: </h3>
|
||||||
|
<input type="text" name="newznab_apikey" value="${config['newznab_api']}" size="36" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>NZBs.org: <input type="checkbox" name="nzbsorg" value="1" ${config['use_nzbsorg']} /></h3>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<h3>NZBs.org API Key: </h3>
|
||||||
|
<input type="text" name="nzbsorg_hash" value="${config['nzbsorg_hash']}" size="30" maxlength="40">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>Newzbin: <input type="checkbox" name="newzbin" value="1" ${config['use_newzbin']} /></h3>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Newzbin UID: </h3>
|
||||||
|
<input type="text" name="newzbin_uid" value="${config['newzbin_uid']}" size="30" maxlength="40">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3>Newzbin Password: </h3>
|
||||||
|
<input type="text" name="newzbin_password" value="${config['newzbin_pass']}" size="36" maxlength="40">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>Torrent:</h2><br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>Isohunt: <input type="checkbox" name="use_isohunt" value="1" ${config['use_isohunt']} /></h3><br>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td id="middle">
|
||||||
|
<h3>Mininova: <input type="checkbox" name="use_mininova" value="1" ${config['use_mininova']} /></h3><br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td id="middle">
|
||||||
|
<h3>Kick Ass Torrents: <input type="checkbox" name="use_kat" value="1" ${config['use_kat']} /></h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<a name="post_processing"><h1><u>Quality & Post Processing</u></h1></a>
|
||||||
|
|
||||||
|
<table class="configtable" summary="Quality & Post Processing">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>Album Quality:</h2><br>
|
||||||
|
<h4><input type="radio" name="preferred_quality" value="0" ${config['pref_qual_0']} /> Highest Quality excluding Lossless</h4>
|
||||||
|
<h4><input type="radio" name="preferred_quality" value="1" ${config['pref_qual_1']} /> Highest Quality including Lossless</h4>
|
||||||
|
<h4><input type="radio" name="preferred_quality" value="3" ${config['pref_qual_3']} /> Lossless Only</h4>
|
||||||
|
<h4><input type="radio" name="preferred_quality" value="2" ${config['pref_qual_2']} /> Preferred Bitrate:
|
||||||
|
<input type="text" name="preferred_bitrate" value="${config['pref_bitrate']}" size="3" maxlength="5" />kbps</h4>
|
||||||
|
<i class="smalltext2"><input type="checkbox" name="detect_bitrate" value="1" ${config['detect_bitrate']} />Auto-Detect Preferred Bitrate </i>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h2>Post-Processing:</h2>
|
||||||
|
<h4><input type="checkbox" name="move_files" value="1" ${config['move_files']} /> Move downloads to Destination Folder</h4>
|
||||||
|
<h4><input type="checkbox" name="rename_files" value="1" ${config['rename_files']} /> Rename files</h4>
|
||||||
|
<h4><input type="checkbox" name="correct_metadata" value="1" ${config['correct_metadata']} /> Correct metadata</h4>
|
||||||
|
<h4><input type="checkbox" name="cleanup_files" value="1" ${config['cleanup_files']} /> Delete leftover files (.m3u, .nfo, .sfv, .nzb, etc.)</h4>
|
||||||
|
<h4><input type="checkbox" name="add_album_art" value="1" ${config['add_album_art']}> Add album art as 'folder.jpg' to album folder</h4>
|
||||||
|
<h4><input type="checkbox" name="embed_album_art" value="1" ${config['embed_album_art']}> Embed album art in each file</h4>
|
||||||
|
<h4><input type="checkbox" name="embed_lyrics" value="1" ${config['embed_lyrics']}> Embed lyrics</h4>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<h3>Path to Destination folder:</h3><input type="text" name="destination_dir" value="${config['dest_dir']}" size="50">
|
||||||
|
<br>
|
||||||
|
<i class="smalltext">e.g. /Users/name/Music/iTunes or /Volumes/share/music</i>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<a name="advanced_settings"><h1><u>Advanced Settings</u></h1></a>
|
||||||
|
|
||||||
|
<table class="configtable" summary="Advanced Settings">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>Renaming Options:</h2>
|
||||||
|
<br>
|
||||||
|
<h3>Folder Format:</h3><input type="text" name="folder_format" value="${config['folder_format']}" size="43"><br>
|
||||||
|
<i class="smalltext">Use: $Artist/$artist, $Album/$album, $Year/$year, $Type/$type (release type) and $First/$first (first letter in artist name)<br />
|
||||||
|
E.g.: $Type/$First/$artist/$album [$year] = Album/G/girl talk/all day [2010]</i>
|
||||||
|
<br><br>
|
||||||
|
<h3>File Format:</h3><input type="text" name="file_format" value="${config['file_format']}" size="43">
|
||||||
|
<br>
|
||||||
|
<i class="smalltext">Use: $Track/$track (track #), $Title/$title, $Artist/$artist, $Album/$album and $Year/$year</i>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h2>Miscellaneous:</h2>
|
||||||
|
<br>
|
||||||
|
<h3><input type="checkbox" name="include_extras" value="1" ${config['include_extras']} />Automatically Include Extras When Adding an Artist</h3>
|
||||||
|
<i class="smalltext">(EPs, Compilations, Live Albums, Remix Albums and Singles)</i>
|
||||||
|
<h3><input type="checkbox" name="autowant_upcoming" value="1" ${config['autowant_upcoming']} />Automatically Mark Upcoming Albums as Wanted</h3>
|
||||||
|
<h3><input type="checkbox" name="autowant_all" value="1" ${config['autowant_all']} />Automatically Mark All Albums as Wanted</h3>
|
||||||
|
<br>
|
||||||
|
<h3>Interface: <select name="interface"><h3>
|
||||||
|
%for interface in config['interface_list']:
|
||||||
|
<%
|
||||||
|
if interface == headphones.INTERFACE:
|
||||||
|
selected = 'selected="selected"'
|
||||||
|
else:
|
||||||
|
selected = ''
|
||||||
|
%>
|
||||||
|
<option value="${interface}" ${selected}>${interface}</option>
|
||||||
|
%endfor
|
||||||
|
</select>
|
||||||
|
<br><br>
|
||||||
|
<h3>Log Directory:</h3><input type="text" name="log_dir" value="${config['log_dir']}" size="50">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>Re-Encoding Options:</h2>
|
||||||
|
<i class="smalltext">Note: this option requires the lame or ffmpeg encoder</i>
|
||||||
|
<br><br>
|
||||||
|
<h3><input type="checkbox" name="encode" id="encode" value="1" ${config['encode']}/> Re-encode downloads during postprocessing</h3>
|
||||||
|
<br>
|
||||||
|
<div id="encoderoptions">
|
||||||
|
<h4><input type="checkbox" name="encoderlossless" value="1" ${config['encoderlossless']}/> Only re-encode lossless files (.flac)</h4>
|
||||||
|
<br>
|
||||||
|
<%
|
||||||
|
if config['encoder'] == 'lame':
|
||||||
|
lameselect = 'selected="selected"'
|
||||||
|
ffmpegselect = ''
|
||||||
|
else:
|
||||||
|
lameselect = ''
|
||||||
|
ffmpegselect = 'selected="selected"'
|
||||||
|
%>
|
||||||
|
<h4>Encoder: <select name="encoder">
|
||||||
|
<option value="lame" ${lameselect}>lame</option>
|
||||||
|
<option value="ffmpeg" ${ffmpegselect}>ffmpeg</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
Format: <select name="encoderoutputformat">
|
||||||
|
%for x in ['mp3', 'ogg', 'm4a']:
|
||||||
|
<%
|
||||||
|
if config['encoderoutputformat'] == x:
|
||||||
|
outputselect = 'selected'
|
||||||
|
else:
|
||||||
|
outputselect = ''
|
||||||
|
%>
|
||||||
|
<option value=${x} ${outputselect}>${x}</option>
|
||||||
|
%endfor
|
||||||
|
</select></h4>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<h3>Audio Properties:</h3>
|
||||||
|
<br>
|
||||||
|
<h4>VBR/CBR: <select name="encodervbrcbr">
|
||||||
|
%for x in ['cbr', 'vbr']:
|
||||||
|
<%
|
||||||
|
if config['encodervbrcbr'] == x:
|
||||||
|
outputselect = 'selected'
|
||||||
|
else:
|
||||||
|
outputselect = ''
|
||||||
|
%>
|
||||||
|
<option value=${x} ${outputselect}>${x}</option>
|
||||||
|
%endfor
|
||||||
|
</select>
|
||||||
|
|
||||||
|
Quality: <select name="encoderquality">
|
||||||
|
%for x in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
|
||||||
|
<%
|
||||||
|
if config['encoderquality'] == x:
|
||||||
|
outputselect = 'selected'
|
||||||
|
else:
|
||||||
|
outputselect = ''
|
||||||
|
%>
|
||||||
|
<option value=${x} ${outputselect}>${x}</option>
|
||||||
|
%endfor
|
||||||
|
</select></h4>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<h4>Bitrate: <select name="bitrate">
|
||||||
|
%for x in [64, 128, 192, 256, 320]:
|
||||||
|
<%
|
||||||
|
if config["bitrate"] == x:
|
||||||
|
bitrateselected = "selected"
|
||||||
|
else:
|
||||||
|
bitrateselected = ''
|
||||||
|
%>
|
||||||
|
<option value=${x} ${bitrateselected}> ${x} kbps</option>
|
||||||
|
%endfor
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<%
|
||||||
|
if config["samplingfrequency"] == 44100:
|
||||||
|
freq44100 = 'selected="selected"'
|
||||||
|
freq48000 = ''
|
||||||
|
else:
|
||||||
|
freq44100 = ''
|
||||||
|
freq48000 = 'selected="selected"'
|
||||||
|
%>
|
||||||
|
Sampling: <select name="samplingfrequency">
|
||||||
|
<option value=44100 ${freq44100}>44.1 kHz</option>
|
||||||
|
<option value=48000 ${freq48000}>48.0 kHz</option>
|
||||||
|
</select></h4>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h3>Advanced Encoding Options:</h3>
|
||||||
|
<h4>
|
||||||
|
(ignores audio properties)
|
||||||
|
</h4>
|
||||||
|
<input type="text" name="advancedencoder" value="${config['advancedencoder']}" size="43">
|
||||||
|
<br>
|
||||||
|
<h3>Path to Encoder:</h3><input type="text" name="encoderfolder" value="${config['encoderfolder']}" size="43">
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h2>Notifications:</h2><br>
|
||||||
|
<h3><input type="checkbox" name="prowl_enabled" id="prowl" value="1" ${config['prowl_enabled']} />Enable Prowl Notifications</h3><br>
|
||||||
|
<div id="prowloptions">
|
||||||
|
<h3>API key:</h3><input type="text" name="prowl_keys" value="${config['prowl_keys']}" size="50"><br><br>
|
||||||
|
<h3><input type="checkbox" name="prowl_onsnatch" value="1" ${config['prowl_onsnatch']} />Notify on snatch?</h3><br>
|
||||||
|
<h3>Priority (-2,-1,0,1 or 2):</h3><input type="text" name="prowl_priority" value="${config['prowl_priority']}" size="2"><br><br>
|
||||||
|
</div>
|
||||||
|
<h3><input type="checkbox" name="xbmc_enabled" id="xbmc" value="1" ${config['xbmc_enabled']} />Enable XBMC Updates</h3><br>
|
||||||
|
<div id="xbmcoptions">
|
||||||
|
<h3>XBMC Host:Port:</h3><input type="text" name="xbmc_host" value="${config['xbmc_host']}" size="30"><br>
|
||||||
|
<i class="smalltext">e.g. http://localhost:8080. Separate hosts with commas</i><br>
|
||||||
|
<h3>XBMC Username:</h3><input type="text" name="xbmc_username" value="${config['xbmc_username']}" size="30"><br><br>
|
||||||
|
<h3>XBMC Password:</h3><input type="password" name="xbmc_password" value="${config['xbmc_password']}" size="30"><br><br>
|
||||||
|
<h3><input type="checkbox" name="xbmc_update" value="1" ${config['xbmc_update']} />Update XBMC Library</h3><br>
|
||||||
|
<h3><input type="checkbox" name="xbmc_notify" value="1" ${config['xbmc_notify']} />Send Notification to XBMC</h3><br>
|
||||||
|
</div>
|
||||||
|
<h3><input type="checkbox" name="nma_enabled" id="nma" value="1" ${config['nma_enabled']} />Enable NotifyMyAndroid</h3><br>
|
||||||
|
<div id="nmaoptions">
|
||||||
|
<h3>NotifyMyAndroid API Key:</h3><input type="text" name="nma_apikey" value="${config['nma_apikey']}" size="30"><br>
|
||||||
|
<i class="smalltext">Separate multiple api keys with commas</i><br>
|
||||||
|
<h3>Priority:<select name="nma_priority"></h3>
|
||||||
|
%for x in [-2,-1,0,1,2]:
|
||||||
|
<%
|
||||||
|
if config['nma_priority'] == x:
|
||||||
|
nma_priority_selected = 'selected'
|
||||||
|
else:
|
||||||
|
nma_priority_selected = ''
|
||||||
|
|
||||||
|
if x == -2:
|
||||||
|
nma_priority_value = 'Very Low'
|
||||||
|
elif x == -1:
|
||||||
|
nma_priority_value = 'Moderate'
|
||||||
|
elif x == 0:
|
||||||
|
nma_priority_value = 'Normal'
|
||||||
|
elif x == 1:
|
||||||
|
nma_priority_value = 'High'
|
||||||
|
else:
|
||||||
|
nma_priority_value = 'Emergency'
|
||||||
|
%>
|
||||||
|
<option value=${x} ${nma_priority_selected}>${nma_priority_value}</option>
|
||||||
|
%endfor
|
||||||
|
</select>
|
||||||
|
<br><br>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h3>Muscbrainz Mirror: <select name="mirror" id="mirror"><h3>
|
||||||
|
%for mirror in config['mirror_list']:
|
||||||
|
<%
|
||||||
|
if mirror == headphones.MIRROR:
|
||||||
|
selected = 'selected="selected"'
|
||||||
|
else:
|
||||||
|
selected = ''
|
||||||
|
%>
|
||||||
|
<option value="${mirror}" ${selected}>${mirror}</option>
|
||||||
|
%endfor
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<div id="customoptions">
|
||||||
|
<h3>Host:<br><input type="text" name="customhost" value="${config['customhost']}" size="20"></h3>
|
||||||
|
<h3>Port:<br><input type="text" name="customport" value="${config['customport']}" size="8"></h3>
|
||||||
|
<h3>Sleep Interval:<br><input type="text" name="customsleep" value="${config['customsleep']}" size="4"></h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="hpserveroptions">
|
||||||
|
<h3>Username:<br><input type="text" name="hpuser" value="${config['hpuser']}" size="20"></h3>
|
||||||
|
<h3>Password:<br><input type="password" name="hppass" value="${config['hppass']}" size="15"></h3>
|
||||||
|
<i class="smalltext2"><a href="http://headphones.codeshy.com/vip">Get an Account</a></p>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p class="center"><input type="submit" value="Save Changes"><br>
|
||||||
|
(Web Interface changes require a restart to take effect)</h3>
|
||||||
|
</form>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script>
|
||||||
|
|
||||||
|
hideServerDivs = function () {
|
||||||
|
$("#customoptions").hide("fast");
|
||||||
|
$("#hpserveroptions").hide("fast");
|
||||||
|
};
|
||||||
|
|
||||||
|
handleNewSelection = function () {
|
||||||
|
|
||||||
|
hideServerDivs();
|
||||||
|
|
||||||
|
switch ($(this).val()) {
|
||||||
|
case 'custom':
|
||||||
|
$("#customoptions").show("fast");
|
||||||
|
break;
|
||||||
|
case 'headphones':
|
||||||
|
$("#hpserveroptions").show("fast");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
if ($("#api_enabled").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#apioptions").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#apioptions").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#api_enabled").click(function(){
|
||||||
|
if ($("#api_enabled").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#apioptions").show("fast");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#apioptions").hide("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#api_key').click(function(){ $('#api_key').select() });
|
||||||
|
$("#generate_api").click(function(){
|
||||||
|
$.get('generateAPI',
|
||||||
|
function(data){
|
||||||
|
if (data.error != undefined) {
|
||||||
|
alert(data.error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$('#api_key').val(data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if ($("#encode").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#encoderoptions").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#encoderoptions").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#encode").click(function(){
|
||||||
|
if ($("#encode").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#encoderoptions").show("fast");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#encoderoptions").hide("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($("#prowl").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#prowloptions").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#prowloptions").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#prowl").click(function(){
|
||||||
|
if ($("#prowl").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#prowloptions").show("fast");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#prowloptions").hide("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($("#xbmc").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#xbmcoptions").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#xbmcoptions").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#xbmc").click(function(){
|
||||||
|
if ($("#xbmc").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#xbmcoptions").show("fast");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#xbmcoptions").hide("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($("#nma").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#nmaoptions").show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#nmaoptions").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#nma").click(function(){
|
||||||
|
if ($("#nma").is(":checked"))
|
||||||
|
{
|
||||||
|
$("#nmaoptions").show("fast");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#nmaoptions").hide("fast");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#mirror").change(handleNewSelection);
|
||||||
|
handleNewSelection.apply($("#mirror"));
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
<%def name="body()">
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<h1>Artists You Might Like</h1>
|
||||||
|
<div class="cloudtag">
|
||||||
|
<ul id="cloud">
|
||||||
|
%for artist in cloudlist:
|
||||||
|
<li><a href="addArtist?artistid=${artist['ArtistID']}" class="tag${artist['Count']}">${artist['ArtistName']}</a></li>
|
||||||
|
%endfor
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
<%!
|
||||||
|
from headphones import helpers
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%def name="headerIncludes()">
|
||||||
|
<div id="subhead_container">
|
||||||
|
<ul id="subhead_menu">
|
||||||
|
<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 id="paddingheader">
|
||||||
|
History
|
||||||
|
</div>
|
||||||
|
<table class="display" id="history_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="dateadded">Date Added</th>
|
||||||
|
<th id="filename">File Name</th>
|
||||||
|
<th id="size">Size</th>
|
||||||
|
<th id="status">Status</th>
|
||||||
|
<th id="action"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for item in history:
|
||||||
|
<%
|
||||||
|
if item['Status'] == 'Processed':
|
||||||
|
grade = 'A'
|
||||||
|
elif item['Status'] == 'Snatched':
|
||||||
|
grade = 'C'
|
||||||
|
elif item['Status'] == 'Unprocessed':
|
||||||
|
grade = 'X'
|
||||||
|
else:
|
||||||
|
grade = 'U'
|
||||||
|
|
||||||
|
fileid = 'unknown'
|
||||||
|
if item['URL'].find('nzb') != -1:
|
||||||
|
fileid = 'nzb'
|
||||||
|
if item['URL'].find('torrent') != -1:
|
||||||
|
fileid = 'torrent'
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
<td id="dateadded">${item['DateAdded']}</td>
|
||||||
|
<td id="filename">${item['Title']} [<a href="${item['URL']}">${fileid}</a>]<a href="albumPage?AlbumID=${item['AlbumID']}">[album page]</a></td>
|
||||||
|
<td id="size">${helpers.bytes_to_mb(item['Size'])}</td>
|
||||||
|
<td id="status">${item['Status']}</td>
|
||||||
|
<td id="action">[<a href="queueAlbum?AlbumID=${item['AlbumID']}&redirect=history">retry</a>][<a href="queueAlbum?AlbumID=${item['AlbumID']}&new=True&redirect=history">new</a>]</td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#history_table').dataTable(
|
||||||
|
{
|
||||||
|
"oLanguage": {
|
||||||
|
"sLengthMenu":"Show _MENU_ items per page",
|
||||||
|
"sEmptyTable": "No History to Display",
|
||||||
|
"sInfo":"Showing _START_ to _END_ of _TOTAL_ items",
|
||||||
|
"sInfoEmpty":"Showing 0 to 0 of 0 items",
|
||||||
|
"sInfoFiltered":"(filtered from _MAX_ total items)"},
|
||||||
|
"iDisplayLength": 25,
|
||||||
|
"sPaginationType": "full_numbers",
|
||||||
|
"aaSorting": []
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
<%!
|
||||||
|
from headphones import helpers
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%def name="body()">
|
||||||
|
<table class="display" id="artist_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="name">Artist Name</th>
|
||||||
|
<th id="status">Status</th>
|
||||||
|
<th id="album">Latest Album</th>
|
||||||
|
<th id="have">Have</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%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 = '?'
|
||||||
|
|
||||||
|
if artist['ReleaseDate'] and artist['LatestAlbum']:
|
||||||
|
releasedate = artist['ReleaseDate']
|
||||||
|
albumdisplay = '<i>%s</i> (%s)' % (artist['LatestAlbum'], artist['ReleaseDate'])
|
||||||
|
if releasedate > helpers.today():
|
||||||
|
grade = 'A'
|
||||||
|
else:
|
||||||
|
grade = 'Z'
|
||||||
|
elif artist['LatestAlbum']:
|
||||||
|
releasedate = ''
|
||||||
|
grade = 'Z'
|
||||||
|
albumdisplay = '<i>%s</i>' % artist['LatestAlbum']
|
||||||
|
else:
|
||||||
|
releasedate = ''
|
||||||
|
grade = 'Z'
|
||||||
|
albumdisplay = '<i>None</i>'
|
||||||
|
|
||||||
|
if artist['Status'] == 'Paused':
|
||||||
|
grade = 'X'
|
||||||
|
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
<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>
|
||||||
|
<td id="have"><span title="${percent}"></span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#artist_table').dataTable(
|
||||||
|
{
|
||||||
|
"aoColumns": [
|
||||||
|
{ "sType": "title-string"},
|
||||||
|
null,
|
||||||
|
{ "sType": "title-string"},
|
||||||
|
{ "sType": "title-numeric"}
|
||||||
|
],
|
||||||
|
"bStateSave": true,
|
||||||
|
"iDisplayLength": 50,
|
||||||
|
"sPaginationType": "full_numbers",
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
<%!
|
||||||
|
from headphones import helpers
|
||||||
|
%>
|
||||||
|
|
||||||
|
<%def name="body()">
|
||||||
|
<table class="display" id="log_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="timestamp">Timestamp</th>
|
||||||
|
<th id="level">Level</th>
|
||||||
|
<th id="message">Message</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for line in lineList:
|
||||||
|
<%
|
||||||
|
timestamp, message, level, threadname = line
|
||||||
|
|
||||||
|
if level == 'WARNING' or level == 'ERROR':
|
||||||
|
grade = 'X'
|
||||||
|
else:
|
||||||
|
grade = 'Z'
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
<td id="timestamp">${timestamp}</td>
|
||||||
|
<td id="level">${level}</td>
|
||||||
|
<td id="message">${message}</td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#log_table').dataTable(
|
||||||
|
{
|
||||||
|
"oLanguage": {
|
||||||
|
"sLengthMenu":"Show _MENU_ lines per page",
|
||||||
|
"sEmptyTable": "No log information available",
|
||||||
|
"sInfo":"Showing _START_ to _END_ of _TOTAL_ lines",
|
||||||
|
"sInfoEmpty":"Showing 0 to 0 of 0 lines",
|
||||||
|
"sInfoFiltered":"(filtered from _MAX_ total lines)"},
|
||||||
|
"bStateSave": true,
|
||||||
|
"iDisplayLength": 100,
|
||||||
|
"sPaginationType": "full_numbers",
|
||||||
|
"aaSorting": []
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
<%!
|
||||||
|
import headphones
|
||||||
|
from headphones.helpers import checked
|
||||||
|
%>
|
||||||
|
<%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 id="paddingheader">
|
||||||
|
<h1><h1>
|
||||||
|
</div>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<h1>Scan Music Library</h1><br />
|
||||||
|
Where do you keep your music?<br /><br />
|
||||||
|
You can put in any directory, and it will scan for audio files in that folder
|
||||||
|
(including all subdirectories)<br /><br /> For example: '/Users/name/Music'
|
||||||
|
<br /> <br />
|
||||||
|
It may take a while depending on how many files you have. You can navigate away from the page<br />
|
||||||
|
as soon as you click 'Submit'
|
||||||
|
<br /><br />
|
||||||
|
<form action="musicScan" method="GET" align="center">
|
||||||
|
%if headphones.MUSIC_DIR:
|
||||||
|
<input type="text" value="${headphones.MUSIC_DIR}" name="path" size="70" />
|
||||||
|
%else:
|
||||||
|
<input type="text" value="Enter a Music Directory to scan" onfocus="if
|
||||||
|
(this.value==this.defaultValue) this.value='';" name="path" size="70" />
|
||||||
|
%endif
|
||||||
|
<br>
|
||||||
|
<h3><input type="checkbox" name="autoadd" value="1" ${checked(headphones.ADD_ARTISTS)}>Automatically add new artists</h3>
|
||||||
|
<br><br>
|
||||||
|
<input type="submit" /></form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table_wrapper_left">
|
||||||
|
<h1>Import Last.FM Artists</h1><br />
|
||||||
|
Enter the username whose artists you want to import:<br /><br />
|
||||||
|
<form action="importLastFM" method="GET" align="center">
|
||||||
|
<%
|
||||||
|
if headphones.LASTFM_USERNAME:
|
||||||
|
lastfmvalue = headphones.LASTFM_USERNAME
|
||||||
|
else:
|
||||||
|
lastfmvalue = 'Last.fm Username'
|
||||||
|
%>
|
||||||
|
<input type="text" value="${lastfmvalue}" onfocus="if
|
||||||
|
(this.value==this.defaultValue) this.value='';" name="username" size="18" />
|
||||||
|
<input type="submit" /></form><br /><br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table_wrapper_right">
|
||||||
|
<h1>Placeholder :-)</h1><br />
|
||||||
|
<br /><br />
|
||||||
|
<form action="" method="GET" align="center">
|
||||||
|
<input type="text" value="" onfocus="if
|
||||||
|
(this.value==this.defaultValue) this.value='';" name="" size="18" />
|
||||||
|
<input type="submit" /></form><br /><br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<h1>Force Search</h1><br />
|
||||||
|
<h3><a href="forceSearch">Force Check for Wanted Albums</a></h3>
|
||||||
|
<h3><a href="forceUpdate">Force Update Active Artists</a></h3>
|
||||||
|
<h3><a href="forcePostProcess">Force Post-Process Albums in Download Folder</a></h3><br><br>
|
||||||
|
<h3><a href="checkGithub">Check for Headphones Updates</a></h3>
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
|
||||||
|
<%def name="body()">
|
||||||
|
<div id="paddingheader">
|
||||||
|
<h1>Manage Artists<h1>
|
||||||
|
</div>
|
||||||
|
<form action="markArtists" method="get">
|
||||||
|
<p class="indented">
|
||||||
|
<select name="action">
|
||||||
|
<option value="pause">Pause</option>
|
||||||
|
<option value="resume">Resume</option>
|
||||||
|
<option value="refresh">Refresh</option>
|
||||||
|
<option value="delete">Delete</option>
|
||||||
|
</select>
|
||||||
|
selected artists
|
||||||
|
<input type="submit" value="Go">
|
||||||
|
</p>
|
||||||
|
<table class="display" id="artist_table">
|
||||||
|
<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="album">Latest Album</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for artist in artists:
|
||||||
|
<%
|
||||||
|
if artist['Status'] == 'Paused':
|
||||||
|
grade = 'X'
|
||||||
|
elif artist['Status'] == 'Loading':
|
||||||
|
grade = 'C'
|
||||||
|
else:
|
||||||
|
grade = 'Z'
|
||||||
|
|
||||||
|
if artist['ReleaseDate'] and artist['LatestAlbum']:
|
||||||
|
releasedate = artist['ReleaseDate']
|
||||||
|
albumdisplay = '<i>%s</i> (%s)' % (artist['LatestAlbum'], artist['ReleaseDate'])
|
||||||
|
elif artist['LatestAlbum']:
|
||||||
|
releasedate = ''
|
||||||
|
albumdisplay = '<i>%s</i>' % artist['LatestAlbum']
|
||||||
|
else:
|
||||||
|
releasedate = ''
|
||||||
|
albumdisplay = '<i>None</i>'
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
<td id="select"><input type="checkbox" name="${artist['ArtistID']}" class="checkbox" /></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
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#artist_table').dataTable(
|
||||||
|
{
|
||||||
|
"aoColumns": [
|
||||||
|
null,
|
||||||
|
{ "sType": "title-string"},
|
||||||
|
null,
|
||||||
|
{ "sType": "title-string"}
|
||||||
|
],
|
||||||
|
"bStateSave": true,
|
||||||
|
"bPaginate": false
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
<%!
|
||||||
|
import headphones
|
||||||
|
%>
|
||||||
|
<%def name="body()">
|
||||||
|
<div id="paddingheader">
|
||||||
|
<h1>Manage New Artists<h1>
|
||||||
|
<h3><a href="musicScan?path=${headphones.MUSIC_DIR}&redirect=manageNew">Scan Music Library</a></h3>
|
||||||
|
</div>
|
||||||
|
<form action="addArtists" method="get">
|
||||||
|
<p class="indented">
|
||||||
|
Add selected artists
|
||||||
|
<input type="submit" value="Go">
|
||||||
|
</p>
|
||||||
|
<table class="display" id="artist_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||||
|
<th id="name">Artist Name</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for artist in headphones.NEW_ARTISTS:
|
||||||
|
<tr class="gradeZ">
|
||||||
|
<td id="select"><input type="checkbox" name="${artist}" class="checkbox" /></td>
|
||||||
|
<td id="name">${artist}</a></td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#artist_table').dataTable(
|
||||||
|
{
|
||||||
|
"aaSorting": [[1, 'asc']],
|
||||||
|
"bStateSave": false,
|
||||||
|
"bPaginate": false
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
|
||||||
|
<%def name="body()">
|
||||||
|
|
||||||
|
<div id="paddingheader">
|
||||||
|
<h1>Search Results<h1>
|
||||||
|
</div>
|
||||||
|
<table class="display" id="searchresults_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
%if type == 'album':
|
||||||
|
<th id="albumname">Album Name</th>
|
||||||
|
%endif
|
||||||
|
<th id="artistname">Artist Name</th>
|
||||||
|
<th id="score">Score</th>
|
||||||
|
<th id="add"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%if searchresults:
|
||||||
|
%for result in searchresults:
|
||||||
|
<%
|
||||||
|
if result['score'] == 100:
|
||||||
|
grade = 'A'
|
||||||
|
else:
|
||||||
|
grade = 'Z'
|
||||||
|
%>
|
||||||
|
<tr class="grade${grade}">
|
||||||
|
%if type == 'album':
|
||||||
|
<td id="albumname"><a href="${result['albumurl']}">${result['title']}</a></td>
|
||||||
|
%endif
|
||||||
|
<td id="artistname"><a href="${result['url']}">${result['uniquename']}</a></td>
|
||||||
|
<td id="score">${result['score']}</td>
|
||||||
|
%if type == 'album':
|
||||||
|
<td id="add"><a href="addReleaseById?rid=${result['albumid']}">Add this album</a></td>
|
||||||
|
%else:
|
||||||
|
<td id="add"><a href="addArtist?artistid=${result['id']}">Add this artist</a></td>
|
||||||
|
%endif
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
%endif
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#searchresults_table').dataTable(
|
||||||
|
{
|
||||||
|
"oLanguage": {
|
||||||
|
"sLengthMenu":"Show _MENU_ results per page",
|
||||||
|
"sEmptyTable": "No results",
|
||||||
|
"sInfo":"Showing _START_ to _END_ of _TOTAL_ results",
|
||||||
|
"sInfoEmpty":"Showing 0 to 0 of 0 results",
|
||||||
|
"sInfoFiltered":"(filtered from _MAX_ total results)"},
|
||||||
|
"iDisplayLength": 25,
|
||||||
|
"sPaginationType": "full_numbers",
|
||||||
|
"aaSorting": []
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<%inherit file="base.html"/>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<meta http-equiv="refresh" content="${timer};url=index">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="body()">
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<div id="shutdown">
|
||||||
|
<h1>Headphones is ${message}</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<%inherit file="base.html" />
|
||||||
|
<%def name="body()">
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<h1>Upcoming Albums</h1>
|
||||||
|
<table class="display" id="upcoming_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="albumart"></th>
|
||||||
|
<th id="artistname">Artist</th>
|
||||||
|
<th id="albumname">Album Name</th>
|
||||||
|
<th id="reldate">Release Date</th>
|
||||||
|
<th id="type">Type</th>
|
||||||
|
<th id="status">Status</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for album in upcoming:
|
||||||
|
<tr class="gradeZ">
|
||||||
|
<td id="albumart"><img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.MZZZZZZZ.jpg" height="50" width="50"></td>
|
||||||
|
<td id="artistname">${album['ArtistName']}</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="status">${album['Status']}</td>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form action="markAlbums" method="get">
|
||||||
|
<p class="indented">Mark selected albums as
|
||||||
|
<select name="action">
|
||||||
|
<option value="Skipped">Skipped</option>
|
||||||
|
<option value="Downloaded">Downloaded</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" value="Go">
|
||||||
|
</p>
|
||||||
|
<div class="table_wrapper">
|
||||||
|
<h1>Wanted Albums</h1>
|
||||||
|
<table class="display" id="wanted_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="select"><input type="checkbox" onClick="toggle(this)" /></th>
|
||||||
|
<th id="albumart"></th>
|
||||||
|
<th id="artistname">Artist</th>
|
||||||
|
<th id="albumname">Album Name</th>
|
||||||
|
<th id="reldate">Release Date</th>
|
||||||
|
<th id="type">Type</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
%for album in wanted:
|
||||||
|
<tr class="gradeZ">
|
||||||
|
<td id="select"><input type="checkbox" name="${album['AlbumID']}" class="checkbox" /></th>
|
||||||
|
<td id="albumart"><img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.MZZZZZZZ.jpg" height="50" width="50"></td>
|
||||||
|
<td id="artistname">${album['ArtistName']}</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>
|
||||||
|
</tr>
|
||||||
|
%endfor
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="headIncludes()">
|
||||||
|
<link rel="stylesheet" href="css/data_table.css">
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<%def name="javascriptIncludes()">
|
||||||
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function()
|
||||||
|
{
|
||||||
|
$('#wanted_table').dataTable(
|
||||||
|
{
|
||||||
|
"bFilter": false,
|
||||||
|
"bInfo": false,
|
||||||
|
"bPaginate": false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
@@ -6,29 +6,31 @@
|
|||||||
|
|
||||||
<%def name="headerIncludes()">
|
<%def name="headerIncludes()">
|
||||||
<div id="subhead_container">
|
<div id="subhead_container">
|
||||||
<ul id="subhead_menu">
|
<div id="subhead_menu">
|
||||||
<li><a href="deleteAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Delete Album</a></li>
|
<a id="menu_link_delete" href="deleteAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Delete Album</a>
|
||||||
%if album['Status'] == 'Skipped':
|
%if album['Status'] == 'Skipped':
|
||||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False">Mark Album as Wanted</a></li>
|
<a id="menu_link_wanted" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true)" data-success="'${album['AlbumTitle']}' added to your wanted list">Mark Album as Wanted</a>
|
||||||
%elif album['Status'] == 'Wanted':
|
%elif album['Status'] == 'Wanted':
|
||||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True">Force Check</a></li>
|
<a id="menu_link_check" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this));" data-success="Forced checking successful">Force Check</a>
|
||||||
<li><a href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Mark Album as Skipped</a></li>
|
<a id="menu_link_skipped" href="#" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),true);" data-success="'${album['AlbumTitle']}' marked as Skipped">Mark Album as Skipped</a>
|
||||||
%else:
|
%else:
|
||||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False">Retry Download</a></li>
|
<a id="menu_link_retry" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true);" data-success="Retrying to download '${album['AlbumTitle']}'">Retry Download</a>
|
||||||
<li><a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True">Try New Version</a></li>
|
<a id="menu_link_new" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),true);" data-success="Retrying new version of '${album['AlbumTitle']}'">Try New Version</a>
|
||||||
%endif
|
%endif
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="artistPage?ArtistID=${album['ArtistID']}" class="back">« Back to ${album['ArtistName']}</a>
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
<div class="table_wrapper">
|
<div class="table_wrapper">
|
||||||
<h2><a href="artistPage?ArtistID=${album['ArtistID']}"><- Back to ${album['ArtistName']}</a></h2>
|
<div id="albumheader" class="clearfix">
|
||||||
<div id="albumheader">
|
<div id="albumImg">
|
||||||
<img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.LZZZZZZZ.jpg" height="200" width="200" alt="albumart" class="albumArt">
|
<img src="http://ec1.images-amazon.com/images/P/${album['AlbumASIN']}.01.LZZZZZZZ.jpg" height="200" width="200" alt="albumart" class="albumArt" rel="dialog">
|
||||||
|
</div>
|
||||||
|
|
||||||
<h1><a href="http://musicbrainz.org/release-group/${album['AlbumID']}">${album['AlbumTitle']}</a></h1>
|
<h1><a href="http://musicbrainz.org/release-group/${album['AlbumID']}">${album['AlbumTitle']}</a></h1>
|
||||||
<h2><a href="http://musicbrainz.org/artist/${album['ArtistID']}">${album['ArtistName']}</a></h2>
|
<h2><a href="http://musicbrainz.org/artist/${album['ArtistID']}">${album['ArtistName']}</a></h2>
|
||||||
<br>
|
|
||||||
<%
|
<%
|
||||||
totalduration = myDB.action("SELECT SUM(TrackDuration) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
totalduration = myDB.action("SELECT SUM(TrackDuration) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||||
totaltracks = len(myDB.select("SELECT TrackTitle from tracks WHERE AlbumID=?", [album['AlbumID']]))
|
totaltracks = len(myDB.select("SELECT TrackTitle from tracks WHERE AlbumID=?", [album['AlbumID']]))
|
||||||
@@ -38,12 +40,16 @@
|
|||||||
albumduration = 'n/a'
|
albumduration = 'n/a'
|
||||||
|
|
||||||
%>
|
%>
|
||||||
<h3>Tracks: ${totaltracks}</h3>
|
<div class="albuminfo">
|
||||||
<h3>Duration: ${albumduration}</h3>
|
%if description:
|
||||||
%if description:
|
<p>${description['Summary']}</p>
|
||||||
<h3>Description: </h3>
|
%endif
|
||||||
${description['Summary']}
|
<ul>
|
||||||
%endif
|
<li>Tracks: <span>${totaltracks}</span></li>
|
||||||
|
<li>Duration: <span>${albumduration}</span></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="track_wrapper">
|
<div id="track_wrapper">
|
||||||
<table class="display" id="track_table">
|
<table class="display" id="track_table">
|
||||||
@@ -116,21 +122,25 @@
|
|||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="headIncludes()">
|
<%def name="headIncludes()">
|
||||||
<link rel="stylesheet" href="css/data_table.css">
|
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function()
|
$(document).ready(function() {
|
||||||
{
|
getAlbumInfo("${album['ArtistName']}","${album['AlbumTitle']}","#albumheader .albumArt",1);
|
||||||
$('#track_table').dataTable(
|
initActions();
|
||||||
{
|
|
||||||
"aaSorting": [],
|
$('#track_table').dataTable({
|
||||||
"bFilter": false,
|
"aaSorting": [],
|
||||||
"bInfo": false,
|
"bFilter": false,
|
||||||
"bPaginate": false
|
"bInfo": false,
|
||||||
});
|
"bPaginate": false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(window).load(function(){
|
||||||
|
initFancybox();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</%def>
|
</%def>
|
||||||
|
|||||||
@@ -6,40 +6,52 @@
|
|||||||
|
|
||||||
<%def name="headerIncludes()">
|
<%def name="headerIncludes()">
|
||||||
<div id="subhead_container">
|
<div id="subhead_container">
|
||||||
<ul id="subhead_menu">
|
<div id="subhead_menu">
|
||||||
<li><a href="refreshArtist?ArtistID=${artist['ArtistID']}">Refresh Artist</a></li>
|
<a id="menu_link_refresh" onclick="doAjaxCall('refreshArtist?ArtistID=${artist['ArtistID']}', $(this)),'table'" href="#" data-success="'${artist['ArtistName']}' will be refreshed">Refresh Artist</a>
|
||||||
<li><a href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a></li>
|
<a id="menu_link_delete" href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a>
|
||||||
%if artist['Status'] == 'Paused':
|
%if artist['Status'] == 'Paused':
|
||||||
<li><a href="resumeArtist?ArtistID=${artist['ArtistID']}">Resume Artist</a></li>
|
<a id="menu_link_resume" href="#" onclick="doAjaxCall('resumeArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} resumed">Resume Artist</a>
|
||||||
%else:
|
%else:
|
||||||
<li><a href="pauseArtist?ArtistID=${artist['ArtistID']}">Pause Artist</a></li>
|
<a id="menu_link_pauze" href="#" onclick="doAjaxCall('pauseArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} paused">Pause Artist</a>
|
||||||
%endif
|
%endif
|
||||||
%if artist['IncludeExtras']:
|
%if artist['IncludeExtras']:
|
||||||
<li><a href="removeExtras?ArtistID=${artist['ArtistID']}">Remove Extras</a></li>
|
<a id="menu_link_removeextra" href="#" onclick="doAjaxCall('removeExtras?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="Extra's removed">Remove Extras</a>
|
||||||
%else:
|
%else:
|
||||||
<li><a href="getExtras?ArtistID=${artist['ArtistID']}">Get Extras</a></li>
|
<a id="menu_link_getextra" href="#" onclick="doAjaxCall('getExtras?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="Getting Extra's">Get Extras</a>
|
||||||
%endif
|
%endif
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="/" class="back">« Back to overview</a>
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
<div id="paddingheader">
|
<div id="artistheader" class="clearfix">
|
||||||
<h1><a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a><h1>
|
<div id="artistImg">
|
||||||
%if artist['Status'] == 'Loading':
|
<img class="albumArt" src="http://ec1.images-amazon.com/images/P/None.01.MZZZZZZZ.jpg" width="200" height="200" alt="${artist['ArtistName']}"/>
|
||||||
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
</div>
|
||||||
%endif
|
<h1>
|
||||||
|
%if artist['Status'] == 'Loading':
|
||||||
|
<img src="interfaces/default/images/loader_black.gif" alt="loading" style="float:left; margin-right: 5px;"/>
|
||||||
|
%endif
|
||||||
|
<a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a>
|
||||||
|
%if artist['Status'] == 'Loading':
|
||||||
|
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
||||||
|
%endif
|
||||||
|
</h1>
|
||||||
|
<div id="artistBio"></div>
|
||||||
</div>
|
</div>
|
||||||
<form action="markAlbums" method="get"><input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
<form action="markAlbums" method="get" id="markAlbums">
|
||||||
<p class="indented">Mark selected albums as
|
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||||
<select name="action">
|
<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="Wanted">Wanted</option>
|
||||||
<option value="WantedNew">Wanted (new only)</option>
|
<option value="WantedNew">Wanted (new only)</option>
|
||||||
<option value="Skipped">Skipped</option>
|
<option value="Skipped">Skipped</option>
|
||||||
<option value="Downloaded">Downloaded</option>
|
<option value="Downloaded">Downloaded</option>
|
||||||
</select>
|
</select>
|
||||||
<input type="submit" value="Go">
|
<input type="hidden" value="Go">
|
||||||
</p>
|
</div>
|
||||||
<table class="display" id="album_table">
|
<table class="display" id="album_table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -103,22 +115,22 @@
|
|||||||
<td id="type">${album['Type']}</td>
|
<td id="type">${album['Type']}</td>
|
||||||
<td id="status">${album['Status']}
|
<td id="status">${album['Status']}
|
||||||
%if album['Status'] == 'Skipped':
|
%if album['Status'] == 'Skipped':
|
||||||
[<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">want</a>]
|
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' added to Wanted list">want</a>]
|
||||||
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
||||||
[<a href="unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">skip</a>]
|
[<a href="#" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' skipped">skip</a>]
|
||||||
%else:
|
%else:
|
||||||
[<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}" title="Retry the same download again">retry</a>][<a href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True" title="Try a new download, skipping all previously tried nzbs">new</a>]
|
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),'table')" data-success="Retrying to download '${album['AlbumTitle']}'" title="Retry the same download again" data-success="Retrying '${album['AlbumTitle']}'">retry</a>][<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),'table')" title="Try a new download, skipping all previously tried nzbs" data-success="Downloading new version for '${album['AlbumTitle']}'" data-success="Retrying to download New '${album['AlbumTitle']}'">new</a>]
|
||||||
%endif
|
%endif
|
||||||
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
||||||
[<a id="wantlossless" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True">want lossless</a>]
|
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="'${album['AlbumTitle']}' lossless added to Wanted list">want lossless</a>]
|
||||||
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
||||||
[<a id="wantlossless" href="queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True">retry lossless</a>]
|
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Retrying lossless '${album['AlbumTitle']}'">retry lossless</a>]
|
||||||
%endif
|
%endif
|
||||||
</td>
|
</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="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="bitrate">${bitrate}</td>
|
||||||
<td id="albumformat">${albumformat}</td>
|
<td id="albumformat">${albumformat}</td>
|
||||||
</tr>
|
</tr>
|
||||||
%endfor
|
%endfor
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -126,7 +138,7 @@
|
|||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="headIncludes()">
|
<%def name="headIncludes()">
|
||||||
<link rel="stylesheet" href="css/data_table.css">
|
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||||
%if artist['Status'] == 'Loading':
|
%if artist['Status'] == 'Loading':
|
||||||
<meta http-equiv="refresh" content="5">
|
<meta http-equiv="refresh" content="5">
|
||||||
%endif
|
%endif
|
||||||
@@ -134,32 +146,57 @@
|
|||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function()
|
function initThisPage() {
|
||||||
{
|
%if artist['Status'] == 'Loading':
|
||||||
$('#album_table').dataTable(
|
showMsg("Getting artist information",true);
|
||||||
{
|
%endif
|
||||||
"aoColumns": [
|
|
||||||
null,
|
$('#album_table').dataTable({
|
||||||
null,
|
"bDestroy": true,
|
||||||
null,
|
"aoColumns": [
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
{ "sType": "title-numeric"},
|
null,
|
||||||
null,
|
null,
|
||||||
null
|
null,
|
||||||
],
|
{ "sType": "title-numeric"},
|
||||||
"oLanguage": {
|
null,
|
||||||
"sLengthMenu":"Show _MENU_ albums per page",
|
null
|
||||||
"sEmptyTable": "No album information available",
|
],
|
||||||
"sInfo":"Showing _TOTAL_ albums",
|
"aoColumnDefs": [
|
||||||
"sInfoEmpty":"Showing 0 to 0 of 0 albums",
|
{ 'bSortable': false, 'aTargets': [ 0,1 ] }
|
||||||
"sInfoFiltered":"(filtered from _MAX_ total albums)"},
|
],
|
||||||
"bPaginate": false,
|
"oLanguage": {
|
||||||
"aaSorting": [[4, 'asc'],[3,'desc']]
|
"sLengthMenu":"Show _MENU_ albums per page",
|
||||||
|
"sEmptyTable": "No album information available",
|
||||||
|
"sInfo":"Showing _TOTAL_ albums",
|
||||||
|
"sInfoEmpty":"Showing 0 to 0 of 0 albums",
|
||||||
|
"sInfoFiltered":"(filtered from _MAX_ total albums)",
|
||||||
|
"sSearch": ""},
|
||||||
|
"bPaginate": false,
|
||||||
|
"aaSorting": [[4, 'asc'],[3,'desc']]
|
||||||
|
|
||||||
});
|
});
|
||||||
|
resetFilters("albums");
|
||||||
|
replaceEmptyAlbum("table#album_table td#albumart img","${artist['ArtistName']}");
|
||||||
|
setTimeout(function(){
|
||||||
|
initFancybox();
|
||||||
|
},1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
getArtistInfo("${artist['ArtistName']}","#artistImg img",3,"${artist['ArtistID']}");
|
||||||
|
initActions();
|
||||||
|
initThisPage();
|
||||||
|
});
|
||||||
|
$(window).load(function(){
|
||||||
|
replaceEmptyAlbum("table#album_table td#albumart img","${artist['ArtistName']}");
|
||||||
|
setTimeout(function(){
|
||||||
|
initFancybox();
|
||||||
|
},1000)
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</%def>
|
</%def>
|
||||||
|
|||||||
@@ -13,45 +13,50 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
|
||||||
<title>Headphones - ${title}</title>
|
<title>Headphones - ${title}</title>
|
||||||
<meta name="description" content="">
|
<meta name="description" content="Headphones 'default' interface - made by Elmar Kouwenhoven">
|
||||||
<meta name="author" content="">
|
<meta name="author" content="Elmar Kouwenhoven">
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<link rel="shortcut icon" href="images/favicon.ico">
|
<link rel="shortcut icon" href="images/favicon.ico">
|
||||||
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
||||||
<link rel="stylesheet" href="css/style.css?v=2">
|
<link rel="stylesheet" href="interfaces/default/css/style.css">
|
||||||
|
<link rel="stylesheet" href="interfaces/default/css/jquery-ui.css">
|
||||||
${next.headIncludes()}
|
${next.headIncludes()}
|
||||||
|
|
||||||
<script src="js/libs/modernizr-1.7.min.js"></script>
|
<script src="js/libs/modernizr-1.7.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="container">
|
<div id="container">
|
||||||
<header>
|
<div id="ajaxMsg"></div>
|
||||||
% if not headphones.CURRENT_VERSION:
|
% if not headphones.CURRENT_VERSION:
|
||||||
<div id="updatebar">
|
<div id="updatebar">
|
||||||
You're running an unknown version of Headphones. <a class="blue" href="update">Click here to update</a>
|
You're running an unknown version of Headphones. <a href="update">Update</a> or
|
||||||
|
<a href="#" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
||||||
</div>
|
</div>
|
||||||
% elif headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.INSTALL_TYPE != 'win':
|
% elif headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.INSTALL_TYPE != 'win':
|
||||||
<div id="updatebar">
|
<div id="updatebar">
|
||||||
A <a class="blue" href="http://github.com/rembo10/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}"> newer version</a> is available. You're ${headphones.COMMITS_BEHIND} commits behind. <a class="blue" href="update">Click here to update</a>
|
A <a href="http://github.com/rembo10/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}"> newer version</a> is available. You're ${headphones.COMMITS_BEHIND} commits behind. <a href="update">Update</a> or <a href="#" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="wrapper">
|
||||||
<div id="logo">
|
<div id="logo">
|
||||||
<a href="home"><img src="images/headphoneslogo.png" alt="headphones"></a>
|
<a href="home"><img src="images/headphoneslogo.png" alt="headphones"></a>
|
||||||
</div>
|
</div>
|
||||||
<ul id="nav">
|
<ul id="nav">
|
||||||
<li><a href="home">home</a></li>
|
<li><a href="upcoming">wanted</a></li>
|
||||||
<li><a href="upcoming">upcoming</a></li>
|
|
||||||
<li><a href="extras">extras</a></li>
|
<li><a href="extras">extras</a></li>
|
||||||
<li><a href="manage">manage</a></li>
|
<li><a href="manage">manage</a></li>
|
||||||
<li><a href="history">history</a></li>
|
<li><a href="history">history</a></li>
|
||||||
<li><a href="logs">logs</a></li>
|
<li><a href="logs" class="log">logs</a></li>
|
||||||
<li><a href="config">settings</a></li>
|
<li><a href="config" class="config"><img src="interfaces/default/images/icon_gear.png" alt="settings"/></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="searchbar">
|
<div id="searchbar">
|
||||||
<form action="search" method="get">
|
<form action="search" method="get">
|
||||||
<input type="text" value="" onfocus="if(this.value==this.defaultValue) this.value='';" name="name" />
|
<input type="text" value="" placeholder="Search" onfocus="if(this.value==this.defaultValue) this.value='';" name="name" />
|
||||||
|
<span class="mini-icon"></span>
|
||||||
<select name="type">
|
<select name="type">
|
||||||
<option value="artist">Artist</option>
|
<option value="artist">Artist</option>
|
||||||
<option value="album">Album</option>
|
<option value="album">Album</option>
|
||||||
@@ -59,46 +64,51 @@
|
|||||||
<input type="submit" value="Add"/>
|
<input type="submit" value="Add"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div id="subhead">
|
|
||||||
${next.headerIncludes()}
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div id="main" class="main">
|
<div id="main" class="main">
|
||||||
|
<div id="subhead">
|
||||||
|
${next.headerIncludes()}
|
||||||
|
</div>
|
||||||
${next.body()}
|
${next.body()}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
<div id="actions">
|
||||||
|
<small>
|
||||||
|
<a href="shutdown"><span class="ui-button-icon-primary ui-icon ui-icon-power"></span>Shutdown</a> |
|
||||||
|
<a href="restart"><span class="ui-button-icon-primary ui-icon ui-icon-power"></span>Restart</a> |
|
||||||
|
<a href="#" onclick="doAjaxCall('checkGithub',$(this))" data-success="Checking for update succesful" data-error="Error checking update"><span class="ui-icon ui-icon-refresh"></span>Check for new version</a>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div id="donate">
|
||||||
|
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=elmarkou%40gmail%2ecom&lc=NL&item_name=I%20Like%20to%20donate%20because%20I%20like%20this%20Headphones%20Interface&no_note=0¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest" target="_blank"><img src="interfaces/default/images/icon_like.png" /><small> I like this interface!</small></a>
|
||||||
|
</div>
|
||||||
<div id="version">
|
<div id="version">
|
||||||
Version: ${headphones.CURRENT_VERSION}
|
Version: <em>${headphones.CURRENT_VERSION}</em>
|
||||||
%if version.HEADPHONES_VERSION != 'master':
|
%if version.HEADPHONES_VERSION != 'master':
|
||||||
(${version.HEADPHONES_VERSION})
|
(${version.HEADPHONES_VERSION})
|
||||||
%endif
|
%endif
|
||||||
</div>
|
</div>
|
||||||
<div id="donate">
|
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
|
||||||
<input type="hidden" name="cmd" value="_s-xclick">
|
|
||||||
<input type="hidden" name="hosted_button_id" value="93FFC6WDV97QS">
|
|
||||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
|
||||||
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
|
||||||
</form>
|
|
||||||
<br>
|
|
||||||
powered by musicbrainz (<a href="http://metabrainz.org/donate/index.html">donate</a>)
|
|
||||||
</div>
|
|
||||||
</footer>
|
</footer>
|
||||||
|
<a href="#main" id="toTop"><span>Back to top</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
|
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
|
||||||
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.6.2.min.js"%3E%3C/script%3E'))</script>
|
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.7.2.min.js"%3E%3C/script%3E'))</script>
|
||||||
|
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.19/jquery-ui.min.js"></script>
|
||||||
|
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-ui.min.js"%3E%3C/script%3E'))</script>
|
||||||
${next.javascriptIncludes()}
|
${next.javascriptIncludes()}
|
||||||
|
|
||||||
<script src="js/plugins.js"></script>
|
<script src="js/plugins.js"></script>
|
||||||
<script src="js/script.js"></script>
|
<script src="interfaces/default/js/script.js"></script>
|
||||||
|
|
||||||
<!--[if lt IE 7 ]>
|
<!--[if lt IE 7 ]>
|
||||||
<script src="js/libs/dd_belatedpng.js"></script>
|
<script src="js/libs/dd_belatedpng.js"></script>
|
||||||
<script> DD_belatedPNG.fix('img, .png_bg');</script>
|
<script> DD_belatedPNG.fix('img, .png_bg');</script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
<!-- This template is made by Elmar Kouwenhoven -->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/* Variables */
|
||||||
|
@base-font-face: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||||
|
@alt-font-face: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||||
|
@base-font-size: 12px;
|
||||||
|
@text-color: #343434;
|
||||||
|
@swatch-blue: #4183C4;
|
||||||
|
@swatch-grey: #666666;
|
||||||
|
@link-color: @swatch-blue;
|
||||||
|
@border-color: #CCCCCC;
|
||||||
|
@msg-bg: #FFF6A9;
|
||||||
|
@msg-bg-success: #D3FFD7;
|
||||||
|
@msg-bg-error: #FFD3D3;
|
||||||
|
|
||||||
|
/* Mixins */
|
||||||
|
.rounded(@radius: 5px) {
|
||||||
|
-moz-border-radius: @radius;
|
||||||
|
-webkit-border-radius: @radius;
|
||||||
|
border-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedTop(@radius: 5px) {
|
||||||
|
-moz-border-radius-topleft: @radius;
|
||||||
|
-moz-border-radius-topright: @radius;
|
||||||
|
-webkit-border-top-right-radius: @radius;
|
||||||
|
-webkit-border-top-left-radius: @radius;
|
||||||
|
border-top-left-radius: @radius;
|
||||||
|
border-top-right-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedLeftTop(@radius: 5px) {
|
||||||
|
-moz-border-radius-topleft: @radius;
|
||||||
|
-webkit-border-top-left-radius: @radius;
|
||||||
|
border-top-left-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedRightTop(@radius: 5px) {
|
||||||
|
-moz-border-radius-topright: @radius;
|
||||||
|
-webkit-border-top-right-radius: @radius;
|
||||||
|
border-top-right-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedBottom(@radius: 5px) {
|
||||||
|
-moz-border-radius-bottomleft: @radius;
|
||||||
|
-moz-border-radius-bottomright: @radius;
|
||||||
|
-webkit-border-bottom-right-radius: @radius;
|
||||||
|
-webkit-border-bottom-left-radius: @radius;
|
||||||
|
border-bottom-left-radius: @radius;
|
||||||
|
border-bottom-right-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedLeftBottom(@radius: 5px) {
|
||||||
|
-moz-border-radius-bottomleft: @radius;
|
||||||
|
-webkit-border-bottom-left-radius: @radius;
|
||||||
|
border-bottom-left-radius: @radius;
|
||||||
|
}
|
||||||
|
.roundedRightBottom(@radius: 5px) {
|
||||||
|
-moz-border-radius-bottomright: @radius;
|
||||||
|
-webkit-border-bottom-right-radius: @radius;
|
||||||
|
border-bottom-right-radius: @radius;
|
||||||
|
}
|
||||||
|
.shadow(@shadow: 0 17px 11px -1px #ced8d9) {
|
||||||
|
-moz-box-shadow: @shadow;
|
||||||
|
-webkit-box-shadow: @shadow;
|
||||||
|
box-shadow: @shadow;
|
||||||
|
}
|
||||||
|
.gradient(@gradientFrom: #FFFFFF, @gradientTo: #EEEEEE){
|
||||||
|
background-image: -moz-linear-gradient(@gradientFrom, @gradientTo) !important;
|
||||||
|
background-image: linear-gradient(@gradientFrom, @gradientTo) !important;
|
||||||
|
background-image: -webkit-linear-gradient(@gradientFrom, @gradientTo) !important;
|
||||||
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=@gradientFrom, endColorstr=@gradientTo) !important;
|
||||||
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=@gradientFrom, endColorstr=@gradientTo) !important;
|
||||||
|
}
|
||||||
|
.opacity(@opacity_percent:85) {
|
||||||
|
filter: ~"alpha(opacity=85)";
|
||||||
|
-moz-opacity: @opacity_percent / 100 !important;
|
||||||
|
-khtml-opacity:@opacity_percent / 100 !important;
|
||||||
|
opacity:@opacity_percent / 100 !important;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,330 @@
|
|||||||
|
.dataTables_wrapper {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 125px;
|
||||||
|
clear: both;
|
||||||
|
_height: 302px;
|
||||||
|
zoom: 1; /* Feeling sorry for IE */
|
||||||
|
}
|
||||||
|
#wanted_table_wrapper {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
.dataTables_processing {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 20px;
|
||||||
|
height: 30px;
|
||||||
|
margin-left: -125px;
|
||||||
|
margin-top: -15px;
|
||||||
|
padding: 14px 0 2px 0;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataTables_length {
|
||||||
|
width: 40%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataTables_filter {
|
||||||
|
width: 50%;
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
.dataTables_filter input {
|
||||||
|
background: none repeat scroll 0 0 #FFFFFF;
|
||||||
|
border: 1px solid #CCC;
|
||||||
|
font-size: 15px;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
.dataTables_info {
|
||||||
|
width: 50%;
|
||||||
|
float: left;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataTables_paginate {
|
||||||
|
width: 44px;
|
||||||
|
* width: 50px;
|
||||||
|
float: right;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pagination nested */
|
||||||
|
.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next {
|
||||||
|
height: 19px;
|
||||||
|
width: 19px;
|
||||||
|
margin-left: 3px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginate_disabled_previous {
|
||||||
|
background-image: url('../images/back_disabled.jpg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginate_enabled_previous {
|
||||||
|
background-image: url('../images/back_enabled.jpg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginate_disabled_next {
|
||||||
|
background-image: url('../images/forward_disabled.jpg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginate_enabled_next {
|
||||||
|
background-image: url('../images/forward_enabled.jpg');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* DataTables display
|
||||||
|
*/
|
||||||
|
table.display {
|
||||||
|
margin: 20px auto;
|
||||||
|
clear: both;
|
||||||
|
border:1px solid #EEE;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
/* Note Firefox 3.5 and before have a bug with border-collapse
|
||||||
|
* ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 )
|
||||||
|
* border-spacing: 0; is one possible option. Conditional-css.com is
|
||||||
|
* useful for this kind of thing
|
||||||
|
*
|
||||||
|
* Further note IE 6/7 has problems when calculating widths with border width.
|
||||||
|
* It subtracts one px relative to the other browsers from the first column, and
|
||||||
|
* adds one to the end...
|
||||||
|
*
|
||||||
|
* If you want that effect I'd suggest setting a border-top/left on th/td's and
|
||||||
|
* then filling in the gaps with other borders.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display thead th {
|
||||||
|
padding: 3px 18px 3px 10px;
|
||||||
|
background-color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tfoot th {
|
||||||
|
padding: 3px 18px 3px 10px;
|
||||||
|
border-top: 1px solid black;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.heading2 td {
|
||||||
|
border-bottom: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display td {
|
||||||
|
padding: 8px 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
table
|
||||||
|
table.display td.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* DataTables sorting
|
||||||
|
*/
|
||||||
|
|
||||||
|
.sorting_asc {
|
||||||
|
background: url('../images/sort_asc.png') no-repeat center right;
|
||||||
|
cursor: pointer;
|
||||||
|
* cursor: hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sorting_desc {
|
||||||
|
background: url('../images/sort_desc.png') no-repeat center right;
|
||||||
|
cursor: pointer;
|
||||||
|
* cursor: hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sorting {
|
||||||
|
background: url('../images/sort_both.png') no-repeat center right;
|
||||||
|
cursor: pointer;
|
||||||
|
* cursor: hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sorting_asc_disabled {
|
||||||
|
background: url('../images/sort_asc_disabled.png') no-repeat center right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sorting_desc_disabled {
|
||||||
|
background: url('../images/sort_desc_disabled.png') no-repeat center right;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* DataTables row classes
|
||||||
|
*/
|
||||||
|
table.display tr.odd.gradeA {
|
||||||
|
background-color: #ddffdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeA {
|
||||||
|
background-color: #ddffdd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.gradeC {
|
||||||
|
background-color: #ebf5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeC {
|
||||||
|
background-color: #ebf5ff;
|
||||||
|
}
|
||||||
|
table.display tr.even.gradeL {
|
||||||
|
background-color: #ebf5ff;
|
||||||
|
}
|
||||||
|
table.display tr.odd.gradeL {
|
||||||
|
background-color: #ebf5ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.gradeX {
|
||||||
|
background-color: #ffdddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeX {
|
||||||
|
background-color: #ffdddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.gradeU {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeU {
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table.display tr.odd.gradeZ {
|
||||||
|
background-color: #FAFAFA;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeZ {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
|
table.display tr.gradeL #status {
|
||||||
|
background: url("../images/loader_black.gif") no-repeat scroll 15px center transparent;
|
||||||
|
font-size: 11px;
|
||||||
|
text-indent: -3000px;
|
||||||
|
}
|
||||||
|
table.display tr.gradeA td,
|
||||||
|
table.display tr.gradeC td,
|
||||||
|
table.display tr.gradeX td,
|
||||||
|
table.display tr.gradeU td,
|
||||||
|
table.display tr.gradeZ td {border-bottom: 1px solid #FFF;}
|
||||||
|
table.display tr:last-child td {
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
table.display tr td#add .ui-icon { display: inline-block; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* Misc
|
||||||
|
*/
|
||||||
|
.dataTables_scroll {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataTables_scrollBody {
|
||||||
|
*margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top, .bottom {
|
||||||
|
padding: 15px;
|
||||||
|
background-color: #F5F5F5;
|
||||||
|
border: 1px solid #CCCCCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top .dataTables_info {
|
||||||
|
float: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dataTables_empty {
|
||||||
|
font-size: 24px;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: white;
|
||||||
|
height: 50px;
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
tfoot input {
|
||||||
|
margin: 0.5em 0;
|
||||||
|
width: 100%;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
tfoot input.search_init {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.group {
|
||||||
|
background-color: #d1cfd0;
|
||||||
|
border-bottom: 2px solid #A19B9E;
|
||||||
|
border-top: 2px solid #A19B9E;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.details {
|
||||||
|
background-color: #d1cfd0;
|
||||||
|
border: 2px solid #A19B9E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paging_full_numbers {
|
||||||
|
width: 400px;
|
||||||
|
height: 22px;
|
||||||
|
line-height: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paging_full_numbers span.paginate_button,
|
||||||
|
.paging_full_numbers span.paginate_active {
|
||||||
|
background: none repeat scroll 0 0 #F3F3F3;
|
||||||
|
border-radius: 5px 5px 5px 5px;
|
||||||
|
margin: 0 0 0 5px;
|
||||||
|
font-size: 15px;
|
||||||
|
padding: 2px 7px;
|
||||||
|
color: #4183C4;
|
||||||
|
cursor: pointer;
|
||||||
|
*cursor: hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paging_full_numbers span.paginate_button:hover {
|
||||||
|
background-color: #e2e2e2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paging_full_numbers span.paginate_active {
|
||||||
|
background-color: #4183C4;
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.row_selected td {
|
||||||
|
background-color: #B0BED9;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.row_selected td {
|
||||||
|
background-color: #9FAFD1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.box {
|
||||||
|
height: 100px;
|
||||||
|
padding: 10px;
|
||||||
|
overflow: auto;
|
||||||
|
border: 1px solid #8080FF;
|
||||||
|
background-color: #E5E5FF;
|
||||||
|
}
|
||||||
@@ -0,0 +1,547 @@
|
|||||||
|
/*!
|
||||||
|
* jQuery UI CSS Framework 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Theming/API
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Layout helpers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-helper-hidden { display: none; }
|
||||||
|
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
||||||
|
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||||
|
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
|
||||||
|
.ui-helper-clearfix:after { clear: both; }
|
||||||
|
.ui-helper-clearfix { zoom: 1; }
|
||||||
|
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||||
|
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-disabled { cursor: default !important; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* jQuery UI CSS Framework 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Theming/API
|
||||||
|
*
|
||||||
|
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=02_glass.png&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=02_glass.png&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow=0px
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Component containers
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-widget { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1.1em; }
|
||||||
|
.ui-widget .ui-widget { font-size: 1em; }
|
||||||
|
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1em; }
|
||||||
|
.ui-widget-content { border: 1px solid #aaaaaa; background: #f2f2f2; color: #333333; }
|
||||||
|
.ui-widget-content a { /*color: #333333;*/ }
|
||||||
|
.ui-widget-header { border: 1px solid #bbbbbb; background: #dddddd url(../images/ui-bg_glass_35_dddddd_1x400.png) 50% 50% repeat-x; color: #444444; font-weight: bold; }
|
||||||
|
.ui-widget-header a { color: #444444; }
|
||||||
|
|
||||||
|
/* Interaction states
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #eeeeee url(../images/ui-bg_glass_60_eeeeee_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #3383bb; }
|
||||||
|
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #3383bb; text-decoration: none; }
|
||||||
|
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #bbbbbb; background: #f8f8f8 url(../images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #599fcf; }
|
||||||
|
.ui-state-hover a, .ui-state-hover a:hover { color: #599fcf; text-decoration: none; }
|
||||||
|
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #999999; background: #ccc; font-weight: bold; color: #ffffff; }
|
||||||
|
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
|
||||||
|
.ui-widget :active { outline: none; }
|
||||||
|
|
||||||
|
/* Interaction Cues
|
||||||
|
----------------------------------*/
|
||||||
|
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #eeeeee url(../images/ui-bg_flat_55_eeeeee_40x100.png) 50% 50% repeat-x; color: #444444; }
|
||||||
|
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #444444; }
|
||||||
|
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #c0402a; background: #c0402a url(../images/ui-bg_flat_55_c0402a_40x100.png) 50% 50% repeat-x; color: #ffffff; }
|
||||||
|
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
|
||||||
|
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
|
||||||
|
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||||
|
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||||
|
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||||
|
|
||||||
|
/* Icons
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* states and images */
|
||||||
|
.ui-icon { width: 16px; height: 16px; background-image: url(../images/icon_sprite_black.png); }
|
||||||
|
.ui-widget-content .ui-icon {background-image: url(../images/icon_sprite_black.png); }
|
||||||
|
.ui-widget-header .ui-icon {background-image: url(../images/icon_sprite_black.png); }
|
||||||
|
.ui-button.ui-state-hover .ui-icon { background-image: url(../images/icon_sprite_white.png); }
|
||||||
|
.ui-state-default .ui-icon { background-image: url(../images/ui-icons_70b2e1_256x240.png); }
|
||||||
|
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_3383bb_256x240.png); }
|
||||||
|
.ui-state-active .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
|
||||||
|
.ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_3383bb_256x240.png); }
|
||||||
|
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_fbc856_256x240.png); }
|
||||||
|
|
||||||
|
/* positioning */
|
||||||
|
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||||
|
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||||
|
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||||
|
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||||
|
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||||
|
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||||
|
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||||
|
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||||
|
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||||
|
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||||
|
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||||
|
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||||
|
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||||
|
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||||
|
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||||
|
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||||
|
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||||
|
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||||
|
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||||
|
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||||
|
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||||
|
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||||
|
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||||
|
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||||
|
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||||
|
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||||
|
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||||
|
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||||
|
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||||
|
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||||
|
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||||
|
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||||
|
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||||
|
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||||
|
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||||
|
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||||
|
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||||
|
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||||
|
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||||
|
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||||
|
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||||
|
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||||
|
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||||
|
.ui-icon-extlink { background-position: -32px -80px; }
|
||||||
|
.ui-icon-newwin { background-position: -48px -80px; }
|
||||||
|
.ui-icon-refresh { background-position: -64px -80px; }
|
||||||
|
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||||
|
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||||
|
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||||
|
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||||
|
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||||
|
.ui-icon-document { background-position: -32px -96px; }
|
||||||
|
.ui-icon-document-b { background-position: -48px -96px; }
|
||||||
|
.ui-icon-note { background-position: -64px -96px; }
|
||||||
|
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||||
|
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||||
|
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||||
|
.ui-icon-comment { background-position: -128px -96px; }
|
||||||
|
.ui-icon-person { background-position: -144px -96px; }
|
||||||
|
.ui-icon-print { background-position: -160px -96px; }
|
||||||
|
.ui-icon-trash { background-position: -176px -96px; }
|
||||||
|
.ui-icon-locked { background-position: -192px -96px; }
|
||||||
|
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||||
|
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||||
|
.ui-icon-tag { background-position: -240px -96px; }
|
||||||
|
.ui-icon-home { background-position: 0 -112px; }
|
||||||
|
.ui-icon-flag { background-position: -16px -112px; }
|
||||||
|
.ui-icon-calendar { background-position: -32px -112px; }
|
||||||
|
.ui-icon-cart { background-position: -48px -112px; }
|
||||||
|
.ui-icon-pencil { background-position: -64px -112px; }
|
||||||
|
.ui-icon-clock { background-position: -80px -112px; }
|
||||||
|
.ui-icon-disk { background-position: -96px -112px; }
|
||||||
|
.ui-icon-calculator { background-position: -112px -112px; }
|
||||||
|
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||||
|
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||||
|
.ui-icon-search { background-position: -160px -112px; }
|
||||||
|
.ui-icon-wrench { background-position: -176px -112px; }
|
||||||
|
.ui-icon-gear { background-position: -192px -112px; }
|
||||||
|
.ui-icon-heart { background-position: -208px -112px; }
|
||||||
|
.ui-icon-star { background-position: -224px -112px; }
|
||||||
|
.ui-icon-link { background-position: -240px -112px; }
|
||||||
|
.ui-icon-cancel { background-position: 0 -128px; }
|
||||||
|
.ui-icon-plus { background-position: -16px -128px; }
|
||||||
|
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||||
|
.ui-icon-minus { background-position: -48px -128px; }
|
||||||
|
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||||
|
.ui-icon-close { background-position: -80px -128px; }
|
||||||
|
.ui-icon-closethick { background-position: -96px -128px; }
|
||||||
|
.ui-icon-key { background-position: -112px -128px; }
|
||||||
|
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||||
|
.ui-icon-scissors { background-position: -144px -128px; }
|
||||||
|
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||||
|
.ui-icon-copy { background-position: -176px -128px; }
|
||||||
|
.ui-icon-contact { background-position: -192px -128px; }
|
||||||
|
.ui-icon-image { background-position: -208px -128px; }
|
||||||
|
.ui-icon-video { background-position: -224px -128px; }
|
||||||
|
.ui-icon-script { background-position: -240px -128px; }
|
||||||
|
.ui-icon-alert { background-position: 0 -144px; }
|
||||||
|
.ui-icon-info { background-position: -16px -144px; }
|
||||||
|
.ui-icon-notice { background-position: -32px -144px; }
|
||||||
|
.ui-icon-help { background-position: -48px -144px; }
|
||||||
|
.ui-icon-check { background-position: -64px -144px; }
|
||||||
|
.ui-icon-bullet { background-position: -80px -144px; }
|
||||||
|
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||||
|
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||||
|
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||||
|
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||||
|
.ui-icon-play { background-position: 0 -160px; }
|
||||||
|
.ui-icon-pause { background-position: -16px -160px; }
|
||||||
|
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||||
|
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||||
|
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||||
|
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||||
|
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||||
|
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||||
|
.ui-icon-stop { background-position: -96px -160px; }
|
||||||
|
.ui-icon-eject { background-position: -112px -160px; }
|
||||||
|
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||||
|
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||||
|
.ui-icon-power { background-position: 0 -176px; }
|
||||||
|
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||||
|
.ui-icon-signal { background-position: -32px -176px; }
|
||||||
|
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||||
|
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||||
|
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||||
|
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||||
|
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||||
|
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||||
|
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||||
|
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||||
|
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||||
|
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||||
|
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||||
|
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||||
|
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||||
|
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||||
|
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||||
|
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||||
|
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||||
|
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||||
|
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||||
|
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||||
|
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||||
|
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||||
|
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||||
|
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||||
|
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||||
|
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||||
|
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||||
|
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||||
|
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||||
|
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc visuals
|
||||||
|
----------------------------------*/
|
||||||
|
|
||||||
|
/* Corner radius */
|
||||||
|
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
|
||||||
|
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
|
||||||
|
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
|
||||||
|
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { background: #eeeeee url(../images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
|
||||||
|
.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0pxdow=0px; -khtml-border-radius: 0pxdow=0px; -webkit-border-radius: 0pxdow=0px; border-radius: 0pxdow=0px; }/*!
|
||||||
|
* jQuery UI Resizable 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Resizable#theming
|
||||||
|
*/
|
||||||
|
.ui-resizable { position: relative;}
|
||||||
|
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
|
||||||
|
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||||
|
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||||
|
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||||
|
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||||
|
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||||
|
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||||
|
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||||
|
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||||
|
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
|
||||||
|
* jQuery UI Selectable 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Selectable#theming
|
||||||
|
*/
|
||||||
|
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
||||||
|
/*!
|
||||||
|
* jQuery UI Accordion 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Accordion#theming
|
||||||
|
*/
|
||||||
|
/* IE/Win - Fix animation bug - #4615 */
|
||||||
|
.ui-accordion { width: 100%; }
|
||||||
|
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||||
|
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||||
|
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||||
|
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
||||||
|
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
||||||
|
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
||||||
|
.ui-accordion .ui-accordion-content-active { display: block; }
|
||||||
|
/*!
|
||||||
|
* jQuery UI Autocomplete 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Autocomplete#theming
|
||||||
|
*/
|
||||||
|
.ui-autocomplete { position: absolute; cursor: default; }
|
||||||
|
|
||||||
|
/* workarounds */
|
||||||
|
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* jQuery UI Menu @VERSION
|
||||||
|
*
|
||||||
|
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Menu#theming
|
||||||
|
*/
|
||||||
|
.ui-menu {
|
||||||
|
list-style:none;
|
||||||
|
padding: 2px;
|
||||||
|
margin: 0;
|
||||||
|
display:block;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu {
|
||||||
|
margin-top: -3px;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-item {
|
||||||
|
margin:0;
|
||||||
|
padding: 0;
|
||||||
|
zoom: 1;
|
||||||
|
float: left;
|
||||||
|
clear: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-item a {
|
||||||
|
text-decoration:none;
|
||||||
|
display:block;
|
||||||
|
padding:.2em .4em;
|
||||||
|
line-height:1.5;
|
||||||
|
zoom:1;
|
||||||
|
}
|
||||||
|
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||||
|
.ui-menu .ui-menu-item a.ui-state-active {
|
||||||
|
font-weight: normal;
|
||||||
|
margin: -1px;
|
||||||
|
}
|
||||||
|
/*!
|
||||||
|
* jQuery UI Button 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Button#theming
|
||||||
|
*/
|
||||||
|
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
||||||
|
.ui-button:hover {
|
||||||
|
color:#3383BB;
|
||||||
|
}
|
||||||
|
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
||||||
|
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
||||||
|
.ui-button-icons-only { width: 3.4em; }
|
||||||
|
button.ui-button-icons-only { width: 3.7em; }
|
||||||
|
|
||||||
|
/*button text element */
|
||||||
|
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
||||||
|
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
||||||
|
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
||||||
|
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.2em 0.5em 0.2em 1.8em }
|
||||||
|
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.2em 1.8em 0.2em 0.5em }
|
||||||
|
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
||||||
|
/* no icon support for input elements, provide padding by default */
|
||||||
|
input.ui-button { padding: .4em 1em; }
|
||||||
|
|
||||||
|
/*button icon element(s) */
|
||||||
|
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
||||||
|
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .3em; }
|
||||||
|
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||||
|
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||||
|
|
||||||
|
/*button sets*/
|
||||||
|
.ui-buttonset { margin-right: 7px; }
|
||||||
|
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
||||||
|
|
||||||
|
/* workarounds */
|
||||||
|
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||||
|
/*!
|
||||||
|
* jQuery UI Dialog 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Dialog#theming
|
||||||
|
*/
|
||||||
|
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
||||||
|
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||||
|
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||||
|
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
||||||
|
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
||||||
|
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||||
|
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||||
|
/*!
|
||||||
|
* jQuery UI Tabs 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Tabs#theming
|
||||||
|
*/
|
||||||
|
.ui-tabs { position: relative; padding: 0em; zoom: 1; background: transparent; border: none;} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||||
|
.ui-tabs .ui-tabs-nav { margin: 0; padding: 0; background: none; border:none;}
|
||||||
|
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap;background: #FFF; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; font-weight: normal; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; background-color: #f7f7f7; border-color: #CCC; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a { color: #454545; }
|
||||||
|
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
||||||
|
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||||
|
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: #f7f7f7; border: 1px solid #CCC; }
|
||||||
|
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||||
|
/*!
|
||||||
|
* jQuery UI Datepicker 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Datepicker#theming
|
||||||
|
*/
|
||||||
|
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
|
||||||
|
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||||
|
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||||
|
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||||
|
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||||
|
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||||
|
.ui-datepicker select.ui-datepicker-month,
|
||||||
|
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||||
|
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||||
|
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||||
|
.ui-datepicker td { border: 0; padding: 1px; }
|
||||||
|
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||||
|
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||||
|
|
||||||
|
/* with multiple calendars */
|
||||||
|
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||||
|
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||||
|
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||||
|
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||||
|
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||||
|
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
|
||||||
|
|
||||||
|
/* RTL support */
|
||||||
|
.ui-datepicker-rtl { direction: rtl; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||||
|
|
||||||
|
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||||
|
.ui-datepicker-cover {
|
||||||
|
display: none; /*sorry for IE5*/
|
||||||
|
display/**/: block; /*sorry for IE5*/
|
||||||
|
position: absolute; /*must have*/
|
||||||
|
z-index: -1; /*must have*/
|
||||||
|
filter: mask(); /*must have*/
|
||||||
|
top: -4px; /*must have*/
|
||||||
|
left: -4px; /*must have*/
|
||||||
|
width: 200px; /*must have*/
|
||||||
|
height: 200px; /*must have*/
|
||||||
|
}/*!
|
||||||
|
* jQuery UI Progressbar 1.8.19
|
||||||
|
*
|
||||||
|
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||||
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
|
* http://jquery.org/license
|
||||||
|
*
|
||||||
|
* http://docs.jquery.com/UI/Progressbar#theming
|
||||||
|
*/
|
||||||
|
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
|
||||||
|
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
<%inherit file="base.html" />
|
<%inherit file="base.html" />
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
|
<div class="title">
|
||||||
|
<h1 class="clearfix"><img src="interfaces/default/images/icon_extra.gif" alt="extra"/>Artists You Might Like</h1>
|
||||||
|
</div>
|
||||||
<div class="table_wrapper">
|
<div class="table_wrapper">
|
||||||
<h1>Artists You Might Like</h1>
|
|
||||||
<div class="cloudtag">
|
<div class="cloudtag">
|
||||||
<ul id="cloud">
|
<ul id="cloud">
|
||||||
%for artist in cloudlist:
|
%for artist in cloudlist:
|
||||||
|
|||||||
@@ -5,18 +5,18 @@
|
|||||||
|
|
||||||
<%def name="headerIncludes()">
|
<%def name="headerIncludes()">
|
||||||
<div id="subhead_container">
|
<div id="subhead_container">
|
||||||
<ul id="subhead_menu">
|
<div id="subhead_menu">
|
||||||
<li><a href="clearhistory?type=all">Clear All History</a></li>
|
<a id="menu_link_delete" href="#" onclick="doAjaxCall('clearhistory?type=all',$(this),'table')" data-success="All History cleared">Clear All History</a>
|
||||||
<li><a href="clearhistory?type=Processed">Clear Processed</a></li>
|
<a id="menu_link_delete" href="#" onclick="doAjaxCall('clearhistory?type=Processed',$(this),'table')" data-success="All Processed cleared">Clear Processed</a>
|
||||||
<li><a href="clearhistory?type=Unprocessed">Clear Unprocessed</a></li>
|
<a id="menu_link_delete" href="#" onclick="doAjaxCall('clearhistory?type=Unprocessed',$(this),'table')" data-success="All Unprocessed cleared">Clear Unprocessed</a>
|
||||||
<li><a href="clearhistory?type=Snatched">Clear Snatched</a></li>
|
<a id="menu_link_delete" href="#" onclick="doAjaxCall('clearhistory?type=Snatched',$(this),'table')" data-success="All Snatched cleared">Clear Snatched</a>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
<div id="paddingheader">
|
<div id="paddingheader">
|
||||||
History
|
<h1 class="clearfix"><img src="interfaces/default/images/icon_history.png" alt="History"/>History</h1>
|
||||||
</div>
|
</div>
|
||||||
<table class="display" id="history_table">
|
<table class="display" id="history_table">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
<td id="filename">${item['Title']} [<a href="${item['URL']}">${fileid}</a>]<a href="albumPage?AlbumID=${item['AlbumID']}">[album page]</a></td>
|
<td id="filename">${item['Title']} [<a href="${item['URL']}">${fileid}</a>]<a href="albumPage?AlbumID=${item['AlbumID']}">[album page]</a></td>
|
||||||
<td id="size">${helpers.bytes_to_mb(item['Size'])}</td>
|
<td id="size">${helpers.bytes_to_mb(item['Size'])}</td>
|
||||||
<td id="status">${item['Status']}</td>
|
<td id="status">${item['Status']}</td>
|
||||||
<td id="action">[<a href="queueAlbum?AlbumID=${item['AlbumID']}&redirect=history">retry</a>][<a href="queueAlbum?AlbumID=${item['AlbumID']}&new=True&redirect=history">new</a>]</td>
|
<td id="action">[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${item['AlbumID']}&redirect=history', $(this),'table')" data-success="Retrying downloading '${item['Title']}'">retry</a>][<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${item['AlbumID']}&new=True&redirect=history',$(this),'table')" data-success="Retrying downloading new '${item['Title']}'">new</a>]</td>
|
||||||
</tr>
|
</tr>
|
||||||
%endfor
|
%endfor
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -59,27 +59,31 @@
|
|||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="headIncludes()">
|
<%def name="headIncludes()">
|
||||||
<link rel="stylesheet" href="css/data_table.css">
|
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function()
|
function initThisPage() {
|
||||||
{
|
$('#history_table').dataTable({
|
||||||
$('#history_table').dataTable(
|
"bDestroy": true,
|
||||||
{
|
"oLanguage": {
|
||||||
"oLanguage": {
|
"sLengthMenu":"Show _MENU_ items per page",
|
||||||
"sLengthMenu":"Show _MENU_ items per page",
|
"sEmptyTable": "<em>No History to Display</em>",
|
||||||
"sEmptyTable": "No History to Display",
|
"sInfo":"Showing _START_ to _END_ of _TOTAL_ items",
|
||||||
"sInfo":"Showing _START_ to _END_ of _TOTAL_ items",
|
"sInfoEmpty":"Showing 0 to 0 of 0 items",
|
||||||
"sInfoEmpty":"Showing 0 to 0 of 0 items",
|
"sInfoFiltered":"(filtered from _MAX_ total items)"},
|
||||||
"sInfoFiltered":"(filtered from _MAX_ total items)"},
|
"iDisplayLength": 25,
|
||||||
"iDisplayLength": 25,
|
"sPaginationType": "full_numbers",
|
||||||
"sPaginationType": "full_numbers",
|
"aaSorting": []
|
||||||
"aaSorting": []
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
resetFilters("history");
|
||||||
|
}
|
||||||
|
$(document).ready(function() {
|
||||||
|
initThisPage();
|
||||||
|
initActions();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</%def>
|
</%def>
|
||||||
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 95 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 757 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 345 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 847 B |
|
After Width: | Height: | Size: 847 B |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 968 B |
|
After Width: | Height: | Size: 135 B |
|
After Width: | Height: | Size: 975 B |
|
After Width: | Height: | Size: 838 B |
|
After Width: | Height: | Size: 180 B |
|
After Width: | Height: | Size: 180 B |
|
After Width: | Height: | Size: 182 B |
|
After Width: | Height: | Size: 180 B |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 109 B |
|
After Width: | Height: | Size: 110 B |
|
After Width: | Height: | Size: 114 B |
|
After Width: | Height: | Size: 96 B |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
@@ -7,6 +7,7 @@
|
|||||||
<table class="display" id="artist_table">
|
<table class="display" id="artist_table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
<th id="albumart"></th>
|
||||||
<th id="name">Artist Name</th>
|
<th id="name">Artist Name</th>
|
||||||
<th id="status">Status</th>
|
<th id="status">Status</th>
|
||||||
<th id="album">Latest Album</th>
|
<th id="album">Latest Album</th>
|
||||||
@@ -46,10 +47,14 @@
|
|||||||
|
|
||||||
if artist['Status'] == 'Paused':
|
if artist['Status'] == 'Paused':
|
||||||
grade = 'X'
|
grade = 'X'
|
||||||
|
|
||||||
|
if artist['Status'] == 'Loading':
|
||||||
|
grade = 'L'
|
||||||
|
|
||||||
%>
|
%>
|
||||||
<tr class="grade${grade}">
|
<tr class="grade${grade}">
|
||||||
<td id="name"><span title="${artist['ArtistSortName']}"></span><a href="artistPage?ArtistID=${artist['ArtistID']}">${artist['ArtistName']}</a></td>
|
<td id="albumart"><div id="artistImg"><img class="albumArt" src="http://ec1.images-amazon.com/images/P/${artist['AlbumID']}.01.MZZZZZZZ.jpg" height="50" width="50"></div></td>
|
||||||
|
<td id="name"><span title="${artist['ArtistSortName']}"></span><a href="artistPage?ArtistID=${artist['ArtistID']}" title="${artist['ArtistID']}">${artist['ArtistName']}</a></td>
|
||||||
<td id="status">${artist['Status']}</td>
|
<td id="status">${artist['Status']}</td>
|
||||||
<td id="album"><span title="${releasedate}"></span><a href="albumPage?AlbumID=${artist['AlbumID']}">${albumdisplay}</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"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></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>
|
||||||
@@ -60,27 +65,53 @@
|
|||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="headIncludes()">
|
<%def name="headIncludes()">
|
||||||
<link rel="stylesheet" href="css/data_table.css">
|
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
<script src="js/libs/jquery.dataTables.min.js"></script>
|
<script src="js/libs/jquery.dataTables.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function()
|
function getArtistArt() {
|
||||||
{
|
$("table#artist_table tr td#name").each(function(){
|
||||||
$('#artist_table').dataTable(
|
var id = $(this).children('a').attr('title');
|
||||||
{
|
var artist = $(this).children('a').text();
|
||||||
"aoColumns": [
|
var image = $(this).parent().find("td#albumart img");
|
||||||
{ "sType": "title-string"},
|
if ( !image.hasClass('done') ) {
|
||||||
null,
|
image.addClass('done');
|
||||||
{ "sType": "title-string"},
|
getArtistInfo(artist,image,1,id);
|
||||||
{ "sType": "title-numeric"}
|
}
|
||||||
],
|
});
|
||||||
"bStateSave": true,
|
}
|
||||||
"iDisplayLength": 50,
|
function initThisPage() {
|
||||||
"sPaginationType": "full_numbers",
|
getArtistArt();
|
||||||
|
$('#artist_table').dataTable({
|
||||||
});
|
"bDestroy": true,
|
||||||
|
"aoColumnDefs": [
|
||||||
|
{ 'bSortable': false, 'aTargets': [ 0 ] }
|
||||||
|
],
|
||||||
|
"aoColumns": [
|
||||||
|
null,
|
||||||
|
{ "sType": "title-string"},
|
||||||
|
null,
|
||||||
|
{ "sType": "title-string"},
|
||||||
|
{ "sType": "title-numeric"}
|
||||||
|
],
|
||||||
|
"oLanguage": {
|
||||||
|
"sSearch": ""},
|
||||||
|
"bStateSave": true,
|
||||||
|
"iDisplayLength": 50,
|
||||||
|
"sPaginationType": "full_numbers"
|
||||||
|
});
|
||||||
|
resetFilters("artist or album");
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
initThisPage();
|
||||||
|
});
|
||||||
|
$(window).load(function(){
|
||||||
|
initFancybox();
|
||||||
|
refreshLoadArtist();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</%def>
|
</%def>
|
||||||
|
After Width: | Height: | Size: 43 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 107 B |
|
After Width: | Height: | Size: 106 B |
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 324 B |
|
After Width: | Height: | Size: 111 B |
|
After Width: | Height: | Size: 352 B |
|
After Width: | Height: | Size: 340 B |
|
After Width: | Height: | Size: 103 B |
|
After Width: | Height: | Size: 503 B |
|
After Width: | Height: | Size: 96 B |
|
After Width: | Height: | Size: 70 B |
|
After Width: | Height: | Size: 506 B |
|
After Width: | Height: | Size: 203 B |
|
After Width: | Height: | Size: 176 B |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||||
|
*
|
||||||
|
* Uses the built in easing capabilities added In jQuery 1.1
|
||||||
|
* to offer multiple easing options
|
||||||
|
*
|
||||||
|
* TERMS OF USE - jQuery Easing
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2008 George McGinley Smith
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||||
|
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* TERMS OF USE - EASING EQUATIONS
|
||||||
|
*
|
||||||
|
* Open source under the BSD License.
|
||||||
|
*
|
||||||
|
* Copyright © 2001 Robert Penner
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
|
* are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
* conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
* provided with the distribution.
|
||||||
|
*
|
||||||
|
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||||
|
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
@@ -0,0 +1,359 @@
|
|||||||
|
/*
|
||||||
|
* FancyBox - jQuery Plugin
|
||||||
|
* Simple and fancy lightbox alternative
|
||||||
|
*
|
||||||
|
* Examples and documentation at: http://fancybox.net
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 - 2010 Janis Skarnelis
|
||||||
|
* That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
|
||||||
|
*
|
||||||
|
* Version: 1.3.4 (11/11/2010)
|
||||||
|
* Requires: jQuery v1.3+
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
#fancybox-loading {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
margin-top: -20px;
|
||||||
|
margin-left: -20px;
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 1104;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-loading div {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 40px;
|
||||||
|
height: 480px;
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1100;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-tmp {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
overflow: auto;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-wrap {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: 20px;
|
||||||
|
z-index: 1101;
|
||||||
|
outline: none;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-outer {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-content {
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
padding: 0;
|
||||||
|
outline: none;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
z-index: 1102;
|
||||||
|
border: 0px solid #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-hide-sel-frame {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: transparent;
|
||||||
|
z-index: 1101;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-close {
|
||||||
|
position: absolute;
|
||||||
|
top: -15px;
|
||||||
|
right: -15px;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
background: transparent url('fancybox.png') -40px 0px;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 1103;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-error {
|
||||||
|
color: #444;
|
||||||
|
font: normal 12px/20px Arial;
|
||||||
|
padding: 14px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-frame {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border: none;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left, #fancybox-right {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
height: 100%;
|
||||||
|
width: 35%;
|
||||||
|
cursor: pointer;
|
||||||
|
outline: none;
|
||||||
|
background: transparent url('blank.gif');
|
||||||
|
z-index: 1102;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left {
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-right {
|
||||||
|
right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left-ico, #fancybox-right-ico {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: -9999px;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
margin-top: -15px;
|
||||||
|
cursor: pointer;
|
||||||
|
z-index: 1102;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left-ico {
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-right-ico {
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left:hover, #fancybox-right:hover {
|
||||||
|
visibility: visible; /* IE6 */
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-left:hover span {
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-right:hover span {
|
||||||
|
left: auto;
|
||||||
|
right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancybox-bg {
|
||||||
|
position: absolute;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
z-index: 1001;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-n {
|
||||||
|
top: -20px;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-image: url('fancybox-x.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-ne {
|
||||||
|
top: -20px;
|
||||||
|
right: -20px;
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -162px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-e {
|
||||||
|
top: 0;
|
||||||
|
right: -20px;
|
||||||
|
height: 100%;
|
||||||
|
background-image: url('fancybox-y.png');
|
||||||
|
background-position: -20px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-se {
|
||||||
|
bottom: -20px;
|
||||||
|
right: -20px;
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -182px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-s {
|
||||||
|
bottom: -20px;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-image: url('fancybox-x.png');
|
||||||
|
background-position: 0px -20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-sw {
|
||||||
|
bottom: -20px;
|
||||||
|
left: -20px;
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -142px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-w {
|
||||||
|
top: 0;
|
||||||
|
left: -20px;
|
||||||
|
height: 100%;
|
||||||
|
background-image: url('fancybox-y.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-bg-nw {
|
||||||
|
top: -20px;
|
||||||
|
left: -20px;
|
||||||
|
background-image: url('fancybox.png');
|
||||||
|
background-position: -40px -122px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title {
|
||||||
|
font-family: Helvetica;
|
||||||
|
font-size: 12px;
|
||||||
|
z-index: 1102;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancybox-title-inside {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
text-align: center;
|
||||||
|
color: #333;
|
||||||
|
background: #fff;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancybox-title-outside {
|
||||||
|
padding-top: 10px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancybox-title-over {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
color: #FFF;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-over {
|
||||||
|
padding: 10px;
|
||||||
|
background-image: url('fancy_title_over.png');
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fancybox-title-float {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: -20px;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-float-wrap {
|
||||||
|
border: none;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-float-wrap td {
|
||||||
|
border: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-float-left {
|
||||||
|
padding: 0 0 0 15px;
|
||||||
|
background: url('fancybox.png') -40px -90px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-float-main {
|
||||||
|
color: #FFF;
|
||||||
|
line-height: 29px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 0 0 3px 0;
|
||||||
|
background: url('fancybox-x.png') 0px -40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-title-float-right {
|
||||||
|
padding: 0 0 0 15px;
|
||||||
|
background: url('fancybox.png') -55px -90px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IE6 */
|
||||||
|
|
||||||
|
.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
|
||||||
|
|
||||||
|
.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
|
||||||
|
|
||||||
|
.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
|
||||||
|
.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
|
||||||
|
|
||||||
|
.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
|
||||||
|
height: expression(this.parentNode.clientHeight + "px");
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-loading.fancybox-ie6 {
|
||||||
|
position: absolute; margin-top: 0;
|
||||||
|
top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
|
||||||
|
}
|
||||||
|
|
||||||
|
#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
|
||||||
|
|
||||||
|
/* IE6, IE7, IE8 */
|
||||||
|
|
||||||
|
.fancybox-ie .fancybox-bg { background: transparent !important; }
|
||||||
|
|
||||||
|
.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
|
||||||
|
.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* FancyBox - jQuery Plugin
|
||||||
|
* Simple and fancy lightbox alternative
|
||||||
|
*
|
||||||
|
* Examples and documentation at: http://fancybox.net
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008 - 2010 Janis Skarnelis
|
||||||
|
* That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
|
||||||
|
*
|
||||||
|
* Version: 1.3.4 (11/11/2010)
|
||||||
|
* Requires: jQuery v1.3+
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("<div/>")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
|
||||||
|
F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
|
||||||
|
c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
|
||||||
|
false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
|
||||||
|
function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("<img />").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+c+
|
||||||
|
'"></param>';P="";b.each(e.swf,function(x,H){C+='<param name="'+x+'" value="'+H+'"></param>';P+=" "+x+'="'+H+'"'});C+='<embed src="'+c+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+P+"></embed></object>";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
|
||||||
|
"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('<div style="width:'+a+";height:"+c+
|
||||||
|
";overflow: "+(e.scrolling=="auto"?"auto":e.scrolling=="yes"?"scroll":"hidden")+';position:relative;"></div>');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
|
||||||
|
opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
|
||||||
|
d.titlePosition=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d.titlePosition+'">'+s+"</div>":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
|
||||||
|
y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
|
||||||
|
i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
|
||||||
|
f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
|
||||||
|
37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
|
||||||
|
s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(b.browser.msie?'allowtransparency="true""':"")+' scrolling="'+e.scrolling+'" src="'+d.href+'"></iframe>').appendTo(j);
|
||||||
|
f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
|
||||||
|
j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
|
||||||
|
"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
|
||||||
|
10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
|
||||||
|
b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
|
||||||
|
0,C=a.length;k<C;k++)if(typeof a[k]=="object")b(a[k]).data("fancybox",b.extend({},g,a[k]));else a[k]=b({}).data("fancybox",b.extend({content:a[k]},g));o=jQuery.merge(o,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},g,a));else a=b({}).data("fancybox",b.extend({content:a},g));o.push(a)}if(q>o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
|
||||||
|
1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a<l.length){q=a;I()}else if(d.cyclic&&l.length>1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
|
||||||
|
true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
|
||||||
|
b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
|
||||||
|
d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),t=b('<div id="fancybox-loading"><div></div></div>'),u=b('<div id="fancybox-overlay"></div>'),f=b('<div id="fancybox-wrap"></div>'));D=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f);
|
||||||
|
D.append(j=b('<div id="fancybox-content"></div>'),E=b('<a id="fancybox-close"></a>'),n=b('<div id="fancybox-title"></div>'),z=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
|
||||||
|
b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D)}}};
|
||||||
|
b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
|
||||||
|
easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
|
||||||
|
* Licensed under the MIT License (LICENSE.txt).
|
||||||
|
*
|
||||||
|
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
||||||
|
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
||||||
|
* Thanks to: Seamus Leahy for adding deltaX and deltaY
|
||||||
|
*
|
||||||
|
* Version: 3.0.4
|
||||||
|
*
|
||||||
|
* Requires: 1.2.2+
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=
|
||||||
|
f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
|
||||||
@@ -0,0 +1,648 @@
|
|||||||
|
/*
|
||||||
|
* File: jquery.dataTables.min.js
|
||||||
|
* Version: 1.8.1
|
||||||
|
* Author: Allan Jardine (www.sprymedia.co.uk)
|
||||||
|
* Info: www.datatables.net
|
||||||
|
*
|
||||||
|
* Copyright 2008-2011 Allan Jardine, all rights reserved.
|
||||||
|
*
|
||||||
|
* This source file is free software, under either the GPL v2 license or a
|
||||||
|
* BSD style license, as supplied with this software.
|
||||||
|
*
|
||||||
|
* This source file is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
|
||||||
|
*/
|
||||||
|
(function (i, wa, p) {
|
||||||
|
i.fn.dataTableSettings = [];
|
||||||
|
var D = i.fn.dataTableSettings; i.fn.dataTableExt = {};
|
||||||
|
var o = i.fn.dataTableExt;
|
||||||
|
o.sVersion = "1.8.1";
|
||||||
|
o.sErrMode = "alert";
|
||||||
|
o.iApiIndex = 0; o.oApi = {};
|
||||||
|
o.afnFiltering = [];
|
||||||
|
o.aoFeatures = [];
|
||||||
|
o.ofnSearch = {};
|
||||||
|
o.afnSortData = [];
|
||||||
|
o.oStdClasses = {
|
||||||
|
sPagePrevEnabled: "paginate_enabled_previous",
|
||||||
|
sPagePrevDisabled: "paginate_disabled_previous",
|
||||||
|
sPageNextEnabled: "paginate_enabled_next",
|
||||||
|
sPageNextDisabled: "paginate_disabled_next",
|
||||||
|
sPageJUINext: "", sPageJUIPrev: "",
|
||||||
|
sPageButton: "paginate_button",
|
||||||
|
sPageButtonActive: "paginate_active",
|
||||||
|
sPageButtonStaticDisabled: "paginate_button paginate_button_disabled",
|
||||||
|
sPageFirst: "first",
|
||||||
|
sPagePrevious: "previous",
|
||||||
|
sPageNext: "next",
|
||||||
|
sPageLast: "last",
|
||||||
|
sStripOdd: "odd",
|
||||||
|
sStripEven: "even",
|
||||||
|
sRowEmpty: "dataTables_empty",
|
||||||
|
sWrapper: "dataTables_wrapper",
|
||||||
|
sFilter: "dataTables_filter",
|
||||||
|
sInfo: "dataTables_info",
|
||||||
|
sPaging: "dataTables_paginate paging_",
|
||||||
|
sLength: "dataTables_length",
|
||||||
|
sProcessing: "dataTables_processing",
|
||||||
|
sSortAsc: "sorting_asc",
|
||||||
|
sSortDesc: "sorting_desc",
|
||||||
|
sSortable: "sorting",
|
||||||
|
sSortableAsc: "sorting_asc_disabled",
|
||||||
|
sSortableDesc: "sorting_desc_disabled",
|
||||||
|
sSortableNone: "sorting_disabled",
|
||||||
|
sSortColumn: "sorting_",
|
||||||
|
sSortJUIAsc: "",
|
||||||
|
sSortJUIDesc: "",
|
||||||
|
sSortJUI: "",
|
||||||
|
sSortJUIAscAllowed: "",
|
||||||
|
sSortJUIDescAllowed: "", sSortJUIWrapper: "", sSortIcon: "", sScrollWrapper: "dataTables_scroll",
|
||||||
|
sScrollHead: "dataTables_scrollHead",
|
||||||
|
sScrollHeadInner: "dataTables_scrollHeadInner",
|
||||||
|
sScrollBody: "dataTables_scrollBody",
|
||||||
|
sScrollFoot: "dataTables_scrollFoot",
|
||||||
|
sScrollFootInner: "dataTables_scrollFootInner",
|
||||||
|
sFooterTH: ""
|
||||||
|
}; o.oJUIClasses = { sPagePrevEnabled: "fg-button ui-button ui-state-default ui-corner-left",
|
||||||
|
sPagePrevDisabled: "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",
|
||||||
|
sPageNextEnabled: "fg-button ui-button ui-state-default ui-corner-right",
|
||||||
|
sPageNextDisabled: "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",
|
||||||
|
sPageJUINext: "ui-icon ui-icon-circle-arrow-e",
|
||||||
|
sPageJUIPrev: "ui-icon ui-icon-circle-arrow-w",
|
||||||
|
sPageButton: "fg-button ui-button ui-state-default",
|
||||||
|
sPageButtonActive: "fg-button ui-button ui-state-default ui-state-disabled",
|
||||||
|
sPageButtonStaticDisabled: "fg-button ui-button ui-state-default ui-state-disabled",
|
||||||
|
sPageFirst: "first ui-corner-tl ui-corner-bl",
|
||||||
|
sPagePrevious: "previous",
|
||||||
|
sPageNext: "next",
|
||||||
|
sPageLast: "last ui-corner-tr ui-corner-br",
|
||||||
|
sStripOdd: "odd",
|
||||||
|
sStripEven: "even",
|
||||||
|
sRowEmpty: "dataTables_empty",
|
||||||
|
sWrapper: "dataTables_wrapper",
|
||||||
|
sFilter: "dataTables_filter",
|
||||||
|
sInfo: "dataTables_info",
|
||||||
|
sPaging: "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",
|
||||||
|
sLength: "dataTables_length",
|
||||||
|
sProcessing: "dataTables_processing",
|
||||||
|
sSortAsc: "ui-state-default",
|
||||||
|
sSortDesc: "ui-state-default",
|
||||||
|
sSortable: "ui-state-default",
|
||||||
|
sSortableAsc: "ui-state-default",
|
||||||
|
sSortableDesc: "ui-state-default",
|
||||||
|
sSortableNone: "ui-state-default",
|
||||||
|
sSortColumn: "sorting_",
|
||||||
|
sSortJUIAsc: "css_right ui-icon ui-icon-triangle-1-n",
|
||||||
|
sSortJUIDesc: "css_right ui-icon ui-icon-triangle-1-s",
|
||||||
|
sSortJUI: "css_right ui-icon ui-icon-carat-2-n-s",
|
||||||
|
sSortJUIAscAllowed: "css_right ui-icon ui-icon-carat-1-n",
|
||||||
|
sSortJUIDescAllowed: "css_right ui-icon ui-icon-carat-1-s",
|
||||||
|
sSortJUIWrapper: "DataTables_sort_wrapper",
|
||||||
|
sSortIcon: "DataTables_sort_icon",
|
||||||
|
sScrollWrapper: "dataTables_scroll",
|
||||||
|
sScrollHead: "dataTables_scrollHead ui-state-default",
|
||||||
|
sScrollHeadInner: "dataTables_scrollHeadInner",
|
||||||
|
sScrollBody: "dataTables_scrollBody",
|
||||||
|
sScrollFoot: "dataTables_scrollFoot ui-state-default",
|
||||||
|
sScrollFootInner: "dataTables_scrollFootInner",
|
||||||
|
sFooterTH: "ui-state-default"
|
||||||
|
}; o.oPagination = { two_button: { fnInit: function (g, l, r) {
|
||||||
|
var s, w, y; if (g.bJUI) {
|
||||||
|
s = p.createElement("a"); w = p.createElement("a"); y = p.createElement("span"); y.className = g.oClasses.sPageJUINext; w.appendChild(y); y = p.createElement("span"); y.className = g.oClasses.sPageJUIPrev;
|
||||||
|
s.appendChild(y)
|
||||||
|
}
|
||||||
|
else { s = p.createElement("div"); w = p.createElement("div") } s.className = g.oClasses.sPagePrevDisabled; w.className = g.oClasses.sPageNextDisabled; s.title = g.oLanguage.oPaginate.sPrevious; w.title = g.oLanguage.oPaginate.sNext; l.appendChild(s); l.appendChild(w); i(s).bind("click.DT", function () { g.oApi._fnPageChange(g, "previous") && r(g) }); i(w).bind("click.DT", function () { g.oApi._fnPageChange(g, "next") && r(g) }); i(s).bind("selectstart.DT", function () { return false }); i(w).bind("selectstart.DT", function () { return false });
|
||||||
|
|
||||||
|
if (g.sTableId !== "" && typeof g.aanFeatures.p == "undefined") {
|
||||||
|
l.setAttribute("id", g.sTableId + "_paginate");
|
||||||
|
s.setAttribute("id", g.sTableId + "_previous");
|
||||||
|
w.setAttribute("id", g.sTableId + "_next")
|
||||||
|
}
|
||||||
|
}, fnUpdate: function (g) {
|
||||||
|
if (g.aanFeatures.p) for (var l = g.aanFeatures.p, r = 0, s = l.length; r < s; r++)
|
||||||
|
if (l[r].childNodes.length !== 0) {
|
||||||
|
l[r].childNodes[0].className = g._iDisplayStart === 0 ? g.oClasses.sPagePrevDisabled : g.oClasses.sPagePrevEnabled; l[r].childNodes[1].className = g.fnDisplayEnd() == g.fnRecordsDisplay() ? g.oClasses.sPageNextDisabled :
|
||||||
|
g.oClasses.sPageNextEnabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, iFullNumbersShowPages: 5, full_numbers: { fnInit: function (g, l, r) {
|
||||||
|
var s = p.createElement("span"), w = p.createElement("span"), y = p.createElement("span"), G = p.createElement("span"), x = p.createElement("span"); s.innerHTML = g.oLanguage.oPaginate.sFirst; w.innerHTML = g.oLanguage.oPaginate.sPrevious; G.innerHTML = g.oLanguage.oPaginate.sNext; x.innerHTML = g.oLanguage.oPaginate.sLast; var v = g.oClasses; s.className = v.sPageButton + " " + v.sPageFirst; w.className = v.sPageButton + " " + v.sPagePrevious; G.className =
|
||||||
|
v.sPageButton + " " + v.sPageNext; x.className = v.sPageButton + " " + v.sPageLast; l.appendChild(s); l.appendChild(w); l.appendChild(y); l.appendChild(G); l.appendChild(x); i(s).bind("click.DT", function () { g.oApi._fnPageChange(g, "first") && r(g) }); i(w).bind("click.DT", function () { g.oApi._fnPageChange(g, "previous") && r(g) }); i(G).bind("click.DT", function () { g.oApi._fnPageChange(g, "next") && r(g) }); i(x).bind("click.DT", function () { g.oApi._fnPageChange(g, "last") && r(g) }); i("span", l).bind("mousedown.DT", function () { return false }).bind("selectstart.DT",
|
||||||
|
|
||||||
|
function () { return false }); if (g.sTableId !== "" && typeof g.aanFeatures.p == "undefined") { l.setAttribute("id", g.sTableId + "_paginate"); s.setAttribute("id", g.sTableId + "_first"); w.setAttribute("id", g.sTableId + "_previous"); G.setAttribute("id", g.sTableId + "_next"); x.setAttribute("id", g.sTableId + "_last") }
|
||||||
|
}, fnUpdate: function (g, l) {
|
||||||
|
if (g.aanFeatures.p) {
|
||||||
|
var r = o.oPagination.iFullNumbersShowPages, s = Math.floor(r / 2), w = Math.ceil(g.fnRecordsDisplay() / g._iDisplayLength), y = Math.ceil(g._iDisplayStart / g._iDisplayLength) + 1, G =
|
||||||
|
"", x, v = g.oClasses; if (w < r) { s = 1; x = w } else if (y <= s) { s = 1; x = r } else if (y >= w - s) { s = w - r + 1; x = w } else { s = y - Math.ceil(r / 2) + 1; x = s + r - 1 } for (r = s; r <= x; r++) G += y != r ? '<span class="' + v.sPageButton + '">' + r + "</span>" : '<span class="' + v.sPageButtonActive + '">' + r + "</span>"; x = g.aanFeatures.p; var z, Y = function (L) { g._iDisplayStart = (this.innerHTML * 1 - 1) * g._iDisplayLength; l(g); L.preventDefault() }, V = function () { return false }; r = 0; for (s = x.length; r < s; r++) if (x[r].childNodes.length !== 0) {
|
||||||
|
z = i("span:eq(2)", x[r]); z.html(G); i("span", z).bind("click.DT",
|
||||||
|
Y).bind("mousedown.DT", V).bind("selectstart.DT", V); z = x[r].getElementsByTagName("span"); z = [z[0], z[1], z[z.length - 2], z[z.length - 1]]; i(z).removeClass(v.sPageButton + " " + v.sPageButtonActive + " " + v.sPageButtonStaticDisabled); if (y == 1) { z[0].className += " " + v.sPageButtonStaticDisabled; z[1].className += " " + v.sPageButtonStaticDisabled } else { z[0].className += " " + v.sPageButton; z[1].className += " " + v.sPageButton } if (w === 0 || y == w || g._iDisplayLength == -1) {
|
||||||
|
z[2].className += " " + v.sPageButtonStaticDisabled; z[3].className += " " +
|
||||||
|
v.sPageButtonStaticDisabled
|
||||||
|
} else { z[2].className += " " + v.sPageButton; z[3].className += " " + v.sPageButton }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}; o.oSort = { "string-asc": function (g, l) { if (typeof g != "string") g = ""; if (typeof l != "string") l = ""; g = g.toLowerCase(); l = l.toLowerCase(); return g < l ? -1 : g > l ? 1 : 0 }, "string-desc": function (g, l) { if (typeof g != "string") g = ""; if (typeof l != "string") l = ""; g = g.toLowerCase(); l = l.toLowerCase(); return g < l ? 1 : g > l ? -1 : 0 }, "html-asc": function (g, l) {
|
||||||
|
g = g.replace(/<.*?>/g, "").toLowerCase(); l = l.replace(/<.*?>/g, "").toLowerCase(); return g <
|
||||||
|
l ? -1 : g > l ? 1 : 0
|
||||||
|
}, "html-desc": function (g, l) { g = g.replace(/<.*?>/g, "").toLowerCase(); l = l.replace(/<.*?>/g, "").toLowerCase(); return g < l ? 1 : g > l ? -1 : 0 }, "date-asc": function (g, l) { g = Date.parse(g); l = Date.parse(l); if (isNaN(g) || g === "") g = Date.parse("01/01/1970 00:00:00"); if (isNaN(l) || l === "") l = Date.parse("01/01/1970 00:00:00"); return g - l }, "date-desc": function (g, l) {
|
||||||
|
g = Date.parse(g); l = Date.parse(l); if (isNaN(g) || g === "") g = Date.parse("01/01/1970 00:00:00"); if (isNaN(l) || l === "") l = Date.parse("01/01/1970 00:00:00"); return l -
|
||||||
|
g
|
||||||
|
}, "numeric-asc": function (g, l) { return (g == "-" || g === "" ? 0 : g * 1) - (l == "-" || l === "" ? 0 : l * 1) }, "numeric-desc": function (g, l) { return (l == "-" || l === "" ? 0 : l * 1) - (g == "-" || g === "" ? 0 : g * 1) }
|
||||||
|
}; o.aTypes = [function (g) { if (typeof g == "number") return "numeric"; else if (typeof g != "string") return null; var l, r = false; l = g.charAt(0); if ("0123456789-".indexOf(l) == -1) return null; for (var s = 1; s < g.length; s++) { l = g.charAt(s); if ("0123456789.".indexOf(l) == -1) return null; if (l == ".") { if (r) return null; r = true } } return "numeric" }, function (g) {
|
||||||
|
var l = Date.parse(g);
|
||||||
|
|
||||||
|
if (l !== null && !isNaN(l) || typeof g == "string" && g.length === 0) return "date"; return null
|
||||||
|
}, function (g) { if (typeof g == "string" && g.indexOf("<") != -1 && g.indexOf(">") != -1) return "html"; return null } ]; o.fnVersionCheck = function (g) { var l = function (x, v) { for (; x.length < v; ) x += "0"; return x }, r = o.sVersion.split("."); g = g.split("."); for (var s = "", w = "", y = 0, G = g.length; y < G; y++) { s += l(r[y], 3); w += l(g[y], 3) } return parseInt(s, 10) >= parseInt(w, 10) }; o._oExternConfig = { iNextUnique: 0 }; i.fn.dataTable = function (g) {
|
||||||
|
function l() {
|
||||||
|
this.fnRecordsTotal =
|
||||||
|
function () { return this.oFeatures.bServerSide ? parseInt(this._iRecordsTotal, 10) : this.aiDisplayMaster.length }; this.fnRecordsDisplay = function () { return this.oFeatures.bServerSide ? parseInt(this._iRecordsDisplay, 10) : this.aiDisplay.length }; this.fnDisplayEnd = function () { return this.oFeatures.bServerSide ? this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ? this._iDisplayStart + this.aiDisplay.length : Math.min(this._iDisplayStart + this._iDisplayLength, this._iRecordsDisplay) : this._iDisplayEnd }; this.sInstance =
|
||||||
|
this.oInstance = null; this.oFeatures = { bPaginate: true, bLengthChange: true, bFilter: true, bSort: true, bInfo: true, bAutoWidth: true, bProcessing: false, bSortClasses: true, bStateSave: false, bServerSide: false, bDeferRender: false }; this.oScroll = { sX: "", sXInner: "", sY: "", bCollapse: false, bInfinite: false, iLoadGap: 100, iBarWidth: 0, bAutoCss: true }; this.aanFeatures = [];
|
||||||
|
this.oLanguage = { sProcessing: "Processing...", sLengthMenu: "Show _MENU_ artists per page", sZeroRecords: "No matching records found", sEmptyTable: "",
|
||||||
|
sLoadingRecords: "Loading...", sInfo: "Showing _START_ to _END_ of _TOTAL_ artists", sInfoEmpty: "Showing 0 to 0 of 0 artists", sInfoFiltered: "(filtered from _MAX_ total artists)", sInfoPostFix: "", sSearch: "Filter:", sUrl: "", oPaginate: { sFirst: "First", sPrevious: "Previous", sNext: "Next", sLast: "Last" }, fnInfoCallback: null
|
||||||
|
}; this.aoData = []; this.aiDisplay = []; this.aiDisplayMaster = []; this.aoColumns = []; this.aoHeader = []; this.aoFooter = []; this.iNextId = 0; this.asDataSearch = []; this.oPreviousSearch = { sSearch: "", bRegex: false,
|
||||||
|
bSmart: true
|
||||||
|
}; this.aoPreSearchCols = []; this.aaSorting = [[0, "asc", 0]]; this.aaSortingFixed = null; this.asStripClasses = []; this.asDestoryStrips = []; this.sDestroyWidth = 0; this.fnFooterCallback = this.fnHeaderCallback = this.fnRowCallback = null; this.aoDrawCallback = []; this.fnInitComplete = this.fnPreDrawCallback = null; this.sTableId = ""; this.nTableWrapper = this.nTBody = this.nTFoot = this.nTHead = this.nTable = null; this.bInitialised = this.bDeferLoading = false; this.aoOpenRows = []; this.sDom = "lfrtip"; this.sPaginationType = "two_button";
|
||||||
|
this.iCookieDuration = 7200; this.sCookiePrefix = "SpryMedia_DataTables_"; this.fnCookieCallback = null; this.aoStateSave = []; this.aoStateLoad = []; this.sAjaxSource = this.oLoadedState = null; this.sAjaxDataProp = "aaData"; this.bAjaxDataGet = true; this.jqXHR = null; this.fnServerData = function (a, b, c, d) { d.jqXHR = i.ajax({ url: a, data: b, success: c, dataType: "json", cache: false, error: function (f, e) { e == "parsererror" && alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.") } }) };
|
||||||
|
this.fnFormatNumber = function (a) { if (a < 1E3) return a; else { var b = a + ""; a = b.split(""); var c = ""; b = b.length; for (var d = 0; d < b; d++) { if (d % 3 === 0 && d !== 0) c = "," + c; c = a[b - d - 1] + c } } return c }; this.aLengthMenu = [10, 25, 50, 100]; this.bDrawing = this.iDraw = 0; this.iDrawError = -1; this._iDisplayLength = 10; this._iDisplayStart = 0; this._iDisplayEnd = 10; this._iRecordsDisplay = this._iRecordsTotal = 0; this.bJUI = false; this.oClasses = o.oStdClasses; this.bSortCellsTop = this.bSorted = this.bFiltered = false; this.oInit = null
|
||||||
|
} function r(a) {
|
||||||
|
return function () {
|
||||||
|
var b =
|
||||||
|
[A(this[o.iApiIndex])].concat(Array.prototype.slice.call(arguments)); return o.oApi[a].apply(this, b)
|
||||||
|
}
|
||||||
|
} function s(a) {
|
||||||
|
var b, c, d = a.iInitDisplayStart; if (a.bInitialised === false) setTimeout(function () { s(a) }, 200); else {
|
||||||
|
xa(a); V(a); L(a, a.aoHeader); a.nTFoot && L(a, a.aoFooter);
|
||||||
|
K(a, true); a.oFeatures.bAutoWidth && ea(a);
|
||||||
|
b = 0; for (c = a.aoColumns.length; b < c; b++)
|
||||||
|
if (a.aoColumns[b].sWidth !== null) a.aoColumns[b].nTh.style.width = u(a.aoColumns[b].sWidth);
|
||||||
|
if (a.oFeatures.bSort) R(a);
|
||||||
|
else if (a.oFeatures.bFilter) M(a, a.oPreviousSearch);
|
||||||
|
else { a.aiDisplay = a.aiDisplayMaster.slice(); E(a); C(a) } if (a.sAjaxSource !== null && !a.oFeatures.bServerSide) a.fnServerData.call(a.oInstance, a.sAjaxSource, [], function (f) { var e = f; if (a.sAjaxDataProp !== "") e = Z(a.sAjaxDataProp)(f); for (b = 0; b < e.length; b++) v(a, e[b]); a.iInitDisplayStart = d; if (a.oFeatures.bSort) R(a); else { a.aiDisplay = a.aiDisplayMaster.slice(); E(a); C(a) } K(a, false); w(a, f) }, a); else if (!a.oFeatures.bServerSide) { K(a, false); w(a) }
|
||||||
|
}
|
||||||
|
} function w(a, b) {
|
||||||
|
a._bInitComplete = true; if (typeof a.fnInitComplete == "function") typeof b !=
|
||||||
|
"undefined" ? a.fnInitComplete.call(a.oInstance, a, b) : a.fnInitComplete.call(a.oInstance, a)
|
||||||
|
} function y(a, b, c) {
|
||||||
|
n(a.oLanguage, b, "sProcessing"); n(a.oLanguage, b, "sLengthMenu"); n(a.oLanguage, b, "sEmptyTable"); n(a.oLanguage, b, "sLoadingRecords"); n(a.oLanguage, b, "sZeroRecords"); n(a.oLanguage, b, "sInfo"); n(a.oLanguage, b, "sInfoEmpty"); n(a.oLanguage, b, "sInfoFiltered"); n(a.oLanguage, b, "sInfoPostFix"); n(a.oLanguage, b, "sSearch"); if (typeof b.oPaginate != "undefined") {
|
||||||
|
n(a.oLanguage.oPaginate, b.oPaginate, "sFirst"); n(a.oLanguage.oPaginate,
|
||||||
|
b.oPaginate, "sPrevious"); n(a.oLanguage.oPaginate, b.oPaginate, "sNext"); n(a.oLanguage.oPaginate, b.oPaginate, "sLast")
|
||||||
|
} typeof b.sEmptyTable == "undefined" && typeof b.sZeroRecords != "undefined" && n(a.oLanguage, b, "sZeroRecords", "sEmptyTable"); typeof b.sLoadingRecords == "undefined" && typeof b.sZeroRecords != "undefined" && n(a.oLanguage, b, "sZeroRecords", "sLoadingRecords"); c && s(a)
|
||||||
|
} function G(a, b) {
|
||||||
|
var c = a.aoColumns.length; b = { sType: null, _bAutoType: true, bVisible: true, bSearchable: true, bSortable: true, asSorting: ["asc", "desc"],
|
||||||
|
sSortingClass: a.oClasses.sSortable, sSortingClassJUI: a.oClasses.sSortJUI, sTitle: b ? b.innerHTML : "", sName: "", sWidth: null, sWidthOrig: null, sClass: null, fnRender: null, bUseRendered: true, iDataSort: c, mDataProp: c, fnGetData: null, fnSetData: null, sSortDataType: "std", sDefaultContent: null, sContentPadding: "", nTh: b ? b : p.createElement("th"), nTf: null
|
||||||
|
}; a.aoColumns.push(b); if (typeof a.aoPreSearchCols[c] == "undefined" || a.aoPreSearchCols[c] === null) a.aoPreSearchCols[c] = { sSearch: "", bRegex: false, bSmart: true }; else {
|
||||||
|
if (typeof a.aoPreSearchCols[c].bRegex ==
|
||||||
|
"undefined") a.aoPreSearchCols[c].bRegex = true; if (typeof a.aoPreSearchCols[c].bSmart == "undefined") a.aoPreSearchCols[c].bSmart = true
|
||||||
|
} x(a, c, null)
|
||||||
|
} function x(a, b, c) {
|
||||||
|
b = a.aoColumns[b]; if (typeof c != "undefined" && c !== null) {
|
||||||
|
if (typeof c.sType != "undefined") { b.sType = c.sType; b._bAutoType = false } n(b, c, "bVisible"); n(b, c, "bSearchable"); n(b, c, "bSortable"); n(b, c, "sTitle"); n(b, c, "sName"); n(b, c, "sWidth"); n(b, c, "sWidth", "sWidthOrig"); n(b, c, "sClass"); n(b, c, "fnRender"); n(b, c, "bUseRendered"); n(b, c, "iDataSort"); n(b, c, "mDataProp");
|
||||||
|
n(b, c, "asSorting"); n(b, c, "sSortDataType"); n(b, c, "sDefaultContent"); n(b, c, "sContentPadding")
|
||||||
|
} b.fnGetData = Z(b.mDataProp); b.fnSetData = ya(b.mDataProp); if (!a.oFeatures.bSort) b.bSortable = false; if (!b.bSortable || i.inArray("asc", b.asSorting) == -1 && i.inArray("desc", b.asSorting) == -1) { b.sSortingClass = a.oClasses.sSortableNone; b.sSortingClassJUI = "" } else if (b.bSortable || i.inArray("asc", b.asSorting) == -1 && i.inArray("desc", b.asSorting) == -1) { b.sSortingClass = a.oClasses.sSortable; b.sSortingClassJUI = a.oClasses.sSortJUI } else if (i.inArray("asc",
|
||||||
|
b.asSorting) != -1 && i.inArray("desc", b.asSorting) == -1) { b.sSortingClass = a.oClasses.sSortableAsc; b.sSortingClassJUI = a.oClasses.sSortJUIAscAllowed } else if (i.inArray("asc", b.asSorting) == -1 && i.inArray("desc", b.asSorting) != -1) { b.sSortingClass = a.oClasses.sSortableDesc; b.sSortingClassJUI = a.oClasses.sSortJUIDescAllowed }
|
||||||
|
} function v(a, b) {
|
||||||
|
var c; c = typeof b.length == "number" ? b.slice() : i.extend(true, {}, b); b = a.aoData.length; var d = { nTr: null, _iId: a.iNextId++, _aData: c, _anHidden: [], _sRowStripe: "" }; a.aoData.push(d); for (var f,
|
||||||
|
e = 0, h = a.aoColumns.length; e < h; e++) { c = a.aoColumns[e]; typeof c.fnRender == "function" && c.bUseRendered && c.mDataProp !== null && N(a, b, e, c.fnRender({ iDataRow: b, iDataColumn: e, aData: d._aData, oSettings: a })); if (c._bAutoType && c.sType != "string") { f = H(a, b, e, "type"); if (f !== null && f !== "") { f = fa(f); if (c.sType === null) c.sType = f; else if (c.sType != f) c.sType = "string" } } } a.aiDisplayMaster.push(b); a.oFeatures.bDeferRender || z(a, b); return b
|
||||||
|
} function z(a, b) {
|
||||||
|
var c = a.aoData[b], d; if (c.nTr === null) {
|
||||||
|
c.nTr = p.createElement("tr"); typeof c._aData.DT_RowId !=
|
||||||
|
"undefined" && c.nTr.setAttribute("id", c._aData.DT_RowId); typeof c._aData.DT_RowClass != "undefined" && i(c.nTr).addClass(c._aData.DT_RowClass); for (var f = 0, e = a.aoColumns.length; f < e; f++) {
|
||||||
|
var h = a.aoColumns[f]; d = p.createElement("td"); d.innerHTML = typeof h.fnRender == "function" && (!h.bUseRendered || h.mDataProp === null) ? h.fnRender({ iDataRow: b, iDataColumn: f, aData: c._aData, oSettings: a }) : H(a, b, f, "display"); if (h.sClass !== null) d.className = h.sClass; if (h.bVisible) { c.nTr.appendChild(d); c._anHidden[f] = null } else c._anHidden[f] =
|
||||||
|
d
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} function Y(a) {
|
||||||
|
var b, c, d, f, e, h, j, k, m; if (a.bDeferLoading || a.sAjaxSource === null) { j = a.nTBody.childNodes; b = 0; for (c = j.length; b < c; b++) if (j[b].nodeName.toUpperCase() == "TR") { k = a.aoData.length; a.aoData.push({ nTr: j[b], _iId: a.iNextId++, _aData: [], _anHidden: [], _sRowStripe: "" }); a.aiDisplayMaster.push(k); h = j[b].childNodes; d = e = 0; for (f = h.length; d < f; d++) { m = h[d].nodeName.toUpperCase(); if (m == "TD" || m == "TH") { N(a, k, e, i.trim(h[d].innerHTML)); e++ } } } } j = $(a); h = []; b = 0; for (c = j.length; b < c; b++) {
|
||||||
|
d = 0; for (f = j[b].childNodes.length; d <
|
||||||
|
f; d++) { e = j[b].childNodes[d]; m = e.nodeName.toUpperCase(); if (m == "TD" || m == "TH") h.push(e) }
|
||||||
|
} h.length != j.length * a.aoColumns.length && J(a, 1, "Unexpected number of TD elements. Expected " + j.length * a.aoColumns.length + " and got " + h.length + ". DataTables does not support rowspan / colspan in the table body, and there must be one cell for each row/column combination."); d = 0; for (f = a.aoColumns.length; d < f; d++) {
|
||||||
|
if (a.aoColumns[d].sTitle === null) a.aoColumns[d].sTitle = a.aoColumns[d].nTh.innerHTML; j = a.aoColumns[d]._bAutoType;
|
||||||
|
m = typeof a.aoColumns[d].fnRender == "function"; e = a.aoColumns[d].sClass !== null; k = a.aoColumns[d].bVisible; var t, q; if (j || m || e || !k) {
|
||||||
|
b = 0; for (c = a.aoData.length; b < c; b++) {
|
||||||
|
t = h[b * f + d]; if (j && a.aoColumns[d].sType != "string") { q = H(a, b, d, "type"); if (q !== "") { q = fa(q); if (a.aoColumns[d].sType === null) a.aoColumns[d].sType = q; else if (a.aoColumns[d].sType != q) a.aoColumns[d].sType = "string" } } if (m) {
|
||||||
|
q = a.aoColumns[d].fnRender({ iDataRow: b, iDataColumn: d, aData: a.aoData[b]._aData, oSettings: a }); t.innerHTML = q; a.aoColumns[d].bUseRendered &&
|
||||||
|
N(a, b, d, q)
|
||||||
|
} if (e) t.className += " " + a.aoColumns[d].sClass; if (k) a.aoData[b]._anHidden[d] = null; else { a.aoData[b]._anHidden[d] = t; t.parentNode.removeChild(t) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} function V(a) {
|
||||||
|
var b, c, d; a.nTHead.getElementsByTagName("tr"); if (a.nTHead.getElementsByTagName("th").length !== 0) { b = 0; for (d = a.aoColumns.length; b < d; b++) { c = a.aoColumns[b].nTh; a.aoColumns[b].sClass !== null && i(c).addClass(a.aoColumns[b].sClass); if (a.aoColumns[b].sTitle != c.innerHTML) c.innerHTML = a.aoColumns[b].sTitle } } else {
|
||||||
|
var f = p.createElement("tr"); b = 0;
|
||||||
|
for (d = a.aoColumns.length; b < d; b++) { c = a.aoColumns[b].nTh; c.innerHTML = a.aoColumns[b].sTitle; a.aoColumns[b].sClass !== null && i(c).addClass(a.aoColumns[b].sClass); f.appendChild(c) } i(a.nTHead).html("")[0].appendChild(f); W(a.aoHeader, a.nTHead)
|
||||||
|
} if (a.bJUI) { b = 0; for (d = a.aoColumns.length; b < d; b++) { c = a.aoColumns[b].nTh; f = p.createElement("div"); f.className = a.oClasses.sSortJUIWrapper; i(c).contents().appendTo(f); var e = p.createElement("span"); e.className = a.oClasses.sSortIcon; f.appendChild(e); c.appendChild(f) } } d = function () {
|
||||||
|
this.onselectstart =
|
||||||
|
function () { return false }; return false
|
||||||
|
}; if (a.oFeatures.bSort) for (b = 0; b < a.aoColumns.length; b++) if (a.aoColumns[b].bSortable !== false) { ga(a, a.aoColumns[b].nTh, b); i(a.aoColumns[b].nTh).bind("mousedown.DT", d) } else i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone); a.oClasses.sFooterTH !== "" && i(">tr>th", a.nTFoot).addClass(a.oClasses.sFooterTH); if (a.nTFoot !== null) { c = S(a, null, a.aoFooter); b = 0; for (d = a.aoColumns.length; b < d; b++) if (typeof c[b] != "undefined") a.aoColumns[b].nTf = c[b] }
|
||||||
|
} function L(a, b, c) {
|
||||||
|
var d, f,
|
||||||
|
e, h = [], j = [], k = a.aoColumns.length; if (typeof c == "undefined") c = false; d = 0; for (f = b.length; d < f; d++) { h[d] = b[d].slice(); h[d].nTr = b[d].nTr; for (e = k - 1; e >= 0; e--) !a.aoColumns[e].bVisible && !c && h[d].splice(e, 1); j.push([]) } d = 0; for (f = h.length; d < f; d++) {
|
||||||
|
if (h[d].nTr) { a = 0; for (e = h[d].nTr.childNodes.length; a < e; a++) h[d].nTr.removeChild(h[d].nTr.childNodes[0]) } e = 0; for (b = h[d].length; e < b; e++) {
|
||||||
|
k = c = 1; if (typeof j[d][e] == "undefined") {
|
||||||
|
h[d].nTr.appendChild(h[d][e].cell); for (j[d][e] = 1; typeof h[d + c] != "undefined" && h[d][e].cell == h[d +
|
||||||
|
c][e].cell; ) { j[d + c][e] = 1; c++ } for (; typeof h[d][e + k] != "undefined" && h[d][e].cell == h[d][e + k].cell; ) { for (a = 0; a < c; a++) j[d + a][e + k] = 1; k++ } h[d][e].cell.setAttribute("rowspan", c); h[d][e].cell.setAttribute("colspan", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} function C(a) {
|
||||||
|
var b, c, d = [], f = 0, e = false; b = a.asStripClasses.length; c = a.aoOpenRows.length; if (!(a.fnPreDrawCallback !== null && a.fnPreDrawCallback.call(a.oInstance, a) === false)) {
|
||||||
|
a.bDrawing = true; if (typeof a.iInitDisplayStart != "undefined" && a.iInitDisplayStart != -1) {
|
||||||
|
a._iDisplayStart = a.oFeatures.bServerSide ?
|
||||||
|
a.iInitDisplayStart : a.iInitDisplayStart >= a.fnRecordsDisplay() ? 0 : a.iInitDisplayStart; a.iInitDisplayStart = -1; E(a)
|
||||||
|
} if (a.bDeferLoading) { a.bDeferLoading = false; a.iDraw++ } else if (a.oFeatures.bServerSide) { if (!a.bDestroying && !za(a)) return } else a.iDraw++; if (a.aiDisplay.length !== 0) {
|
||||||
|
var h = a._iDisplayStart, j = a._iDisplayEnd; if (a.oFeatures.bServerSide) { h = 0; j = a.aoData.length } for (h = h; h < j; h++) {
|
||||||
|
var k = a.aoData[a.aiDisplay[h]]; k.nTr === null && z(a, a.aiDisplay[h]); var m = k.nTr; if (b !== 0) {
|
||||||
|
var t = a.asStripClasses[f % b]; if (k._sRowStripe !=
|
||||||
|
t) { i(m).removeClass(k._sRowStripe).addClass(t); k._sRowStripe = t }
|
||||||
|
} if (typeof a.fnRowCallback == "function") { m = a.fnRowCallback.call(a.oInstance, m, a.aoData[a.aiDisplay[h]]._aData, f, h); if (!m && !e) { J(a, 0, "A node was not returned by fnRowCallback"); e = true } } d.push(m); f++; if (c !== 0) for (k = 0; k < c; k++) m == a.aoOpenRows[k].nParent && d.push(a.aoOpenRows[k].nTr)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
d[0] = p.createElement("tr"); if (typeof a.asStripClasses[0] != "undefined") d[0].className = a.asStripClasses[0]; e = a.oLanguage.sZeroRecords.replace("_MAX_", a.fnFormatNumber(a.fnRecordsTotal()));
|
||||||
|
if (a.iDraw == 1 && a.sAjaxSource !== null && !a.oFeatures.bServerSide) e = a.oLanguage.sLoadingRecords; else if (typeof a.oLanguage.sEmptyTable != "undefined" && a.fnRecordsTotal() === 0) e = a.oLanguage.sEmptyTable; b = p.createElement("td"); b.setAttribute("valign", "top"); b.colSpan = X(a); b.className = a.oClasses.sRowEmpty; b.innerHTML = e; d[f].appendChild(b)
|
||||||
|
} typeof a.fnHeaderCallback == "function" && a.fnHeaderCallback.call(a.oInstance, i(">tr", a.nTHead)[0], aa(a), a._iDisplayStart, a.fnDisplayEnd(), a.aiDisplay); typeof a.fnFooterCallback ==
|
||||||
|
"function" && a.fnFooterCallback.call(a.oInstance, i(">tr", a.nTFoot)[0], aa(a), a._iDisplayStart, a.fnDisplayEnd(), a.aiDisplay); f = p.createDocumentFragment(); b = p.createDocumentFragment(); if (a.nTBody) { e = a.nTBody.parentNode; b.appendChild(a.nTBody); if (!a.oScroll.bInfinite || !a._bInitComplete || a.bSorted || a.bFiltered) { c = a.nTBody.childNodes; for (b = c.length - 1; b >= 0; b--) c[b].parentNode.removeChild(c[b]) } b = 0; for (c = d.length; b < c; b++) f.appendChild(d[b]); a.nTBody.appendChild(f); e !== null && e.appendChild(a.nTBody) } for (b = a.aoDrawCallback.length -
|
||||||
|
1; b >= 0; b--) a.aoDrawCallback[b].fn.call(a.oInstance, a); a.bSorted = false; a.bFiltered = false; a.bDrawing = false; if (a.oFeatures.bServerSide) { K(a, false); typeof a._bInitComplete == "undefined" && w(a) }
|
||||||
|
}
|
||||||
|
} function ba(a) { if (a.oFeatures.bSort) R(a, a.oPreviousSearch); else if (a.oFeatures.bFilter) M(a, a.oPreviousSearch); else { E(a); C(a) } } function za(a) {
|
||||||
|
if (a.bAjaxDataGet) {
|
||||||
|
K(a, true); var b = a.aoColumns.length, c = [], d, f; a.iDraw++; c.push({ name: "sEcho", value: a.iDraw }); c.push({ name: "iColumns", value: b }); c.push({ name: "sColumns", value: ha(a) });
|
||||||
|
c.push({ name: "iDisplayStart", value: a._iDisplayStart }); c.push({ name: "iDisplayLength", value: a.oFeatures.bPaginate !== false ? a._iDisplayLength : -1 }); for (f = 0; f < b; f++) { d = a.aoColumns[f].mDataProp; c.push({ name: "mDataProp_" + f, value: typeof d == "function" ? "function" : d }) } if (a.oFeatures.bFilter !== false) {
|
||||||
|
c.push({ name: "sSearch", value: a.oPreviousSearch.sSearch }); c.push({ name: "bRegex", value: a.oPreviousSearch.bRegex }); for (f = 0; f < b; f++) {
|
||||||
|
c.push({ name: "sSearch_" + f, value: a.aoPreSearchCols[f].sSearch }); c.push({ name: "bRegex_" +
|
||||||
|
f, value: a.aoPreSearchCols[f].bRegex
|
||||||
|
}); c.push({ name: "bSearchable_" + f, value: a.aoColumns[f].bSearchable })
|
||||||
|
}
|
||||||
|
} if (a.oFeatures.bSort !== false) {
|
||||||
|
d = a.aaSortingFixed !== null ? a.aaSortingFixed.length : 0; var e = a.aaSorting.length; c.push({ name: "iSortingCols", value: d + e }); for (f = 0; f < d; f++) { c.push({ name: "iSortCol_" + f, value: a.aaSortingFixed[f][0] }); c.push({ name: "sSortDir_" + f, value: a.aaSortingFixed[f][1] }) } for (f = 0; f < e; f++) { c.push({ name: "iSortCol_" + (f + d), value: a.aaSorting[f][0] }); c.push({ name: "sSortDir_" + (f + d), value: a.aaSorting[f][1] }) } for (f =
|
||||||
|
0; f < b; f++) c.push({ name: "bSortable_" + f, value: a.aoColumns[f].bSortable })
|
||||||
|
} a.fnServerData.call(a.oInstance, a.sAjaxSource, c, function (h) { Aa(a, h) }, a); return false
|
||||||
|
} else return true
|
||||||
|
} function Aa(a, b) {
|
||||||
|
if (typeof b.sEcho != "undefined") if (b.sEcho * 1 < a.iDraw) return; else a.iDraw = b.sEcho * 1; if (!a.oScroll.bInfinite || a.oScroll.bInfinite && (a.bSorted || a.bFiltered)) ia(a); a._iRecordsTotal = b.iTotalRecords; a._iRecordsDisplay = b.iTotalDisplayRecords; var c = ha(a); if (c = typeof b.sColumns != "undefined" && c !== "" && b.sColumns != c) var d =
|
||||||
|
Ba(a, b.sColumns); b = Z(a.sAjaxDataProp)(b); for (var f = 0, e = b.length; f < e; f++) if (c) { for (var h = [], j = 0, k = a.aoColumns.length; j < k; j++) h.push(b[f][d[j]]); v(a, h) } else v(a, b[f]); a.aiDisplay = a.aiDisplayMaster.slice(); a.bAjaxDataGet = false; C(a); a.bAjaxDataGet = true; K(a, false)
|
||||||
|
} function xa(a) {
|
||||||
|
var b = p.createElement("div"); a.nTable.parentNode.insertBefore(b, a.nTable); a.nTableWrapper = p.createElement("div"); a.nTableWrapper.className = a.oClasses.sWrapper; a.sTableId !== "" && a.nTableWrapper.setAttribute("id", a.sTableId + "_wrapper");
|
||||||
|
a.nTableReinsertBefore = a.nTable.nextSibling; for (var c = a.nTableWrapper, d = a.sDom.split(""), f, e, h, j, k, m, t, q = 0; q < d.length; q++) {
|
||||||
|
e = 0; h = d[q]; if (h == "<") {
|
||||||
|
j = p.createElement("div"); k = d[q + 1]; if (k == "'" || k == '"') {
|
||||||
|
m = ""; for (t = 2; d[q + t] != k; ) { m += d[q + t]; t++ } if (m == "H") m = "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix"; else if (m == "F") m = "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"; if (m.indexOf(".") != -1) {
|
||||||
|
k = m.split("."); j.setAttribute("id", k[0].substr(1,
|
||||||
|
k[0].length - 1)); j.className = k[1]
|
||||||
|
} else if (m.charAt(0) == "#") j.setAttribute("id", m.substr(1, m.length - 1)); else j.className = m; q += t
|
||||||
|
} c.appendChild(j); c = j
|
||||||
|
} else if (h == ">") c = c.parentNode; else if (h == "l" && a.oFeatures.bPaginate && a.oFeatures.bLengthChange) { f = Ca(a); e = 1 } else if (h == "f" && a.oFeatures.bFilter) { f = Da(a); e = 1 } else if (h == "r" && a.oFeatures.bProcessing) { f = Ea(a); e = 1 } else if (h == "t") { f = Fa(a); e = 1 } else if (h == "i" && a.oFeatures.bInfo) { f = Ga(a); e = 1 } else if (h == "p" && a.oFeatures.bPaginate) { f = Ha(a); e = 1 } else if (o.aoFeatures.length !==
|
||||||
|
0) { j = o.aoFeatures; t = 0; for (k = j.length; t < k; t++) if (h == j[t].cFeature) { if (f = j[t].fnInit(a)) e = 1; break } } if (e == 1 && f !== null) { if (typeof a.aanFeatures[h] != "object") a.aanFeatures[h] = []; a.aanFeatures[h].push(f); c.appendChild(f) }
|
||||||
|
} b.parentNode.replaceChild(a.nTableWrapper, b)
|
||||||
|
} function Fa(a) {
|
||||||
|
if (a.oScroll.sX === "" && a.oScroll.sY === "") return a.nTable; var b = p.createElement("div"), c = p.createElement("div"), d = p.createElement("div"), f = p.createElement("div"), e = p.createElement("div"), h = p.createElement("div"), j = a.nTable.cloneNode(false),
|
||||||
|
k = a.nTable.cloneNode(false), m = a.nTable.getElementsByTagName("thead")[0], t = a.nTable.getElementsByTagName("tfoot").length === 0 ? null : a.nTable.getElementsByTagName("tfoot")[0], q = typeof g.bJQueryUI != "undefined" && g.bJQueryUI ? o.oJUIClasses : o.oStdClasses; c.appendChild(d); e.appendChild(h); f.appendChild(a.nTable); b.appendChild(c); b.appendChild(f); d.appendChild(j); j.appendChild(m); if (t !== null) { b.appendChild(e); h.appendChild(k); k.appendChild(t) } b.className = q.sScrollWrapper; c.className = q.sScrollHead; d.className =
|
||||||
|
q.sScrollHeadInner; f.className = q.sScrollBody; e.className = q.sScrollFoot; h.className = q.sScrollFootInner; if (a.oScroll.bAutoCss) { c.style.overflow = "hidden"; c.style.position = "relative"; e.style.overflow = "hidden"; f.style.overflow = "auto" } c.style.border = "0"; c.style.width = "100%"; e.style.border = "0"; d.style.width = "150%"; j.removeAttribute("id"); j.style.marginLeft = "0"; a.nTable.style.marginLeft = "0"; if (t !== null) { k.removeAttribute("id"); k.style.marginLeft = "0" } d = i(">caption", a.nTable); h = 0; for (k = d.length; h < k; h++) j.appendChild(d[h]);
|
||||||
|
if (a.oScroll.sX !== "") { c.style.width = u(a.oScroll.sX); f.style.width = u(a.oScroll.sX); if (t !== null) e.style.width = u(a.oScroll.sX); i(f).scroll(function () { c.scrollLeft = this.scrollLeft; if (t !== null) e.scrollLeft = this.scrollLeft }) } if (a.oScroll.sY !== "") f.style.height = u(a.oScroll.sY); a.aoDrawCallback.push({ fn: Ia, sName: "scrolling" }); a.oScroll.bInfinite && i(f).scroll(function () {
|
||||||
|
if (!a.bDrawing) if (i(this).scrollTop() + i(this).height() > i(a.nTable).height() - a.oScroll.iLoadGap) if (a.fnDisplayEnd() < a.fnRecordsDisplay()) {
|
||||||
|
ja(a,
|
||||||
|
"next"); E(a); C(a)
|
||||||
|
}
|
||||||
|
}); a.nScrollHead = c; a.nScrollFoot = e; return b
|
||||||
|
} function Ia(a) {
|
||||||
|
var b = a.nScrollHead.getElementsByTagName("div")[0], c = b.getElementsByTagName("table")[0], d = a.nTable.parentNode, f, e, h, j, k, m, t, q, I = []; h = a.nTable.getElementsByTagName("thead"); h.length > 0 && a.nTable.removeChild(h[0]); if (a.nTFoot !== null) { k = a.nTable.getElementsByTagName("tfoot"); k.length > 0 && a.nTable.removeChild(k[0]) } h = a.nTHead.cloneNode(true); a.nTable.insertBefore(h, a.nTable.childNodes[0]); if (a.nTFoot !== null) {
|
||||||
|
k = a.nTFoot.cloneNode(true);
|
||||||
|
a.nTable.insertBefore(k, a.nTable.childNodes[1])
|
||||||
|
} if (a.oScroll.sX === "") { d.style.width = "100%"; b.parentNode.style.width = "100%" } var O = S(a, h); f = 0; for (e = O.length; f < e; f++) { t = Ja(a, f); O[f].style.width = a.aoColumns[t].sWidth } a.nTFoot !== null && P(function (B) { B.style.width = "" }, k.getElementsByTagName("tr")); f = i(a.nTable).outerWidth(); if (a.oScroll.sX === "") { a.nTable.style.width = "100%"; if (i.browser.msie && i.browser.version <= 7) a.nTable.style.width = u(i(a.nTable).outerWidth() - a.oScroll.iBarWidth) } else if (a.oScroll.sXInner !==
|
||||||
|
"") a.nTable.style.width = u(a.oScroll.sXInner); else if (f == i(d).width() && i(d).height() < i(a.nTable).height()) { a.nTable.style.width = u(f - a.oScroll.iBarWidth); if (i(a.nTable).outerWidth() > f - a.oScroll.iBarWidth) a.nTable.style.width = u(f) } else a.nTable.style.width = u(f); f = i(a.nTable).outerWidth(); if (a.oScroll.sX === "") { d.style.width = u(f + a.oScroll.iBarWidth); b.parentNode.style.width = u(f + a.oScroll.iBarWidth) } e = a.nTHead.getElementsByTagName("tr"); h = h.getElementsByTagName("tr"); P(function (B, F) {
|
||||||
|
m = B.style; m.paddingTop =
|
||||||
|
"0"; m.paddingBottom = "0"; m.borderTopWidth = "0"; m.borderBottomWidth = "0"; m.height = 0; q = i(B).width(); F.style.width = u(q); I.push(q)
|
||||||
|
}, h, e); i(h).height(0); if (a.nTFoot !== null) { j = k.getElementsByTagName("tr"); k = a.nTFoot.getElementsByTagName("tr"); P(function (B, F) { m = B.style; m.paddingTop = "0"; m.paddingBottom = "0"; m.borderTopWidth = "0"; m.borderBottomWidth = "0"; m.height = 0; q = i(B).width(); F.style.width = u(q); I.push(q) }, j, k); i(j).height(0) } P(function (B) { B.innerHTML = ""; B.style.width = u(I.shift()) }, h); a.nTFoot !== null && P(function (B) {
|
||||||
|
B.innerHTML =
|
||||||
|
""; B.style.width = u(I.shift())
|
||||||
|
}, j); if (i(a.nTable).outerWidth() < f) if (a.oScroll.sX === "") J(a, 1, "The table cannot fit into the current element which will cause column misalignment. It is suggested that you enable x-scrolling or increase the width the table has in which to be drawn"); else a.oScroll.sXInner !== "" && J(a, 1, "The table cannot fit into the current element which will cause column misalignment. It is suggested that you increase the sScrollXInner property to allow it to draw in a larger area, or simply remove that parameter to allow automatic calculation");
|
||||||
|
if (a.oScroll.sY === "") if (i.browser.msie && i.browser.version <= 7) d.style.height = u(a.nTable.offsetHeight + a.oScroll.iBarWidth); if (a.oScroll.sY !== "" && a.oScroll.bCollapse) { d.style.height = u(a.oScroll.sY); j = a.oScroll.sX !== "" && a.nTable.offsetWidth > d.offsetWidth ? a.oScroll.iBarWidth : 0; if (a.nTable.offsetHeight < d.offsetHeight) d.style.height = u(i(a.nTable).height() + j) } j = i(a.nTable).outerWidth(); c.style.width = u(j); b.style.width = u(j + a.oScroll.iBarWidth); if (a.nTFoot !== null) {
|
||||||
|
b = a.nScrollFoot.getElementsByTagName("div")[0];
|
||||||
|
c = b.getElementsByTagName("table")[0]; b.style.width = u(a.nTable.offsetWidth + a.oScroll.iBarWidth); c.style.width = u(a.nTable.offsetWidth)
|
||||||
|
} if (a.bSorted || a.bFiltered) d.scrollTop = 0
|
||||||
|
}
|
||||||
|
// sFilter
|
||||||
|
function ca(a) { if (a.oFeatures.bAutoWidth === false) return false; ea(a); for (var b = 0, c = a.aoColumns.length; b < c; b++) a.aoColumns[b].nTh.style.width = a.aoColumns[b].sWidth } function Da(a) {
|
||||||
|
var b = a.oLanguage.sSearch;
|
||||||
|
b = b.indexOf("_INPUT_") !== -1 ? b.replace("_INPUT_", '<input type="text" />') : b === "" ? '<input type="text" />' : b + ' <input type="text" />';
|
||||||
|
var c = p.createElement("div");
|
||||||
|
c.className = a.oClasses.sFilter;
|
||||||
|
c.innerHTML = "<div>" + b + "</div>";
|
||||||
|
a.sTableId !== "" && typeof a.aanFeatures.f == "undefined" && c.setAttribute("id", a.sTableId + "_filter");
|
||||||
|
b = i("input", c);
|
||||||
|
b.val(a.oPreviousSearch.sSearch.replace('"', """));
|
||||||
|
b.bind("keyup.DT", function () {
|
||||||
|
for (var d = a.aanFeatures.f, f = 0, e = d.length;
|
||||||
|
f < e; f++)
|
||||||
|
d[f] != this.parentNode && i("input", d[f]).val(this.value);
|
||||||
|
this.value != a.oPreviousSearch.sSearch && M(a, {
|
||||||
|
sSearch: this.value, bRegex: a.oPreviousSearch.bRegex, bSmart: a.oPreviousSearch.bSmart
|
||||||
|
})
|
||||||
|
});
|
||||||
|
b.bind("keypress.DT", function (d) {
|
||||||
|
if (d.keyCode == 13) return false
|
||||||
|
});
|
||||||
|
return c
|
||||||
|
|
||||||
|
} function M(a, b, c) { Ka(a, b.sSearch, c, b.bRegex, b.bSmart); for (b = 0; b < a.aoPreSearchCols.length; b++) La(a, a.aoPreSearchCols[b].sSearch, b, a.aoPreSearchCols[b].bRegex, a.aoPreSearchCols[b].bSmart); o.afnFiltering.length !== 0 && Ma(a); a.bFiltered = true; a._iDisplayStart = 0; E(a); C(a); ka(a, 0) } function Ma(a) {
|
||||||
|
for (var b = o.afnFiltering, c = 0, d = b.length; c < d; c++) for (var f = 0, e = 0, h = a.aiDisplay.length; e < h; e++) {
|
||||||
|
var j = a.aiDisplay[e - f];
|
||||||
|
if (!b[c](a, da(a, j, "filter"),
|
||||||
|
j)) {
|
||||||
|
a.aiDisplay.splice(e - f, 1); f++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} function La(a, b, c, d, f) { if (b !== "") { var e = 0; b = la(b, d, f); for (d = a.aiDisplay.length - 1; d >= 0; d--) { f = ma(H(a, a.aiDisplay[d], c, "filter"), a.aoColumns[c].sType); if (!b.test(f)) { a.aiDisplay.splice(d, 1); e++ } } } } function Ka(a, b, c, d, f) {
|
||||||
|
var e = la(b, d, f); if (typeof c == "undefined" || c === null) c = 0; if (o.afnFiltering.length !== 0) c = 1; if (b.length <= 0) { a.aiDisplay.splice(0, a.aiDisplay.length); a.aiDisplay = a.aiDisplayMaster.slice() } else if (a.aiDisplay.length == a.aiDisplayMaster.length || a.oPreviousSearch.sSearch.length >
|
||||||
|
b.length || c == 1 || b.indexOf(a.oPreviousSearch.sSearch) !== 0) { a.aiDisplay.splice(0, a.aiDisplay.length); ka(a, 1); for (c = 0; c < a.aiDisplayMaster.length; c++) e.test(a.asDataSearch[c]) && a.aiDisplay.push(a.aiDisplayMaster[c]) } else { var h = 0; for (c = 0; c < a.asDataSearch.length; c++) if (!e.test(a.asDataSearch[c])) { a.aiDisplay.splice(c - h, 1); h++ } } a.oPreviousSearch.sSearch = b; a.oPreviousSearch.bRegex = d; a.oPreviousSearch.bSmart = f
|
||||||
|
} function ka(a, b) {
|
||||||
|
a.asDataSearch.splice(0, a.asDataSearch.length); b = typeof b != "undefined" && b == 1 ? a.aiDisplayMaster :
|
||||||
|
a.aiDisplay; for (var c = 0, d = b.length; c < d; c++) a.asDataSearch[c] = na(a, da(a, b[c], "filter"))
|
||||||
|
} function na(a, b) { var c = ""; if (typeof a.__nTmpFilter == "undefined") a.__nTmpFilter = p.createElement("div"); for (var d = a.__nTmpFilter, f = 0, e = a.aoColumns.length; f < e; f++) if (a.aoColumns[f].bSearchable) c += ma(b[f], a.aoColumns[f].sType) + " "; if (c.indexOf("&") !== -1) { d.innerHTML = c; c = d.textContent ? d.textContent : d.innerText; c = c.replace(/\n/g, " ").replace(/\r/g, "") } return c } function la(a, b, c) {
|
||||||
|
if (c) {
|
||||||
|
a = b ? a.split(" ") : oa(a).split(" ");
|
||||||
|
a = "^(?=.*?" + a.join(")(?=.*?") + ").*$"; return new RegExp(a, "i")
|
||||||
|
} else { a = b ? a : oa(a); return new RegExp(a, "i") }
|
||||||
|
} function ma(a, b) { if (typeof o.ofnSearch[b] == "function") return o.ofnSearch[b](a); else if (b == "html") return a.replace(/\n/g, " ").replace(/<.*?>/g, ""); else if (typeof a == "string") return a.replace(/\n/g, " "); else if (a === null) return ""; return a } function R(a, b) {
|
||||||
|
var c, d, f, e, h = [], j = [], k = o.oSort; d = a.aoData; var m = a.aoColumns; if (!a.oFeatures.bServerSide && (a.aaSorting.length !== 0 || a.aaSortingFixed !== null)) {
|
||||||
|
h = a.aaSortingFixed !==
|
||||||
|
null ? a.aaSortingFixed.concat(a.aaSorting) : a.aaSorting.slice(); for (c = 0; c < h.length; c++) { var t = h[c][0]; f = pa(a, t); e = a.aoColumns[t].sSortDataType; if (typeof o.afnSortData[e] != "undefined") { var q = o.afnSortData[e](a, t, f); f = 0; for (e = d.length; f < e; f++) N(a, f, t, q[f]) } } c = 0; for (d = a.aiDisplayMaster.length; c < d; c++) j[a.aiDisplayMaster[c]] = c; var I = h.length; a.aiDisplayMaster.sort(function (O, B) {
|
||||||
|
var F, qa; for (c = 0; c < I; c++) {
|
||||||
|
F = m[h[c][0]].iDataSort; qa = m[F].sType; F = k[(qa ? qa : "string") + "-" + h[c][1]](H(a, O, F, "sort"), H(a, B, F, "sort"));
|
||||||
|
if (F !== 0) return F
|
||||||
|
} return k["numeric-asc"](j[O], j[B])
|
||||||
|
})
|
||||||
|
} if ((typeof b == "undefined" || b) && !a.oFeatures.bDeferRender) T(a); a.bSorted = true; if (a.oFeatures.bFilter) M(a, a.oPreviousSearch, 1); else { a.aiDisplay = a.aiDisplayMaster.slice(); a._iDisplayStart = 0; E(a); C(a) }
|
||||||
|
} function ga(a, b, c, d) {
|
||||||
|
i(b).bind("click.DT", function (f) {
|
||||||
|
if (a.aoColumns[c].bSortable !== false) {
|
||||||
|
var e = function () {
|
||||||
|
var h, j; if (f.shiftKey) {
|
||||||
|
for (var k = false, m = 0; m < a.aaSorting.length; m++) if (a.aaSorting[m][0] == c) {
|
||||||
|
k = true; h = a.aaSorting[m][0]; j = a.aaSorting[m][2] +
|
||||||
|
1; if (typeof a.aoColumns[h].asSorting[j] == "undefined") a.aaSorting.splice(m, 1); else { a.aaSorting[m][1] = a.aoColumns[h].asSorting[j]; a.aaSorting[m][2] = j } break
|
||||||
|
} k === false && a.aaSorting.push([c, a.aoColumns[c].asSorting[0], 0])
|
||||||
|
} else if (a.aaSorting.length == 1 && a.aaSorting[0][0] == c) { h = a.aaSorting[0][0]; j = a.aaSorting[0][2] + 1; if (typeof a.aoColumns[h].asSorting[j] == "undefined") j = 0; a.aaSorting[0][1] = a.aoColumns[h].asSorting[j]; a.aaSorting[0][2] = j } else {
|
||||||
|
a.aaSorting.splice(0, a.aaSorting.length); a.aaSorting.push([c, a.aoColumns[c].asSorting[0],
|
||||||
|
0])
|
||||||
|
} R(a)
|
||||||
|
}; if (a.oFeatures.bProcessing) { K(a, true); setTimeout(function () { e(); a.oFeatures.bServerSide || K(a, false) }, 0) } else e(); typeof d == "function" && d(a)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} function T(a) {
|
||||||
|
var b, c, d, f, e, h = a.aoColumns.length, j = a.oClasses; for (b = 0; b < h; b++) a.aoColumns[b].bSortable && i(a.aoColumns[b].nTh).removeClass(j.sSortAsc + " " + j.sSortDesc + " " + a.aoColumns[b].sSortingClass); f = a.aaSortingFixed !== null ? a.aaSortingFixed.concat(a.aaSorting) : a.aaSorting.slice(); for (b = 0; b < a.aoColumns.length; b++) if (a.aoColumns[b].bSortable) {
|
||||||
|
e = a.aoColumns[b].sSortingClass;
|
||||||
|
d = -1; for (c = 0; c < f.length; c++) if (f[c][0] == b) { e = f[c][1] == "asc" ? j.sSortAsc : j.sSortDesc; d = c; break } i(a.aoColumns[b].nTh).addClass(e); if (a.bJUI) { c = i("span", a.aoColumns[b].nTh); c.removeClass(j.sSortJUIAsc + " " + j.sSortJUIDesc + " " + j.sSortJUI + " " + j.sSortJUIAscAllowed + " " + j.sSortJUIDescAllowed); c.addClass(d == -1 ? a.aoColumns[b].sSortingClassJUI : f[d][1] == "asc" ? j.sSortJUIAsc : j.sSortJUIDesc) }
|
||||||
|
} else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass); e = j.sSortColumn; if (a.oFeatures.bSort && a.oFeatures.bSortClasses) {
|
||||||
|
d =
|
||||||
|
Q(a); if (a.oFeatures.bDeferRender) i(d).removeClass(e + "1 " + e + "2 " + e + "3"); else if (d.length >= h) for (b = 0; b < h; b++) if (d[b].className.indexOf(e + "1") != -1) { c = 0; for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(e + "1", "")) } else if (d[b].className.indexOf(e + "2") != -1) { c = 0; for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(e + "2", "")) } else if (d[b].className.indexOf(e + "3") != -1) {
|
||||||
|
c = 0; for (a = d.length / h; c < a; c++) d[h * c + b].className = i.trim(d[h * c + b].className.replace(" " +
|
||||||
|
e + "3", ""))
|
||||||
|
} j = 1; var k; for (b = 0; b < f.length; b++) { k = parseInt(f[b][0], 10); c = 0; for (a = d.length / h; c < a; c++) d[h * c + k].className += " " + e + j; j < 3 && j++ }
|
||||||
|
}
|
||||||
|
} function Ha(a) { if (a.oScroll.bInfinite) return null; var b = p.createElement("div"); b.className = a.oClasses.sPaging + a.sPaginationType; o.oPagination[a.sPaginationType].fnInit(a, b, function (c) { E(c); C(c) }); typeof a.aanFeatures.p == "undefined" && a.aoDrawCallback.push({ fn: function (c) { o.oPagination[c.sPaginationType].fnUpdate(c, function (d) { E(d); C(d) }) }, sName: "pagination" }); return b }
|
||||||
|
function ja(a, b) {
|
||||||
|
var c = a._iDisplayStart; if (b == "first") a._iDisplayStart = 0; else if (b == "previous") { a._iDisplayStart = a._iDisplayLength >= 0 ? a._iDisplayStart - a._iDisplayLength : 0; if (a._iDisplayStart < 0) a._iDisplayStart = 0 } else if (b == "next") if (a._iDisplayLength >= 0) { if (a._iDisplayStart + a._iDisplayLength < a.fnRecordsDisplay()) a._iDisplayStart += a._iDisplayLength } else a._iDisplayStart = 0; else if (b == "last") if (a._iDisplayLength >= 0) { b = parseInt((a.fnRecordsDisplay() - 1) / a._iDisplayLength, 10) + 1; a._iDisplayStart = (b - 1) * a._iDisplayLength } else a._iDisplayStart =
|
||||||
|
0; else J(a, 0, "Unknown paging action: " + b); return c != a._iDisplayStart
|
||||||
|
} function Ga(a) { var b = p.createElement("div"); b.className = a.oClasses.sInfo; if (typeof a.aanFeatures.i == "undefined") { a.aoDrawCallback.push({ fn: Na, sName: "information" }); a.sTableId !== "" && b.setAttribute("id", a.sTableId + "_info") } return b } function Na(a) {
|
||||||
|
if (!(!a.oFeatures.bInfo || a.aanFeatures.i.length === 0)) {
|
||||||
|
var b = a._iDisplayStart + 1, c = a.fnDisplayEnd(), d = a.fnRecordsTotal(), f = a.fnRecordsDisplay(), e = a.fnFormatNumber(b), h = a.fnFormatNumber(c), j =
|
||||||
|
a.fnFormatNumber(d), k = a.fnFormatNumber(f); if (a.oScroll.bInfinite) e = a.fnFormatNumber(1); e = a.fnRecordsDisplay() === 0 && a.fnRecordsDisplay() == a.fnRecordsTotal() ? a.oLanguage.sInfoEmpty + a.oLanguage.sInfoPostFix : a.fnRecordsDisplay() === 0 ? a.oLanguage.sInfoEmpty + " " + a.oLanguage.sInfoFiltered.replace("_MAX_", j) + a.oLanguage.sInfoPostFix : a.fnRecordsDisplay() == a.fnRecordsTotal() ? a.oLanguage.sInfo.replace("_START_", e).replace("_END_", h).replace("_TOTAL_", k) + a.oLanguage.sInfoPostFix : a.oLanguage.sInfo.replace("_START_",
|
||||||
|
e).replace("_END_", h).replace("_TOTAL_", k) + " " + a.oLanguage.sInfoFiltered.replace("_MAX_", a.fnFormatNumber(a.fnRecordsTotal())) + a.oLanguage.sInfoPostFix; if (a.oLanguage.fnInfoCallback !== null) e = a.oLanguage.fnInfoCallback(a, b, c, d, f, e); a = a.aanFeatures.i; b = 0; for (c = a.length; b < c; b++) i(a[b]).html(e)
|
||||||
|
}
|
||||||
|
} function Ca(a) {
|
||||||
|
if (a.oScroll.bInfinite) return null; var b = '<select size="1" ' + (a.sTableId === "" ? "" : 'name="' + a.sTableId + '_length"') + ">", c, d; if (a.aLengthMenu.length == 2 && typeof a.aLengthMenu[0] == "object" && typeof a.aLengthMenu[1] ==
|
||||||
|
"object") { c = 0; for (d = a.aLengthMenu[0].length; c < d; c++) b += '<option value="' + a.aLengthMenu[0][c] + '">' + a.aLengthMenu[1][c] + "</option>" } else { c = 0; for (d = a.aLengthMenu.length; c < d; c++) b += '<option value="' + a.aLengthMenu[c] + '">' + a.aLengthMenu[c] + "</option>" } b += "</select>"; var f = p.createElement("div"); a.sTableId !== "" && typeof a.aanFeatures.l == "undefined" && f.setAttribute("id", a.sTableId + "_length"); f.className = a.oClasses.sLength; f.innerHTML = "<label>" + a.oLanguage.sLengthMenu.replace("_MENU_", b) + "</label>"; i('select option[value="' +
|
||||||
|
a._iDisplayLength + '"]', f).attr("selected", true); i("select", f).bind("change.DT", function () { var e = i(this).val(), h = a.aanFeatures.l; c = 0; for (d = h.length; c < d; c++) h[c] != this.parentNode && i("select", h[c]).val(e); a._iDisplayLength = parseInt(e, 10); E(a); if (a.fnDisplayEnd() == a.fnRecordsDisplay()) { a._iDisplayStart = a.fnDisplayEnd() - a._iDisplayLength; if (a._iDisplayStart < 0) a._iDisplayStart = 0 } if (a._iDisplayLength == -1) a._iDisplayStart = 0; C(a) }); return f
|
||||||
|
} function Ea(a) {
|
||||||
|
var b = p.createElement("div"); a.sTableId !== "" && typeof a.aanFeatures.r ==
|
||||||
|
"undefined" && b.setAttribute("id", a.sTableId + "_processing"); b.innerHTML = a.oLanguage.sProcessing; b.className = a.oClasses.sProcessing; a.nTable.parentNode.insertBefore(b, a.nTable); return b
|
||||||
|
} function K(a, b) { if (a.oFeatures.bProcessing) { a = a.aanFeatures.r; for (var c = 0, d = a.length; c < d; c++) a[c].style.visibility = b ? "visible" : "hidden" } } function Ja(a, b) { for (var c = -1, d = 0; d < a.aoColumns.length; d++) { a.aoColumns[d].bVisible === true && c++; if (c == b) return d } return null } function pa(a, b) {
|
||||||
|
for (var c = -1, d = 0; d < a.aoColumns.length; d++) {
|
||||||
|
a.aoColumns[d].bVisible ===
|
||||||
|
true && c++; if (d == b) return a.aoColumns[d].bVisible === true ? c : null
|
||||||
|
} return null
|
||||||
|
} function U(a, b) { var c, d; c = a._iDisplayStart; for (d = a._iDisplayEnd; c < d; c++) if (a.aoData[a.aiDisplay[c]].nTr == b) return a.aiDisplay[c]; c = 0; for (d = a.aoData.length; c < d; c++) if (a.aoData[c].nTr == b) return c; return null } function X(a) { for (var b = 0, c = 0; c < a.aoColumns.length; c++) a.aoColumns[c].bVisible === true && b++; return b } function E(a) {
|
||||||
|
a._iDisplayEnd = a.oFeatures.bPaginate === false ? a.aiDisplay.length : a._iDisplayStart + a._iDisplayLength > a.aiDisplay.length ||
|
||||||
|
a._iDisplayLength == -1 ? a.aiDisplay.length : a._iDisplayStart + a._iDisplayLength
|
||||||
|
} function Oa(a, b) { if (!a || a === null || a === "") return 0; if (typeof b == "undefined") b = p.getElementsByTagName("body")[0]; var c = p.createElement("div"); c.style.width = u(a); b.appendChild(c); a = c.offsetWidth; b.removeChild(c); return a } function ea(a) {
|
||||||
|
var b = 0, c, d = 0, f = a.aoColumns.length, e, h = i("th", a.nTHead); for (e = 0; e < f; e++) if (a.aoColumns[e].bVisible) {
|
||||||
|
d++; if (a.aoColumns[e].sWidth !== null) {
|
||||||
|
c = Oa(a.aoColumns[e].sWidthOrig, a.nTable.parentNode); if (c !==
|
||||||
|
null) a.aoColumns[e].sWidth = u(c); b++
|
||||||
|
}
|
||||||
|
} if (f == h.length && b === 0 && d == f && a.oScroll.sX === "" && a.oScroll.sY === "") for (e = 0; e < a.aoColumns.length; e++) { c = i(h[e]).width(); if (c !== null) a.aoColumns[e].sWidth = u(c) } else {
|
||||||
|
b = a.nTable.cloneNode(false); e = a.nTHead.cloneNode(true); d = p.createElement("tbody"); c = p.createElement("tr"); b.removeAttribute("id"); b.appendChild(e); if (a.nTFoot !== null) { b.appendChild(a.nTFoot.cloneNode(true)); P(function (k) { k.style.width = "" }, b.getElementsByTagName("tr")) } b.appendChild(d); d.appendChild(c);
|
||||||
|
d = i("thead th", b); if (d.length === 0) d = i("tbody tr:eq(0)>td", b); h = S(a, e); for (e = d = 0; e < f; e++) { var j = a.aoColumns[e]; if (j.bVisible && j.sWidthOrig !== null && j.sWidthOrig !== "") h[e - d].style.width = u(j.sWidthOrig); else if (j.bVisible) h[e - d].style.width = ""; else d++ } for (e = 0; e < f; e++) if (a.aoColumns[e].bVisible) { d = Pa(a, e); if (d !== null) { d = d.cloneNode(true); if (a.aoColumns[e].sContentPadding !== "") d.innerHTML += a.aoColumns[e].sContentPadding; c.appendChild(d) } } f = a.nTable.parentNode; f.appendChild(b); if (a.oScroll.sX !== "" && a.oScroll.sXInner !==
|
||||||
|
"") b.style.width = u(a.oScroll.sXInner); else if (a.oScroll.sX !== "") { b.style.width = ""; if (i(b).width() < f.offsetWidth) b.style.width = u(f.offsetWidth) } else if (a.oScroll.sY !== "") b.style.width = u(f.offsetWidth); b.style.visibility = "hidden"; Qa(a, b); f = i("tbody tr:eq(0)", b).children(); if (f.length === 0) f = S(a, i("thead", b)[0]); if (a.oScroll.sX !== "") {
|
||||||
|
for (e = d = c = 0; e < a.aoColumns.length; e++) if (a.aoColumns[e].bVisible) {
|
||||||
|
c += a.aoColumns[e].sWidthOrig === null ? i(f[d]).outerWidth() : parseInt(a.aoColumns[e].sWidth.replace("px", ""),
|
||||||
|
10) + (i(f[d]).outerWidth() - i(f[d]).width()); d++
|
||||||
|
} b.style.width = u(c); a.nTable.style.width = u(c)
|
||||||
|
} for (e = d = 0; e < a.aoColumns.length; e++) if (a.aoColumns[e].bVisible) { c = i(f[d]).width(); if (c !== null && c > 0) a.aoColumns[e].sWidth = u(c); d++ } a.nTable.style.width = u(i(b).outerWidth()); b.parentNode.removeChild(b)
|
||||||
|
}
|
||||||
|
} function Qa(a, b) { if (a.oScroll.sX === "" && a.oScroll.sY !== "") { i(b).width(); b.style.width = u(i(b).outerWidth() - a.oScroll.iBarWidth) } else if (a.oScroll.sX !== "") b.style.width = u(i(b).outerWidth()) } function Pa(a, b) {
|
||||||
|
var c =
|
||||||
|
Ra(a, b); if (c < 0) return null; if (a.aoData[c].nTr === null) { var d = p.createElement("td"); d.innerHTML = H(a, c, b, ""); return d } return Q(a, c)[b]
|
||||||
|
} function Ra(a, b) { for (var c = -1, d = -1, f = 0; f < a.aoData.length; f++) { var e = H(a, f, b, "display") + ""; e = e.replace(/<.*?>/g, ""); if (e.length > c) { c = e.length; d = f } } return d } function u(a) { if (a === null) return "0px"; if (typeof a == "number") { if (a < 0) return "0px"; return a + "px" } var b = a.charCodeAt(a.length - 1); if (b < 48 || b > 57) return a; return a + "px" } function Va(a, b) {
|
||||||
|
if (a.length != b.length) return 1; for (var c =
|
||||||
|
0; c < a.length; c++) if (a[c] != b[c]) return 2; return 0
|
||||||
|
} function fa(a) { for (var b = o.aTypes, c = b.length, d = 0; d < c; d++) { var f = b[d](a); if (f !== null) return f } return "string" } function A(a) { for (var b = 0; b < D.length; b++) if (D[b].nTable == a) return D[b]; return null } function aa(a) { for (var b = [], c = a.aoData.length, d = 0; d < c; d++) b.push(a.aoData[d]._aData); return b } function $(a) { for (var b = [], c = 0, d = a.aoData.length; c < d; c++) a.aoData[c].nTr !== null && b.push(a.aoData[c].nTr); return b } function Q(a, b) {
|
||||||
|
var c = [], d, f, e, h, j; f = 0; var k = a.aoData.length;
|
||||||
|
if (typeof b != "undefined") { f = b; k = b + 1 } for (f = f; f < k; f++) { j = a.aoData[f]; if (j.nTr !== null) { b = []; e = 0; for (h = j.nTr.childNodes.length; e < h; e++) { d = j.nTr.childNodes[e].nodeName.toLowerCase(); if (d == "td" || d == "th") b.push(j.nTr.childNodes[e]) } e = d = 0; for (h = a.aoColumns.length; e < h; e++) if (a.aoColumns[e].bVisible) c.push(b[e - d]); else { c.push(j._anHidden[e]); d++ } } } return c
|
||||||
|
} function oa(a) { return a.replace(new RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^)", "g"), "\\$1") } function ra(a, b) {
|
||||||
|
for (var c = -1, d =
|
||||||
|
0, f = a.length; d < f; d++) if (a[d] == b) c = d; else a[d] > b && a[d]--; c != -1 && a.splice(c, 1)
|
||||||
|
} function Ba(a, b) { b = b.split(","); for (var c = [], d = 0, f = a.aoColumns.length; d < f; d++) for (var e = 0; e < f; e++) if (a.aoColumns[d].sName == b[e]) { c.push(e); break } return c } function ha(a) { for (var b = "", c = 0, d = a.aoColumns.length; c < d; c++) b += a.aoColumns[c].sName + ","; if (b.length == d) return ""; return b.slice(0, -1) } function J(a, b, c) {
|
||||||
|
a = a.sTableId === "" ? "DataTables warning: " + c : "DataTables warning (table id = '" + a.sTableId + "'): " + c; if (b === 0) if (o.sErrMode ==
|
||||||
|
"alert") alert(a); else throw a; else typeof console != "undefined" && typeof console.log != "undefined" && console.log(a)
|
||||||
|
} function ia(a) { a.aoData.splice(0, a.aoData.length); a.aiDisplayMaster.splice(0, a.aiDisplayMaster.length); a.aiDisplay.splice(0, a.aiDisplay.length); E(a) } function sa(a) {
|
||||||
|
if (!(!a.oFeatures.bStateSave || typeof a.bDestroying != "undefined")) {
|
||||||
|
var b, c, d, f = "{"; f += '"iCreate":' + (new Date).getTime() + ","; f += '"iStart":' + (a.oScroll.bInfinite ? 0 : a._iDisplayStart) + ","; f += '"iEnd":' + (a.oScroll.bInfinite ? a._iDisplayLength :
|
||||||
|
a._iDisplayEnd) + ","; f += '"iLength":' + a._iDisplayLength + ","; f += '"sFilter":"' + encodeURIComponent(a.oPreviousSearch.sSearch) + '",'; f += '"sFilterEsc":' + !a.oPreviousSearch.bRegex + ","; f += '"aaSorting":[ '; for (b = 0; b < a.aaSorting.length; b++) f += "[" + a.aaSorting[b][0] + ',"' + a.aaSorting[b][1] + '"],'; f = f.substring(0, f.length - 1); f += "],"; f += '"aaSearchCols":[ '; for (b = 0; b < a.aoPreSearchCols.length; b++) f += '["' + encodeURIComponent(a.aoPreSearchCols[b].sSearch) + '",' + !a.aoPreSearchCols[b].bRegex + "],"; f = f.substring(0, f.length -
|
||||||
|
1); f += "],"; f += '"abVisCols":[ '; for (b = 0; b < a.aoColumns.length; b++) f += a.aoColumns[b].bVisible + ","; f = f.substring(0, f.length - 1); f += "]"; b = 0; for (c = a.aoStateSave.length; b < c; b++) { d = a.aoStateSave[b].fn(a, f); if (d !== "") f = d } f += "}"; Sa(a.sCookiePrefix + a.sInstance, f, a.iCookieDuration, a.sCookiePrefix, a.fnCookieCallback)
|
||||||
|
}
|
||||||
|
} function Ta(a, b) {
|
||||||
|
if (a.oFeatures.bStateSave) {
|
||||||
|
var c, d, f; d = ta(a.sCookiePrefix + a.sInstance); if (d !== null && d !== "") {
|
||||||
|
try { c = typeof i.parseJSON == "function" ? i.parseJSON(d.replace(/'/g, '"')) : eval("(" + d + ")") } catch (e) { return } d =
|
||||||
|
0; for (f = a.aoStateLoad.length; d < f; d++) if (!a.aoStateLoad[d].fn(a, c)) return; a.oLoadedState = i.extend(true, {}, c); a._iDisplayStart = c.iStart; a.iInitDisplayStart = c.iStart; a._iDisplayEnd = c.iEnd; a._iDisplayLength = c.iLength; a.oPreviousSearch.sSearch = decodeURIComponent(c.sFilter); a.aaSorting = c.aaSorting.slice(); a.saved_aaSorting = c.aaSorting.slice(); if (typeof c.sFilterEsc != "undefined") a.oPreviousSearch.bRegex = !c.sFilterEsc; if (typeof c.aaSearchCols != "undefined") for (d = 0; d < c.aaSearchCols.length; d++) a.aoPreSearchCols[d] =
|
||||||
|
{ sSearch: decodeURIComponent(c.aaSearchCols[d][0]), bRegex: !c.aaSearchCols[d][1] }; if (typeof c.abVisCols != "undefined") { b.saved_aoColumns = []; for (d = 0; d < c.abVisCols.length; d++) { b.saved_aoColumns[d] = {}; b.saved_aoColumns[d].bVisible = c.abVisCols[d] } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} function Sa(a, b, c, d, f) {
|
||||||
|
var e = new Date; e.setTime(e.getTime() + c * 1E3); c = wa.location.pathname.split("/"); a = a + "_" + c.pop().replace(/[\/:]/g, "").toLowerCase(); var h; if (f !== null) {
|
||||||
|
h = typeof i.parseJSON == "function" ? i.parseJSON(b) : eval("(" + b + ")"); b = f(a, h, e.toGMTString(),
|
||||||
|
c.join("/") + "/")
|
||||||
|
} else b = a + "=" + encodeURIComponent(b) + "; expires=" + e.toGMTString() + "; path=" + c.join("/") + "/"; f = ""; e = 9999999999999; if ((ta(a) !== null ? p.cookie.length : b.length + p.cookie.length) + 10 > 4096) {
|
||||||
|
a = p.cookie.split(";"); for (var j = 0, k = a.length; j < k; j++) if (a[j].indexOf(d) != -1) { var m = a[j].split("="); try { h = eval("(" + decodeURIComponent(m[1]) + ")") } catch (t) { continue } if (typeof h.iCreate != "undefined" && h.iCreate < e) { f = m[0]; e = h.iCreate } } if (f !== "") p.cookie = f + "=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=" + c.join("/") +
|
||||||
|
"/"
|
||||||
|
} p.cookie = b
|
||||||
|
} function ta(a) { var b = wa.location.pathname.split("/"); a = a + "_" + b[b.length - 1].replace(/[\/:]/g, "").toLowerCase() + "="; b = p.cookie.split(";"); for (var c = 0; c < b.length; c++) { for (var d = b[c]; d.charAt(0) == " "; ) d = d.substring(1, d.length); if (d.indexOf(a) === 0) return decodeURIComponent(d.substring(a.length, d.length)) } return null } function W(a, b) {
|
||||||
|
b = b.getElementsByTagName("tr"); var c, d, f, e, h, j, k, m, t = function (O, B, F) { for (; typeof O[B][F] != "undefined"; ) F++; return F }; a.splice(0, a.length); d = 0; for (j = b.length; d <
|
||||||
|
j; d++) a.push([]); d = 0; for (j = b.length; d < j; d++) { f = 0; for (k = b[d].childNodes.length; f < k; f++) { c = b[d].childNodes[f]; if (c.nodeName.toUpperCase() == "TD" || c.nodeName.toUpperCase() == "TH") { var q = c.getAttribute("colspan") * 1, I = c.getAttribute("rowspan") * 1; q = !q || q === 0 || q === 1 ? 1 : q; I = !I || I === 0 || I === 1 ? 1 : I; m = t(a, d, 0); for (h = 0; h < q; h++) for (e = 0; e < I; e++) { a[d + e][m + h] = { cell: c, unique: q == 1 ? true : false }; a[d + e].nTr = b[d] } } } }
|
||||||
|
} function S(a, b, c) {
|
||||||
|
var d = []; if (typeof c == "undefined") { c = a.aoHeader; if (typeof b != "undefined") { c = []; W(c, b) } } b = 0;
|
||||||
|
for (var f = c.length; b < f; b++) for (var e = 0, h = c[b].length; e < h; e++) if (c[b][e].unique && (typeof d[e] == "undefined" || !a.bSortCellsTop)) d[e] = c[b][e].cell; return d
|
||||||
|
} function Ua() {
|
||||||
|
var a = p.createElement("p"), b = a.style; b.width = "100%"; b.height = "200px"; var c = p.createElement("div"); b = c.style; b.position = "absolute"; b.top = "0px"; b.left = "0px"; b.visibility = "hidden"; b.width = "200px"; b.height = "150px"; b.overflow = "hidden"; c.appendChild(a); p.body.appendChild(c); b = a.offsetWidth; c.style.overflow = "scroll"; a = a.offsetWidth; if (b == a) a =
|
||||||
|
c.clientWidth; p.body.removeChild(c); return b - a
|
||||||
|
} function P(a, b, c) { for (var d = 0, f = b.length; d < f; d++) for (var e = 0, h = b[d].childNodes.length; e < h; e++) if (b[d].childNodes[e].nodeType == 1) typeof c != "undefined" ? a(b[d].childNodes[e], c[d].childNodes[e]) : a(b[d].childNodes[e]) } function n(a, b, c, d) { if (typeof d == "undefined") d = c; if (typeof b[c] != "undefined") a[d] = b[c] } function da(a, b, c) { for (var d = [], f = 0, e = a.aoColumns.length; f < e; f++) d.push(H(a, b, f, c)); return d } function H(a, b, c, d) {
|
||||||
|
var f = a.aoColumns[c]; if ((c = f.fnGetData(a.aoData[b]._aData)) ===
|
||||||
|
undefined) { if (a.iDrawError != a.iDraw && f.sDefaultContent === null) { J(a, 0, "Requested unknown parameter '" + f.mDataProp + "' from the data source for row " + b); a.iDrawError = a.iDraw } return f.sDefaultContent } if (c === null && f.sDefaultContent !== null) c = f.sDefaultContent; if (d == "display" && c === null) return ""; return c
|
||||||
|
} function N(a, b, c, d) { a.aoColumns[c].fnSetData(a.aoData[b]._aData, d) } function Z(a) {
|
||||||
|
if (a === null) return function () { return null }; else if (typeof a == "function") return function (c) { return a(c) }; else if (typeof a ==
|
||||||
|
"string" && a.indexOf(".") != -1) { var b = a.split("."); return b.length == 2 ? function (c) { return c[b[0]][b[1]] } : b.length == 3 ? function (c) { return c[b[0]][b[1]][b[2]] } : function (c) { for (var d = 0, f = b.length; d < f; d++) c = c[b[d]]; return c } } else return function (c) { return c[a] }
|
||||||
|
} function ya(a) {
|
||||||
|
if (a === null) return function () { }; else if (typeof a == "function") return function (c, d) { return a(c, d) }; else if (typeof a == "string" && a.indexOf(".") != -1) {
|
||||||
|
var b = a.split("."); return b.length == 2 ? function (c, d) { c[b[0]][b[1]] = d } : b.length == 3 ? function (c,
|
||||||
|
d) { c[b[0]][b[1]][b[2]] = d } : function (c, d) { for (var f = 0, e = b.length - 1; f < e; f++) c = c[b[f]]; c[b[b.length - 1]] = d }
|
||||||
|
} else return function (c, d) { c[a] = d }
|
||||||
|
} this.oApi = {}; this.fnDraw = function (a) { var b = A(this[o.iApiIndex]); if (typeof a != "undefined" && a === false) { E(b); C(b) } else ba(b) }; this.fnFilter = function (a, b, c, d, f) {
|
||||||
|
var e = A(this[o.iApiIndex]); if (e.oFeatures.bFilter) {
|
||||||
|
if (typeof c == "undefined") c = false; if (typeof d == "undefined") d = true; if (typeof f == "undefined") f = true; if (typeof b == "undefined" || b === null) {
|
||||||
|
M(e, { sSearch: a, bRegex: c,
|
||||||
|
bSmart: d
|
||||||
|
}, 1); if (f && typeof e.aanFeatures.f != "undefined") { b = e.aanFeatures.f; c = 0; for (d = b.length; c < d; c++) i("input", b[c]).val(a) }
|
||||||
|
} else { e.aoPreSearchCols[b].sSearch = a; e.aoPreSearchCols[b].bRegex = c; e.aoPreSearchCols[b].bSmart = d; M(e, e.oPreviousSearch, 1) }
|
||||||
|
}
|
||||||
|
}; this.fnSettings = function () { return A(this[o.iApiIndex]) }; this.fnVersionCheck = o.fnVersionCheck; this.fnSort = function (a) { var b = A(this[o.iApiIndex]); b.aaSorting = a; R(b) }; this.fnSortListener = function (a, b, c) { ga(A(this[o.iApiIndex]), a, b, c) }; this.fnAddData = function (a,
|
||||||
|
b) { if (a.length === 0) return []; var c = [], d, f = A(this[o.iApiIndex]); if (typeof a[0] == "object") for (var e = 0; e < a.length; e++) { d = v(f, a[e]); if (d == -1) return c; c.push(d) } else { d = v(f, a); if (d == -1) return c; c.push(d) } f.aiDisplay = f.aiDisplayMaster.slice(); if (typeof b == "undefined" || b) ba(f); return c }; this.fnDeleteRow = function (a, b, c) {
|
||||||
|
var d = A(this[o.iApiIndex]); a = typeof a == "object" ? U(d, a) : a; var f = d.aoData.splice(a, 1), e = i.inArray(a, d.aiDisplay); d.asDataSearch.splice(e, 1); ra(d.aiDisplayMaster, a); ra(d.aiDisplay, a); typeof b ==
|
||||||
|
"function" && b.call(this, d, f); if (d._iDisplayStart >= d.aiDisplay.length) { d._iDisplayStart -= d._iDisplayLength; if (d._iDisplayStart < 0) d._iDisplayStart = 0 } if (typeof c == "undefined" || c) { E(d); C(d) } return f
|
||||||
|
}; this.fnClearTable = function (a) { var b = A(this[o.iApiIndex]); ia(b); if (typeof a == "undefined" || a) C(b) }; this.fnOpen = function (a, b, c) {
|
||||||
|
var d = A(this[o.iApiIndex]); this.fnClose(a); var f = p.createElement("tr"), e = p.createElement("td"); f.appendChild(e); e.className = c; e.colSpan = X(d); if (typeof b.jquery != "undefined" || typeof b ==
|
||||||
|
"object") e.appendChild(b); else e.innerHTML = b; b = i("tr", d.nTBody); i.inArray(a, b) != -1 && i(f).insertAfter(a); d.aoOpenRows.push({ nTr: f, nParent: a }); return f
|
||||||
|
}; this.fnClose = function (a) { for (var b = A(this[o.iApiIndex]), c = 0; c < b.aoOpenRows.length; c++) if (b.aoOpenRows[c].nParent == a) { (a = b.aoOpenRows[c].nTr.parentNode) && a.removeChild(b.aoOpenRows[c].nTr); b.aoOpenRows.splice(c, 1); return 0 } return 1 }; this.fnGetData = function (a, b) {
|
||||||
|
var c = A(this[o.iApiIndex]); if (typeof a != "undefined") {
|
||||||
|
a = typeof a == "object" ? U(c, a) : a; if (typeof b !=
|
||||||
|
"undefined") return H(c, a, b, ""); return typeof c.aoData[a] != "undefined" ? c.aoData[a]._aData : null
|
||||||
|
} return aa(c)
|
||||||
|
}; this.fnGetNodes = function (a) { var b = A(this[o.iApiIndex]); if (typeof a != "undefined") return typeof b.aoData[a] != "undefined" ? b.aoData[a].nTr : null; return $(b) }; this.fnGetPosition = function (a) { var b = A(this[o.iApiIndex]), c = a.nodeName.toUpperCase(); if (c == "TR") return U(b, a); else if (c == "TD" || c == "TH") { c = U(b, a.parentNode); for (var d = Q(b, c), f = 0; f < b.aoColumns.length; f++) if (d[f] == a) return [c, pa(b, f), f] } return null };
|
||||||
|
this.fnUpdate = function (a, b, c, d, f) {
|
||||||
|
var e = A(this[o.iApiIndex]); b = typeof b == "object" ? U(e, b) : b; if (i.isArray(a) && typeof a == "object") { e.aoData[b]._aData = a.slice(); for (c = 0; c < e.aoColumns.length; c++) this.fnUpdate(H(e, b, c), b, c, false, false) } else if (typeof a == "object") { e.aoData[b]._aData = i.extend(true, {}, a); for (c = 0; c < e.aoColumns.length; c++) this.fnUpdate(H(e, b, c), b, c, false, false) } else {
|
||||||
|
a = a; N(e, b, c, a); if (e.aoColumns[c].fnRender !== null) {
|
||||||
|
a = e.aoColumns[c].fnRender({ iDataRow: b, iDataColumn: c, aData: e.aoData[b]._aData,
|
||||||
|
oSettings: e
|
||||||
|
}); e.aoColumns[c].bUseRendered && N(e, b, c, a)
|
||||||
|
} if (e.aoData[b].nTr !== null) Q(e, b)[c].innerHTML = a
|
||||||
|
} c = i.inArray(b, e.aiDisplay); e.asDataSearch[c] = na(e, da(e, b, "filter")); if (typeof f == "undefined" || f) ca(e); if (typeof d == "undefined" || d) ba(e); return 0
|
||||||
|
}; this.fnSetColumnVis = function (a, b, c) {
|
||||||
|
var d = A(this[o.iApiIndex]), f, e; e = d.aoColumns.length; var h, j; if (d.aoColumns[a].bVisible != b) {
|
||||||
|
if (b) {
|
||||||
|
for (f = j = 0; f < a; f++) d.aoColumns[f].bVisible && j++; j = j >= X(d); if (!j) for (f = a; f < e; f++) if (d.aoColumns[f].bVisible) { h = f; break } f = 0;
|
||||||
|
for (e = d.aoData.length; f < e; f++) if (d.aoData[f].nTr !== null) j ? d.aoData[f].nTr.appendChild(d.aoData[f]._anHidden[a]) : d.aoData[f].nTr.insertBefore(d.aoData[f]._anHidden[a], Q(d, f)[h])
|
||||||
|
} else { f = 0; for (e = d.aoData.length; f < e; f++) if (d.aoData[f].nTr !== null) { h = Q(d, f)[a]; d.aoData[f]._anHidden[a] = h; h.parentNode.removeChild(h) } } d.aoColumns[a].bVisible = b; L(d, d.aoHeader); d.nTFoot && L(d, d.aoFooter); f = 0; for (e = d.aoOpenRows.length; f < e; f++) d.aoOpenRows[f].nTr.colSpan = X(d); if (typeof c == "undefined" || c) { ca(d); C(d) } sa(d)
|
||||||
|
}
|
||||||
|
}; this.fnPageChange =
|
||||||
|
function (a, b) { var c = A(this[o.iApiIndex]); ja(c, a); E(c); if (typeof b == "undefined" || b) C(c) }; this.fnDestroy = function () {
|
||||||
|
var a = A(this[o.iApiIndex]), b = a.nTableWrapper.parentNode, c = a.nTBody, d, f; a.bDestroying = true; d = 0; for (f = a.aoColumns.length; d < f; d++) a.aoColumns[d].bVisible === false && this.fnSetColumnVis(d, true); i(a.nTableWrapper).find("*").andSelf().unbind(".DT"); i("tbody>tr>td." + a.oClasses.sRowEmpty, a.nTable).parent().remove(); if (a.nTable != a.nTHead.parentNode) { i(">thead", a.nTable).remove(); a.nTable.appendChild(a.nTHead) } if (a.nTFoot &&
|
||||||
|
a.nTable != a.nTFoot.parentNode) { i(">tfoot", a.nTable).remove(); a.nTable.appendChild(a.nTFoot) } a.nTable.parentNode.removeChild(a.nTable); i(a.nTableWrapper).remove(); a.aaSorting = []; a.aaSortingFixed = []; T(a); i($(a)).removeClass(a.asStripClasses.join(" ")); if (a.bJUI) {
|
||||||
|
i("th", a.nTHead).removeClass([o.oStdClasses.sSortable, o.oJUIClasses.sSortableAsc, o.oJUIClasses.sSortableDesc, o.oJUIClasses.sSortableNone].join(" ")); i("th span." + o.oJUIClasses.sSortIcon, a.nTHead).remove(); i("th", a.nTHead).each(function () {
|
||||||
|
var e =
|
||||||
|
i("div." + o.oJUIClasses.sSortJUIWrapper, this), h = e.contents(); i(this).append(h); e.remove()
|
||||||
|
})
|
||||||
|
} else i("th", a.nTHead).removeClass([o.oStdClasses.sSortable, o.oStdClasses.sSortableAsc, o.oStdClasses.sSortableDesc, o.oStdClasses.sSortableNone].join(" ")); a.nTableReinsertBefore ? b.insertBefore(a.nTable, a.nTableReinsertBefore) : b.appendChild(a.nTable); d = 0; for (f = a.aoData.length; d < f; d++) a.aoData[d].nTr !== null && c.appendChild(a.aoData[d].nTr); if (a.oFeatures.bAutoWidth === true) a.nTable.style.width = u(a.sDestroyWidth);
|
||||||
|
i(">tr:even", c).addClass(a.asDestoryStrips[0]); i(">tr:odd", c).addClass(a.asDestoryStrips[1]); d = 0; for (f = D.length; d < f; d++) D[d] == a && D.splice(d, 1); a = null
|
||||||
|
};
|
||||||
|
this.fnAdjustColumnSizing = function (a) { var b = A(this[o.iApiIndex]); ca(b); if (typeof a == "undefined" || a) this.fnDraw(false); else if (b.oScroll.sX !== "" || b.oScroll.sY !== "") this.oApi._fnScrollDraw(b) }; for (var ua in o.oApi) if (ua) this[ua] = r(ua); this.oApi._fnExternApiFunc = r; this.oApi._fnInitalise = s; this.oApi._fnInitComplete = w; this.oApi._fnLanguageProcess = y; this.oApi._fnAddColumn =
|
||||||
|
G;
|
||||||
|
this.oApi._fnColumnOptions = x; this.oApi._fnAddData = v; this.oApi._fnCreateTr = z; this.oApi._fnGatherData = Y; this.oApi._fnBuildHead = V; this.oApi._fnDrawHead = L; this.oApi._fnDraw = C; this.oApi._fnReDraw = ba; this.oApi._fnAjaxUpdate = za; this.oApi._fnAjaxUpdateDraw = Aa; this.oApi._fnAddOptionsHtml = xa; this.oApi._fnFeatureHtmlTable = Fa; this.oApi._fnScrollDraw = Ia; this.oApi._fnAjustColumnSizing = ca; this.oApi._fnFeatureHtmlFilter = Da; this.oApi._fnFilterComplete = M; this.oApi._fnFilterCustom = Ma; this.oApi._fnFilterColumn = La;
|
||||||
|
this.oApi._fnFilter = Ka; this.oApi._fnBuildSearchArray = ka; this.oApi._fnBuildSearchRow = na; this.oApi._fnFilterCreateSearch = la; this.oApi._fnDataToSearch = ma; this.oApi._fnSort = R; this.oApi._fnSortAttachListener = ga; this.oApi._fnSortingClasses = T; this.oApi._fnFeatureHtmlPaginate = Ha; this.oApi._fnPageChange = ja; this.oApi._fnFeatureHtmlInfo = Ga; this.oApi._fnUpdateInfo = Na; this.oApi._fnFeatureHtmlLength = Ca; this.oApi._fnFeatureHtmlProcessing = Ea; this.oApi._fnProcessingDisplay = K; this.oApi._fnVisibleToColumnIndex = Ja; this.oApi._fnColumnIndexToVisible =
|
||||||
|
pa;
|
||||||
|
this.oApi._fnNodeToDataIndex = U;
|
||||||
|
this.oApi._fnVisbleColumns = X; this.oApi._fnCalculateEnd = E; this.oApi._fnConvertToWidth = Oa; this.oApi._fnCalculateColumnWidths = ea; this.oApi._fnScrollingWidthAdjust = Qa; this.oApi._fnGetWidestNode = Pa; this.oApi._fnGetMaxLenString = Ra; this.oApi._fnStringToCss = u; this.oApi._fnArrayCmp = Va; this.oApi._fnDetectType = fa; this.oApi._fnSettingsFromNode = A; this.oApi._fnGetDataMaster = aa; this.oApi._fnGetTrNodes = $; this.oApi._fnGetTdNodes = Q; this.oApi._fnEscapeRegex = oa; this.oApi._fnDeleteIndex =
|
||||||
|
ra;
|
||||||
|
this.oApi._fnReOrderIndex = Ba;
|
||||||
|
this.oApi._fnColumnOrdering = ha;
|
||||||
|
this.oApi._fnLog = J;
|
||||||
|
this.oApi._fnClearTable = ia;
|
||||||
|
this.oApi._fnSaveState = sa;
|
||||||
|
this.oApi._fnLoadState = Ta;
|
||||||
|
this.oApi._fnCreateCookie = Sa;
|
||||||
|
this.oApi._fnReadCookie = ta;
|
||||||
|
this.oApi._fnDetectHeader = W; this.oApi._fnGetUniqueThs = S; this.oApi._fnScrollBarWidth = Ua; this.oApi._fnApplyToChildren = P; this.oApi._fnMap = n; this.oApi._fnGetRowData = da; this.oApi._fnGetCellData = H; this.oApi._fnSetCellData = N; this.oApi._fnGetObjectDataFn = Z; this.oApi._fnSetObjectDataFn = ya; var va =
|
||||||
|
this;
|
||||||
|
return this.each(function () {
|
||||||
|
var a = 0, b, c, d, f; a = 0; for (b = D.length; a < b; a++) {
|
||||||
|
if (D[a].nTable == this) if (typeof g == "undefined" || typeof g.bRetrieve != "undefined" && g.bRetrieve === true) return D[a].oInstance; else if (typeof g.bDestroy != "undefined" && g.bDestroy === true) { D[a].oInstance.fnDestroy(); break } else {
|
||||||
|
J(D[a], 0, "Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, please pass either no arguments to the dataTable() function, or set bRetrieve to true. Alternatively, to destory the old table and create a new one, set bDestroy to true (note that a lot of changes to the configuration can be made through the API which is usually much faster).");
|
||||||
|
return
|
||||||
|
} if (D[a].sTableId !== "" && D[a].sTableId == this.getAttribute("id")) { D.splice(a, 1); break }
|
||||||
|
} var e = new l; D.push(e); var h = false, j = false; a = this.getAttribute("id"); if (a !== null) { e.sTableId = a; e.sInstance = a } else e.sInstance = o._oExternConfig.iNextUnique++; if (this.nodeName.toLowerCase() != "table") J(e, 0, "Attempted to initialise DataTables on a node which is not a table: " + this.nodeName); else {
|
||||||
|
e.nTable = this; e.oInstance = va.length == 1 ? va : i(this).dataTable(); e.oApi = va.oApi; e.sDestroyWidth = i(this).width(); if (typeof g !=
|
||||||
|
"undefined" && g !== null) {
|
||||||
|
e.oInit = g; n(e.oFeatures, g, "bPaginate");
|
||||||
|
n(e.oFeatures, g, "bLengthChange");
|
||||||
|
n(e.oFeatures, g, "bFilter");
|
||||||
|
n(e.oFeatures, g, "bSort");
|
||||||
|
n(e.oFeatures, g, "bInfo");
|
||||||
|
n(e.oFeatures, g, "bProcessing");
|
||||||
|
n(e.oFeatures, g, "bAutoWidth");
|
||||||
|
n(e.oFeatures, g, "bSortClasses");
|
||||||
|
n(e.oFeatures, g, "bServerSide");
|
||||||
|
n(e.oFeatures, g, "bDeferRender");
|
||||||
|
n(e.oScroll, g, "sScrollX", "sX");
|
||||||
|
n(e.oScroll, g, "sScrollXInner", "sXInner");
|
||||||
|
n(e.oScroll, g, "sScrollY", "sY");
|
||||||
|
n(e.oScroll, g, "bScrollCollapse", "bCollapse");
|
||||||
|
n(e.oScroll, g, "bScrollInfinite", "bInfinite");
|
||||||
|
n(e.oScroll, g, "iScrollLoadGap", "iLoadGap");
|
||||||
|
n(e.oScroll, g, "bScrollAutoCss", "bAutoCss");
|
||||||
|
n(e, g, "asStripClasses");
|
||||||
|
n(e, g, "fnPreDrawCallback");
|
||||||
|
n(e, g, "fnRowCallback"); n(e, g, "fnHeaderCallback"); n(e, g, "fnFooterCallback"); n(e, g, "fnCookieCallback"); n(e, g, "fnInitComplete"); n(e, g, "fnServerData"); n(e, g, "fnFormatNumber"); n(e, g, "aaSorting"); n(e, g, "aaSortingFixed"); n(e, g, "aLengthMenu"); n(e, g, "sPaginationType"); n(e, g, "sAjaxSource"); n(e, g, "sAjaxDataProp"); n(e, g, "iCookieDuration"); n(e, g, "sCookiePrefix");
|
||||||
|
n(e, g, "sDom");
|
||||||
|
n(e, g, "bSortCellsTop");
|
||||||
|
n(e, g, "oSearch", "oPreviousSearch");
|
||||||
|
n(e, g, "aoSearchCols", "aoPreSearchCols");
|
||||||
|
n(e, g, "iDisplayLength", "_iDisplayLength");
|
||||||
|
n(e, g, "bJQueryUI", "bJUI");
|
||||||
|
n(e.oLanguage, g, "fnInfoCallback");
|
||||||
|
typeof g.fnDrawCallback == "function" && e.aoDrawCallback.push({
|
||||||
|
fn: g.fnDrawCallback, sName: "user"
|
||||||
|
});
|
||||||
|
typeof g.fnStateSaveCallback == "function" && e.aoStateSave.push({
|
||||||
|
fn: g.fnStateSaveCallback, sName: "user"
|
||||||
|
});
|
||||||
|
typeof g.fnStateLoadCallback == "function" && e.aoStateLoad.push({
|
||||||
|
fn: g.fnStateLoadCallback, sName: "user"
|
||||||
|
});
|
||||||
|
if (e.oFeatures.bServerSide && e.oFeatures.bSort && e.oFeatures.bSortClasses) e.aoDrawCallback.push({ fn: T, sName: "server_side_sort_classes" }); else e.oFeatures.bDeferRender && e.aoDrawCallback.push({ fn: T, sName: "defer_sort_classes" }); if (typeof g.bJQueryUI != "undefined" && g.bJQueryUI) { e.oClasses = o.oJUIClasses; if (typeof g.sDom == "undefined") e.sDom = '<"H"lfr>t<"F"ip>' } if (e.oScroll.sX !== "" || e.oScroll.sY !== "") e.oScroll.iBarWidth = Ua(); if (typeof g.iDisplayStart != "undefined" && typeof e.iInitDisplayStart == "undefined") {
|
||||||
|
e.iInitDisplayStart = g.iDisplayStart; e._iDisplayStart = g.iDisplayStart
|
||||||
|
} if (typeof g.bStateSave != "undefined") { e.oFeatures.bStateSave = g.bStateSave; Ta(e, g); e.aoDrawCallback.push({ fn: sa, sName: "state_save" }) } if (typeof g.iDeferLoading != "undefined") { e.bDeferLoading = true; e._iRecordsTotal = g.iDeferLoading; e._iRecordsDisplay = g.iDeferLoading } if (typeof g.aaData != "undefined") j = true; if (typeof g != "undefined" && typeof g.aoData != "undefined") g.aoColumns = g.aoData; if (typeof g.oLanguage != "undefined") if (typeof g.oLanguage.sUrl != "undefined" && g.oLanguage.sUrl !==
|
||||||
|
"") { e.oLanguage.sUrl = g.oLanguage.sUrl; i.getJSON(e.oLanguage.sUrl, null, function (t) { y(e, t, true) }); h = true } else y(e, g.oLanguage, false)
|
||||||
|
} else g = {}; if (typeof g.asStripClasses == "undefined") { e.asStripClasses.push(e.oClasses.sStripOdd); e.asStripClasses.push(e.oClasses.sStripEven) } c = false; d = i(">tbody>tr", this); a = 0; for (b = e.asStripClasses.length; a < b; a++) if (d.filter(":lt(2)").hasClass(e.asStripClasses[a])) { c = true; break } if (c) {
|
||||||
|
e.asDestoryStrips = ["", ""]; if (i(d[0]).hasClass(e.oClasses.sStripOdd)) e.asDestoryStrips[0] +=
|
||||||
|
e.oClasses.sStripOdd + " "; if (i(d[0]).hasClass(e.oClasses.sStripEven)) e.asDestoryStrips[0] += e.oClasses.sStripEven; if (i(d[1]).hasClass(e.oClasses.sStripOdd)) e.asDestoryStrips[1] += e.oClasses.sStripOdd + " "; if (i(d[1]).hasClass(e.oClasses.sStripEven)) e.asDestoryStrips[1] += e.oClasses.sStripEven; d.removeClass(e.asStripClasses.join(" "))
|
||||||
|
} c = []; var k; a = this.getElementsByTagName("thead"); if (a.length !== 0) { W(e.aoHeader, a[0]); c = S(e) } if (typeof g.aoColumns == "undefined") { k = []; a = 0; for (b = c.length; a < b; a++) k.push(null) } else k =
|
||||||
|
g.aoColumns; a = 0; for (b = k.length; a < b; a++) { if (typeof g.saved_aoColumns != "undefined" && g.saved_aoColumns.length == b) { if (k[a] === null) k[a] = {}; k[a].bVisible = g.saved_aoColumns[a].bVisible } G(e, c ? c[a] : null) } if (typeof g.aoColumnDefs != "undefined") for (a = g.aoColumnDefs.length - 1; a >= 0; a--) {
|
||||||
|
var m = g.aoColumnDefs[a].aTargets; i.isArray(m) || J(e, 1, "aTargets must be an array of targets, not a " + typeof m); c = 0; for (d = m.length; c < d; c++) if (typeof m[c] == "number" && m[c] >= 0) { for (; e.aoColumns.length <= m[c]; ) G(e); x(e, m[c], g.aoColumnDefs[a]) } else if (typeof m[c] ==
|
||||||
|
"number" && m[c] < 0) x(e, e.aoColumns.length + m[c], g.aoColumnDefs[a]); else if (typeof m[c] == "string") { b = 0; for (f = e.aoColumns.length; b < f; b++) if (m[c] == "_all" || i(e.aoColumns[b].nTh).hasClass(m[c])) x(e, b, g.aoColumnDefs[a]) }
|
||||||
|
} if (typeof k != "undefined") { a = 0; for (b = k.length; a < b; a++) x(e, a, k[a]) } a = 0; for (b = e.aaSorting.length; a < b; a++) {
|
||||||
|
if (e.aaSorting[a][0] >= e.aoColumns.length)
|
||||||
|
e.aaSorting[a][0] = 0; k = e.aoColumns[e.aaSorting[a][0]];
|
||||||
|
if (typeof e.aaSorting[a][2] == "undefined") e.aaSorting[a][2] = 0;
|
||||||
|
if (typeof g.aaSorting == "undefined" && typeof e.saved_aaSorting == "undefined")
|
||||||
|
e.aaSorting[a][1] = k.asSorting[0];
|
||||||
|
c = 0; for (d = k.asSorting.length;
|
||||||
|
c < d; c++) if (e.aaSorting[a][1] == k.asSorting[c]) {
|
||||||
|
e.aaSorting[a][2] = c; break
|
||||||
|
}
|
||||||
|
} T(e); a = i(">thead", this); if (a.length === 0) {
|
||||||
|
a = [p.createElement("thead")]; this.appendChild(a[0])
|
||||||
|
} e.nTHead = a[0]; a = i(">tbody", this);
|
||||||
|
if (a.length === 0) {
|
||||||
|
a = [p.createElement("tbody")];
|
||||||
|
this.appendChild(a[0])
|
||||||
|
} e.nTBody = a[0]; a = i(">tfoot", this);
|
||||||
|
if (a.length > 0) { e.nTFoot = a[0]; W(e.aoFooter, e.nTFoot) }
|
||||||
|
if (j)
|
||||||
|
for (a = 0; a < g.aaData.length; a++) v(e, g.aaData[a]);
|
||||||
|
else Y(e); e.aiDisplay = e.aiDisplayMaster.slice(); e.bInitialised = true; h === false && s(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})(jQuery, window, document);
|
||||||