diff options
author | Dan McGee <dan@archlinux.org> | 2010-09-30 13:15:20 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-09-30 13:15:20 -0500 |
commit | 3682fb285b9f131a56aed2c6cab8d303c6aae5ae (patch) | |
tree | 217509085054951d4fdcdb6d9f5c0b5099412e5b /media/archweb.js | |
parent | 0eac9698c6bdebdf5056a97b7c979b526d54ec15 (diff) |
Move most inline JS into script filerelease_2010-09-30
We're getting to the point where we are starting to have a good chunk of JS
scattered about. Centralize a lot of it for maintenance and performance
purposes.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'media/archweb.js')
-rw-r--r-- | media/archweb.js | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/media/archweb.js b/media/archweb.js new file mode 100644 index 00000000..ea287ab0 --- /dev/null +++ b/media/archweb.js @@ -0,0 +1,130 @@ +/* tablesorter custom parsers for various pages: + * devel/index.html, mirrors/status.html, todolists/view.html */ +if(typeof $.tablesorter !== "undefined") { + $.tablesorter.addParser({ + id: 'pkgcount', + is: function(s) { return false; }, + format: function(s) { + var m = s.match(/\d+/); + return m ? parseInt(m[0]) : 0; + }, + type: 'numeric' + }); + $.tablesorter.addParser({ + id: 'todostatus', + is: function(s) { return false; }, + format: function(s) { + return s.match(/incomplete/) ? 1 : 0; + }, + type: 'numeric' + }); + $.tablesorter.addParser({ + /* sorts numeric, but put '', 'unknown', and '∞' last. */ + id: 'mostlydigit', + is: function(s,table) { + var special = ['', 'unknown', '∞']; + var c = table.config; + return ($.inArray(s, special) > -1) || $.tablesorter.isDigit(s,c); + }, + format: function(s) { + var special = ['', 'unknown', '∞']; + if($.inArray(s, special) > -1) return Number.MAX_VALUE; + return $.tablesorter.formatFloat(s); + }, + type: 'numeric' + }); + $.tablesorter.addParser({ + /* sorts duration; put '', 'unknown', and '∞' last. */ + id: 'duration', + is: function(s,table) { + var special = ['', 'unknown', '∞']; + return ($.inArray(s, special) > -1) || /^[0-9]+:[0-5][0-9]$/.test(s); + }, + format: function(s) { + var special = ['', 'unknown', '∞']; + if($.inArray(s, special) > -1) return Number.MAX_VALUE; + matches = /^([0-9]+):([0-5][0-9])$/.exec(s); + return matches[1] * 60 + matches[2]; + }, + type: 'numeric' + }); +} + +/* news/add.html */ +function enablePreview() { + $('#previewbtn').click(function(event) { + event.preventDefault(); + $.post('/news/preview/', + { data: $('#id_content').val() }, + function(data) { + $('#previewdata').html(data); + $('.news-article').show(); + }); + $('#previewtitle').html($('#id_title').val()); + }); +} + +/* packages/details.html */ +function ajaxifyFiles() { + $('#filelink').click(function(event) { + event.preventDefault(); + $.get(this.href, function(data) { + $('#pkgfilelist').html(data); + }); + }); +} + +/* packages/differences.html */ +filter_packages = function() { + // start with all rows, and then remove ones we shouldn't show + var rows = $(".results tbody tr"); + if(!$('#id_multilib').is(':checked')) { + rows = rows.not(".multilib"); + } + var arch = $("#id_archonly").val(); + if(arch !== "all") { + rows = rows.filter("." + arch); + } + if(!$('#id_minor').is(':checked')) { + // this check is done last because it is the most expensive + rows = rows.filter(function(index) { + // all this just to get the split version out of the table cell + var pat = /(.*)-(.+)/; + var ver_a = $('td:eq(2) span', this).text().match(pat); + var ver_b = $('td:eq(3) span', this).text().match(pat); + // did we match at all? + if(!ver_a || !ver_b) return true; + // first check pkgver + if(ver_a[1] !== ver_b[1]) return true; + // pkgver matched, so see if rounded pkgrel matches + if(Math.floor(parseFloat(ver_a[2])) == + Math.floor(parseFloat(ver_b[2]))) return false; + // pkgrel didn't match, so keep the row + return true; + }); + } + // hide all rows, then show the set we care about + $('.results tbody tr').hide(); + rows.show(); + // make sure we update the odd/even styling from sorting + $('.results').trigger("applyWidgets"); +}; +filter_reset = function() { + $('#id_archonly').val("all"); + $('#id_multilib').removeAttr("checked"); + $('#id_minor').attr("checked", "checked"); + filter_packages(); +}; + +/* todolists/view.html */ +todolist_flag = function() { + var link = this; + $.getJSON(link.href, function(data) { + if (data.complete) { + $(link).text('Complete').addClass('complete').removeClass('incomplete'); + } else { + $(link).text('Incomplete').addClass('incomplete').removeClass('complete'); + } + }); + return false; +}; |