/* * Copyright © Dave Perrett and Malcolm Jarvis * This code is licensed under the GPL version 2. * For more details, see http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Common javascript */ var transmission, dialog, isMobileDevice = RegExp("(isMobileDevice|iPod|Android)").test(navigator.userAgent), scroll_timeout; if (!Array.indexOf){ Array.prototype.indexOf = function(obj){ var i, len; for (i=0, len=this.length; i that) return 1; return 0; } /*** **** Preferences ***/ function Prefs() { } Prefs.prototype = { }; Prefs._RefreshRate = 'refresh_rate'; Prefs._SessionRefreshRate = 'session_refresh_rate'; Prefs._ShowInspector = 'show_inspector'; Prefs._FilterMode = 'filter'; Prefs._FilterAll = 'all'; Prefs._FilterActive = 'active'; Prefs._FilterSeeding = 'seeding'; Prefs._FilterDownloading = 'downloading'; Prefs._FilterPaused = 'paused'; Prefs._FilterFinished = 'finished'; Prefs._SortDirection = 'sort_direction'; Prefs._SortAscending = 'ascending'; Prefs._SortDescending = 'descending'; Prefs._SortMethod = 'sort_method'; Prefs._SortByAge = 'age'; Prefs._SortByActivity = 'activity'; Prefs._SortByName = 'name'; Prefs._SortByQueue = 'queue_order'; Prefs._SortByProgress = 'percent_completed'; Prefs._SortByRatio = 'ratio'; Prefs._SortByState = 'state'; Prefs._TurtleState = 'turtle-state'; Prefs._CompactDisplayState= 'compact_display_state'; Prefs._Defaults = { 'filter': 'all', 'refresh_rate' : 5, 'show_filter': true, 'show_inspector': false, 'sort_direction': 'ascending', 'sort_method': 'name', 'turtle-state' : false, 'compact_display_state' : false }; /* * Set a preference option */ Prefs.setValue = function(key, val) { if (Prefs._Defaults[key] == undefined) console.warn("unrecognized preference key '%s'", key); var days = 30; var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); document.cookie = key+"="+val+"; expires="+date.toGMTString()+"; path=/"; }; /** * Get a preference option * * @param key the preference's key * @param fallback if the option isn't set, return this instead */ Prefs.getValue = function(key, fallback) { var val; if (Prefs._Defaults[key] == undefined) console.warn("unrecognized preference key '%s'", key); var lines = document.cookie.split(';'); for (var i=0, len=lines.length; !val && i= 48 && key <= 57 || // Numeric keypad key >= 96 && key <= 105 || // comma, period and minus, . on keypad key == 190 || key == 188 || key == 109 || key == 110 || // Backspace and Tab and Enter key == 8 || key == 9 || key == 13 || // Home and End key == 35 || key == 36 || // left and right arrows key == 37 || key == 39 || // Del and Ins key == 46 || key == 45; }); }); } /** * http://blog.stevenlevithan.com/archives/parseuri * * parseUri 1.2.2 * (c) Steven Levithan * MIT License */ function parseUri (str) { var o = parseUri.options, m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), uri = {}, i = 14; while (i--) uri[o.key[i]] = m[i] || ""; uri[o.q.name] = {}; uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { if ($1) uri[o.q.name][$1] = $2; }); return uri; }; parseUri.options = { strictMode: false, key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], q: { name: "queryKey", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } };