summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-09-30 13:15:20 -0500
committerDan McGee <dan@archlinux.org>2010-09-30 13:15:20 -0500
commit3682fb285b9f131a56aed2c6cab8d303c6aae5ae (patch)
tree217509085054951d4fdcdb6d9f5c0b5099412e5b /media
parent0eac9698c6bdebdf5056a97b7c979b526d54ec15 (diff)
downloadarchweb-3682fb285b9f131a56aed2c6cab8d303c6aae5ae.tar.gz
archweb-3682fb285b9f131a56aed2c6cab8d303c6aae5ae.zip
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')
-rw-r--r--media/archweb.js130
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;
+};