// ==UserScript== // @name Improved Steam Achievements // @namespace http://greasyfork.org/users/2240-doodles // @author Doodles // @version 3 // @description Improves the appearance of Steam achievements on Steam pages and also on Achievement Stats pages. // @include *://www.achievementstats.com/* // @include *://achievementstats.com/* // @include *://steamcommunity.com/* // @exclude *://steamcommunity.com/*xml=1* // @exclude *://steamcommunity.com/*tab=leaderboards* // @exclude *://steamcommunity.com/*/leaderboards/* // @run-at document-end // @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js // @require https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.27.1/js/jquery.tablesorter.js // @grant GM_getValue // @grant GM_setValue // @updateVersion 3 // @downloadURL https://update.greasyfork.icu/scripts/21947/Improved%20Steam%20Achievements.user.js // @updateURL https://update.greasyfork.icu/scripts/21947/Improved%20Steam%20Achievements.meta.js // ==/UserScript== this.$ = this.jQuery = jQuery.noConflict(true); $(document).ready(function () { 'use strict'; // ======================================================================================================================= // Prototype Functions String.prototype.isaReplaceAll = function(f, r) { return this.split(f).join(r); }; String.prototype.isaRemoveEnd = function(end) { return (this.length < end.length || this.substring(this.length - end.length) != end) ? this : this.substring(0, this.length - end.length); }; Number.prototype.toSuffixedString = function() { var i = this; var suffixes = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th', 'th']; var iStr = i.toString(); i = (i > 99) ? parseInt(iStr.substring(iStr.length - 2), 10) : i; i = (i > 13) ? parseInt(iStr.substring(iStr.length - 1), 10) : i; return iStr + suffixes[i]; }; String.prototype.padTwo = function() { return (this.length == 1) ? '0' + this : this; }; Number.prototype.padTwo = function() { return (this < 10) ? '0' + this.toString() : this.toString(); }; Date.prototype.isaToString = function() { return this.getFullYear().toString() + '/' + (1 + this.getMonth()).padTwo() + '/' + this.getDate().padTwo() + ' ' + this.getHours().padTwo() + ':' + this.getMinutes().padTwo(); }; String.prototype.lastPart = function(s) { var p = this.split(s); return p[p.length - 1]; }; // ======================================================================================================================= // Data Variables var defaultTitleDelim = ' - '; var defaultLinkDelim = ' | '; var backTile = 'data:image/gif;base64,R0lGODlhAwAJAJEAABoaGiIiIhISEgAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZX' + 'RhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4zLWMwMTEgNjYuMTQ1NjYxLCAyMDEyLzAyLzA2LTE0OjU2OjI3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucy' + 'MiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL2' + '5zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0NjAwMUJCRTEyQzMxMUU1QjQ1REZBQkU2QU' + 'VFQUJDMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0NjAwMUJCRjEyQzMxMUU1QjQ1REZBQkU2QUVFQUJDMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ2MDAxQkJDMTJDMzExRTVCNDVERkFCRTZBRU' + 'VBQkMwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjQ2MDAxQkJEMTJDMzExRTVCNDVERkFCRTZBRUVBQkMwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/' + 'b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxram' + 'loZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEAAAAAAAsAAAAAAMACQAAAgeMYHiXrW8KADs='; var arrowDown = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD' + '0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPH' + 'JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxucz' + 'p4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2' + 'luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjUwMUY4NzEzNDFBMTFFNTlEM0E5MkY5MEUwMzBGRTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjUwMUY4NzIzNDFBMTFFNTlEM0E5MkY5MEUwMzBGRTciPiA8eG1wTU06RGVyaX' + 'ZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNTAxRjg2RjM0MUExMUU1OUQzQTkyRjkwRTAzMEZFNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNTAxRjg3MDM0MUExMUU1OUQzQTkyRjkwRTAzMEZFNyIvPiA8L3JkZjpEZXNjcm' + 'lwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtTTibEAAAFdSURBVHjaYmRgYGAEYi4g5gTib1CMD3BB8XeYWmY1E0fj6uUXdgHZNkDMi0czSM4GpBakB6SXCeSCnz+/S4uo6rtWrbu1homJGWSIEBAzIWkEsY' + 'VAciA1ILUgPSC9YEV//vxh+/oP6C4ZVfHqfe/XKxk7RgCFpYCYBYqlQGIgOZAakFqQHpjJ/3///fPtM1AQhH9x8LKHTt031Ty2rBQopwPCIDZIDCQHUwfSA9LLCA1E9ZD55zaKqBmqIXv45rYFJ0G0uleCObL4m1vnb61JNPIHKWGEinEDsbZNy9puWf' + 'sgO3xR8PjgukNHaoJBrrsKxF+ZoeK/gfjto32rjv1iZGLj0bc3/vmfgQEdX1nQNPt8b2YtUO0NaDRiAFYglhO28iuy2fH1l93+//9BGMQGiYHkoGrwAlDAirDwCfvrLn/4EoRBbJAYWtSCASMeg/iAWBLKfg7En7ApAggwAF08i46C7tfuAAAAAElFTk' + 'SuQmCC'; var arrowUp = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD' + '0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPH' + 'JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxucz' + 'p4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2' + 'luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjg5RTY1MDEzNDFBMTFFNTk0NUU4NTQxM0I4NDFBOUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjg5RTY1MDIzNDFBMTFFNTk0NUU4NTQxM0I4NDFBOUQiPiA8eG1wTU06RGVyaX' + 'ZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGODlFNjRGRjM0MUExMUU1OTQ1RTg1NDEzQjg0MUE5RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGODlFNjUwMDM0MUExMUU1OTQ1RTg1NDEzQjg0MUE5RCIvPiA8L3JkZjpEZXNjcm' + 'lwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrqW0q0AAAFySURBVHjaYmTADbiAWBTKfg3E3xiIBIxAzA/EDhWLT18EYRAbKsZISDMzEIuJyCiHN2x/+rH/zP//IAxig8RAclA1KBpggA2IZfTcIxMSpuyezM' + 'IjwPn7PwMDCDNx8bKbBmUEvnt699PLu1ceQr3zF9kADiBWdcztrnHI6y38zcTM9AuoERmDxFQdg53YOHmEH5zafQOo/hMQ/2GE+kvRs3vLXHkrbwdk5z09u+8BiJY2dlJAFn94bOuB7aU+yUDmfSaQAbwyqsoCFt4OH/8xMMDwuY2zN23Oc44FYRAbWQ' + '6kFqQHpJcFSDAxcfPzffoHNf7///9XJ+V1P1g3ZQ6Q9wgkdKorrfjl7YvXdfInlzEwMoJjAqQHRIHYLLwaZgF2+///t9z45huvukkSUEwKJI7kahBbEiQHUgNSC9IDU8PMZ+xqrbfyyS0g2w2IBXHENyNUzg2kFqQHpBcWiLxAzA3En4H4C4G0wgNV/x' + 'WkHiDAAPxMjVutShxmAAAAAElFTkSuQmCC'; var settingsIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD' + '0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPH' + 'JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIH' + 'htbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkMwRT' + 'FGNjE5MzRFNTExOTRGQjk5NTdFM0Y0NjI3OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3NjZDMjgzMzM3NkUxMUU1ODcxNUJCRjhEOUUzRERDQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3NjZDMjgzMjM3NkUxMUU1ODcxNUJCRjhEOU' + 'UzRERDQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjhCQjBDNDI5NkUzN0U1MTE5RjE5QzI1QTgzNDMyMkE5IiBzdFJlZj' + 'pkb2N1bWVudElEPSJ4bXAuZGlkOkMyQzBFMUY2MTkzNEU1MTE5NEZCOTk1N0UzRjQ2Mjc4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+kBEuTwAABWBJREFUeNq8VgtMU1cY9r' + 'a3T1ootS3QNryqUEqx2PoCRB3OF8vYMnAbGdkcU5ksczpli5htxi06QTLdMl0kmmw+YjIm2cZmptNZDCgTpwiICqQFoVSh8mhpe3v72DnmXHJXisFs2Um+e57/+e7/n///z8ECgcCM/6vg8INh2HTX8wCiAcQADoB+VE+vPEEzJgAH1VRJeL/aWH/gsp' + '3YdeauiScUpdPmGQCsoPX/KIwQY1BNIYBmzYaPi0GdAiCAxEKxbJY0Tj0P5wnYktik+PSc/JVgPAyAC5C4rPC9tUwWOxW0I0LtHYqMmZK5Wlt24vrpVRt3fb31WOP38llpeWA8a3FB6Qa+WMbzgQ5E8sIVL4MqE2BxcUVNdd7miu+2H28+Y1hVmIG0nH' + 'xmk/4AZ0ulqrRkHzhNZVqGel1l7Tce17hHlpAi9tKsnrq8QF92uvWkl/T4lGq9FE7JVGmqSEWiGjSNk0wGzyzIQaC2qW8fMdYkzF2S9LQeZ7vf9ehgkT6PcNqbQNc7lRkx1IcgTa1Xu6EWT4ue9mu9gMhJ2x8LNiMHZ3NjZCptvHNkiBMuU6RpVhRmkz' + 'STATN6e29e7rB2tjQ7RwaHhBK5MkZtmB+ry1IxmPjEhkr90mTVwpXPDZk7pGGRMvJRX1ev2zEKQ8RNmVGZv7fmQJzhmVwf6QkwcRbOi5jJpjYYsZhG66s/qWw9e/wn0B2EmqOwiF5UVLYuo+iDjXyRhEOtd9uHSZJwkUCBGZb2JuPprbmbwHAPpZkgOn' + '3JcqZQzKOCxIO0Ihyj5LmD23Z3GmtPgu4QckSqPLx6orLK5/f7l5R+vpnSkCGIZHEAYFuauigbhdLEmY3euVRbMzYy5CbRb1O41/hLIyCqQxr5gvwBOkD/tVNV3/bcaugMlnURLp+p+eLvcH86me3CvpLddTvXbrd2tw1DrSAIn39GX0vDJagBgH8KB4' + 'SE1r7WK1coOQibxez8bc/6PXXlBWVIfoLMA2Dp/+tSw4PuNjMl4PIQ/lGLyYLmn1SI8eFBK51ssOduf+e5U9AiZjhPJ4POIJfpsjME8Zo4SsCHczC2OEo8VfDTkwMzLEJEJ+NExcnAeRlQ4mbRyWbO23Z4Z9ZnP1SFJc4RUwIkxsAiUxbA1BNJj5cQKU' + '8inD13Hp2MF6uOyNr7437Dlq92wHk6mShqaf4rWISURxeAkGbm5YQnaBeBNeEhCB8TKZYV5Ebqc3TBsgyRjC9f8dob6EqaIHM8bG2sd7tdpMsxRrpdTh8MaAhcohDoPjy6L3yWbjVYF4vcmIsye2JU5vOvJm/cWx7ghOGUDEG4/Wgfr62r5QZY56TnRi' + '4vJiFOmDhH4xl+wGKFizWa7UfKuBIFn1LBZTXbbdfO/WG7cdFI2AaG+HKVQqzPeVYyf1UmWyTlUutI+7Cn44vSL8H6ZrY42uvs7+p0mNq6ICE9ETPQxQc7yclbDh1SvLBp8aTL1ksG/F6Pj8HhMTFwpsHzA2eP/dlR8VYJaHagcKEQoHsZNfj4xuWr58' + 'eTIf2OhQHgUwUdOzYlCv0wGRyboS5PXLamWMudbVBSmdxxv9MOMOb1ByZl+XFrjwPASfV56gWx0pWvp4QKl1BkAa/LYbH3dJig8PBNY9vtHbnrWzakFz04f6KJTjRQV228VWIouvPRi6Wjt5vuwTHngHkAisF9pvPggSaIYHD4+pg3P30XtLXoDSIUZb' + '9Umn7e6597IRDQ/eok+eoFhdQcgE75zoFyjlyVheKS8TSvKxxdIzjNCpqko+13tD/bidmHr98E/SRa7OHoqceaKgGEehY8qcCXlBwFOMzkFiqG/u278T8vfwswANrMfI9dB/UpAAAAAElFTkSuQmCC'; var settingsIconHover = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD' + '0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPH' + 'JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIH' + 'htbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkMwRT' + 'FGNjE5MzRFNTExOTRGQjk5NTdFM0Y0NjI3OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCODE3QjlGRDM3NkUxMUU1QkIwNUNDMjVEN0NBN0ZEMCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCODE3QjlGQzM3NkUxMUU1QkIwNUNDMjVEN0' + 'NBN0ZEMCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjhCQjBDNDI5NkUzN0U1MTE5RjE5QzI1QTgzNDMyMkE5IiBzdFJlZj' + 'pkb2N1bWVudElEPSJ4bXAuZGlkOkMyQzBFMUY2MTkzNEU1MTE5NEZCOTk1N0UzRjQ2Mjc4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Z/YQbwAABW5JREFUeNq8VgtMU1cYpu' + '0tLdACLaU85VWhLbSCvBniGGPOlI0xxTE2Nh0SHYQ93MTER4ZT94pjc5oxo05jNhY2MYwpcTNGrExYBygO5FmhvIqTV0pLKb3t7c7Be8m1XIhmy07y3XvOf+453/2f59BsNpvD/9UQ+KDRaI/6vROANwAfwAAwgr8frS2jGQOAhb+JFnz8vPL6tR793L' + 'n67n6uq3sUaZ4OwLT7/qFGp5BBNbkA4fk7PsgHbykABxLzBMKVASslsSwXjqN/SFhQasbGdUDuAsAGCMkpeGcTk+kYAfpulHtTaIYkpK5POn2p5U79EIYdr2noFEnkrwB5Wv57+3/6fdhmI/BheWUzkK8HSD90oqqurn/OcvbKX+r0rNz1uFUW+2yRkO' + 'noGSCRi63Am5LoJMnBU9XHZ40z5sBQKd9C+rcURXb0mSttFajZbA2TR3tCWaBYLvJZESIBXeUik0HN7AIEqh/xxTll1aqEtWGPG3EjGvVkoSI602jQq8DQspTPaPgYAm2/+cddFGjxuOhobRoEREbS/jR7M7IcWWyfALEsaHpynOXh7Sdfk5mbgpJMZj' + 'LOWDqa6jv7O2436ybHxvlevv4r5TFx0phkEQNBFjaUJjwpXp2yLmNI3enpLhCiWo160KjXwRQxEWb0LymvOiJLekphQc02BsJEuDwPR2KD+0P9usovSw8rq7/7BQzHoOZ4AHi/sK1kS9abu7a58gQLAWHQTaFm0ywKFHDoaVUpP3pDUQjEA4RmnNC4tU' + '+zXPlOxAoUe/AGf4WePvT+gabL1RVgOA5gJZn+fs2Jw2VWDMNyd336NoPxQEMWl8eEgP2QyMQUPJUWfKZr/K26amJy3GQGpiOj6WptAyC6iGtktYsHGAAjF0+Vnb3TfKPXfq1hdtba2nD1CtyfTDZxZt/2A0eLN+3UdLdPEc42WzGHrpYb16AGANgSAQ' + 'gJ73XfbGwkB8rosMZ4cnfBx8eKs0vw9QtkZgBtt+rajYHudo0ZbAthNM1hwF9afH65NqebGLtHrIMYvts9orrwA7SIBs6TyWAw+IpiU5IEovBAwgwYk0XjeHjxl0r+h+oAx82dbEKuT6AwKDIxBi/cTDKZx4bSb/a+9tX5MkHYKj6xAKXRaX7y+CQwzy' + 'PnC0V9FXhLV8eSyXjBErfNX9d8nrXv2G44TyZzl6RvzGG6ezqRTQERmpqZ5hUqSwTfuFIQzhPJ1mUrAuLTIu3XOvKEzrKMVzfjR9ICmaHvVsN1I8gNg34aNc4arYSjnYR+nMwD337mLY6ExTUAD2M2XtlDxKnPv5z27id7aGwXhFgzazJh+D6W4a7bt2' + 'AGkWsj290vOFAYtip8ZuJvppMbP1yx/0QJV+jnTKig02r0fQ2X6zSqq0rD2Og4b4XILyghLT0k+dknnHme7IVKMz1lvnSo6KhuRNPMEXhbJgfVvWPqdjUkJBdiOn7wwYH4mb3l5VEvFa6xdxBmQW1W1GxFWE4MGp2+yI9tP5/+89fSrdtBtxNPFwI2cp' + 'QRwvkTVxARF4RSHeIMJg0AmS/nFPNuwVIv/IdR+9ykOqmR8Kx8mYckxh+eXRDjA716gGkLZnMgZASmtAMGACMxFkTEB0iee11KlS5UZLa5GYN2rK+zHy4ebFa2XyhWFFTmROV11H6vIhO1nT+p/DE3Jq92R1aRtk3VM08+ohkF6kxR6k1xLYAmcEPYzt' + 'ExhQffAn0ZfgfhBqVtKNraZMEKWmy2LQ1G1DMiPpeYA4hM3Hlkj6u/KBnPS/rj3K4Q/BhBSFYIf/Hcna68ev1cZkVLKxiHkXIPwa96zKUKANW1YLkGb1K+eILDSq4lcujf3hv/8/aPAAMA9bWbSWlT7cIAAAAASUVORK5CYII='; var closeIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD' + '0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPH' + 'JkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxucz' + 'p4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2' + 'luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REU2NUE2RkYzODQxMTFFNUJGMTc4MDk5QkNBOUVBNjkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REU2NUE3MDAzODQxMTFFNUJGMTc4MDk5QkNBOUVBNjkiPiA8eG1wTU06RGVyaX' + 'ZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpERTY1QTZGRDM4NDExMUU1QkYxNzgwOTlCQ0E5RUE2OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpERTY1QTZGRTM4NDExMUU1QkYxNzgwOTlCQ0E5RUE2OSIvPiA8L3JkZjpEZXNjcm' + 'lwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PriqgcMAAAE5SURBVHjanJK/SgNBEIfvTsEiBEwhYuUL+BCm0U5JEREUjRBOEAQfQ9JrkkNQxEpQBME/ZdQHsLK3sjIpQooQw/kN7Mlk3CYZ+Ji9m/n9bnfnwj' + 'RNg0kjzMRxHC+TtuAgSZKBbaQekU7gnvrDn5hCkfUNFOAK9mj4UcKQ1JAl9KBM/TFy9SMnlNiGcwTTSlh3Qomc6w8ycQWe1S7F4BLhHDmBfVV7gx175pzb+qpq/IRFI1xjy50RsTK4hRXP5Y4I/4mdwSzpAxbU6zYsIfzSvZHnCzWYN+/EsIbxlHfO7q' + 'tNdasSfZhRzzLGCjsY6jmL46kRyhkP4dhcohhUMehn2z4zwhdYp+Fdfgh4MmO80GduwdCtX6GEUC4pIHdJG8agZecsjruwieDb82/nSddwR73pHdU48SvAAF0zfh0+f5wAAAAAAElFTkSuQmCC'; var colWidUnlockPercent = '158'; var colWidUnlockPoint = '110'; var colWidUnlockDate = '180'; var colWidUnlockLink = '95'; var titleDone = false; // ======================================================================================================================= // Stored Data Variables var titleDelim = GM_getValue('isaDataTitleDelim', defaultTitleDelim); var linkDelim = GM_getValue('isaDataLinkDelim', defaultLinkDelim); var meName = GM_getValue('isaDataMeName', false); var meSteamId = GM_getValue('isaDataMeSteamId', false); var meUrlBit = GM_getValue('isaDataMeUrlBit', false); var achPeople = []; pushPeople(meName, meSteamId, meUrlBit); function pushPeople(name, steamid, urlbit){ if (achPeople === false || !$.isArray(achPeople)) { achPeople = []; } if(steamid !== false || urlbit !== false) { var alreadyInList = false; for (var i = 0; i < achPeople.length; i++) { var person = achPeople[i]; if((person[1] !== false && person[1] == steamid) || (person[2] !== false && person[2] == urlbit)) { alreadyInList = true; break; } } if(!alreadyInList){ achPeople.push([name, steamid, urlbit]); } } } // ======================================================================================================================= // Functions function urlContains(urlfragment) { return document.URL.indexOf(urlfragment) != -1; } function htmlDateDifference(to, from) { if (to === false || from === false) { return ''; } var ss = Math.floor((to - from) / 1000); var yy = Math.floor(ss / 31536000); //60 / 60 / 24 / 365 ss -= yy * 31536000; var dd = Math.floor(ss / 86400); //60 / 60 / 24 ss -= dd * 86400; var hh = Math.floor(ss / 3600); //60 / 60 ss -= hh * 3600; var mm = Math.floor(ss / 60); //60 ss -= mm * 60; var timeDesc = '' + yy + ((yy == 1) ? 'year ' : 'years ') + dd + ((dd == 1) ? 'day ' : 'days ') + hh + 'h ' + mm + 'm ' + ss + 's'; } else if (dd > 0) { return timeDesc + 'isaSpanRed2">' + dd + ((dd == 1) ? 'day ' : 'days ') + hh + 'h ' + mm + 'm ' + ss + 's'; } else if (hh > 0) { return timeDesc + 'isaSpanYel2">' + hh + 'h ' + mm + 'm ' + ss + 's'; } else if (mm > 0) { return timeDesc + 'isaSpanBlu">' + mm + 'm ' + ss + 's'; } else if (ss > 0) { return timeDesc + 'isaSpanBlu">' + ss + 's'; } else { return timeDesc + 'isaSpanGre">Same Time as Previous'; } } function textTimeAgo(dateUnlocked) { if (dateUnlocked === false) { return ''; } var ss = Math.floor((Date.now() - dateUnlocked.getTime()) / 1000); var yy = Math.floor(ss / 31536000); //60 / 60 / 24 / 365 ss -= yy * 31536000; var dd = Math.floor(ss / 86400); //60 / 60 / 24 ss -= dd * 86400; var hh = Math.floor(ss / 3600); //60 / 60 ss -= hh * 3600; var mm = Math.floor(ss / 60); //60 ss -= mm * 60; if (yy > 0) { return yy + ((yy == 1) ? 'year ' : 'years ') + dd + ((dd == 1) ? 'day ' : 'days ') + hh + 'h ' + mm + 'm ' + ss + 's ago'; } else if (dd > 0) { return dd + ((dd == 1) ? 'day ' : 'days ') + hh + 'h ' + mm + 'm ' + ss + 's ago'; } else if (hh > 0) { return hh + 'h ' + mm + 'm ' + ss + 's ago'; } else if (mm > 0) { return mm + 'm ' + ss + 's ago'; } else if (ss > 0) { return ss + 's ago'; } else { return 'just now'; } } function htmlFromUl(ul) { var liHtml = []; $(ul).find('li').each(function () { liHtml.push($(this).html()); }); return liHtml.join(linkDelim); } function htmlAstatsPoint(value) { if (!(value > 0)) { return '' + value + ''; } else if (value >= 3) { return '' + value + ''; } else if (value >= 2) { return '' + value + ''; } else if (value >= 1) { return '' + value + ''; } else { return '' + value + ''; } } function htmlSteamAchProgress(str) { var numbs = str.trim().split(' / '); var value = numbs[0].isaReplaceAll(',', '') / numbs[1].isaReplaceAll(',', ''); if (value <= 0.33) { return 'Progress: ' + str + ''; } else if (value <= 0.66) { return 'Progress: ' + str + ''; } else if (value < 1) { return 'Progress: ' + str + ''; } else { return 'Progress: ' + str + ''; } } function domPercentCell(cell, percent) { var hslHue = Math.floor(2 * parseInt(percent, 10)); $(cell).css({ 'background-color': 'hsl(' + hslHue + ', 60%, 20%)', 'background': 'linear-gradient(hsl(' + hslHue + ', 60%, 20%), hsl(' + hslHue + ', 60%, 15%))' }).text(percent); } function textDateFixSteam(str) { var parts1 = str.replace('Unlocked ', '').split(' @ '); var parts2 = parts1[0].split(','); var parts3 = parts2[0].split(' '); var parts4 = parts1[1].split(':'); var ye = parts2.length == 2 ? parts2[1].trim() : new Date().getFullYear(); var da = (parts3[0] < 10) ? '0' + parts3[0].trim() : parts3[0].trim(); var month = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'].indexOf(parts3[1].trim().toLowerCase()) + 1; var mo = (month < 10) ? '0' + month : month; var mi = parts4[1].trim().substring(0, 2); var timecode = parts4[1].trim().substring(2, 4); var ho = parts4[0].trim(); if (timecode == 'am') { if(ho == '12'){ ho = '00'; }else if(ho.length == 1) { ho = '0' + ho; } } else if (ho != '12') { ho = (parseInt(ho, 10) + 12).toString(); } return ye + '/' + mo + '/' + da + ' ' + ho + ':' + mi; } function htmlPercentStr(str, value) { if (value <= 0.33) { return '' + str + ''; } else if (value <= 0.66) { return '' + str + ''; } else if (value < 1) { return '' + str + ''; } else { return '' + str + ''; } } function textStringToDate(str) { if (!str || $.trim(str) === '') { return false; } var parts1 = str.split(' '); var parts2 = parts1[0].split('/'); var parts3 = parts1[1].split(':'); if (parts3.length == 3) { return new Date(parts2[0], parts2[1] - 1, parts2[2], parts3[0], parts3[1], parts3[2]); //new Date(year, month, day, hours, minutes, seconds, milliseconds); } else { return new Date(parts2[0], parts2[1] - 1, parts2[2], parts3[0], parts3[1]); } } function domDateColumn(rows, column, detailCell) { if (typeof(detailCell)==='undefined') { detailCell = false; } if (rows.length > 1) { rows.sort(function(a, b) { var aText = $(a).find('td:eq(' + column + ') > span:eq(0)').text().trim(); var bText = $(b).find('td:eq(' + column + ') > span:eq(0)').text().trim(); if (aText == bText) { return 0; } var aNum = 0; if (aText == 'Locked') { aNum = 99999999999999; } else if (aText == 'Unlocked') { aNum = 88888888888888; } else if (aText == 'Unlocked Pre-Tracking') { aNum = 0; } else { aNum = aText.isaReplaceAll('/', '').isaReplaceAll(':', '').isaReplaceAll(' ', ''); } var bNum = 0; if (bText == 'Locked') { bNum = 99999999999999; } else if (bText == 'Unlocked') { bNum = 88888888888888; } else if (bText == 'Unlocked Pre-Tracking') { bNum = 0; } else { bNum = bText.isaReplaceAll('/', '').isaReplaceAll(':', '').isaReplaceAll(' ', ''); } return aNum - bNum; }); if (detailCell !== false) { var timesCheck1 = [], timesCheck2 = [], times = 0, duplicateTimes = 0; $(rows).each(function() { var rowTime = $(this).find('td:eq(' + column + ')').text(); if (rowTime != 'Locked' && rowTime != 'Unlocked' && rowTime != 'Unlocked Pre-Tracking') { times++; if (jQuery.inArray(rowTime, timesCheck1) == -1) { timesCheck1.push(rowTime); } else { duplicateTimes++; if (jQuery.inArray(rowTime, timesCheck2) == -1) { timesCheck2.push(rowTime); } } } }); duplicateTimes += timesCheck2.length; var ratio = duplicateTimes / times; if (ratio >= 0.5) { var dupPercent = Math.round((duplicateTimes * 10000) / times) / 100; var dupPercentStr = duplicateTimes + ' / ' + times + ' (' + dupPercent + '%) duplicate times'; var percentSpan = ''; if (ratio >= 0.9) { percentSpan = '' + dupPercentStr + ''; } else if (ratio > 0.75) { percentSpan = '' + dupPercentStr + ''; } else { percentSpan = '' + dupPercentStr + ''; } $(detailCell).append('
' + percentSpan + '
'); } } for (var i = rows.length - 1; i >= 1; i--) { var dateLaterString = $(rows[i]).find('td:eq(' + column + ') > span:eq(0)').text(); var dateFirstString = $(rows[i - 1]).find('td:eq(' + column + ') > span:eq(0)').text(); var skipFirst = dateFirstString == 'Locked' || dateFirstString == 'Unlocked' || dateFirstString == 'Unlocked Pre-Tracking'; var skipLater = dateLaterString == 'Locked' || dateLaterString == 'Unlocked' || dateLaterString == 'Unlocked Pre-Tracking'; if (!(skipFirst || skipLater)) { $(rows[i]).find('td:eq('+column+')').append('
' + htmlDateDifference(textStringToDate(dateLaterString), textStringToDate(dateFirstString))); } } for (var i = 0, l = rows.length - 1; i <= l; i++) { var dateString = $(rows[i]).find('td:eq(' + column + ') > span:eq(0)').text(); if (dateString != 'Locked' && dateString != 'Unlocked' && dateString != 'Unlocked Pre-Tracking') { $(rows[i]).find('td:eq(' + column + ') span:eq(0)').attr('title', 'Date-Time Unlocked (' + textTimeAgo(textStringToDate(dateString)) + ')'); } } var rank = 1; var marked = 0; var lastDate = ''; for (var i = 0, l = rows.length; i < l; i++) { var thisDate = $(rows[i]).find('td:eq(' + column + ') > span:eq(0)').text(); if (thisDate == 'Locked' || thisDate == 'Unlocked') { // do nothing } else if (thisDate == 'Unlocked Pre-Tracking') { marked++; } else if (thisDate == lastDate) { $(rows[i]).find('td:eq(' + column + ')').append('
' + rank.toSuffixedString() + ''); marked++; } else { rank = marked + 1; $(rows[i]).find('td:eq(' + column + ')').append('
' + rank.toSuffixedString() + ''); marked++; lastDate = thisDate; } } } else if (rows.length == 1 && $(rows[0]).find('td').length > 1) { var cell = $(rows[0]).find('td:eq(' + column + ')'); var dateString = $(cell).find('span:eq(0)').text(); if (dateString != 'Locked' && dateString != 'Unlocked' && dateString != 'Unlocked Pre-Tracking') { $(cell).find('span:eq(0)').attr('title', 'Date-Time Unlocked (' + textTimeAgo(textStringToDate(dateString)) + ')'); $(cell).append('
1st'); } } } function jsRowHighlight(table) { if (typeof(table)==='undefined') { table = 'table#isaSecondTable'; } $(table).find('tbody > tr').hover( function () { $(this).addClass('isaHoverHighlight'); }, function () { $(this).removeClass('isaHoverHighlight'); } ); } function jsOptionsMenuSave() { var temp1 = $('#isaSettingsDialog input:eq(0)').val().trim(); meName = (temp1 == '' ? false : temp1); var temp2 = $('#isaSettingsDialog input:eq(1)').val().trim(); meSteamId = (temp2 == '' ? false : temp2); var temp3 = $('#isaSettingsDialog input:eq(2)').val().trim(); meUrlBit = (temp3 == '' ? false : temp3); titleDelim = $('#isaSettingsDialog input:eq(3)').val(); linkDelim = $('#isaSettingsDialog input:eq(4)').val(); GM_setValue('isaDataMeName', meName); GM_setValue('isaDataMeSteamId', meSteamId); GM_setValue('isaDataMeUrlBit', meUrlBit); GM_setValue('isaDataTitleDelim', titleDelim); GM_setValue('isaDataLinkDelim', linkDelim); } function jsOptionsMenuReset() { $('#isaSettingsDialog input:eq(0)').val(''); $('#isaSettingsDialog input:eq(1)').val(''); $('#isaSettingsDialog input:eq(2)').val(''); $('#isaSettingsDialog input:eq(3)').val(defaultTitleDelim); $('#isaSettingsDialog input:eq(4)').val(defaultLinkDelim); } // ======================================================================================================================= // Link HTML Functions function htmlLinksProfile(steamProfileId64) { var html = 'Steam: '; html += 'Profile' + linkDelim; html += 'Games' + linkDelim; html += 'All Games' + linkDelim; html += 'Screenshots' + linkDelim; html += 'Videos' + linkDelim; html += 'Artwork' + linkDelim; html += 'Reviews' + linkDelim; html += 'Guides' + linkDelim; html += 'Workshop Items' + linkDelim; html += 'Greenlight Items' + linkDelim; html += 'Friends' + linkDelim; html += 'Groups' + linkDelim; html += 'Inventory' + linkDelim; html += 'All Comments' + linkDelim; html += 'Name History' + linkDelim; html += 'Friends in Common' + linkDelim; html += 'Groups in Common' + linkDelim; html += 'Badges' + linkDelim; html += 'Wishlist'; html += '
Third Party: '; html += 'SteamRep' + linkDelim; html += 'SteamDB' + linkDelim; html += 'Achievement Stats' + linkDelim; html += 'astats.nl'; return html; } function htmlLinksGameShort(steamAppId, gameName, steamProfileId64, steamUrlBit) { if (typeof(steamUrlBit)==='undefined' || steamUrlBit === false) { steamUrlBit = steamAppId; } if (typeof(steamProfileId64)==='undefined') { steamProfileId64 = false; } var html = ''; html += 'Steam Store' + linkDelim; html += 'HUB' + linkDelim; html += 'Achievements' + linkDelim; if (steamProfileId64 !== false) { html += 'Player' + linkDelim; } html += 'Steam Guides' + linkDelim; html += 'Achievement Stats' + linkDelim; html += 'AStats' + linkDelim; html += 'SteamDB'; return html; } function htmlLinksGameLong(gameAppId, gameName, steamUrlBit, steamProfiles) { if (typeof(steamUrlBit)==='undefined' || steamUrlBit === false) { steamUrlBit = gameAppId; } if (typeof(steamProfiles)==='undefined') { steamProfiles = false; } var html = 'Steam: '; html += 'Store' + linkDelim; html += 'DLC' + linkDelim; html += 'Similar' + linkDelim; html += 'Hub' + linkDelim; html += 'Forum' + linkDelim; html += 'News' + linkDelim; html += 'Market' + linkDelim; html += 'Achievements: '; html += 'Global'; if (steamProfiles !== false && $.isArray(steamProfiles)) { for (var i = 0; i < steamProfiles.length; i++) { var person = steamProfiles[i]; if(person[1] !== false || person[2] !== false) { var nameLabelA = person[0] === false ? 'Me' : person[0]; var nameLabelB = person[0] === false ? 'My' : person[0] + '\'s'; var tempUrlBit = person[2] !== false ? 'id/' + person[2] : 'profiles/' + person[1]; html += linkDelim + '' + nameLabelA + ' on Steam'; html += linkDelim + '' + nameLabelB + ' XML'; if (person[1] !== false) { html += linkDelim + '' + nameLabelA + ' on Astats'; } } } } html += '
Steam HUB: '; html += 'Steam Hub' + linkDelim; html += 'Discussions' + linkDelim; html += 'Screenshots' + linkDelim; html += 'Artwork' + linkDelim; html += 'Videos' + linkDelim; html += 'News' + linkDelim; html += 'Announcements' + linkDelim; html += 'Guides' + linkDelim; html += 'Reviews'; html += '
Third Party: '; html += 'Achievement Stats' + linkDelim; html += 'Official Site' + linkDelim; html += 'AStats' + linkDelim; html += 'SteamDB' + linkDelim; html += 'Card Exchange' + linkDelim; html += 'SteamCharts' + linkDelim; html += 'SteamGraph' + linkDelim; html += 'SteamSpy' + linkDelim; html += 'PC Gaming Wiki' + linkDelim; html += 'RSS News' + linkDelim; html += 'GameFAQ Search' + linkDelim; html += 'HowLongToBeat Search' + linkDelim; html += 'IsThereAnyDeal'; return html; } function htmlLinksDLC(game, dlc) { var html = 'Steam: '; html += 'Store' + linkDelim; html += 'DLC' + linkDelim; html += 'Hub' + linkDelim; html += 'Achievements' + linkDelim; html += 'Third Party: '; html += 'Achievement Stats' + linkDelim; html += 'AStats' + linkDelim; html += 'SteamDB.info' + linkDelim; html += 'SteamDB.info (Parent Game)' + linkDelim; html += 'PC Gaming Wiki'; return html; } function htmlLinksAch(game, achName, useLabel, gameAppId) { if (typeof(useLabel)==='undefined') { useLabel = false; } if (typeof(gameAppId)==='undefined') { gameAppId = false; } var html = ''; if (useLabel) { html += 'Guide Search: '; } html += 'Google'; html += (useLabel ? linkDelim : '
'); html += 'YouTube'; if (gameAppId !== false) { //http://steamcommunity.com/app/200900/guides/?searchText=Pea+Shooter&browsefilter=trend&requiredtags[]=-1 html += (useLabel ? linkDelim : '
'); html += 'Guides'; } return html; } // ======================================================================================================================= // Universal Stuff: SLG Styles, Custom Tablesort Parser, Title Edit Var $('').prop('type', 'text/css').html('' + '#isaPageWrap { background-color:#222222; padding:10px; border-top:1px solid #000000; background-image: url(' + backTile + '); }' + 'div.isaTableSpacer {height:10px;} .isaWidth100 { width:100%; }' + 'h2.isaPageTitleFirst, h2.isaPageTitle { color:#3c9fe5; margin:0; padding:8px 0 2px 0; text-align:center; font-size:24px; font-weight:bold; } ' + 'form.isaSmallButton {display:block; float:right;} form.isaSmallButton input {display:inline-block; font-size:10px; margin:0 0 0 0;}' + 'span.isaSpanSmallBold { font-weight:bold; font-size:12px; }' + 'span.isaSpanRed { color:#ff6161; } span.isaSpanRed2 { color:#f66666; }' + 'span.isaSpanYel { color:#ffff5e; } span.isaSpanYel2 { color:#d3d325; }' + 'span.isaSpanBlu { color:#7fb3e9; } span.isaSpanBlu2 { color:#2591ff; }' + 'span.isaSpanOra { color:#ffae00; } span.isaSpanGre { color:#a6d36a; }' + 'span.isaSpanPin { color:#ff68e8; }' + 'table.isaTable { background-color:#000000; border-collapse:separate; border-spacing:1px; }' + 'table.isaTable td { background-color:#333333; background: linear-gradient(#3A3A3A,#333333); vertical-align:top; padding:2px 4px 3px 4px; color:#EEEEEE;font-size:14px;}' +// border:1px solid #555555; 'table.isaTable td a:link, table.isaTable td a:visited { color:#7fb3e9;text-decoration: none; } ' + 'table.isaTable td a:hover, table.isaTable td a:active { color:#ffffff;text-decoration: underline; } ' + 'table.isaTable th { font-size:16px;background-color:#555555;background:linear-gradient(#5C5C5C,#555555);text-align:center;padding:4px;text-shadow:1px 1px 2px #000000;white-space:nowrap;color:#daf0ff; }' + 'table.isaTable th a:link, table.isaTable th a:visited { text-decoration: none; } table.isaTable th a:hover, table.isaTable th a:active { text-decoration: underline; } ' + 'table.isaTable td.isaGameImage { text-align:center; padding:3px; vertical-align:top; width:184px; }' + 'table.isaTable td.isaGameIcon { text-align:center; padding:3px; vertical-align:top; width:64px; }' + 'table.isaTable td.isaGameImage img, table.isaTable td.isaGameIcon img { border:1px solid #676767; }' + 'table.isaTable td.isaTitleCell { background-color:#555555; background: linear-gradient(#5C5C5C,#555555); padding:2px 2px 4px 5px; font-size:24px; font-weight:bold; color:#ffffff; text-shadow:2px 2px 4px #000000; }' + 'table.isaTable td.isaTitleCell a:link, table.isaTable td.isaTitleCell a:visited { text-decoration: none; color:#24a4ff; }' + 'table.isaTable td.isaTitleCell a:hover, table.isaTable td.isaTitleCell a:active { text-decoration: underline; }' + 'table.isaTable td.isaTitleCell div.isaTitleAppend { display:inline-block;padding:0 0 0 15px; font-weight:normal; }' + 'table.isaTable td.isaLinkContainer { color:#4d4d4d; font-size:12px; text-shadow:1px 1px 2px #000000; padding:3px 5px 3px 5px; } ' + 'table.isaTable td.isaLinkContainerMid { text-align:center; vertical-align:middle;color:#4d4d4d; font-size:12px; text-shadow:1px 1px 2px #000000; padding:3px 5px 3px 5px; } ' + 'table.isaTable td.isaLinkContainer span, table.isaTable td.isaLinkContainerMid span { color:#cccccc; font-weight:bold; } ' + 'table.isaTable td.isaLinkContainerDark { text-align:center; vertical-align:middle;color:#777777; font-size:12px; text-shadow:1px 1px 2px #000000; padding:3px 5px 3px 5px; } ' + 'table.isaTable td.isaLinkContainerDark a:link, table.isaTable td.isaLinkContainerDark a:visited { color:#777777;text-decoration: none; } ' + 'table.isaTable td.isaLinkContainerDark a:hover,table.isaTable td.isaLinkContainerDark a:active { color:#FFFFFF;text-decoration: underline; } ' + 'table.isaTable td.isaStatsCell { padding:4px 0 0 4px; font-size:14px; }' + 'table.isaTable td.isaStatsCell div.isaStat { display:inline-block;margin:0 4px 4px 0; padding:2px 7px 2px 5px; color:#beffb9; font-weight:bold; }' + 'table.isaTable td.isaStatsCell div.isaStat span { color:#CCCCCC; font-weight:normal; }' + 'table.isaTable td.isaListGameImage { padding:3px; width:184px; }' + 'table.isaTable td.isaListAchImage { padding:3px; width:64px; }' + 'table.isaTable td.isaListAchImage img, table.isaTable td.isaListGameImage img { border:none;padding:0;margin:0;display:block; }' + 'table.isaTable td.isaListAchs { padding:5px;width:256px; }' + 'table.isaTable td.isaListNumber { padding:2px 4px 2px 4px;vertical-align:middle;text-align:center; }' + 'table.isaTable td.isaListBigNumber { padding:2px 4px 2px 4px;vertical-align:middle;text-align:center;font-weight:bold;font-size:24px; }' + 'table.isaTable td.isaListSmall { font-size:12px; }' + 'table.isaTable td.isaListSmaller { font-size:10px; }' + 'table.isaTable td.isaEvenPadding { padding:3px; }' + 'table.isaTable td.isaStatsLarge { padding:2px 0 0 5px; font-size:18px; font-weight:bold; text-shadow:2px 2px 4px #000000; }' + 'table.isaTable td.isaStatsLarge div.isaStat { display:inline-block;padding:0 15px 2px 0; color:#cae4ff; font-weight:bold; }' + 'table.isaTable td.isaListTitle { font-weight:bold;font-size:16px;color:#b9e2ff; }' + 'table.isaTable td.isaListTitle a:link, table.isaTable td.isaListTitle a:visited {color:#b9e2ff;text-decoration:none;}' + 'table.isaTable td.isaListTitle a:hover, table.isaTable td.isaListTitle a:active {color:#2591ff;text-decoration:underline;}' + 'table.isaTable td.isaListAchDetail { font-size:12px;color:#cccccc;text-shadow:1px 1px 1px #000000; }' + 'table.isaTable td.isaListAchDetail h3 { padding:0 0 1px 0;margin:0;font-weight:bold;font-size:16px;color:#b9e2ff; }' + 'table.isaTable td.isaListAchDetail h3 a:link, table.isaTable td.isaListAchDetail h3 a:visited {color:#b9e2ff;text-decoration:none;}' + 'table.isaTable td.isaListAchDetail h3 a:hover, table.isaTable td.isaListAchDetail h3 a:active {color:#2591ff;text-decoration:underline;}' + 'table.isaTable td.isaListAchDetail span { display:inline-block; padding-top:1px; }' + 'table.isaTable tr.isaAchBroken td {background-color:#572424; background: linear-gradient(#632929,#572424);}' + 'table.isaTable tr.isaAchSeasonal td {background-color:#492e16; background: linear-gradient(#533418,#492e16);}' + 'table.isaTable tr.isaAchNonRecurring td, table.isaTable tr.isaAchTemporary td {background-color:#38380a; background: linear-gradient(#40400b,#38380a);}' + 'table.isaTable tr.isaAchMonetary td {background-color:#5f2356; background: linear-gradient(#5f2356,#541e4b);}' + 'table.isaTable td.isaListShadow { box-shadow:inset 0 0 10px 0 #222; }' + 'table.isaTable td.isaListTextShadow { text-shadow:2px 2px 4px #000000; }' + 'table.isaTable td.isaListAchUnlocked { background-color:#243d26; background: linear-gradient(#243d26,#29452b);text-shadow:1px 1px 1px #000000; }' + 'table.isaTable td.isaBlackedOut { background-color:#111111; background: linear-gradient(#1A1A1A,#111111); color:#777777;font-size:12px; }' + 'table.isaTable td.isaHideCell, table.isaTable tr.isaHideCell { display:none; } div.isaActionDiv { cursor:pointer; }' + 'table.isaTable tr.isaHoverHighlight td {box-shadow:0px 0px 10px rgba(255, 255, 255, 0.2) inset;} ' + 'table.isaTable tr.isaHoverHighlight td.isaListAchDetail, table.isaTable tr.isaHoverHighlight td.isaListAchDetail h3 {text-shadow:1px 1px 1px #000000;} ' + 'table.isaTable th.tablesorter-headerAsc { background:url("'+arrowDown+'") right 5px center no-repeat, linear-gradient(to bottom,#5C5C5C,#555555); }' + 'table.isaTable th.tablesorter-headerDesc { background:url("'+arrowUp+'") right 5px center no-repeat, linear-gradient(to bottom,#5C5C5C,#555555); }' + 'div#isaSettingsContainer { padding:2px 2px 0 0; float: right; display:block; }' + 'div#isaSettingsButton { width:27px; height:27px; display:block;background-image: url("'+settingsIcon+'");cursor:pointer; }' + '.ui-corner-all {border-radius: 0 !important;}' + '.ui-dialog { z-index:403 !important; background-color:#333333;color:#EEEEEE;font-size:14px; border:1px solid #000000;box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);font-family: Arial,Helvetica,Verdana,sans-serif !important;}' + '.ui-dialog-titlebar {font-size:16px;background-color:#555555;background:linear-gradient(#5C5C5C,#555555);padding:4px 4px 4px 7px;text-shadow:1px 1px 2px #000000;color:#daf0ff;'+ 'font-weight:bold; border:none !important;}' + '.ui-dialog-titlebar-close {float:right;width:19px;height:19px; background-color:#333333 !important; border:1px solid #222222 !important;background-image:url("'+closeIcon+ '") !important;background-position:center !important; background-repeat:no-repeat !important; }' + '.ui-dialog-titlebar-close:hover {background-color:#0c3551 !important; border:1px solid #333333 !important;} .ui-dialog-titlebar-close span { display: none; }' + '.ui-dialog-content {background: linear-gradient(#3A3A3A,#333333);padding:5px;text-shadow:1px 1px 1px #000000;border:none !important;}' + '.ui-dialog-content input, .ui-dialog-content textarea {color:#ffffff;background-color:rgba(0, 0, 0, 0.2);border:1px solid #000;border-radius:3px;font-size:12px;font-family: "Courier New", Courier, monospace;margin:0px;}' + '.ui-dialog-content fieldset {border:1px solid #000000;} .ui-dialog-content fieldset:not(:first-child) {margin-top:8px;}' + '.ui-dialog-content legend { padding:2px 4px 2px 4px;font-weight:bold;}' + '.ui-dialog-buttonpane {padding:2px 7px 7px 7px;background-color:none !important;background:none !important;border:none; } .ui-dialog-buttonset {text-align:right;}' + '.ui-dialog-buttonset button {margin-left:5px;background: #174a6b !important;text-shadow: 1px 1px 0px #000000;color: #ffffff !important;padding: 2px 10px 2px 10px !important;border: solid #1f628d 1px !important;' + 'font-family:Arial,Helvetica,Verdana,sans-serif !important;}' + '.ui-dialog-buttonset button:hover {background: #3395d7 !important;}' + '.ui-widget-overlay { position:absolute;top:0;left:0;width:100%;height:100%;background-color:#000000;opacity:.60;filter:Alpha(Opacity=60);background-image:none !important;}' + 'div.isaSettingsSetting { height:24px;vertical-align:top; }' + 'div.isaSettingsSetting label { float:left; }' + 'div.isaSettingsSetting input { float:right; }' + 'div.isaSettingsText { height:94px;vertical-align:top; }' + 'div.isaSettingsText label { float:left; }' + 'div.isaSettingsText textarea { float:right; }' + '').appendTo('head'); $.tablesorter.addParser({ id: 'isaDate', is: function (s) { return false; }, format: function (s, table, cell, cellIndex) { s = $(cell).find('span:eq(0)').text(); if (s == 'Locked') { return 99999999999999; } if (s == 'Unlocked') { return 88888888888888; } if (s == 'Unlocked Pre-Tracking') { return 0; } s = s.isaReplaceAll('/', '').isaReplaceAll(':', '').isaReplaceAll(' ', ''); return s; }, type: 'numeric' }); $.tablesorter.addParser({ id: 'isaAstatsPoint', is: function (s) { return false; }, format: function (s) { if (!(s > 0)) { return 99; } return s; }, type: 'numeric' }); $('body').append('
My Details:' + '
' + '
' + '
' + '
Deliminators:' + '
' + '
' + '
'); $('#isaSettingsDialog input:eq(0)').val((meName === false ? '' : meName)); $('#isaSettingsDialog input:eq(1)').val((meSteamId === false ? '' : meSteamId)); $('#isaSettingsDialog input:eq(2)').val((meUrlBit === false ? '' : meUrlBit)); $('#isaSettingsDialog input:eq(3)').val(titleDelim); $('#isaSettingsDialog input:eq(4)').val(linkDelim); $('#isaSettingsDialog').dialog({ modal:true, resizable: false, autoOpen: false, width: 634, position: { my: "center top", at: "center top+120", of: window }, buttons: [ { text: "Reset To Defaults", click: function() { jsOptionsMenuReset(); } }, { text: "Save Settings", click: function() { jsOptionsMenuSave(); } }, { text: "Close", click: function() { $( this ).dialog( "close" ); } } ] }); var settingsButton = $('
'); $(settingsButton).find('#isaSettingsButton').click(function() {$('#isaSettingsDialog').dialog('open');}); $(settingsButton).find('#isaSettingsButton').hover( function() { $(this).css('background-image', 'url('+settingsIconHover+')');}, function() { $(this).removeAttr('style'); } ); // ======================================================================================================================= // Achievement Stats Pages - Changes to All Astats Pages if (urlContains('achievementstats.com') && window.top == window.self) { $('body').css('font-family', 'Arial'); //$('body').children().not(':first-child').wrapAll('
'); $('div#menuBar').nextAll().not('script').not('link').wrapAll('
'); //$('table').addClass('isaTable'); // =================================================================================================================== // Achievement Stats - Profile Page if (urlContains('action=profile') && urlContains('playerId=') && window.location.search.substring(1).split('&').length == 2) { // Get Info and Elements var formButton = $('#isaPageWrap > :first-child').detach(); var titleProfileName = $('#isaPageWrap > :first-child').detach().text(); var ul = $('#isaPageWrap > :first-child').detach(); var featureImage = $('#isaPageWrap > :first-child').detach(); var pieChart = $('#isaPageWrap > :first-child').detach().removeAttr('style').css({ 'width': '260px' }); var statsTable = $('#isaPageWrap > :first-child').detach(); if ($('#isaPageWrap > :first-child').text().indexOf('summary') != -1) { $('#isaPageWrap > :first-child').remove(); $('#isaPageWrap > :first-child').remove(); } var steamProfileId64 = document.URL.split('playerId=')[1].split('&')[0].split('?')[0].split('#')[0]; $('#isaPageWrap > :first-child').remove(); $('#isaPageWrap > :first-child').css('margin', '3px'); $('#isaPageWrap > table:eq(0)').attr('id', 'isaSecondTable').removeAttr('style').addClass('isaTable isaWidth100'); $(featureImage).removeAttr('style').find('img').removeAttr('style'); $(formButton).removeAttr('style').addClass('isaSmallButton'); $(formButton).find('input').removeAttr('style').attr('value', 'queue profile for update').attr('title', 'Queue this Profile for Update'); // Make Header Table var isaTopTable = $('' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(featureImage); $(isaTopTable).find('td:eq(1)').text(titleProfileName).attr('title', titleProfileName + ' - Profile'); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(2)').append(pieChart).css({ 'width':'264px', 'vertical-align':'top', 'overflow':'hidden' }); $(isaTopTable).find('td:eq(4)').html(htmlLinksProfile(steamProfileId64)); $(isaTopTable).find('td:eq(5)').html('Achievement Stats Controls: ' + htmlFromUl(ul)); $(isaTopTable).find('td:eq(5)').append(formButton); $(statsTable).find('tr').each(function() { var statLabel = $(this).find('th:eq(0)').text().trim(); var statText = $(this).find('td:eq(0)').html(); if (statLabel == 'Achievements') { var statTextParts = statText.split('('); statTextParts[0] = statTextParts[0].trim(); if (statTextParts[0].length > 0) { $(isaTopTable).find('td:eq(3)').append('
' + statTextParts[0] + ' achieved
'); $(isaTopTable).find('td:eq(3)').append('
' + statTextParts[1].replace(' points)', '') + ' points
'); } else { $(isaTopTable).find('td:eq(3)').append('
0 achieved
'); $(isaTopTable).find('td:eq(3)').append('
0 points
'); } } else if (statLabel == 'Completion rate') { statText = statText.replace(' ', '').replace('%', ''); var statPercent = statText / 100; $(isaTopTable).find('td:eq(3)').append('
' + htmlPercentStr(statText + '% average completion', statPercent) + '
'); } else { $(isaTopTable).find('td:eq(6)').append('
' + statLabel + ': ' + statText + '
'); } }); var detailLastUpdated = $('table#isaSecondTable').next().detach().text().trim(); if (detailLastUpdated.length > 0) { // profiles not yet crawled have this detail blank (length zero) $(isaTopTable).find('td:eq(6)').append('
' + detailLastUpdated + '
'); } $(isaTopTable).find('td:eq(6)').append('
' + $('table#isaSecondTable').next().detach().text() + '
');// Next automatic update // Append and Title $('#isaPageWrap').prepend(isaTopTable); document.title = titleProfileName + titleDelim + 'Profile'; titleDone = true; // Second Table thead Adjustment $('table#isaSecondTable').prepend(''); $('table#isaSecondTable > thead').append($('table#isaSecondTable > tbody > tr:lt(2)').detach()); $('table#isaSecondTable > thead > tr:eq(0)').append('Links'); $('table#isaSecondTable > thead > tr:eq(0) > th:eq(3)').css('width', '40px'); $('table#isaSecondTable > thead > tr:eq(0) > th:eq(4)').css('width', '230px'); $('table#isaSecondTable > thead > tr:eq(1) > th:eq(1)').css('width', '40px'); $('table#isaSecondTable > thead > tr:eq(1) > th:eq(2)').css('width', '60px'); $('table#isaSecondTable > thead > tr:eq(1) > th:eq(4)').css('width', '40px'); $('table#isaSecondTable > thead > tr:eq(1) > th:eq(5)').css('width', '60px'); // Second Table tbody Adjustment var completedGames = 0; if ($('table#isaSecondTable > tbody > tr:eq(0) > td').length > 1) { $('table#isaSecondTable > tbody > tr').each(function (index) { if ($(this).find('td:eq(6)').text() == '0') { completedGames++; } var gameAppId = $(this).find('td:eq(1) > a').attr('href').split('gameId=')[1]; var gameName = $(this).find('td:eq(1) > a').text(); var newCell = $('').html(htmlLinksGameShort(gameAppId, gameName, steamProfileId64, false)); $(this).append(newCell); $(this).find('td:eq(0)').addClass('isaListGameImage'); $(this).find('td:eq(1)').addClass('isaListTitle'); $(this).find('td:eq(2)').addClass('isaListAchs'); $(this).find('td:eq(3)').addClass('isaListNumber'); $(this).find('td:eq(4)').addClass('isaListNumber'); $(this).find('td:eq(5)').addClass('isaListAchs'); $(this).find('td:eq(6)').addClass('isaListNumber'); $(this).find('td:eq(7)').addClass('isaListNumber'); $(this).find('td:eq(8)').addClass('isaListNumber'); }); $('table#isaTopTable td:eq(3)').append('
' + (completedGames > 0 ? '' + completedGames : '0') + ' completed
'); jsRowHighlight('table#isaSecondTable'); } else { $('table#isaSecondTable > tbody > tr:eq(0) > td:eq(0)').attr('colspan','10'); } } // =================================================================================================================== // Achievement Stats - Game Page / DLC Page if (urlContains('action=games') && urlContains('gameId=') && window.location.search.substring(1).split('&').length == 2) { var titleGameName = ''; $('#isaPageWrap > form > table:eq(0)').attr('id', 'isaSecondTable').removeAttr('style').addClass('isaTable isaWidth100'); if ($('#isaPageWrap > form').length == 3) { // Game Page // Get Info and Elements //alert("sdsadsdf"); var formButton = $('#isaPageWrap > :first-child').detach(); titleGameName = $('#isaPageWrap > :first-child').detach().text(); var featureImage = $('#isaPageWrap > :first-child').detach().find('a:eq(0)'); var dlcElement = $('#isaPageWrap > :first-child').is('p') ? $('#isaPageWrap > :first-child').detach() : false; var ulElement = $('#isaPageWrap > :first-child').detach(); var detailCompletionTime = $('#isaPageWrap > :first-child').detach().text(); var detail = $('#isaPageWrap > :first-child').find('table > caption:eq(0)').detach().text(); var detailAchCount = detail.split(' achievements ')[0]; var detailAchPoints = detail.split('worth of ')[1].split(' points')[0]; var gameId = document.URL.split('gameId=')[1].split('&')[0].split('?')[0].split('#')[0]; var detailDlcUpdated = $('#isaPageWrap > form:eq(0)').next().detach().text(); var detailNextUpdate = $('#isaPageWrap > form:eq(0)').next().detach().text(); $(featureImage).removeAttr('style').find('img').removeAttr('style'); $(formButton).removeAttr('style').addClass('isaSmallButton'); $(formButton).find('input').removeAttr('style').attr('value', 'update dlc').attr('title', 'Queue this Game for DLC Update'); // Make Header Table var isaTopTable = $('' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(featureImage); $(isaTopTable).find('td:eq(1)').text(titleGameName).attr('title', 'Achievements for ' + titleGameName); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(2)').append('
' + detailAchCount + ' achievement'+ (detailAchCount == 1 ? '' : 's') + '
'); $(isaTopTable).find('td:eq(2)').append('
' + detailAchPoints + ' points
'); $(isaTopTable).find('td:eq(3)').html(htmlLinksGameLong(gameId, titleGameName, false, achPeople)); $(isaTopTable).find('td:eq(4)').html('Achievement Stats Controls: ' + htmlFromUl(ulElement)).append(formButton); $(isaTopTable).find('td:eq(5)').append('
Average Time Needed for Completion: ' + detailCompletionTime.replace('average hours needed for completion.', '') + 'hours
'); $(isaTopTable).find('td:eq(5)').append('
DLC Last Updated: ' + detailDlcUpdated.split('updated on')[1] + '
'); $(isaTopTable).find('td:eq(5)').append('
Next Automatic Update: ' + detailNextUpdate.split('update on')[1] + '
'); if (dlcElement !== false) { $(isaTopTable).find('td:eq(0)').attr('rowspan', '6'); $(isaTopTable).find('tr:eq(1)').after(''); $(isaTopTable).find('td:eq(3)').addClass('isaEvenPadding').html(dlcElement.html()); } // Append and Title $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = titleGameName + titleDelim + 'Game'; titleDone = true; } else { // DLC Page // Get Info and Elements titleGameName = $('#isaPageWrap > :first-child').detach().text(); var featureImage = $('#isaPageWrap > :first-child').detach().find('a:eq(0)'); var parentGame = $('#isaPageWrap > :first-child').detach(); var ulElement = $('#isaPageWrap > :first-child').detach(); var detail = $('#isaPageWrap > :first-child').find('table > caption:eq(0)').detach().text(); var detailAchCount = detail.split(' achievements ')[0]; var detailAchPoints = detail.split('worth of ')[1].split(' points')[0]; var gameId = parentGame.find('a').attr('href').split('gameId=')[1].split('&')[0].split('?')[0].split('#')[0]; var dlcId = document.URL.split('gameId=')[1].split('&')[0].split('?')[0].split('#')[0]; // Make Header Table var isaTopTable = $('' + '' + '
'); $(featureImage).removeAttr('style').find('img').removeAttr('style'); $(isaTopTable).find('td:eq(0)').append(featureImage); $(isaTopTable).find('td:eq(1)').append(document.createTextNode(titleGameName)).attr('title', 'Achievements for ' + titleGameName); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(2)').append('
DLC
'); $(isaTopTable).find('td:eq(2)').append('
' + detailAchCount + ' achievement'+ (detailAchCount == 1 ? '' : 's') + '
'); $(isaTopTable).find('td:eq(2)').append('
' + detailAchPoints + ' points
'); $(isaTopTable).find('td:eq(3)').html(parentGame.html()); $(isaTopTable).find('td:eq(4)').html(htmlLinksDLC(gameId, dlcId)); $(isaTopTable).find('td:eq(5)').html('Achievement Stats Controls: ' + htmlFromUl(ulElement)); // Append and Title $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = titleGameName + titleDelim + 'DLC'; titleDone = true; } // More Info to Header Table var brokenCount = $('table#isaSecondTable > tbody > tr.broken').length; if (brokenCount > 0) { $('table#isaTopTable td:eq(2)').append('
' + brokenCount + ' broken achievement' + (brokenCount == 1 ? '' : 's') + '
'); } var seasonalCount = $('table#isaSecondTable > tbody > tr.seasonal').length; if (seasonalCount > 0) { $('table#isaTopTable td:eq(2)').append('
' + seasonalCount + ' seasonal achievement' + (seasonalCount == 1 ? '' : 's') + '
'); } var nonrecurringCount = $('table#isaSecondTable > tbody > tr.nonrecurring').length; if (nonrecurringCount > 0) { $('table#isaTopTable td:eq(2)').append('
' + nonrecurringCount + ' non-recurring achievement' + (nonrecurringCount == 1 ? '' : 's') + '
'); } var temporaryCount = $('table#isaSecondTable > tbody > tr.temporary').length; if (temporaryCount > 0) { $('table#isaTopTable td:eq(2)').append('
' + temporaryCount + ' temporary achievement' + (temporaryCount == 1 ? '' : 's') + '
'); } var monetaryCount = $('table#isaSecondTable > tbody > tr.monetary').length; if (monetaryCount > 0) { $('table#isaTopTable td:eq(2)').append('
' + monetaryCount + ' monetary achievement' + (monetaryCount == 1 ? '' : 's') + '
'); } // Second Table thead Adjustment $('Links').insertAfter($('table#isaSecondTable > thead > tr:eq(0) > th:eq(3)')); $('table#isaSecondTable > thead > tr:eq(0) > th:eq(2)').detach().insertAfter($('table#isaSecondTable > thead > tr:eq(0) > th:eq(3)'));//move crawled th $('table#isaSecondTable > thead > tr:eq(0) > th:eq(1)').remove();// remove desc th $('table#isaSecondTable > thead > tr > th:eq(0)').removeAttr('class'); $('table#isaSecondTable > thead > tr > th:eq(1)').css('width', colWidUnlockPoint + 'px').removeAttr('class').attr('data-sorter', 'isaAstatsPoint'); $('table#isaSecondTable > thead > tr > th:eq(2)').css('width', colWidUnlockLink + 'px').attr('data-sorter', 'false'); $('table#isaSecondTable > thead > tr > th:eq(3)').css('width', '110px').removeAttr('class').attr('data-sorter', 'false'); $('table#isaSecondTable > thead > tr > th:eq(4)').css('width', '96px').removeAttr('class').attr('data-sorter', 'false'); // Second Table tbody Adjustment if ($('table#isaSecondTable > tbody > tr:eq(0) > td').length > 1) { $('table#isaSecondTable > tbody > tr').each(function (index) { //[pic][title/desc][points][links][crawled][report] // data var achTitle = $(this).find('td:eq(1) > a').text(); var achDescr = $(this).find('td:eq(2)').text(); var achPoint = $(this).find('td:eq(4)').text(); var achId = $(this).find('td:eq(5) input').attr('value'); var achTitleHtml = $(this).find('td:eq(1)').html(); // cells $(this).find('td:eq(2)').remove(); $(this).find('td:eq(2)').detach().insertAfter($(this).find('td:eq(2)')); $('').insertAfter($(this).find('td:eq(2)')); // content $(this).find('td:eq(1)').html('

' + achTitleHtml + '

' + achDescr); $(this).find('td:eq(2)').html(htmlAstatsPoint(achPoint)); $(this).find('td:eq(3)').html(htmlLinksAch(titleGameName, achTitle)); $(this).find('td:eq(4)').html($(this).find('td:eq(4)').text().split(' ').join('
')); //styles $(this).find('td:eq(0)').addClass('isaListAchImage'); $(this).find('td:eq(1)').addClass('isaListAchDetail'); $(this).find('td:eq(2)').addClass('isaListBigNumber isaListTextShadow isaListShadow').removeAttr('style'); $(this).find('td:eq(3)').addClass('isaLinkContainerDark'); $(this).find('td:eq(4)').addClass('isaLinkContainerDark'); $(this).find('td:eq(5)').addClass('isaListNumber'); // row styles and content var attr = $(this).attr('class'); if (typeof attr !== typeof undefined && attr !== false) { if (attr == "broken") { $(this).removeClass('broken').addClass('isaAchBroken'); $(this).find('td:eq(1)').append('
Note: This achievement is Broken'); } else if (attr == 'seasonal') { $(this).removeClass('seasonal').addClass('isaAchSeasonal'); $(this).find('td:eq(1)').append('
Note: This achievement is Seasonal'); } else if (attr == 'nonrecurring') { $(this).removeClass('nonrecurring').addClass('isaAchNonRecurring'); $(this).find('td:eq(1)').append('
Note: This achievement is Non-recurring'); } else if (attr == 'temporary') { $(this).removeClass('temporary').addClass('isaAchTemporary'); $(this).find('td:eq(1)').append('
Note: This achievement is Temporary'); } else if (attr == 'monetary') { $(this).removeClass('monetary').addClass('isaAchMonetary'); $(this).find('td:eq(1)').append('
Note: This achievement is Monetary'); } } }); jsRowHighlight('table#isaSecondTable'); $('table#isaSecondTable').tablesorter({ headers: { 0: { sortInitialOrder: 'asc' }, 1: { sortInitialOrder: 'asc' } } }); } } // =================================================================================================================== // Achievement Stats - Achievement Page if (urlContains('action=games') && urlContains('achievementId=') && window.location.search.substring(1).split('&').length == 2) { // Get Info and Elements var featureImage = $('#isaPageWrap > :nth-child(2)').detach().find('a:eq(0)'); var iconsAndText = $('#isaPageWrap > :nth-child(2)').detach(); var picNo = $(iconsAndText).find(':first-child').detach().removeAttr('style'); var picYes = $(iconsAndText).find(':first-child').detach().removeAttr('style'); var achText = $(iconsAndText).html().split('
'); var achTitle = achText[0].replace('', '').replace('', ''); var achDet = achText[1]; var achValue = achText[2].replace('(', '').replace(')', '').split('poi')[0].trim(); var markedAs = $('#isaPageWrap > :nth-child(2)').is('form') ? $('#isaPageWrap > :nth-child(2)').detach() : false; var markedAsCalender = $('#isaPageWrap > :nth-child(2)').is('p') ? $('#isaPageWrap > :nth-child(2)').detach() : false; var ul = $('#isaPageWrap > :nth-child(2)').detach(); var gameId = $(featureImage).attr('href').split('gameId=')[1].split('&')[0].split('?')[0].split('#')[0]; var gameName = $(featureImage).attr('title'); $(featureImage).removeAttr('style').find('img').removeAttr('style'); $('#isaPageWrap > table:eq(0)').attr('id', 'isaSecondTable').addClass('isaTable'); // Make Header Table var isaTopTable = $('' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(picYes); $(isaTopTable).find('td:eq(1)').append(picNo); $(isaTopTable).find('td:eq(2)').html(achTitle + ' (' + htmlAstatsPoint(achValue) + ' points)').attr('title', 'Achievement'); $(isaTopTable).find('td:eq(2)').prepend(settingsButton); $(isaTopTable).find('td:eq(3)').append(featureImage); $(isaTopTable).find('td:eq(4)').text(achDet); $(isaTopTable).find('td:eq(5)').html(htmlLinksAch(gameName, achTitle, true)); $(isaTopTable).find('td:eq(6)').html('Achievement Stats Controls: ' + htmlFromUl(ul)); $(isaTopTable).find('td:eq(7)').html(htmlLinksGameLong(gameId, gameName, false, achPeople)); if (markedAs !== false) { markedAs = $(markedAs).find('ul > li').text().trim(); $(isaTopTable).find('td:eq(4)').append('
'); if (markedAs == 'Broken') { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as Broken.'); } else if (markedAs == 'Seasonal') { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as Seasonal.'); } else if (markedAs == 'Non-recurring') { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as Non-Recurring.'); } else if (markedAs == 'Temporary') { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as Temporary.'); } else if (markedAs == 'Monetary') { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as Monetary.'); } else { $(isaTopTable).find('td:eq(4)').append('Note: This achievement is marked as ' + markedAs + '.'); } if (markedAsCalender !== false) { $(isaTopTable).find('td:eq(4)').append('
'); $(isaTopTable).find('td:eq(4)').append($(markedAsCalender).children().not('br')); } } // Append and Title $('#isaPageWrap > :first-child').after('
'); $('#isaPageWrap > :first-child').after(isaTopTable); document.title = achTitle + titleDelim + 'Achievement'; titleDone = true; } // =================================================================================================================== // Achievement Stats - Player Unlock History Page if (urlContains('action=profile') && urlContains('playerId=') && urlContains('mode=history') && urlContains('gameId=') && window.location.search.substring(1).split('&').length == 4) { $('#isaPageWrap > table:eq(0)').attr('id', 'isaSecondTable').addClass('isaTable isaWidth100'); $('#isaPageWrap > table:eq(1)').attr('id', 'isaLockedTable'); var thereIsUnlocked = $('table#isaSecondTable > tbody > tr:eq(1) > td').length != 1; var thereIsLocked = $('table#isaLockedTable > tbody > tr:eq(1) > td').length != 1; if (thereIsUnlocked || thereIsLocked) { // Get Info and Elements var featureImage = thereIsUnlocked ? $('#isaPageWrap > table:eq(0) > tbody > tr:eq(1) > td:eq(0) > :first-child') : $('table#isaLockedTable > tbody > tr:eq(1) > td:eq(0) > :first-child'); var titleGameName = $(featureImage).find('img:eq(0)').attr('title'); var gameAppId = $(featureImage).attr('href').split('gameId=')[1]; var formButton = $('#isaPageWrap > :first-child').detach(); // put this somewhere var titleCellHtml = $('#isaPageWrap > :first-child').detach(); var playTime = $('#isaPageWrap > :first-child').detach().text().split(' playing')[0]; $('#isaPageWrap > h3:eq(0)').remove(); var rssHistoryButton = $(titleCellHtml).find('a:eq(1)').removeAttr('style').css({ 'dislay': 'inline-block', 'margin-left':'15px' });//.css({ 'float':'right' }); var playerName = $(titleCellHtml).find('a:eq(0)').text(); var playerId64 = $(titleCellHtml).find('a:eq(0)').attr('href').split('playerId=')[1]; pushPeople(playerName, playerId64, false); $(featureImage).removeAttr('style').find('img').removeAttr('style'); // Make Header Table var isaTopTable = $('' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(featureImage).append(formButton); $(isaTopTable).find('td:eq(1)').text(titleGameName).append(rssHistoryButton); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); var titleAppend = $('
' + playerName + '\'s Unlock History
'); $(titleAppend).insertBefore(rssHistoryButton); $(titleAppend).click(function () { $('table#isaTopTable tr:eq(3)').toggleClass('isaHideCell'); }); $(titleAppend).hover(function () { $(this).css({ 'text-decoration': 'underline', 'color': '#00c6ff' }); }, function () { $(this).removeAttr('style'); }); $(isaTopTable).find('td:eq(3)').html(htmlLinksGameLong(gameAppId, titleGameName, false, achPeople)); $(isaTopTable).find('td:eq(4)').html(htmlLinksProfile(playerId64)); // Append and Title $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = playerName + titleDelim + titleGameName + titleDelim + 'Unlock History'; titleDone = true; // Adjust Second Table $('table#isaSecondTable').prepend(''); $('table#isaSecondTable > thead').append($('table#isaSecondTable > tbody > tr:eq(0)').detach()); $('table#isaSecondTable > thead > tr > th:eq(0)').remove(); $('table#isaSecondTable > thead > tr').append('Links'); $('table#isaSecondTable > thead > tr > th:eq(1)').css('width', colWidUnlockPoint + 'px').attr('data-sorter', 'isaAstatsPoint'); $('table#isaSecondTable > thead > tr > th:eq(2)').css('width', colWidUnlockDate + 'px').attr('data-sorter', 'isaDate'); var achCount = 0; var achLockd = 0; if (thereIsUnlocked) { var rowsUnlocked = $('table#isaSecondTable > tbody > tr'); for (var i = 0, l = rowsUnlocked.length - 1; i < l; i += 2) { $(rowsUnlocked[i]).find('td:eq(0)').remove(); // game image $(rowsUnlocked[i]).find('td:eq(0)').addClass('isaListAchImage').removeAttr('rowspan'); //ach icon var achTitle = $(rowsUnlocked[i]).find('td:eq(1)').text(); var achDetail = $(rowsUnlocked[i + 1]).find('td:eq(0)').text(); $(rowsUnlocked[i]).find('td:eq(1)').addClass('isaListAchDetail').html('

' + achTitle + '

' + achDetail); $(rowsUnlocked[i]).find('td:eq(2)').addClass('isaListBigNumber isaListShadow isaListTextShadow').removeAttr('rowspan').removeAttr('style'); $(rowsUnlocked[i]).find('td:eq(2)').html(htmlAstatsPoint($(rowsUnlocked[i]).find('td:eq(2)').text())); $(rowsUnlocked[i]).find('td:eq(3)').addClass('isaListNumber isaListShadow isaListAchUnlocked').removeAttr('rowspan'); $(rowsUnlocked[i]).append($('').html(htmlLinksAch(titleGameName, achTitle))); var achTime = $(rowsUnlocked[i]).find('td:eq(3)').text().trim(); if (achTime == '') { $(rowsUnlocked[i]).find('td:eq(3)').html('Unlocked Pre-Tracking'); } else { var achTimeParts1 = $(rowsUnlocked[i]).find('td:eq(3)').text().split(' '); var achTimeParts2 = achTimeParts1[0].split('/'); $(rowsUnlocked[i]).find('td:eq(3)').html('' + achTimeParts2[2] + '/' + achTimeParts2[1] + '/' + achTimeParts2[0] + ' ' + achTimeParts1[1] + ''); } achCount++; } $('table#isaSecondTable > tbody > tr:odd').remove(); } else { $('table#isaSecondTable > tbody > tr:eq(0)').remove(); } if (thereIsLocked) { var rowsLocked = $('table#isaLockedTable > tbody > tr'); for (var i = 1, l = rowsLocked.length - 1; i < l; i += 2) { var achTitle = $(rowsLocked[i]).find('td:eq(2)').text(); var achDetail = $(rowsLocked[i + 1]).find('td:eq(0)').text(); $(rowsLocked[i]).find('td:eq(0)').remove(); //game pic $(rowsLocked[i]).find('td:eq(0)').addClass('isaListAchImage').removeAttr('rowspan'); // ach icon $(rowsLocked[i]).find('td:eq(1)').addClass('isaListAchDetail'); $(rowsLocked[i]).find('td:eq(1)').html('

' + achTitle + '

' + achDetail); $(rowsLocked[i]).find('td:eq(2)').addClass('isaListBigNumber isaListShadow isaListTextShadow').removeAttr('rowspan').removeAttr('style'); $(rowsLocked[i]).find('td:eq(2)').html(htmlAstatsPoint($(rowsLocked[i]).find('td:eq(2)').text())); $(rowsLocked[i]).append('Locked'); $(rowsLocked[i]).append($('').html(htmlLinksAch(titleGameName, achTitle))); $('table#isaSecondTable > tbody').append(rowsLocked[i]); achLockd++; } } $('table#isaLockedTable').remove(); domDateColumn($('table#isaSecondTable > tbody > tr'), 3, $('table#isaTopTable td:eq(2)')); jsRowHighlight('table#isaSecondTable'); // More Info to Header Table var achTotal = achCount + achLockd; var percentStr = achCount + ' / ' + achTotal + ' (' + (Math.round((achCount * 10000) / achTotal) / 100) + '%) completed'; $('table#isaTopTable td:eq(2)').prepend('
' + playTime + '
'); $('table#isaTopTable td:eq(2)').prepend('
' + htmlPercentStr(percentStr, achCount / achTotal) + '
'); $('table#isaTopTable td:eq(2)').prepend('
' + achTotal + ' achievements
'); // TableSort Second Table $('table#isaSecondTable').tablesorter({ headers: { 0: { sortInitialOrder: 'asc' }, 1: { sortInitialOrder: 'asc' }, 2: { sortInitialOrder: 'asc' } } }); } else { $('#isaPageWrap > h2:eq(0)').addClass('isaPageTitleFirst'); $('#isaPageWrap > h3:eq(0)').remove(); $('table#isaSecondTable > tbody > tr:eq(0) > th:eq(0)').remove(); $('table#isaSecondTable > tbody > tr:eq(1) > td:eq(0)').attr('colspan', '4'); $('table#isaLockedTable').remove(); } } // =================================================================================================================== // Title if (titleDone === false) { var newTitle = document.title; newTitle = newTitle.replace('Achievement Stats » ', '').replace('Achievement Stats » ', ''); newTitle = newTitle.isaReplaceAll(' » ', titleDelim).isaReplaceAll(' » ', titleDelim); document.title = newTitle; } } // ======================================================================================================================= if (urlContains('steamcommunity.com')){ var loggedInSteam64 = false; var steamLoggedName = ''; if($('script:contains("g_steamID")').length > 0){ var tempStr = $('script:contains("g_steamID"):eq(0)').text().split('g_steamID = "'); if(tempStr.length == 2){ loggedInSteam64 = tempStr[1].split('"')[0]; } } var steamLoggedIn = loggedInSteam64 != false; if(steamLoggedIn){ var str = $('a.menuitem.supernav.username'); if (str.length > 0){ str = (str.length == 1) ? $(str).first() : $(str).eq(1); steamLoggedName = $(str).text(); var tempUrl = $(str).attr('href').split('/home')[0]; if (tempUrl.indexOf('/id/') != -1) { pushPeople(steamLoggedName,loggedInSteam64,tempUrl.split('/id/')[1]); }else{ pushPeople(steamLoggedName,loggedInSteam64,false); } }else{ steamLoggedIn = false; } } // =================================================================================================================== // Global Achievements Page - Can have Player Stats on it if (urlContains('steamcommunity.com/stats/') || urlContains('steamcommunity.com//stats/')) { $('div.pagecontent:eq(0)').children().slice(0, 2).wrapAll('
'); // Get Info and Elements var titleGameName = $('#isaPageWrap > :first-child > div > h1:eq(0)').text(); var featureImage = $('#isaPageWrap > :first-child > div > div > div > a:eq(0)'); $('#isaPageWrap > :first-child').remove(); $(featureImage).removeAttr('style').find('img').removeAttr('style'); var gameId = $(featureImage).attr('href').split('/app/')[1].split('/')[0].split('?')[0]; var steamUrlBit = document.URL.split('/stats/')[1].split('/')[0].split('?')[0]; var steamLoggedGameOwned = $('#headerContentLeft').text().split('do not own this').length != 2; var steamLoggedGotAchData = $('div.compareImg').length > 0; // Make Header Table var isaTopTable = $('' + '' + ''+ '
'); $(isaTopTable).find('td:eq(0)').append(featureImage); $(isaTopTable).find('td:eq(1)').text(titleGameName).attr('title', 'Global Achievement Stats for ' + titleGameName); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(3)').html(htmlLinksGameLong(gameId, titleGameName, steamUrlBit, achPeople)); // Make Second Table var isaSecondTable = $('' + '' + '' + '
AchievementGlobal PercentUnlockedLinks
'); // Append and Title $('#isaPageWrap').prepend(isaSecondTable); $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = titleGameName + titleDelim + ((steamLoggedGotAchData) ? 'Me' + titleDelim + 'Unlock History' : 'Game'); titleDone = true; // Tabs Cell var tabs = $('div#tabs > div.tab').not('#achievementsTabOff').not('#achievementsTabOn'); if(tabs.length > 0){ $(isaTopTable).find('tr:eq(4)').removeClass('isaHideCell'); var aHtml = []; $(tabs).find('a').each(function () { aHtml.push($(this).parent().html()); }); var aHtmlJoined = 'Other Tabs: ' + aHtml.join(linkDelim); $(isaTopTable).find('td:eq(5)').html(aHtmlJoined); } // Second Table Data var achievements = $('div.achieveRow'); var achCount = 0; var achTotal = $(achievements).length; if ($(achievements).length > 0) { $.each(achievements, function (index, value) { var newRow = $('' + ''); var image = $(value).find('div.achieveImgHolder > img:eq(0)'); var title = $(value).find('div.achieveTxtHolder > div.achieveTxt > h3:eq(0)').text(); var description = $(value).find('div.achieveTxtHolder > div.achieveTxt > h5:eq(0)').text(); var percent = $(value).find('div.achieveTxtHolder > div.achievePercent:eq(0)').text(); $(newRow).find('td:eq(0)').append(image); $(newRow).find('td:eq(1)').html('

' + title + '

' + description); $(newRow).find('td:eq(4)').html(htmlLinksAch(titleGameName, title, false, gameId)); domPercentCell($(newRow).find('td:eq(2)'), percent); var compare = $(value).find('div.compareImg'); if ($(compare).length > 0) { if ($(compare).find('img:eq(0)').attr('src') == $(image).attr('src')) { $(newRow).find('td:eq(3)').addClass('isaListAchUnlocked').html('Unlocked'); achCount++; } else { $(newRow).find('td:eq(3)').html('Locked'); } } else if (!steamLoggedGameOwned) { $(newRow).find('td:eq(3)').addClass('isaBlackedOut').html('You don\'t own this game'); } $('table#isaSecondTable > tbody:eq(0)').append(newRow); }); if (!steamLoggedIn) { $('table#isaSecondTable > tbody:eq(0) tr > td:nth-child(4)').addClass('isaBlackedOut').html('Not Logged In'); } } else { $('table#isaSecondTable > tbody:eq(0)').append('
No Achievements
'); } $('#isaPageWrap > :nth-child(4)').remove(); // remove achievement data div once all data has been obtained jsRowHighlight('table#isaSecondTable'); // More Info to Header Table and Title Append JS $('table#isaTopTable td:eq(2)').append('
' + achTotal + ' achievements
'); if (steamLoggedGotAchData) { var steamLoggedPercent = Math.round((achCount * 10000) / achTotal) / 100; var steamLoggedPercentStr = achCount + ' / ' + achTotal + ' (' + steamLoggedPercent + '%) completed'; $('table#isaTopTable td:eq(2)').append('
' + htmlPercentStr(steamLoggedPercentStr, achCount / achTotal) + '
'); var titleAppend = $('
My Unlock History
'); $('table#isaTopTable td:eq(1)').append(titleAppend); if (steamLoggedIn) { $('table#isaTopTable td:eq(4)').html(htmlLinksProfile(loggedInSteam64)); $(titleAppend).click(function () { $('table#isaTopTable tr:eq(3)').toggleClass('isaHideCell'); }); $(titleAppend).hover(function () { $(this).css({ 'text-decoration': 'underline', 'color': '#00c6ff' }); }, function () { $(this).removeAttr('style'); }); } } // TableSort $('table#isaSecondTable').tablesorter({ sortInitialOrder: "asc" }); // AJAX: Player Unlock Dates if (steamLoggedGotAchData && steamLoggedIn) { $.ajax({ type: 'GET', url: 'http://steamcommunity.com/profiles/' + loggedInSteam64 + '/stats/' + steamUrlBit + '/achievements?xml=1', dataType: 'xml', success: function (data) { var visibilityState = $(data).find('playerstats > visibilityState'); if (visibilityState.length > 0 && $(visibilityState).text() == '3') { //var hoursStat = $(data).find('playerstats > stats > hoursPlayed').text(); //$('table#isaTopTable td:eq(2)').append('
' + hoursStat + ' hours
'); $(data).find('playerstats > achievements > achievement').each(function () { var achName = $(this).find('name').text(); var h3 = $('table#isaSecondTable > tbody > tr > td:nth-child(2) > h3').filter(function() { return achName == $(this).text(); }); if ($(this).attr('closed') == '1') { var timeUnlocked = $(this).find('unlockTimestamp'); if (h3) { if (timeUnlocked) { $(h3).parent().next().next().html('' + new Date($(timeUnlocked).text() * 1000).isaToString() + ''); } else { $(h3).parent().next().next().html('Unlocked Pre-Tracking'); } } } else { //$(h3).parent().next().next().removeClass('isaListAchUnlocked').html('Locked'); // maybe xml file isnt updated yet? why show achievement as "locked" when its unlocked... } }); domDateColumn($('table#isaSecondTable > tbody > tr'), 3, $('table#isaTopTable td:eq(2)')); $('table#isaSecondTable').trigger('updateRows'); } }, error: function () { }, timeout: 5000 }); } } // =================================================================================================================== // Player Achievement Unlock History for a Game if (((urlContains('steamcommunity.com/id/') || urlContains('steamcommunity.com//id/')) && urlContains('/stats/')) || (urlContains('steamcommunity.com/profiles/') || urlContains('steamcommunity.com//profiles/')) && urlContains('/stats/')) { // Get Info and Elements var funnyPage = ($('div.pagecontent:eq(0)').length == 0); var comparePage = (urlContains('/compare') && steamLoggedIn && $('a:contains("Remove comparison view")').length > 0); if(funnyPage === true){ $('#BG_top,#BG_bottom').wrapAll('
'); var titleGameName = $('#isaPageWrap > :first-child > h2:eq(0)').text().isaRemoveEnd(' Stats'); var featureImage = $('#isaPageWrap > :first-child > div > div > div > a:eq(0)'); var titleProfileName = $('#isaPageWrap > :first-child > h1:eq(0)').text(); if(comparePage){ titleProfileName = $('#isaPageWrap > :first-child > h1:eq(0)').clone().find('span').remove().end().text(); titleProfileName = titleProfileName.trim().isaRemoveEnd(' vs'); } var profileUrl = $('#isaPageWrap > :first-child > div > div > div > a:eq(1)').attr('href'); var profileUrlType = (profileUrl.indexOf('/profiles/') != -1); var profileUrlBit = profileUrlType ? profileUrl.split('/profiles/')[1] : profileUrl.split('/id/')[1]; $('#isaPageWrap > :first-child').remove(); var steamAppId = $(featureImage).attr('href').split('/app/')[1].split('/')[0].split('?')[0].split('#')[0]; var steamUrlBit = urlContains('/stats/appid/') ? document.URL.split('/stats/appid/')[1].split('/')[0].split('?')[0] : document.URL.split('/stats/')[1].split('/')[0].split('?')[0]; $(featureImage).removeAttr('style').find('img').removeAttr('style'); }else{ $('div.pagecontent:eq(0)').children().slice(0, 2).wrapAll('
'); var titleGameName = $('#isaPageWrap > :first-child > div > div > a > span:eq(1)').text().isaRemoveEnd(' Stats'); var featureImage = $('#isaPageWrap > :first-child > div > div > div > a:eq(0)'); var titleProfileName = $('#isaPageWrap > :first-child > div > div > span> a:eq(0)').text(); var profileUrl = $('#isaPageWrap > :first-child > div > div > span> a:eq(0)').attr('href'); var profileUrlType = (profileUrl.indexOf('/profiles/') != -1); var profileUrlBit = profileUrlType ? profileUrl.split('/profiles/')[1] : profileUrl.split('/id/')[1]; $('#isaPageWrap > :first-child').remove(); var steamAppId = $(featureImage).attr('href').split('/app/')[1].split('/')[0].split('?')[0].split('#')[0]; var steamUrlBit = urlContains('/stats/appid/') ? document.URL.split('/stats/appid/')[1].split('/')[0].split('?')[0] : document.URL.split('/stats/')[1].split('/')[0].split('?')[0]; $(featureImage).removeAttr('style').find('img').removeAttr('style'); } if (profileUrlType) { pushPeople(titleProfileName,profileUrlBit,false); }else{ pushPeople(titleProfileName,false,profileUrlBit); } if (comparePage){ var achSummary = $('#topSummaryAchievements').text().split(' of '); var achCount = achSummary[0]; var achTotal = achSummary[1].split(' (')[0]; var achCount2 = achSummary[1].split('earned:')[1]; var achTotal2 = achSummary[2].split(' (')[0]; var avatarLeft = $('div.topAvatarsLeft > div > div > a:eq(0)'); var avatarRight = $('div.topAvatarsRight > div > div > a:eq(0)'); var compareRemovalLink = $('a:contains("Remove comparison view"):eq(0)'); $('div.topAvatarsLeft').remove(); $('div.topAvatarsRight').remove(); // Make Header Table - Apply Some Data var isaTopTable = $('' + '' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(avatarLeft); $(isaTopTable).find('td:eq(1)').append(titleGameName + ' - ' + titleProfileName + ' vs. ' + steamLoggedName + ' (me) - Unlock History Compared - '); $(isaTopTable).find('td:eq(1)').append(compareRemovalLink); $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(2)').append(avatarRight); $(isaTopTable).find('td:eq(3)').append('
' + achTotal + ' achievements
'); $(isaTopTable).find('td:eq(4)').html(htmlLinksGameLong(steamAppId, titleGameName, steamUrlBit, achPeople)); var percent = Math.round((achCount * 10000) / achTotal) / 100; var percentStr = titleProfileName + ': ' + achCount + ' / ' + achTotal + ' (' + percent + '%) completed'; $(isaTopTable).find('td:eq(3)').append('
' + htmlPercentStr(percentStr, achCount / achTotal) + '
'); var percent2 = Math.round((achCount2 * 10000) / achTotal2) / 100; var percentStr2 = steamLoggedName + ' (me): ' + achCount2 + ' / ' + achTotal2 + ' (' + percent2 + '%) completed'; $(isaTopTable).find('td:eq(3)').append('
' + htmlPercentStr(percentStr2, achCount2 / achTotal2) + '
'); if ($('#personalAchieve div.achieveImgHolder').length < achTotal) { $(isaTopTable).find('td:eq(3) > div.isaStat:eq(0)').append(' (' + (achTotal - $('#personalAchieve div.achieveImgHolder').length) + ' hidden)'); } // Make Second Table var isaSecondTable = $('' + '' + '' + '' + '' + '
AchievementGlobal Percent'+titleProfileName+' Unlocked'+steamLoggedName+' (me) UnlockedLinks
'); // Append and Title $('#isaPageWrap').prepend(isaSecondTable); $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = titleGameName + titleDelim + titleProfileName + titleDelim + 'Unlock History'; titleDone = true; // Tabs Cell var tabs = $('div#tabs > div.tab').not( "#personalAchieveTabOff" ).not( "#personalAchieveTabOn" ); if(tabs.length > 0){ $(isaTopTable).find('tr:eq(5)').removeClass('isaHideCell'); var aHtml = []; $(tabs).find('a').each(function () { aHtml.push($(this).parent().html()); }); var aHtmlJoined = 'Other Tabs: ' + aHtml.join(linkDelim); $(isaTopTable).find('td:eq(6)').html(aHtmlJoined); } // Second Table Data if ($('#personalAchieve div.achieveImgHolder').length > 0) { var achChildren = $('#personalAchieve div.achieveRow'); for (var i = 0, k = achChildren.length; i < k; i++) { var achChild = achChildren[i]; var newRow = $('' + ''); var image = $(achChild).find('div:eq(0) img:eq(0)'); var details = $(achChild).find('div:eq(1)'); var unlocked = $(details).find('div.achieveUnlockTime'); var title = $(details).find('div.achieveTxt > h3:eq(0)').text(); var description = $(details).find('div.achieveTxt > h5:eq(0)').text(); var progress = $(details).find('div.achievementProgressBar'); $(newRow).find('td:eq(0)').append(image); $(newRow).find('td:eq(1)').html('

' + title + '

' + description); $(newRow).find('td:eq(5)').html(htmlLinksAch(titleGameName, title, false, steamAppId)); if ($(progress).length > 0) { progress = $(progress).text(); $(newRow).find('td:eq(1)').append('
'); $(newRow).find('td:eq(1)').append(progress); } $(newRow).find('td:eq(2)').text('-');//percent cell if (unlocked.length > 0) { var unlockedParts = $(unlocked).first().html().split('
'); var unlocked1 = unlockedParts[0].trim(); if(unlocked1.indexOf('Unlocked') != -1){ unlocked1 = textDateFixSteam(unlocked1); $(newRow).find('td:eq(3)').append('' + unlocked1 + ''); $(newRow).find('td:eq(3)').addClass('isaListAchUnlocked'); }else{ $(newRow).find('td:eq(3)').append('Locked'); } var unlocked2 = unlockedParts[1].trim(); if(unlocked2.indexOf('Unlocked') != -1){ unlocked2 = $(unlocked2).text(); unlocked2 = textDateFixSteam(unlocked2); $(newRow).find('td:eq(4)').append('' + unlocked2 + ''); $(newRow).find('td:eq(4)').addClass('isaListAchUnlocked'); }else{ $(newRow).find('td:eq(4)').append('Locked'); } } else { $(newRow).find('td:eq(3)').append('Locked'); $(newRow).find('td:eq(4)').append('Locked'); } $('table#isaSecondTable > tbody:eq(0)').append(newRow); } } else { $('table#isaSecondTable > tbody:eq(0)').append('
No Achievements
'); } $('#isaPageWrap > :nth-child(4)').remove(); jsRowHighlight('table#isaSecondTable'); // TableSort $('table#isaSecondTable').tablesorter({ headers: { 0: { sortInitialOrder: 'asc' }, 1: { sortInitialOrder: 'desc' }, 2: { sortInitialOrder: 'asc' }, 3: { sortInitialOrder: 'asc' } } }); // Adjust Second Table - Date Column domDateColumn($('table#isaSecondTable > tbody > tr'), 3); domDateColumn($('table#isaSecondTable > tbody > tr'), 4); // AJAX: Global Percent Cells $.ajax({ type: 'GET', url: 'http://steamcommunity.com/stats/' + steamUrlBit + '/achievements', dataType: 'html', success: function (data) { $(data).find('#mainContents > div.achieveRow').each(function () { var percent = $(this).find('div.achievePercent').text(); var achName = $(this).find('div.achieveTxt > h3').text().trim(); var h3 = $('table#isaSecondTable > tbody > tr > td:nth-child(2) > h3').filter(function() { return achName == $(this).text().trim(); }); if (h3) { domPercentCell($(h3).parent().next(), percent); } }); $('table#isaSecondTable').trigger('updateRows'); }, error: function () { }, timeout: 5000 }); }else{ var achSummary = $('#topSummaryAchievements').text().split(' of '); var achCount = achSummary[0]; var achTotal = achSummary[1].split(' (')[0]; // Make Header Table - Apply Some Data var isaTopTable = $('' + '' + '' + '
'); $(isaTopTable).find('td:eq(0)').append(featureImage); $(isaTopTable).find('td:eq(1)').append(titleGameName + '
' + titleProfileName + '\'s Unlock History
'); if (urlContains('/compare')){ if (steamLoggedIn){ $(isaTopTable).find('td:eq(1)').append(' - You cannot compare to yourself'); }else{ $(isaTopTable).find('td:eq(1)').append(' - You must be logged in to compare'); } } $(isaTopTable).find('td:eq(1)').prepend(settingsButton); $(isaTopTable).find('td:eq(3)').html(htmlLinksGameLong(steamAppId, titleGameName, steamUrlBit, achPeople)); $(isaTopTable).find('td:eq(2)').append('
' + achTotal + ' achievements
'); var percent = Math.round((achCount * 10000) / achTotal) / 100; var percentStr = achCount + ' / ' + achTotal + ' (' + percent + '%) completed'; $(isaTopTable).find('td:eq(2)').append('
' + htmlPercentStr(percentStr, achCount / achTotal) + '
'); if ($('#personalAchieve div.achieveImgHolder').length < achTotal) { $(isaTopTable).find('td:eq(2) > div.isaStat:eq(0)').append(' (' + (achTotal - $('#personalAchieve div.achieveImgHolder').length) + ' hidden)'); } // Make Second Table var isaSecondTable = $('' + '' + '' + '' + '
AchievementGlobal PercentUnlockedLinks
'); // Append and Title $('#isaPageWrap').prepend(isaSecondTable); $('#isaPageWrap').prepend('
'); $('#isaPageWrap').prepend(isaTopTable); document.title = titleGameName + titleDelim + titleProfileName + titleDelim + 'Unlock History'; titleDone = true; // Tabs Cell var tabs = $('div#tabs > div.tab').not( "#personalAchieveTabOff" ).not( "#personalAchieveTabOn" ); if(tabs.length > 0){ $(isaTopTable).find('tr:eq(4)').removeClass('isaHideCell'); var aHtml = []; $(tabs).find('a').each(function () { aHtml.push($(this).parent().html()); }); var aHtmlJoined = 'Other Tabs: ' + aHtml.join(linkDelim); $(isaTopTable).find('td:eq(5)').html(aHtmlJoined); } // Second Table Data if ($('#personalAchieve div.achieveImgHolder').length > 0) { var achChildren = $('#personalAchieve').children(); var doingUnlocked = $('#personalAchieve > br').length == 3; var brFound = false; for (var i = 0, k = achChildren.length; i < k; i++) { var achChild = achChildren[i]; if ($(achChild).is('div') && $(achChild).find('.achieveHiddenBox').length == 0) { var newRow = $('' + ''); var image = $(achChild).find('div:eq(0) img:eq(0)'); var details = $(achChild).find('div:eq(1)'); var unlocked = $(details).find('div.achieveUnlockTime'); var title = $(details).find('div.achieveTxt > h3:eq(0)').text(); var description = $(details).find('div.achieveTxt > h5:eq(0)').text(); var progress = $(details).find('div.achievementProgressBar'); $(newRow).find('td:eq(0)').append(image); $(newRow).find('td:eq(1)').html('

' + title + '

' + description); $(newRow).find('td:eq(4)').html(htmlLinksAch(titleGameName, title, false, steamAppId)); if ($(progress).length > 0) { progress = $(progress).text(); $(newRow).find('td:eq(1)').append('
'); $(newRow).find('td:eq(1)').append(htmlSteamAchProgress(progress)); } $(newRow).find('td:eq(2)').text('-');//percent cell if (unlocked.length > 0) { unlocked = $(unlocked).text(); unlocked = textDateFixSteam(unlocked); $(newRow).find('td:eq(3)').append('' + unlocked + ''); $(newRow).find('td:eq(3)').addClass('isaListAchUnlocked'); } else { if (doingUnlocked && !brFound) { $(newRow).find('td:eq(3)').addClass('isaListAchUnlocked'); $(newRow).find('td:eq(3)').append('Unlocked Pre-Tracking'); } else { $(newRow).find('td:eq(3)').append('Locked'); } } $('table#isaSecondTable > tbody:eq(0)').append(newRow); } else if (doingUnlocked) { if ($(achChild).is('br')) { brFound = true; } } } } else { $('table#isaSecondTable > tbody:eq(0)').append('
No Achievements
'); } $('#isaPageWrap > :nth-child(4)').remove(); jsRowHighlight('table#isaSecondTable'); // TableSort $('table#isaSecondTable').tablesorter({ headers: { 0: { sortInitialOrder: 'asc' }, 1: { sortInitialOrder: 'desc' }, 2: { sortInitialOrder: 'asc' } } }); // Adjust Second Table - Date Column domDateColumn($('table#isaSecondTable > tbody > tr'), 3, $('table#isaTopTable td:eq(2)')); // AJAX: Global Percent Cells $.ajax({ type: 'GET', url: 'http://steamcommunity.com/stats/' + steamUrlBit + '/achievements', dataType: 'html', success: function (data) { $(data).find('#mainContents > div.achieveRow').each(function () { var percent = $(this).find('div.achievePercent').text(); var achName = $(this).find('div.achieveTxt > h3').text().trim(); var h3 = $('table#isaSecondTable > tbody > tr > td:nth-child(2) > h3').filter(function() { return achName == $(this).text().trim(); }); if (h3) { domPercentCell($(h3).parent().next(), percent); } }); $('table#isaSecondTable').trigger('updateRows'); }, error: function () { }, timeout: 5000 }); // AJAX: Get Steam 64 ID if (profileUrlType) { $('table#isaTopTable td:eq(4)').html(htmlLinksProfile(profileUrlBit)); var titleAppend = $(isaTopTable).find('div.isaTitleAppend:eq(0)').addClass('isaActionDiv'); $(titleAppend).click(function () { $('table#isaTopTable tr:eq(3)').toggleClass('isaHideCell'); }); $(titleAppend).hover(function () { $(this).css({ 'text-decoration': 'underline', 'color': '#00c6ff' }); }, function () { $(this).removeAttr('style'); }); if (meSteamId !== false && profileUrlBit != meSteamId) { pushPeople(titleProfileName,profileUrlBit,false); $('table#isaTopTable td:eq(3)').html(htmlLinksGameLong(steamAppId, titleGameName, steamUrlBit, achPeople)); } } else { $.ajax({ type: 'GET', url: 'http://steamcommunity.com/id/' + profileUrlBit + '/?xml=1', dataType: 'xml', success: function (data) { var steamID64 = $(data).find('profile > steamID64').text(); $('table#isaTopTable td:eq(4)').html(htmlLinksProfile(steamID64)); var titleAppend = $('table#isaTopTable div.isaTitleAppend:eq(0)').addClass('isaActionDiv'); $(titleAppend).click(function () { $('table#isaTopTable tr:eq(3)').toggleClass('isaHideCell'); }); $(titleAppend).hover(function () { $(this).css({ 'text-decoration': 'underline', 'color': '#00c6ff' }); }, function () { $(this).removeAttr('style'); }); if (meSteamId !== false && steamID64 != meSteamId) { pushPeople(titleProfileName,steamID64,profileUrlBit); $('table#isaTopTable td:eq(3)').html(htmlLinksGameLong(steamAppId, titleGameName, steamUrlBit, achPeople)); } }, error: function () { }, timeout: 5000 }); } } } // =================================================================================================================== // Title if (!titleDone) { document.title = document.title.replace('Steam Community :: ', '').replace(' :: ', titleDelim); } } // ======================================================================================================================= // End Brace for document.ready function });