Place Browser Table Export

Exports WME Place Browser's table output to CSV and download to local disk

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Place Browser Table Export
// @namespace    http://junyianl.net/
// @version      2019.10.05.01
// @description  Exports WME Place Browser's table output to CSV and download to local disk
// @author       junyianl
// @match        https://w-tools.org/*
// @grant        none
// ==/UserScript==

/*
Changelogs:
2019.10.05.01
- Enhancement: Change pipe separator for validation rules to newline
2019.10.04.04
- Bugfix: Change separator for headers.
2019.10.04.03
- Bugfix: Separators were not changed.
2019.10.04.02
- Changed PL column to actual permalink.
- Using tab separator instead of comma, for easier copy-and-pasting into Google spreadsheet.
*/

(function() {
    'use strict';

    // Your code here...

    const validations = [
        "Missing Name", // High
        "Area not Point", // Medium
        "Point not Area",
        "Incorrect Primary Category",
        "Missing Street",
        "Invalid HN",
        "Not Updated Since Created", // Low
        "IGN Editor",
        "Phone Number Format",
        "Area Very Small",
        "Lower Case Name",
        "Lock Level (Completeness)", // Info
        "Parent Category",
        "Missing Google Place Link",
        "Last Edit By Automated Process", // Undocumented
        "Missing Google Place Link (6 Month Timer Active)",
        "Possible Nearby Duplicate"
    ];

    const tableSeparator = "\t";

    function downloadCSV(csv, filename) {
        var csvFile;
        var downloadLink;

        // CSV file
        csvFile = new Blob([csv], {type: "text/csv"});

        // Download link
        downloadLink = document.createElement("a");

        // File name
        downloadLink.download = filename;

        // Create a link to the file
        downloadLink.href = window.URL.createObjectURL(csvFile);

        // Hide download link
//         downloadLink.style.display = "none";

        // Add the link to DOM
        document.body.appendChild(downloadLink);

        // Click download link
        downloadLink.click();
    }

    function exportTableToCSV(filename) {
        var csv = [];
        var table = document.querySelectorAll("table.tablesorter");

        // Populate column headers
        var row = [], cols = table[0].querySelectorAll("th");
        for (var i = 0; i < cols.length; i++) {
            row.push('"' + cols[i].innerText + '"');
        }
        csv.push(row.join(tableSeparator));

        // Populate places
        var places = table[0].querySelectorAll("[class*=validate]");
        for (var j = 0; j < places.length; j++) {
            var placerow = [], placecol = places[j].querySelectorAll("td");
            for (var k = 0; k < placecol.length; k++) {
                switch (k) {
                    case 0:
                        var pl = placecol[k].querySelector("a");
                        placerow.push('"' + pl.href + '"');
                        break;
                    case 2:
                        var issue = [], issues = placecol[k].querySelectorAll("li");
                        for (var l = 0; l < issues.length; l++) {
                            issue.push(issues[l].innerText);
                        }
                        placerow.push('"' + issue.join("\n") + '"');
                        break;
                    default:
                        placerow.push('"' + placecol[k].innerText.trim() + '"');
                }
            }
            csv.push(placerow.join(tableSeparator));
        }

        // Download CSV file
        downloadCSV(csv.join("\r\n"), filename);
    }

    var group = document.querySelector('[id=MainContent_ddlAreaGroup]').selectedOptions[0].value;
    var area = document.querySelector('[id=MainContent_DropDownList1]').selectedOptions[0].innerText;
    var date = new Date();
    exportTableToCSV(group + '_' + area + '_' + date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate() + '.csv');

})();