Skip to content

Instantly share code, notes, and snippets.

@socketz
Last active December 30, 2018 07:24
Show Gist options
  • Save socketz/7c698d823b160c5c17bd5b51d7ff1f82 to your computer and use it in GitHub Desktop.
Save socketz/7c698d823b160c5c17bd5b51d7ff1f82 to your computer and use it in GitHub Desktop.
IPv4info Export Tables to CSV
// ==UserScript==
// @namespace https://openuserjs.org/user/socketz
// @name ipv4info.user.js
// @description This script export ipv4info tables to CSV
// @copyright 2017, socketz (socketz.net)
// @license MIT; https://opensource.org/licenses/MIT
// @version 1.0.1
// @match *://ipv4info.com/*
// @match *://*.ipv4info.com/*
// @exclude http://ipv4info.com/tools/*
// @exclude http://ipv4info.com/store/*
// @exclude http://ipv4info.com/stat/*
// @updateURL https://gist.github.com/socketz/7c698d823b160c5c17bd5b51d7ff1f82/raw/ipv4info.user.js
// @grant none
// ==/UserScript==
// ==OpenUserJS==
// @author socketz
// ==/OpenUserJS==
// Modified from https://codepen.io/kostas-krevatas/pen/mJyBwp
window.xport = {
_fallbacktoCSV: true,
toXLS: function(tableId, filename, n) {
var n = (typeof n === 'undefined') ? 0 : n;
this._filename = (typeof filename == 'undefined') ? tableId : filename;
//var ieVersion = this._getMsieVersion();
//Fallback to CSV for IE & Edge
if ((this._getMsieVersion() || this._isFirefox()) && this._fallbacktoCSV) {
return this.toCSV(tableId);
} else if (this._getMsieVersion() || this._isFirefox()) {
alert("Not supported browser");
}
//Other Browser can download xls
var table = document.getElementById(tableId);
table = (table == null) ? document.getElementsByClassName(tableId)[n] : table;
if(typeof table == "undefined"){
return false;
}
var html = table.outerHTML;
this._downloadAnchor("data:application/vnd.ms-excel" + encodeURIComponent(html), 'xls');
},
toCSV: function(tableId, filename, n) {
var n = (typeof n === 'undefined') ? 0 : n;
this._filename = (typeof filename === 'undefined') ? tableId : filename;
var table = document.getElementById(tableId);
table = (table == null) ? document.getElementsByClassName(tableId)[n] : table;
console.log(table, typeof table);
if(typeof table == "undefined"){
return false;
}
// Generate our CSV string from out HTML Table
var csv = this._tableToCSV(table);
// Create a CSV Blob
var blob = new Blob([csv], { type: "text/csv" });
// Determine which approach to take for the download
if (navigator.msSaveOrOpenBlob) {
// Works for Internet Explorer and Microsoft Edge
navigator.msSaveOrOpenBlob(blob, this._filename + ".csv");
} else {
this._downloadAnchor(URL.createObjectURL(blob), 'csv');
}
},
_getMsieVersion: function() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE ");
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)), 10);
}
var trident = ua.indexOf("Trident/");
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf("rv:");
return parseInt(ua.substring(rv + 3, ua.indexOf(".", rv)), 10);
}
var edge = ua.indexOf("Edge/");
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf(".", edge)), 10);
}
// other browser
return false;
},
_isFirefox: function(){
if (navigator.userAgent.indexOf("Firefox") > 0) {
return 1;
}
return 0;
},
_downloadAnchor: function(content, ext) {
var anchor = document.createElement("a");
anchor.style = "display:none !important";
anchor.id = "downloadanchor";
document.body.appendChild(anchor);
// If the [download] attribute is supported, try to use it
if ("download" in anchor) {
anchor.download = this._filename + "." + ext;
}
anchor.href = content;
anchor.click();
anchor.remove();
},
create_link_btn: function(obj_id, n){
var n = (typeof n === 'undefined') ? 0 : n;
var table = document.getElementById(obj_id);
table = (table == null) ? document.getElementsByClassName(obj_id)[n] : table;
console.log(table, typeof table);
if(typeof table == "undefined"){
return false;
}
var parent_div = table.parentNode;
var link = document.createElement("a");
link.id = "download_btn";
link.href = "#download";
link.onclick = function(e){
e.preventDefault();
console.log(e, obj_id);
var file_name = window.location.pathname.split("/").pop().replace(".html", "")
window.xport.toCSV(obj_id,file_name,n);
};
link.innerText = "Export to CSV";
link.style = "position:absolute;z-index:1000;border:1px solid #f0f0f0;padding:10px;color:#fff;background-color:#333;";
parent_div.insertBefore(link, table);
},
_tableToCSV: function(table) {
var slice = Array.prototype.slice;
return slice.call(table.rows).map(function(row){
return slice.call(row.cells).map(function(cell){
return cell.innerText.trim();
}).join(",");
}).join("\r\n");
}
};
document.onreadystatechange = function () {
if (document.readyState == "complete") {
if(!xport.create_link_btn('main_table')){
if(!xport.create_link_btn('TB2')){
xport.create_link_btn('TB2_90pr', 3); // Select third class element
}
}
}
}
@socketz
Copy link
Author

socketz commented Dec 3, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment