diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..da9020af7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+
+gs/Private.gs
diff --git a/gs/data.gs b/gs/data.gs
new file mode 100644
index 000000000..e2b6b79a5
--- /dev/null
+++ b/gs/data.gs
@@ -0,0 +1,85 @@
+function refreshData() {
+ var data = ImportJSON("https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/filterlists.json", "", "noTruncate,rawHeaders,noInherit");
+ data = fill2dJsonArrayWithNulls(data);
+ sData.clearContents();
+ sData.getRange(1, 1, data.length, data[0].length).setValues(data);
+ sData.getRange(2, 1, data.length, data[0].length).sort(1);
+ refreshParsed();
+ refreshPublic();
+}
+
+function refreshParsed() {
+ var urlTypes = ["viewUrl", "addUrl", "homeUrl", "forumUrl", "issuesUrl", "email", "donateUrl", "related"];
+ for (var i = 0, urlTypesLength = urlTypes.length; i < urlTypesLength; i++) {
+ var columnIndex = getColumnIndex(sParsed, urlTypes[i]);
+ var columnDataRange = sParsed.getRange(columnIndex + "2:" + columnIndex);
+ columnDataRange.clearContent();
+ var columnDataTopCell = sParsed.getRange(columnIndex + "2");
+ switch (urlTypes[i]) {
+ case "viewUrl":
+ columnDataTopCell.setValue("=createHtmlViewLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "addUrl":
+ var viewUrlColumnIndex = getColumnIndex(sData, "viewUrl");
+ columnDataTopCell.setValue("=createHtmlAddLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(Data!" + viewUrlColumnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(Data!" + viewUrlColumnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "homeUrl":
+ columnDataTopCell.setValue("=createHtmlHomeLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "forumUrl":
+ columnDataTopCell.setValue("=createHtmlForumLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "issuesUrl":
+ columnDataTopCell.setValue("=createHtmlIssuesLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "email":
+ columnDataTopCell.setValue("=createHtmlEmailLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "donateUrl":
+ columnDataTopCell.setValue("=createHtmlDonateLinkArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + columnIndex + "1,Data!A1:1,0),4),\"1\",\"\")),Data!A2:A)");
+ break;
+ case "related":
+ columnDataTopCell.setValue("=ARRAYFORMULA(SUBSTITUTE(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"related\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"related\",Data!A1:1,0),4),\"1\",\"\")),\",\",\"
\"))");
+ break;
+ default:
+ }
+ var columnData = columnDataRange.getDisplayValues();
+ columnDataRange.clearContent();
+ columnDataRange.setValues(columnData);
+ }
+}
+
+function refreshPublic() {
+ var publicFields = ["list", "tags", "description", "links", "related"];
+ for (var i = 0, publicFieldsLength = publicFields.length; i < publicFieldsLength; i++) {
+ var columnIndex = getColumnIndex(sPublic, publicFields[i]);
+ var columnDataRange = sPublic.getRange(columnIndex + "2:" + columnIndex);
+ columnDataRange.clearContent();
+ var columnDataTopCell = sPublic.getRange(columnIndex + "2");
+ switch (publicFields[i]) {
+ case "list":
+ columnDataTopCell.setValue("=createHtmlListNameArray(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\",Data!A1:1,0),4),\"1\",\"\")))");
+ break;
+ case "tags":
+ columnDataTopCell.setValue("=ARRAYFORMULA(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"tagLang\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"tagLang\",Data!A1:1,0),4),\"1\",\"\")))");
+ break;
+ case "description":
+ if (getColumnIndex(sData, "descrSourceUrl")) {
+ columnDataTopCell.setValue("=ARRAYFORMULA(IF(ISBLANK(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\",Data!A1:1,0),4),\"1\",\"\"))),,\"
\")&INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\",Data!A1:1,0),4),\"1\",\"\"))&IF(ISBLANK(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\",Data!A1:1,0),4),\"1\",\"\"))),,\"
\"))");
+ } else {
+ columnDataTopCell.setValue("=ARRAYFORMULA(INDIRECT(\"Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\",Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\",Data!A1:1,0),4),\"1\",\"\")))");
+ }
+ break;
+ case "links":
+ columnDataTopCell.setValue("=ARRAYFORMULA(IF(Parsed!A2:A=\"\",\"\",\"\"&Parsed!A2:A&Parsed!B2:B&Parsed!C2:C&Parsed!D2:D&Parsed!E2:E&Parsed!F2:F&Parsed!G2:G&\"
\"))");
+ break;
+ case "related":
+ columnDataTopCell.setValue("=ARRAYFORMULA(INDIRECT(\"Parsed!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"related\",Parsed!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"related\",Parsed!A1:1,0),4),\"1\",\"\")))");
+ break;
+ default:
+ }
+ var columnData = columnDataRange.getDisplayValues();
+ columnDataRange.clearContent();
+ columnDataRange.setValues(columnData);
+ }
+}
\ No newline at end of file
diff --git a/gs/filscore.gs b/gs/filscore.gs
new file mode 100644
index 000000000..05bae2863
--- /dev/null
+++ b/gs/filscore.gs
@@ -0,0 +1,75 @@
+function refreshFilScores() {
+ var sheetNameData = typeSheetPrefix[ss.getName()] + "Data";
+ var sheetData = ss.getSheetByName(sheetNameData);
+ var sheetNameScores = typeSheetPrefix[ss.getName()] + "Scores";
+ var sheetScores = ss.getSheetByName(sheetNameScores);
+ var sheetNamePublic = typeSheetPrefix[ss.getName()] + "Public";
+ var sheetPublic = ss.getSheetByName(sheetNamePublic);
+ copyListNamesAndViewUrlsToScore(sheetData, sheetScores);
+ var colHeader = findColumnHeader(sheetScores, "sumUniqueDailyVisitorsLast30");
+ if (colHeader) {
+ var rangeFull = sheetScores.getRange(colHeader + "2:" + colHeader);
+ rangeFull.clearContent();
+ var numLists = getNumLists(sheetScores);
+ for (i = 2; i <= numLists + 1; i++) {
+ var cellCur = sheetScores.getRange(colHeader + i);
+ cellCur.setValue("=ImportJson(CONCATENATE(\"" + piwikUrl + "?module=API&method=Actions.getDownload&downloadUrl=\",EncodeUrl(B" + i + "),\"&idSite=3&date=last30&period=range&format=json&token_auth=" + piwikApiToken + "\"), \"/sum_daily_nb_uniq_visitors\", \"noHeaders\")");
+ }
+ var data = rangeFull.getDisplayValues();
+ rangeFull.clearContent();
+ rangeFull.setValues(data);
+ for (i = 2; i <= numLists + 1; i++) {
+ var sumUniqueDailyVisitorsLast30 = sheetScores.getRange(colHeader + i).getValue();
+ if (sumUniqueDailyVisitorsLast30 == "#REF!") {
+ var cellCur = sheetScores.getRange(colHeader + i);
+ cellCur.setValue("=ImportJson(CONCATENATE(\"" + piwikUrl + "?module=API&method=Actions.getOutlink&outlinkUrl=\",EncodeUrl(B" + i + "),\"&idSite=3&date=last30&period=range&format=json&token_auth=" + piwikApiToken + "\"), \"/sum_daily_nb_uniq_visitors\", \"noHeaders\")");
+ }
+ }
+ var data = rangeFull.getDisplayValues();
+ rangeFull.clearContent();
+ rangeFull.setValues(data);
+ for (i = 2; i <= numLists + 1; i++) {
+ var sumUniqueDailyVisitorsLast30 = sheetScores.getRange(colHeader + i).getValue();
+ if (sumUniqueDailyVisitorsLast30 == "#REF!") {
+ var cellCur = sheetScores.getRange(colHeader + i);
+ cellCur.setValue(0);
+ }
+ }
+ }
+ var colHeader = findColumnHeader(sheetScores, "score");
+ var colHeaderVisitors = findColumnHeader(sheetScores, "sumUniqueDailyVisitorsLast30");
+ if (colHeader) {
+ var rangeFull = sheetScores.getRange(colHeader + "2:" + colHeader);
+ rangeFull.clearContent();
+ var numLists = getNumLists(sheetScores);
+ for (i = 2; i <= numLists + 1; i++) {
+ var cellCur = sheetScores.getRange(colHeader + i);
+ cellCur.setValue("=ROUND((100-0)/(MAX($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + ")-MIN($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + "))*($" + colHeaderVisitors + i + "-MAX($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + "))+100)");
+ }
+ var data = rangeFull.getDisplayValues();
+ rangeFull.clearContent();
+ rangeFull.setValues(data);
+ }
+ copyScoresToPublic(sheetScores, sheetPublic);
+}
+
+function copyListNamesAndViewUrlsToScore(sheetData, sheetScores) {
+ var sourceRangeListNames = sheetData.getRange("A1:A");
+ var targetRangeListNames = sheetScores.getRange("A1:A");
+ targetRangeListNames.clearContent();
+ sourceRangeListNames.copyTo(targetRangeListNames);
+ var viewUrlColumn = findColumnHeader(sheetData, "viewUrl");
+ var sourceRangeScores = sheetData.getRange(viewUrlColumn + "1:" + viewUrlColumn);
+ var targetRangeScores = sheetScores.getRange("B1:B");
+ targetRangeScores.clearContent();
+ sourceRangeScores.copyTo(targetRangeScores);
+}
+
+function copyScoresToPublic(sheetScores, sheetPublic) {
+ var colHeaderSource = findColumnHeader(sheetScores, "score");
+ var colHeaderTarget = findColumnHeader(sheetPublic, "FilScore");
+ var sourceRangeListNames = sheetScores.getRange(colHeaderSource + "2:" + colHeaderSource);
+ var targetRangeListNames = sheetPublic.getRange(colHeaderTarget + "2:" + colHeaderTarget);
+ targetRangeListNames.clearContent();
+ sourceRangeListNames.copyTo(targetRangeListNames);
+}
\ No newline at end of file
diff --git a/gs/html-links.gs b/gs/html-links.gs
new file mode 100644
index 000000000..4575ad04c
--- /dev/null
+++ b/gs/html-links.gs
@@ -0,0 +1,134 @@
+function createHtmlViewLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlViewLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "View";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlAddLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlAddLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Add";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlHomeLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlHomeLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Home";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlForumLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlForumLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Forum";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlIssuesLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlIssuesLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Issues";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlEmailLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlEmailLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Email";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlDonateLinkArray(url, listName) {
+ if (url instanceof Array) {
+ for (i in url) {
+ url[i] = createHtmlDonateLinkArray(url[i], listName[i]);
+ }
+ return url;
+ } else {
+ if (url && url != "#N/A") {
+ return "Donate";
+ } else {
+ return "";
+ }
+ }
+}
+
+function createHtmlRelatedLinkArray(forkComboListName, filterListsPageSlug) {
+ if (forkComboListName instanceof Array) {
+ for (i in forkComboListName) {
+ forkComboListName[i] = createHtmlRelatedLinkArray(forkComboListName[i], filterListsPageSlug[i]);
+ }
+ return forkComboListName;
+ } else {
+ if (forkComboListName == null) {
+ return null;
+ } else {
+ return "" + listName + "";
+ } else {
+ return "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/gs/http-response.gs b/gs/http-response.gs
new file mode 100644
index 000000000..61b6c5d13
--- /dev/null
+++ b/gs/http-response.gs
@@ -0,0 +1,77 @@
+// refresh each type of url with a separate trigger due to Apps Script execution time limitations
+function triggerRefreshHttpResponses1() {
+ refreshHttpResponses(1);
+}
+
+function triggerRefreshHttpResponses2() {
+ refreshHttpResponses(2);
+}
+
+function triggerRefreshHttpResponses3() {
+ refreshHttpResponses(3);
+}
+
+function triggerRefreshHttpResponses4() {
+ refreshHttpResponses(4);
+}
+
+function triggerRefreshHttpResponses5() {
+ refreshHttpResponses(5);
+}
+
+function triggerRefreshHttpResponses6() {
+ refreshHttpResponses(6);
+}
+
+function triggerRefreshHttpResponses7() {
+ refreshHttpResponses(7);
+}
+
+function triggerRefreshHttpResponses8() {
+ refreshHttpResponses(8);
+}
+
+function refreshHttpResponses(triggerNum) {
+ var sheetNameData = typeSheetPrefix[ss.getName()] + "Data";
+ var sheetData = ss.getSheetByName(sheetNameData);
+ var sheetNameStatuses = typeSheetPrefix[ss.getName()] + "UrlStatuses";
+ var sheetStatuses = ss.getSheetByName(sheetNameStatuses);
+ copyListNamesToStatuses(sheetData, sheetStatuses);
+ var listDataMax = getNumLists(sheetData)
+ var urlHeaders = findUrlColumnHeaders(sheetData);
+ if (urlHeaders.length >= triggerNum) {
+ var currentUrlType = urlHeaders[triggerNum - 1];
+ var colHeaderData = findColumnHeader(sheetData, currentUrlType);
+ var colHeaderStatuses = findColumnHeader(sheetStatuses, currentUrlType);
+ var rangeData = sheetData.getRange(colHeaderData + "2:" + colHeaderData + (1 + listDataMax));
+ var rangeStatuses = sheetStatuses.getRange(colHeaderStatuses + "2:" + colHeaderStatuses);
+ rangeStatuses.clearContent();
+ for (i = 2; i <= rangeData.getNumRows() + 1; i++) {
+ var rangeStatus = sheetStatuses.getRange(colHeaderStatuses + i);
+ var url = rangeData.getCell(i - 1, 1).getValue();
+ if (url) {
+ try {
+ var urlStatus = UrlFetchApp.fetch(url).getResponseCode();
+ rangeStatus.setValue(urlStatus);
+ if (urlStatus != 200) {
+ if (!(urlResponseWhitelist.indexOf(url) > -1)) {
+ MailApp.sendEmail(noticeEmailAddress, urlStatus + ": " + url, urlStatus + ": " + url);
+ }
+ }
+ } catch (err) {
+ rangeStatus.setValue(err.message);
+ if (!(urlResponseWhitelist.indexOf(url) > -1)) {
+ MailApp.sendEmail(noticeEmailAddress, "Error: " + url, "Error: " + url + "
" + err.message);
+ }
+ }
+ }
+ }
+ }
+}
+
+function copyListNamesToStatuses(sheetData, sheetStatuses) {
+ var sourceRange = sheetData.getRange("A1:A");
+ var targetRange = sheetStatuses.getRange("A1:A");
+ targetRange.clearContent();
+ sourceRange.copyTo(targetRange);
+}
\ No newline at end of file
diff --git a/gs/lib/ImportJson.gs b/gs/import-json.gs
similarity index 99%
rename from gs/lib/ImportJson.gs
rename to gs/import-json.gs
index 9329e6dbd..d69d13fe3 100644
--- a/gs/lib/ImportJson.gs
+++ b/gs/import-json.gs
@@ -63,7 +63,6 @@
function ImportJSON(url, query, parseOptions) {
return ImportJSONAdvanced(url, null, query, parseOptions, includeXPath_, defaultTransform_);
}
-
/**
* Imports a JSON feed via a POST request and returns the results to be inserted into a Google Spreadsheet. The JSON feed is
* flattened to create a two-dimensional array. The first row contains the headers, with each column header indicating the path to
@@ -105,27 +104,21 @@ function ImportJSON(url, query, parseOptions) {
**/
function ImportJSONViaPost(url, payload, fetchOptions, query, parseOptions) {
var postOptions = parseToObject_(fetchOptions);
-
if (postOptions["method"] == null) {
postOptions["method"] = "POST";
}
-
if (postOptions["payload"] == null) {
postOptions["payload"] = payload;
}
-
if (postOptions["contentType"] == null) {
postOptions["contentType"] = "application/x-www-form-urlencoded";
}
-
convertToBool_(postOptions, "validateHttpsCertificates");
convertToBool_(postOptions, "useIntranet");
convertToBool_(postOptions, "followRedirects");
convertToBool_(postOptions, "muteHttpExceptions");
-
return ImportJSONAdvanced(url, postOptions, query, parseOptions, includeXPath_, defaultTransform_);
}
-
/**
* An advanced version of ImportJSON designed to be easily extended by a script. This version cannot be called from within a
* spreadsheet.
@@ -168,10 +161,8 @@ function ImportJSONViaPost(url, payload, fetchOptions, query, parseOptions) {
function ImportJSONAdvanced(url, fetchOptions, query, parseOptions, includeFunc, transformFunc) {
var jsondata = UrlFetchApp.fetch(url, fetchOptions);
var object = JSON.parse(jsondata.getContentText());
-
return parseJSONObject_(object, query, parseOptions, includeFunc, transformFunc);
}
-
/**
* Encodes the given value to use within a URL.
*
@@ -182,7 +173,6 @@ function ImportJSONAdvanced(url, fetchOptions, query, parseOptions, includeFunc,
function URLEncode(value) {
return encodeURIComponent(value.toString());
}
-
/**
* Adds an oAuth service using the given name and the list of properties.
*
@@ -207,60 +197,47 @@ function URLEncode(value) {
*/
function AddOAuthService__(name, accessTokenUrl, requestTokenUrl, authorizationUrl, consumerKey, consumerSecret, method, paramLocation) {
var oAuthConfig = UrlFetchApp.addOAuthService(name);
-
if (accessTokenUrl != null && accessTokenUrl.length > 0) {
oAuthConfig.setAccessTokenUrl(accessTokenUrl);
}
-
if (requestTokenUrl != null && requestTokenUrl.length > 0) {
oAuthConfig.setRequestTokenUrl(requestTokenUrl);
}
-
if (authorizationUrl != null && authorizationUrl.length > 0) {
oAuthConfig.setAuthorizationUrl(authorizationUrl);
}
-
if (consumerKey != null && consumerKey.length > 0) {
oAuthConfig.setConsumerKey(consumerKey);
}
-
if (consumerSecret != null && consumerSecret.length > 0) {
oAuthConfig.setConsumerSecret(consumerSecret);
}
-
if (method != null && method.length > 0) {
oAuthConfig.setMethod(method);
}
-
if (paramLocation != null && paramLocation.length > 0) {
oAuthConfig.setParamLocation(paramLocation);
}
}
-
/**
* Parses a JSON object and returns a two-dimensional array containing the data of that object.
*/
function parseJSONObject_(object, query, options, includeFunc, transformFunc) {
var headers = new Array();
var data = new Array();
-
if (query && !Array.isArray(query) && query.toString().indexOf(",") != -1) {
query = query.toString().split(",");
}
-
if (options) {
options = options.toString().split(",");
}
-
parseData_(headers, data, "", {
rowIndex: 1
}, object, query, options, includeFunc);
parseHeaders_(headers, data);
transformData_(data, options, transformFunc);
-
return hasOption_(options, "noHeaders") ? (data.length > 1 ? data.slice(1) : new Array()) : data;
}
-
/**
* Parses the data contained within the given value and inserts it into the data two-dimensional array starting at the rowIndex.
* If the data is to be inserted into a new column, a new header is added to the headers array. The value can be an object,
@@ -280,12 +257,10 @@ function parseJSONObject_(object, query, options, includeFunc, transformFunc) {
*/
function parseData_(headers, data, path, state, value, query, options, includeFunc) {
var dataInserted = false;
-
if (Array.isArray(value) && isObjectArray_(value)) {
for (var i = 0; i < value.length; i++) {
if (parseData_(headers, data, path, state, value[i], query, options, includeFunc)) {
dataInserted = true;
-
if (data[state.rowIndex]) {
state.rowIndex++;
}
@@ -302,36 +277,29 @@ function parseData_(headers, data, path, state, value, query, options, includeFu
if (Array.isArray(value)) {
value = value.join();
}
-
// Insert new row if one doesn't already exist
if (!data[state.rowIndex]) {
data[state.rowIndex] = new Array();
}
-
// Add a new header if one doesn't exist
if (!headers[path] && headers[path] != 0) {
headers[path] = Object.keys(headers).length;
}
-
// Insert the data
data[state.rowIndex][headers[path]] = value;
dataInserted = true;
}
-
return dataInserted;
}
-
/**
* Parses the headers array and inserts it into the first row of the data array.
*/
function parseHeaders_(headers, data) {
data[0] = new Array();
-
for (key in headers) {
data[0][headers[key]] = key;
}
}
-
/**
* Applies the transform function for each element in the data array, going through each column of each row.
*/
@@ -342,14 +310,12 @@ function transformData_(data, options, transformFunc) {
}
}
}
-
/**
* Returns true if the given test value is an object; false otherwise.
*/
function isObject_(test) {
return Object.prototype.toString.call(test) === '[object Object]';
}
-
/**
* Returns true if the given test value is an array containing at least one object; false otherwise.
*/
@@ -359,10 +325,8 @@ function isObjectArray_(test) {
return true;
}
}
-
return false;
}
-
/**
* Returns true if the given query applies to the given path.
*/
@@ -378,17 +342,14 @@ function includeXPath_(query, path, options) {
} else {
return applyXPathRule_(query, path, options);
}
-
return false;
};
-
/**
* Returns true if the rule applies to the given path.
*/
function applyXPathRule_(rule, path, options) {
return path.indexOf(rule) == 0;
}
-
/**
* By default, this function transforms the value at the given row & column so it looks more like a normal data import. Specifically:
*
@@ -413,45 +374,36 @@ function defaultTransform_(data, row, column, options) {
data[row][column] = data[row - 1][column];
}
}
-
if (!hasOption_(options, "rawHeaders") && row == 0) {
if (column == 0 && data[row].length > 1) {
removeCommonPrefixes_(data, row);
}
-
data[row][column] = toTitleCase_(data[row][column].toString().replace(/[\/\_]/g, ""));
} else if (hasOption_(options, "rawHeaders") && row == 0) {
data[row][column] = data[row][column].toString().replace(/[\/\_]/g, "");
}
-
if (!hasOption_(options, "noTruncate") && data[row][column]) {
data[row][column] = data[row][column].toString().substr(0, 256);
}
-
if (hasOption_(options, "debugLocation")) {
data[row][column] = "[" + row + "," + column + "]" + data[row][column];
}
}
-
/**
* If all the values in the given row share the same prefix, remove that prefix.
*/
function removeCommonPrefixes_(data, row) {
var matchIndex = data[row][0].length;
-
for (var i = 1; i < data[row].length; i++) {
matchIndex = findEqualityEndpoint_(data[row][i - 1], data[row][i], matchIndex);
-
if (matchIndex == 0) {
return;
}
}
-
for (var i = 0; i < data[row].length; i++) {
data[row][i] = data[row][i].substring(matchIndex, data[row][i].length);
}
}
-
/**
* Locates the index where the two strings values stop being equal, stopping automatically at the stopAt index.
*/
@@ -459,19 +411,14 @@ function findEqualityEndpoint_(string1, string2, stopAt) {
if (!string1 || !string2) {
return -1;
}
-
var maxEndpoint = Math.min(stopAt, string1.length, string2.length);
-
for (var i = 0; i < maxEndpoint; i++) {
if (string1.charAt(i) != string2.charAt(i)) {
return i;
}
}
-
return maxEndpoint;
}
-
-
/**
* Converts the text to title case.
*/
@@ -479,33 +426,27 @@ function toTitleCase_(text) {
if (text == null) {
return null;
}
-
return text.replace(/\w\S*/g, function(word) {
return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
});
}
-
/**
* Returns true if the given set of options contains the given option.
*/
function hasOption_(options, option) {
return options && options.indexOf(option) >= 0;
}
-
/**
* Parses the given string into an object, trimming any leading or trailing spaces from the keys.
*/
function parseToObject_(text) {
var map = new Object();
var entries = (text != null && text.trim().length > 0) ? text.toString().split(",") : new Array();
-
for (var i = 0; i < entries.length; i++) {
addToMap_(map, entries[i]);
}
-
return map;
}
-
/**
* Parses the given entry and adds it to the given map, trimming any leading or trailing spaces from the key.
*/
@@ -513,17 +454,14 @@ function addToMap_(map, entry) {
var equalsIndex = entry.indexOf("=");
var key = (equalsIndex != -1) ? entry.substring(0, equalsIndex) : entry;
var value = (key.length + 1 < entry.length) ? entry.substring(key.length + 1) : "";
-
map[key.trim()] = value;
}
-
/**
* Returns the given value as a boolean.
*/
function toBool_(value) {
return value == null ? false : (value.toString().toLowerCase() == "true" ? true : false);
}
-
/**
* Converts the value for the given key in the given map to a bool.
*/
diff --git a/gs/lib/GetLastUpdated.gs b/gs/last-updated.gs
similarity index 100%
rename from gs/lib/GetLastUpdated.gs
rename to gs/last-updated.gs
diff --git a/gs/lib/EncodeUrl.gs b/gs/lib/EncodeUrl.gs
deleted file mode 100644
index 039cb94f6..000000000
--- a/gs/lib/EncodeUrl.gs
+++ /dev/null
@@ -1,10 +0,0 @@
-function EncodeUrl(url) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = EncodeUrl(url[i]);
- }
- return url;
- } else {
- return encodeURIComponent(url);
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlAddLink.gs b/gs/lib/GenerateHtmlAddLink.gs
deleted file mode 100644
index 17bf04a87..000000000
--- a/gs/lib/GenerateHtmlAddLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlAddLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlAddLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Add";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlAddLinkCombo.gs b/gs/lib/GenerateHtmlAddLinkCombo.gs
deleted file mode 100644
index 590874537..000000000
--- a/gs/lib/GenerateHtmlAddLinkCombo.gs
+++ /dev/null
@@ -1,21 +0,0 @@
-function GenerateHtmlAddLinkCombo(url, listName, masterLists) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlAddLinkCombo(url[i], listName[i], masterLists[i]);
- }
- return url;
- } else {
- if (!listName) {
- masterLists.split(/\s*,\s*/).forEach(function(masterListsSplit) {
- listName += masterListsSplit + " + ";
- });
- listName = listName.slice(0, -3)
- }
- if (url && url != "#N/A") {
- var html = "Add";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlChangelogLink.gs b/gs/lib/GenerateHtmlChangelogLink.gs
deleted file mode 100644
index dbc2a617f..000000000
--- a/gs/lib/GenerateHtmlChangelogLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlChangelogLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlChangelogLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Log";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlDonateLink.gs b/gs/lib/GenerateHtmlDonateLink.gs
deleted file mode 100644
index 2e45a8377..000000000
--- a/gs/lib/GenerateHtmlDonateLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlDonateLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlDonateLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Donate";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlEmailLink.gs b/gs/lib/GenerateHtmlEmailLink.gs
deleted file mode 100644
index 054ae746f..000000000
--- a/gs/lib/GenerateHtmlEmailLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlEmailLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlEmailLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Email";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlForksCombosLink.gs b/gs/lib/GenerateHtmlForksCombosLink.gs
deleted file mode 100644
index 392c98d85..000000000
--- a/gs/lib/GenerateHtmlForksCombosLink.gs
+++ /dev/null
@@ -1,17 +0,0 @@
-function GenerateHtmlForksCombosLink(forkComboListName, filterListsPageSlug) {
- if (forkComboListName instanceof Array) {
- for (i in forkComboListName) {
- forkComboListName[i] = GenerateHtmlForksCombosLink(forkComboListName[i], filterListsPageSlug[i]);
- }
- return forkComboListName;
- } else {
- // return null if no List Name provided
- if (forkComboListName == null) {
- return null;
- // concatenate HTML link tag
- } else {
- var html = "Forum";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlGuideLink.gs b/gs/lib/GenerateHtmlGuideLink.gs
deleted file mode 100644
index 1d411b8c9..000000000
--- a/gs/lib/GenerateHtmlGuideLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlGuideLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlGuideLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Guide";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlHomeLink.gs b/gs/lib/GenerateHtmlHomeLink.gs
deleted file mode 100644
index bd9026827..000000000
--- a/gs/lib/GenerateHtmlHomeLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlHomeLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlHomeLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Home";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlIssuesLink.gs b/gs/lib/GenerateHtmlIssuesLink.gs
deleted file mode 100644
index 5ff420b67..000000000
--- a/gs/lib/GenerateHtmlIssuesLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlIssuesLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlIssuesLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "Issues";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlListName.gs b/gs/lib/GenerateHtmlListName.gs
deleted file mode 100644
index 3bacc6733..000000000
--- a/gs/lib/GenerateHtmlListName.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlListName(listName) {
- if (listName instanceof Array) {
- for (i in listName) {
- listName[i] = GenerateHtmlListName(listName[i]);
- }
- return listName;
- } else {
- if (listName) {
- var html = "" + listName + "
";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlListNameCombo.gs b/gs/lib/GenerateHtmlListNameCombo.gs
deleted file mode 100644
index e1a01f6fc..000000000
--- a/gs/lib/GenerateHtmlListNameCombo.gs
+++ /dev/null
@@ -1,24 +0,0 @@
-function GenerateHtmlListNameCombo(listName, masterLists) {
- if (listName instanceof Array) {
- for (i in listName) {
- listName[i] = GenerateHtmlListNameCombo(listName[i], masterLists[i]);
- }
- return listName;
- } else {
- var masterListNames = "";
- masterLists.split(/\s*,\s*/).forEach(function(masterListsSplit) {
- masterListNames += masterListsSplit + " + ";
- });
- masterListNames = masterListNames.slice(0, -3)
- if (listName) {
- var html = "" + listName + "
";
- html += masterListNames;
- return html;
- } else if (masterLists) {
- var html = "" + masterListNames + "
";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlViewLink.gs b/gs/lib/GenerateHtmlViewLink.gs
deleted file mode 100644
index cc6f59d39..000000000
--- a/gs/lib/GenerateHtmlViewLink.gs
+++ /dev/null
@@ -1,15 +0,0 @@
-function GenerateHtmlViewLink(url, listName) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlViewLink(url[i], listName[i]);
- }
- return url;
- } else {
- if (url && url != "#N/A") {
- var html = "View";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/GenerateHtmlViewLinkCombo.gs b/gs/lib/GenerateHtmlViewLinkCombo.gs
deleted file mode 100644
index dd4e0d5cd..000000000
--- a/gs/lib/GenerateHtmlViewLinkCombo.gs
+++ /dev/null
@@ -1,21 +0,0 @@
-function GenerateHtmlViewLinkCombo(url, listName, masterLists) {
- if (url instanceof Array) {
- for (i in url) {
- url[i] = GenerateHtmlViewLinkCombo(url[i], listName[i], masterLists[i]);
- }
- return url;
- } else {
- if (!listName) {
- masterLists.split(/\s*,\s*/).forEach(function(masterListsSplit) {
- listName += masterListsSplit + " + ";
- });
- listName = listName.slice(0, -3)
- }
- if (url && url != "#N/A") {
- var html = "View";
- return html;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/lib/TrimUrlSlug.gs b/gs/lib/TrimUrlSlug.gs
deleted file mode 100644
index 21ae32fee..000000000
--- a/gs/lib/TrimUrlSlug.gs
+++ /dev/null
@@ -1,27 +0,0 @@
-function TrimUrlSlug(slug) {
- if (slug instanceof Array) {
- for (i in slug) {
- slug[i] = TrimUrlSlug(slug[i]);
- }
- return slug;
- } else {
- if (slug) {
- var charDict = [
- [" ", ""],
- ["\"", ""],
- [":", ""],
- ["'", ""],
- ["+", ""],
- ["(", ""],
- [")", ""],
- [".", ""]
- ];
- for (i = 0; i < charDict.length; ++i) {
- slug = slug.split(charDict[i][0]).join(charDict[i][1]);
- }
- return slug;
- } else {
- return "";
- }
- }
-}
\ No newline at end of file
diff --git a/gs/type/Interface.gs b/gs/type/Interface.gs
deleted file mode 100644
index 0ae6356cb..000000000
--- a/gs/type/Interface.gs
+++ /dev/null
@@ -1,71 +0,0 @@
-function EncodeUrl(url) {
- return FilterLists.EncodeUrl(url);
-}
-
-function TrimUrlSlug(slug) {
- return FilterLists.TrimUrlSlug(slug);
-}
-
-function GenerateHtmlViewLink(url, listName) {
- return FilterLists.GenerateHtmlViewLink(url, listName);
-}
-
-function GenerateHtmlViewLinkCombo(url, listName, masterLists) {
- return FilterLists.GenerateHtmlViewLinkCombo(url, listName, masterLists);
-}
-
-function GenerateHtmlAddLink(url, listName) {
- return FilterLists.GenerateHtmlAddLink(url, listName);
-}
-
-function GenerateHtmlAddLinkCombo(url, listName, masterLists) {
- return FilterLists.GenerateHtmlAddLinkCombo(url, listName, masterLists);
-}
-
-function GenerateHtmlHomeLink(url, listName) {
- return FilterLists.GenerateHtmlHomeLink(url, listName);
-}
-
-function GenerateHtmlGuideLink(url, listName) {
- return FilterLists.GenerateHtmlGuideLink(url, listName);
-}
-
-function GenerateHtmlForumLink(url, listName) {
- return FilterLists.GenerateHtmlForumLink(url, listName);
-}
-
-function GenerateHtmlIssuesLink(url, listName) {
- return FilterLists.GenerateHtmlIssuesLink(url, listName);
-}
-
-function GenerateHtmlEmailLink(url, listName) {
- return FilterLists.GenerateHtmlEmailLink(url, listName);
-}
-
-function GenerateHtmlForksCombosLink(forkComboListName) {
- return FilterLists.GenerateHtmlForksCombosLink(forkComboListName);
-}
-
-function GenerateHtmlChangelogLink(url, listName) {
- return FilterLists.GenerateHtmlChangelogLink(url, listName);
-}
-
-function GenerateHtmlDonateLink(url, listName) {
- return FilterLists.GenerateHtmlDonateLink(url, listName);
-}
-
-function GetLastUpdated(urlToCheck) {
- return FilterLists.GetLastUpdated(urlToCheck);
-}
-
-function GenerateHtmlListName(listName) {
- return FilterLists.GenerateHtmlListName(listName);
-}
-
-function GenerateHtmlListNameCombo(listName, masterLists) {
- return FilterLists.GenerateHtmlListNameCombo(listName, masterLists);
-}
-
-function ImportJson(url, query, parseOptions) {
- return FilterLists.ImportJSON(url, query, parseOptions);
-}
\ No newline at end of file
diff --git a/gs/type/RefreshData.gs b/gs/type/RefreshData.gs
deleted file mode 100644
index b4a68f0e3..000000000
--- a/gs/type/RefreshData.gs
+++ /dev/null
@@ -1,555 +0,0 @@
-var typeSheetPrefix = {
- "FilterLists Global": "Global",
- "FilterLists Regional": "Regional",
- "FilterLists Forked": "Forked",
- "FilterLists Combo": "Combo",
- "FilterLists Stale": "Stale"
-};
-
-var typeGitHubUrl = {
- "FilterLists Global": "https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/global.json",
- "FilterLists Regional": "https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/regional.json",
- "FilterLists Forked": "https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/forked.json",
- "FilterLists Combo": "https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/combo.json",
- "FilterLists Stale": "https://raw.githubusercontent.com/collinbarrett/FilterLists/master/json-data/stale.json"
-};
-
-var urlResponseWhitelist = ["https://www.jabcreations.com/web/adblock-subscription"]
-
-var ss = SpreadsheetApp.getActiveSpreadsheet(),
- options = [{
- name: "Refresh Data",
- functionName: "refreshJson"
- }, {
- name: "Refresh Scores",
- functionName: "refreshScores"
- }];
-
-function onOpen() {
- ss.addMenu("Refresh Data", options);
- ss.addMenu("Refresh Scores", options);
-}
-
-function refreshJson() {
- var sheet = ss.getSheetByName(typeSheetPrefix[ss.getName()] + "Data");
- var data = ImportJson(typeGitHubUrl[ss.getName()], "", "noTruncate,rawHeaders,noInherit");
- for (i = 0; i < data.length; i++) {
- for (j = 0; j < data[0].length; j++) {
- if (data[i][j] == null) {
- data[i][j] = "";
- }
- }
- }
- sheet.clearContents();
- var range = sheet.getRange(1, 1, data.length, data[0].length);
- range.setValues(data);
- refreshParsed();
- refreshPublic();
-}
-
-function refreshParsed() {
- var sheetName = typeSheetPrefix[ss.getName()] + "Parsed";
- var sheet = ss.getSheetByName(sheetName);
- var viewColHeader = refreshViewUrl(sheet);
- if (typeSheetPrefix[ss.getName()] != "Combo") {
- refreshAddUrl(sheet, viewColHeader);
- } else {
- viewColHeader = refreshViewUrlCombo(sheet);
- refreshAddUrlCombo(sheet, viewColHeader);
- }
- refreshHomeUrl(sheet, viewColHeader);
- refreshGuideUrl(sheet, viewColHeader);
- refreshForumUrl(sheet, viewColHeader);
- refreshIssuesUrl(sheet, viewColHeader);
- refreshEmailUrl(sheet, viewColHeader);
- refreshChangelogUrl(sheet, viewColHeader);
- refreshDonateUrl(sheet, viewColHeader);
- refreshForksCombos(sheet);
- refreshMaster(sheet);
-}
-
-function refreshPublic() {
- var sheetName = typeSheetPrefix[ss.getName()] + "Public";
- var sheet = ss.getSheetByName(sheetName);
- if (typeSheetPrefix[ss.getName()] != "Combo") {
- refreshRegionPublic(sheet);
- refreshListPublic(sheet);
- refreshDescriptionPublic(sheet);
- refreshLinksPublic(sheet);
- refreshForksCombosPublic(sheet);
- refreshMasterPublic(sheet);
- } else {
- refreshListPublicCombo(sheet);
- refreshLinksPublicCombo(sheet);
- }
-}
-
-function findColumnHeader(sheet, header) {
- var headerRange = sheet.getRange("A1:1");
- var headerData = headerRange.getValues();
- for (i = 0; i < headerData[0].length; i++) {
- if (headerData[0][i] == header) {
- return String.fromCharCode(65 + i);
- }
- }
- return null;
-}
-
-function findUrlColumnHeaders(sheet) {
- var headerRange = sheet.getRange("A1:1");
- var headerData = headerRange.getValues();
- var urlHeaders = new Array();
- for (i = 0; i < headerData[0].length; i++) {
- if (headerData[0][i].indexOf("Url") != -1) {
- urlHeaders.push(headerData[0][i]);
- }
- }
- return urlHeaders;
-}
-
-function refreshViewUrl(sheet) {
- var colHeader = findColumnHeader(sheet, "viewUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlViewLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + colHeader + "2:" + colHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
- return colHeader;
-}
-
-function refreshViewUrlCombo(sheet) {
- var colHeader = findColumnHeader(sheet, "viewUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlViewLinkCombo(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + colHeader + "2:" + colHeader + ",INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
- return colHeader;
-}
-
-function refreshAddUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "addUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlAddLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + viewColHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + viewColHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshAddUrlCombo(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "addUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlAddLinkCombo(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + viewColHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + viewColHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ",INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshHomeUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "homeUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlHomeLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshGuideUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "guideUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlGuideLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshForumUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "forumUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlForumLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshIssuesUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "issuesUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlIssuesLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshEmailUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "email");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlEmailLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshChangelogUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "changelogUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlChangelogLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshDonateUrl(sheet, viewColHeader) {
- var colHeader = findColumnHeader(sheet, "donateUrl");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlDonateLink(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(" + colHeader + "1," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))," + typeSheetPrefix[ss.getName()] + "Data!" + viewColHeader + "2:" + viewColHeader + ")");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshForksCombos(sheet) {
- var colHeader = findColumnHeader(sheet, "forksCombos");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(SUBSTITUTE(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"forksCombos\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"forksCombos\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")),\",\",\"
\"))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshMaster(sheet) {
- var colHeader = findColumnHeader(sheet, "master");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(SUBSTITUTE(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")),\",\",\"
\"))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshRegionPublic(sheet) {
- var colHeader = findColumnHeader(sheet, "Region");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"lang\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"lang\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshListPublic(sheet) {
- var colHeader = findColumnHeader(sheet, "List");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlListName(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshListPublicCombo(sheet) {
- var colHeader = findColumnHeader(sheet, "List");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=GenerateHtmlListNameCombo(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"list\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")),INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshDescriptionPublic(sheet) {
- var dataSheetName = typeSheetPrefix[ss.getName()] + "Data";
- var dataSheet = ss.getSheetByName(dataSheetName);
- var sourceUrlColHeader = findColumnHeader(dataSheet, "descrSourceUrl");
- var colHeader = findColumnHeader(sheet, "Description");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- if (sourceUrlColHeader) {
- rangeTop.setValue("=ARRAYFORMULA(IF(ISBLANK(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))),,\"\")&INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))&IF(ISBLANK(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descrSourceUrl\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\"))),,\"
\"))");
- } else {
- rangeTop.setValue("=ARRAYFORMULA(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Data!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"descr\"," + typeSheetPrefix[ss.getName()] + "Data!A1:1,0),4),\"1\",\"\")))");
- }
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshLinksPublic(sheet) {
- var colHeader = findColumnHeader(sheet, "Links");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(IF(" + typeSheetPrefix[ss.getName()] + "Parsed!A2:A=\"\",\"\",\"\"&" + typeSheetPrefix[ss.getName()] + "Parsed!A2:A&" + typeSheetPrefix[ss.getName()] + "Parsed!B2:B&" + typeSheetPrefix[ss.getName()] + "Parsed!C2:C&" + typeSheetPrefix[ss.getName()] + "Parsed!D2:D&" + typeSheetPrefix[ss.getName()] + "Parsed!E2:E&" + typeSheetPrefix[ss.getName()] + "Parsed!F2:F&" + typeSheetPrefix[ss.getName()] + "Parsed!G2:G&" + typeSheetPrefix[ss.getName()] + "Parsed!H2:H&" + typeSheetPrefix[ss.getName()] + "Parsed!I2:I&\"
\"))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshLinksPublicCombo(sheet) {
- var colHeader = findColumnHeader(sheet, "Links");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(IF(" + typeSheetPrefix[ss.getName()] + "Parsed!A2:A=\"\",\"\",\"\"&" + typeSheetPrefix[ss.getName()] + "Parsed!A2:A&" + typeSheetPrefix[ss.getName()] + "Parsed!B2:B&\"
\"))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshForksCombosPublic(sheet) {
- var colHeader = findColumnHeader(sheet, "Forks & Combos");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Parsed!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"forksCombos\"," + typeSheetPrefix[ss.getName()] + "Parsed!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"forksCombos\"," + typeSheetPrefix[ss.getName()] + "Parsed!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-function refreshMasterPublic(sheet) {
- var colHeader = findColumnHeader(sheet, "Master");
- if (colHeader) {
- var rangeFull = sheet.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var rangeTop = sheet.getRange(colHeader + "2");
- rangeTop.setValue("=ARRAYFORMULA(INDIRECT(\"" + typeSheetPrefix[ss.getName()] + "Parsed!\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Parsed!A1:1,0),4),\"1\",\"2\")&\":\"&SUBSTITUTE(ADDRESS(1,MATCH(\"master\"," + typeSheetPrefix[ss.getName()] + "Parsed!A1:1,0),4),\"1\",\"\")))");
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
-}
-
-// refresh each type of url with a separate trigger due to Apps Script execution time limitations
-function triggerRefreshHttpResponses1() {
- refreshHttpResponses(1);
-}
-
-function triggerRefreshHttpResponses2() {
- refreshHttpResponses(2);
-}
-
-function triggerRefreshHttpResponses3() {
- refreshHttpResponses(3);
-}
-
-function triggerRefreshHttpResponses4() {
- refreshHttpResponses(4);
-}
-
-function triggerRefreshHttpResponses5() {
- refreshHttpResponses(5);
-}
-
-function triggerRefreshHttpResponses6() {
- refreshHttpResponses(6);
-}
-
-function triggerRefreshHttpResponses7() {
- refreshHttpResponses(7);
-}
-
-function triggerRefreshHttpResponses8() {
- refreshHttpResponses(8);
-}
-
-function refreshHttpResponses(triggerNum) {
- var sheetNameData = typeSheetPrefix[ss.getName()] + "Data";
- var sheetData = ss.getSheetByName(sheetNameData);
- var sheetNameStatuses = typeSheetPrefix[ss.getName()] + "UrlStatuses";
- var sheetStatuses = ss.getSheetByName(sheetNameStatuses);
- copyListNamesToStatuses(sheetData, sheetStatuses);
- var listDataMax = getNumLists(sheetData)
- var urlHeaders = findUrlColumnHeaders(sheetData);
- if (urlHeaders.length >= triggerNum) {
- var currentUrlType = urlHeaders[triggerNum - 1];
- var colHeaderData = findColumnHeader(sheetData, currentUrlType);
- var colHeaderStatuses = findColumnHeader(sheetStatuses, currentUrlType);
- var rangeData = sheetData.getRange(colHeaderData + "2:" + colHeaderData + (1 + listDataMax));
- var rangeStatuses = sheetStatuses.getRange(colHeaderStatuses + "2:" + colHeaderStatuses);
- rangeStatuses.clearContent();
- for (i = 2; i <= rangeData.getNumRows() + 1; i++) {
- var rangeStatus = sheetStatuses.getRange(colHeaderStatuses + i);
- var url = rangeData.getCell(i - 1, 1).getValue();
- if (url) {
- try {
- var urlStatus = UrlFetchApp.fetch(url).getResponseCode();
- rangeStatus.setValue(urlStatus);
- if (urlStatus != 200) {
- if (!(urlResponseWhitelist.indexOf(url) > -1)) {
- MailApp.sendEmail(noticeEmailAddress, urlStatus + ": " + url, urlStatus + ": " + url);
- }
- }
- } catch (err) {
- rangeStatus.setValue(err.message);
- if (!(urlResponseWhitelist.indexOf(url) > -1)) {
- MailApp.sendEmail(noticeEmailAddress, "Error: " + url, "Error: " + url + "
" + err.message);
- }
- }
- }
- }
- }
-}
-
-function copyListNamesToStatuses(sheetData, sheetStatuses) {
- var sourceRange = sheetData.getRange("A1:A");
- var targetRange = sheetStatuses.getRange("A1:A");
- targetRange.clearContent();
- sourceRange.copyTo(targetRange);
-}
-
-function getNumLists(sheetData) {
- var listHeaderData = findColumnHeader(sheetData, "viewUrl");
- var listData = sheetData.getRange(listHeaderData + "2:" + listHeaderData);
- for (i = 1; i <= listData.getNumRows(); i++) {
- if (!(listData.getCell(i, 1).getValue())) {
- return i - 1;
- }
- }
-}
-
-function refreshScores() {
- var sheetNameData = typeSheetPrefix[ss.getName()] + "Data";
- var sheetData = ss.getSheetByName(sheetNameData);
- var sheetNameScores = typeSheetPrefix[ss.getName()] + "Scores";
- var sheetScores = ss.getSheetByName(sheetNameScores);
- var sheetNamePublic = typeSheetPrefix[ss.getName()] + "Public";
- var sheetPublic = ss.getSheetByName(sheetNamePublic);
- copyListNamesAndViewUrlsToScore(sheetData, sheetScores);
- var colHeader = findColumnHeader(sheetScores, "sumUniqueDailyVisitorsLast30");
- if (colHeader) {
- var rangeFull = sheetScores.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var numLists = getNumLists(sheetScores);
- for (i = 2; i <= numLists + 1; i++) {
- var cellCur = sheetScores.getRange(colHeader + i);
- cellCur.setValue("=ImportJson(CONCATENATE(\"" + piwikUrl + "?module=API&method=Actions.getDownload&downloadUrl=\",EncodeUrl(B" + i + "),\"&idSite=3&date=last30&period=range&format=json&token_auth=" + piwikApiToken + "\"), \"/sum_daily_nb_uniq_visitors\", \"noHeaders\")");
- }
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- for (i = 2; i <= numLists + 1; i++) {
- var sumUniqueDailyVisitorsLast30 = sheetScores.getRange(colHeader + i).getValue();
- if (sumUniqueDailyVisitorsLast30 == "#REF!") {
- var cellCur = sheetScores.getRange(colHeader + i);
- cellCur.setValue("=ImportJson(CONCATENATE(\"" + piwikUrl + "?module=API&method=Actions.getOutlink&outlinkUrl=\",EncodeUrl(B" + i + "),\"&idSite=3&date=last30&period=range&format=json&token_auth=" + piwikApiToken + "\"), \"/sum_daily_nb_uniq_visitors\", \"noHeaders\")");
- }
- }
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- for (i = 2; i <= numLists + 1; i++) {
- var sumUniqueDailyVisitorsLast30 = sheetScores.getRange(colHeader + i).getValue();
- if (sumUniqueDailyVisitorsLast30 == "#REF!") {
- var cellCur = sheetScores.getRange(colHeader + i);
- cellCur.setValue(0);
- }
- }
- }
- var colHeader = findColumnHeader(sheetScores, "score");
- var colHeaderVisitors = findColumnHeader(sheetScores, "sumUniqueDailyVisitorsLast30");
- if (colHeader) {
- var rangeFull = sheetScores.getRange(colHeader + "2:" + colHeader);
- rangeFull.clearContent();
- var numLists = getNumLists(sheetScores);
- for (i = 2; i <= numLists + 1; i++) {
- var cellCur = sheetScores.getRange(colHeader + i);
- cellCur.setValue("=ROUND((100-0)/(MAX($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + ")-MIN($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + "))*($" + colHeaderVisitors + i + "-MAX($" + colHeaderVisitors + "$2:$" + colHeaderVisitors + "))+100)");
- }
- var data = rangeFull.getDisplayValues();
- rangeFull.clearContent();
- rangeFull.setValues(data);
- }
- copyScoresToPublic(sheetScores, sheetPublic);
-}
-
-function copyListNamesAndViewUrlsToScore(sheetData, sheetScores) {
- var sourceRangeListNames = sheetData.getRange("A1:A");
- var targetRangeListNames = sheetScores.getRange("A1:A");
- targetRangeListNames.clearContent();
- sourceRangeListNames.copyTo(targetRangeListNames);
-
- var viewUrlColumn = findColumnHeader(sheetData, "viewUrl");
- var sourceRangeScores = sheetData.getRange(viewUrlColumn + "1:" + viewUrlColumn);
- var targetRangeScores = sheetScores.getRange("B1:B");
- targetRangeScores.clearContent();
- sourceRangeScores.copyTo(targetRangeScores);
-}
-
-function copyScoresToPublic(sheetScores, sheetPublic) {
- var colHeaderSource = findColumnHeader(sheetScores, "score");
- var colHeaderTarget = findColumnHeader(sheetPublic, "FilScore");
- var sourceRangeListNames = sheetScores.getRange(colHeaderSource + "2:" + colHeaderSource);
- var targetRangeListNames = sheetPublic.getRange(colHeaderTarget + "2:" + colHeaderTarget);
- targetRangeListNames.clearContent();
- sourceRangeListNames.copyTo(targetRangeListNames);
-}
\ No newline at end of file
diff --git a/gs/ui.gs b/gs/ui.gs
new file mode 100644
index 000000000..ae087e9a5
--- /dev/null
+++ b/gs/ui.gs
@@ -0,0 +1,16 @@
+var ss = SpreadsheetApp.getActiveSpreadsheet();
+var sData = ss.getSheetByName("Data");
+var sFilScore = ss.getSheetByName("FilScore");
+var sHttpResponse = ss.getSheetByName("HttpResponse");
+var sParsed = ss.getSheetByName("Parsed");
+var sPublic = ss.getSheetByName("Public");
+
+function onOpen() {
+ var ui = SpreadsheetApp.getUi();
+ ui.createMenu('Refresh').addItem('Refresh All', 'refreshAll').addSeparator().addItem('Refresh Data', 'refreshData').addItem('Refresh FilScores', 'refreshFilScores').addToUi();
+}
+
+function refreshAll() {
+ refreshData();
+ refreshFilScores();
+}
\ No newline at end of file
diff --git a/gs/utilities.gs b/gs/utilities.gs
new file mode 100644
index 000000000..8340293a0
--- /dev/null
+++ b/gs/utilities.gs
@@ -0,0 +1,77 @@
+function fill2dJsonArrayWithNulls(array2d) {
+ for (i = 0; i < array2d.length; i++) {
+ for (j = 0; j < array2d[0].length; j++) {
+ if (array2d[i][j] == null) {
+ array2d[i][j] = "";
+ }
+ }
+ }
+ return array2d;
+}
+
+function getColumnIndex(sheet, columnHeader) {
+ var headerRange = sheet.getRange("A1:1");
+ var headerData = headerRange.getValues();
+ for (i = 0; i < headerData[0].length; i++) {
+ if (headerData[0][i] == columnHeader) {
+ return String.fromCharCode(65 + i);
+ }
+ }
+ return null;
+}
+
+function getColumnIndicesWithHeaderSubstring(sheet, columnHeaderSubstring) {
+ var headerRange = sheet.getRange("A1:1");
+ var headerData = headerRange.getValues();
+ var columnIndices = new Array();
+ for (i = 0; i < headerData[0].length; i++) {
+ if (headerData[0][i].indexOf(columnHeaderSubstring) != -1) {
+ columnIndices.push(headerData[0][i]);
+ }
+ }
+ return columnIndices;
+}
+
+function encodeUrlArray(urlArray) {
+ if (urlArray instanceof Array) {
+ for (i in urlArray) {
+ urlArray[i] = encodeUrlArray(urlArray[i]);
+ }
+ return urlArray;
+ } else {
+ if (urlArray) {
+ return encodeURIComponent(urlArray);
+ } else {
+ return "";
+ }
+ }
+}
+
+function trimUrlSlugArray(slugArray) {
+ if (slugArray instanceof Array) {
+ for (i in slugArray) {
+ slugArray[i] = trimUrlSlugArray(slugArray[i]);
+ }
+ return slugArray;
+ } else {
+ if (slugArray) {
+ var trimCharacters = [" ", "\"", ":", "'", "+", "(", ")", "."];
+ for (i = 0; i < trimCharacters.length; i++) {
+ slugArray = slugArray.split(trimCharacters[i]).join("");
+ }
+ return slugArray;
+ } else {
+ return "";
+ }
+ }
+}
+
+function getNumLists(sheetData) {
+ var listHeaderData = getColumnIndex(sData, "viewUrl");
+ var listData = sheetData.getRange(listHeaderData + "2:" + listHeaderData);
+ for (i = 1; i <= listData.getNumRows(); i++) {
+ if (!(listData.getCell(i, 1).getValue())) {
+ return i - 1;
+ }
+ }
+}
\ No newline at end of file