I like it 99,9%

Comments on existing version & Suggestions for future versions. If you want a new feature suggest it here. Discussions about beta versions also come in this section.
Post Reply
stalker
Posts: 5
Joined: 2006-03-21 07:56:51

I like it 99,9%

Post by stalker »

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 :innocent: [/url]
antp
Site Admin
Posts: 9630
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Not possible currently, but since it is one of the most requested features it is on the top of my to-do list ;)
stalker
Posts: 5
Joined: 2006-03-21 07:56:51

Post by stalker »

Thank you for your swift response! ANT is so goooood, that one missing feature is something I can wait for and live without it until ... when? :)
antp
Site Admin
Posts: 9630
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

That's another problem. I can't give any date for next release and/or for this feature since I do not work often on the program.
stalker
Posts: 5
Joined: 2006-03-21 07:56:51

Post by stalker »

No problem. I will continue to live happily with what I have right now. Just keep up the good work!
aoprea
Posts: 6
Joined: 2005-04-07 21:17:48

Post by aoprea »

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: 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>



[/code]
stalker
Posts: 5
Joined: 2006-03-21 07:56:51

Reversed sorting order

Post by stalker »

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'

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>
qhorse
Posts: 2
Joined: 2006-04-26 12:30:40

Post by qhorse »

hi stalker,

i kinda like your template, how can i get one of those ?? :D

tx :grinking:
Post Reply