This is my first post, so let's start with some big compliments: ANT movie catalog is a real gem, perfect Swiss army knife for every movie collector! I like it 100%: www.jrobin.org/~saxon/ant/movies.html
Well, to be honest, I like it 99,9% because I still miss something
During the export process it is possible to specify sorting fields and their priorities. When I specify movie ID as a sorting field I get a full list of my movies, starting with 1 and ending with N (N being 903, so far ). But is it possible to export movies from AMC by requesting descending sort order for ID (or some other field)?
By having this option, I will be able to create a movie list starting with newest additions (biggest IDs), something my friends would like to see first without scrolling to the bottom of the list (which gets longer and longer). But it looks like ANT supports only ascending sort order.
Or I missed something somewhere? If I didn't, consider this post as a formal request for a new feature in the future [/url]
I like it 99,9%
hi
for stalker
you can modify the html template code for sorting the movies alphabeticaly after any fields
unfortunaly i can put atachement here but
here is a example code ... sorry for lenght:[/code]
for stalker
you can modify the html template code for sorting the movies alphabeticaly after any fields
unfortunaly i can put atachement here but
here is a example code ... sorry for lenght:
Code: Select all
<html><head>
<SCRIPT LANGUAGE="JavaScript"><!--
addEvent(window, "load", sortables_init);
var SORT_COLUMN_INDEX;
function sortables_init() {
// Find all tables with class sortable and make them sortable
if (!document.getElementsByTagName) return;
tbls = document.getElementsByTagName("table");
for (ti=0;ti<tbls.length;ti++) {
thisTbl = tbls[ti];
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
//initTable(thisTbl.id);
ts_makeSortable(thisTbl);
}
}
}
function ts_makeSortable(table) {
if (table.rows && table.rows.length > 0) {
var firstRow = table.rows[0];
}
if (!firstRow) return;
// We have a first row: assume it's the header, and make its contents clickable links
for (var i=0;i<firstRow.cells.length;i++) {
var cell = firstRow.cells[i];
var txt = ts_getInnerText(cell);
cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this);return false;"><span class="nav">'+txt+'</span><span class="sortarrow"></span></a>';
}
}
function ts_getInnerText(el) {
if (typeof el == "string") return el;
if (typeof el == "undefined") { return el };
if (el.innerText) return el.innerText;//Not needed but it is faster
var str = "";
var cs = el.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
switch (cs[i].nodeType) {
case 1: //ELEMENT_NODE
str += ts_getInnerText(cs[i]);
break;
case 3://TEXT_NODE
str += cs[i].nodeValue;
break;
}
}
return str;
}
function ts_resortTable(lnk) {
// get the span
var span;
for (var ci=0;ci<lnk.childNodes.length;ci++) {
if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
}
var spantext = ts_getInnerText(span);
var td = lnk.parentNode;
var column = td.cellIndex;
var table = getParent(td,'TABLE');
// Work out a type for the column
if (table.rows.length <= 1) return;
var itm = ts_getInnerText(table.rows[1].cells[column]);
sortfn = ts_sort_caseinsensitive;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
SORT_COLUMN_INDEX = column;
var firstRow = new Array();
var newRows = new Array();
for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
newRows.sort(sortfn);
if (span.getAttribute("sortdir") == 'down') {
ARROW = '<span class="nav">↑</span>';
newRows.reverse();
span.setAttribute('sortdir','up');
} else {
ARROW = '<span class="nav">↓</span>';
span.setAttribute('sortdir','down');
}
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
// do sortbottom rows only
for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
// Delete any other arrows there may be showing
var allspans = document.getElementsByTagName("span");
for (var ci=0;ci<allspans.length;ci++) {
if (allspans[ci].className == 'sortarrow') {
if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
allspans[ci].innerHTML = ' ';
}
}
}
span.innerHTML = ARROW;
}
function getParent(el, pTagName) {
if (el == null) return null;
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())// Gecko bug, supposed to be uppercase
return el;
else
return getParent(el.parentNode, pTagName);
}
function ts_sort_date(a,b) {
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa.length == 10) {
dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
} else {
yr = aa.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
}
if (bb.length == 10) {
dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
} else {
yr = bb.substr(6,2);
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
}
if (dt1==dt2) return 0;
if (dt1<dt2) return -1;
return 1;
}
function ts_sort_currency(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
return parseFloat(aa) - parseFloat(bb);
}
function ts_sort_numeric(a,b) {
aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
if (isNaN(aa)) aa = 0;
bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
if (isNaN(bb)) bb = 0;
return aa-bb;
}
function ts_sort_caseinsensitive(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}
function ts_sort_default(a,b) {
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+, NS6 and Mozilla
// By Scott Andrew
{
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}
/--></SCRIPT>
</head><body>
# and from here start the output
<center>
<table class="sortable" id="1" border="1" width="100%">
<tr class="row3">
<td align="center">Media</td>
<td nowrap align="center">Original Title</td>
<td nowrap align="center">Year</td>
<td nowrap align="center">Rating</td>
<td nowrap align="center">Category</td>
<td nowrap align="center">Video codec</td>
<td nowrap align="center">Resolution</td>
<td nowrap align="center">Frame rate</td>
</tr>
$$ITEM_BEGIN
<tr class="row1">
<td><span class="genmed">$$ITEM_MEDIA </span></td>
<td><span class="nav"><a href="$$ITEM_URL">$$ITEM_ORIGINALTITLE</a> </span></td>
<td align="center"><span class="genmed">$$ITEM_YEAR </span></td>
<td align="center"><span class="genmed">$$ITEM_RATING </span></td>
<td><span class="genmed">$$ITEM_CATEGORY </span></td>
<td><span class="genmed">$$ITEM_VIDEOFORMAT </span></td>
<td align="center"><span class="genmed">$$ITEM_RESOLUTION </span></td>
<td><span class="genmed">$$ITEM_FRAMERATE </span></td>
</tr>
$$ITEM_END
</table>
</center>
</body></html>
Reversed sorting order
If you can upload your HTML catalog to a PHP-enabled server, the following code will reverse the sorting order specified in ANT before the export process.
The template is quite simple, but you'll get the idea. Note that the exported file must be named something like 'movies.php', not 'movies.html'
The template is quite simple, but you'll get the idea. Note that the exported file must be named something like 'movies.php', not 'movies.html'
Code: Select all
<?
$reverse_order = true;
$movies = array();
$$ITEM_BEGIN
$movies[] = <<<HTMLSAFEOUTPUT
<!-- INSERT YOUR SINGLE MOVIE HTML CODE HERE -->
<tr><td>$$ITEM_NUMBER</td><td>$$ITEM_ORIGINALTITLE</td></tr>
<!-- SINGLE MOVIE HTML CODE ENDS HERE -->
HTMLSAFEOUTPUT;
$$ITEM_END
if($reverse_order) {
$movies = array_reverse($movies);
}
$i = 0;
?>
<!-- YOUR EXPORTED PAGE STARTS HERE -->
<html>
<head></head>
<body>
<table border="1">
$$ITEM_BEGIN
<!-- THE FOLLOWING LINE MUST BE PRESERVED -->
<? echo $movies[$i++]; ?>
$$ITEM_END
</table>
</body>
</html>