NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name MajorGeeks Freeware Only
// @description Improves MajorGeeks.com by removing programs with license shareware, adding auto sort options and blocking advertisement.
// @author tumpio
// @oujs:author tumpio
// @namespace tumpio@sci.fi
// @homepageURL https://openuserjs.org/scripts/tumpio/MajorGeeks_Freeware_Only
// @supportURL https://github.com/tumpio/gmscripts
// @icon https://raw.githubusercontent.com/tumpio/gmscripts/master/MajorGeeks_Freeware_Only/large.png
// @match http://www.majorgeeks.com/*
// @match http://mac.majorgeeks.com/*
// @run-at document-start
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// @version 1.8.2
// ==/UserScript==
if (typeof String.prototype.endsWith !== 'function') {
String.prototype.endsWith = function (suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
(function () {
var url = window.location.href;
var BlockAdds = GM_getValue("Block_Adds", true);
if (BlockAdds && url.indexOf("mg/get") !== -1) {
document.addEventListener("DOMContentLoaded", function () {
removeAll(document.getElementsByClassName("geekad"));
document.body.innerHTML = document.body.innerHTML.replace(
/<hr>[\s\S]*<!-- wrap -->/ig, "");
}, false);
return;
}
var mgeek = {
name : "mgeek",
items : [
["sortname", "Name"],
["sortdate", "Date"],
["sortpopularity", "Popular."],
["sortrating", "Rating"]
],
style : ".geekyinsidecontent { margin-bottom: 20px; }",
refreshUrl : function () {
return "mg/" + GM_getValue("Sort_By_mgeek", "sortdate") + "/" + url.split(
'/')[5];
},
removeShareFront : function () {
for (var i = share.snapshotLength; i--; ) {
share.snapshotItem(i).style.display = "none";
share.snapshotItem(i).nextSibling.nextSibling.style.display =
"none";
}
},
removeShare : function () {
for (var i = share.snapshotLength; i--; ) {
share.snapshotItem(i).style.display = "none";
share.snapshotItem(i).nextSibling.nextSibling.style.display =
"none";
}
},
restoreShareFront : function () {
for (var i = share.snapshotLength; i--; ) {
share.snapshotItem(i).style.display = "block";
share.snapshotItem(i).style.background = "#ECF038";
share.snapshotItem(i).nextSibling.nextSibling.style.display =
"block";
share.snapshotItem(i).nextSibling.nextSibling.style.background =
"#ECF038";
}
},
restoreShare : function () {
for (var i = share.snapshotLength; i--; ) {
share.snapshotItem(i).style.display = "block";
share.snapshotItem(i).style.background = "#ECF038";
share.snapshotItem(i).nextSibling.nextSibling.style.display =
"block";
share.snapshotItem(i).nextSibling.nextSibling.style.background =
"#ECF038";
}
},
getShare : function () {
return document.evaluate(
"//div[@class='geekytitle' and contains(string(), '$')]",
document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
},
getMenuPosition : function () {
return document.evaluate("//div[@class='geekycontent']", document,
null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
},
getMenuPositionFront : function () {
return this.getMenuPosition();
},
placeMenu : function (position, menu) {
position.removeChild(position.firstChild.nextSibling);
this.placeMenuFront(position, menu);
},
placeMenuFront : function (position, menu) {
position.insertBefore(menu, position.firstChild.nextSibling.nextSibling);
removeAll(document.getElementsByTagName("br"));
},
replaceLinks : function () {
var links = document.getElementsByClassName("colleft")[0].getElementsByTagName(
"a");
for (var i = links.length; i--; ) {
links[i].setAttribute("href", links[i].getAttribute("href").replace(
"sortname", sortBy));
}
},
getAds : function () {
var ads = new Array();
if (url.indexOf("/details/") !== -1) {
var iSpon = document.evaluate(
"//img[@alt='Sponsored Link']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (iSpon !== null) {
ads.push(iSpon.nextSibling.nextSibling.nextSibling.nextSibling);
ads.push(iSpon.nextSibling.nextSibling.nextSibling);
ads.push(iSpon.nextSibling.nextSibling);
ads.push(iSpon.nextSibling);
ads.push(iSpon);
}
ads.push(document.evaluate(
"//span[@style='font-size: 1.25em;' or @style='font-size: 1.0em;']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.parentNode);
ads.push(document.evaluate(
"//table[@class='author']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue);
}
var byGoogle = document.evaluate("//a[contains(string(), 'Ads by Google')]",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if (byGoogle !== null && url.indexOf("mac.") !== -1)
ads.push(byGoogle.parentNode);
ads.push(document.evaluate(
"//div[@class='content' and contains(string(), 'Featured Software')]",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue);
ads.push(document.getElementById("discovery-top"));
ads.push(document.getElementById("MarketGid2606"));
ads.push.apply(ads, document.getElementsByClassName("geekad"));
ads.push.apply(ads, document.getElementsByClassName("altcontent"));
return ads;
}
};
var obj = mgeek;
var sortBy = GM_getValue("Sort_By_" + obj.name, obj.items[1][0]);
var menu = createMenu();
var toggleButton, share, removeShare, restoreShare;
if (sortBy !== obj.items[0][0])
document.addEventListener(
"DOMContentLoaded", function () {
obj.replaceLinks();
}, false);
if (url.endsWith(".com/") || url.endsWith("/index.html") || url.indexOf(
".com/files/page/") !== -1)
document.addEventListener("DOMContentLoaded", function () {
placeMenuFront(menu);
removeShare = function () {
obj.removeShareFront();
}
restoreShare = function () {
obj.restoreShareFront();
};
removeShareware();
}, false);
else
document.addEventListener("DOMContentLoaded", function () {
placeMenu(menu);
removeShare = function () {
obj.removeShare();
}
restoreShare = function () {
obj.restoreShare();
};
removeShareware();
}, false);
document.addEventListener("DOMContentLoaded", function () {
GM_addStyle(obj.style);
}, false);
if (BlockAdds)
document.addEventListener("DOMContentLoaded", function () {
removeAll(obj.getAds());
}, false);
//--- FUNCTIONS
function createMenu() {
var configEle = document.createElement('div');
configEle.setAttribute("id", "mg_freeware_menu");
configEle.setAttribute("align", "center");
configEle.setAttribute("style", "padding: 10px;");
var options = "[Auto Sort By: <select id='configure_autosort'>";
for (var i = 0; i < obj.items.length; i++) {
var x = obj.items[i];
options += "<option id='" + "opt_" + i + "' value='" + x[0] + "'" +
((sortBy === x[0]) ? "selected='selected'" : "") + ">" + x[1] +
"</option>";
}
options += "</select>Block Adds:<input id='block_ads' type='checkbox'" +
((BlockAdds) ? "checked='checked'" : "") + "></input>" +
"Show Shareware:<input type='checkbox' id='toggle_sw'></input>]";
configEle.innerHTML = options;
return configEle;
}
function placeMenuFront(menu) {
var position = obj.getMenuPositionFront();
if (position !== null)
obj.placeMenuFront(position, menu);
addSaveListener(function () {
window.location.reload();
});
}
function placeMenu(menu) {
var position = obj.getMenuPosition();
if (position !== null)
obj.placeMenu(position, menu);
addSaveListener(function () {
window.location = obj.refreshUrl();
});
}
function addSaveListener(reload) {
document.getElementById("configure_autosort").addEventListener('change', function () {
saveConfig(reload);
}, false);
document.getElementById("block_ads").addEventListener('click', function () {
saveConfig(reload);
}, false);
}
function saveConfig(reload) {
GM_setValue("Sort_By_" + obj.name, document.getElementById(
"configure_autosort").value);
GM_setValue("Block_Adds", document.getElementById("block_ads").checked);
reload();
}
function removeShareware() {
toggleButton = document.getElementById("toggle_sw");
share = obj.getShare();
if (share.snapshotLength > 0)
removeShare();
toggleButton.addEventListener('click', addListenerRestore, false);
}
function addListenerRestore() {
restoreShare();
toggleButton.removeEventListener('click', addListenerRestore, false);
toggleButton.addEventListener('click', addListenerRemove, false);
}
function addListenerRemove() {
removeShare();
toggleButton.removeEventListener('click', addListenerRemove, false);
toggleButton.addEventListener('click', addListenerRestore, false);
}
function remove(ele) {
if (ele !== null)
ele.parentNode.removeChild(ele);
}
function removeAll(array) {
if (array.snapshotItem) {
for (var i = array.snapshotLength; i--; ) {
if (array.snapshotItem(i) !== null)
array.snapshotItem(i).parentNode.removeChild(array.snapshotItem(i));
}
} else {
for (var j = array.length; j--; ) {
if (array[j] !== null)
array[j].parentNode.removeChild(
array[j]);
}
}
}
}());