Pagemosaic

try to replace the senstive words from web page content.

// ==UserScript==
// @name         Pagemosaic
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  try to replace the senstive words from web page content.
// @author       towerbit
// @license      WTFPL
// @match        https://*/*
// @match        http://*/*
// @exclude      *://*.microsoft.com/*
// @exclude      *://*.cnblogs.com/*
// @exclude      *://*.csdn.net/*
// @exclude      *://*.gov.cn/*
// @exclude      *://*.edu.cn/*
// @exclude      *://*.nofox.com/*
// @exclude      https://mail.163.com/*
// @exclude      https://*.126.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=microsoft.com
// @grant        window.close
// @run-at       document-end
// ==/UserScript==
(function() {
    'use strict';

    const BADWORDS = 'MyV1N0VBNyV1NzI0NyUyQzQldTdFQTcldTcyNDclMkMldTcyMzEldTYyOUElMkMldTcyMzEldTZEQjIlMkMldTYzMDkldTY0NjkldTY4RDIlMkMldTUzMDUldTc2QUUlMkMldTcyMDYldTU5NzYlMkMldTcyMDYldTRFNzMlMkMldTVDNDQlMkMldTVBNEEldTVCNTAlMkMldTUxQjAldTcwNkIlMkMldTUyQzMldThENzclMkMldTkxQzcldTgyQjElMkMldTgyQ0QldTg3NDcldTZDMzQlMkMldTg1Q0YldTY2MjUldTk2MDElMkMldTY0Q0QldTkwM0MlMkMldTY0Q0QldTZCRDQlMkMldTY0Q0QldTcwQzIlMkMldTY0Q0QldTRFODYldTVBQzIlMkMldTY0Q0QldTRGNjAlMkMldTY0Q0QldTVBQzIlMkMldTY0Q0QldTZCN0IlMkMldTY0Q0QldTYyMTElMkMldTgwOEYlMkMldTgyNzklMkMldTYzRDIldTVDNDEldTVDNDElMkMldTYzRDIldTYyMTElMkMldTVBM0MldTU5OTMlMkMldTZGNkUldTU0MzklMkMldTYyMTAldTRFQkEldTc1MzUldTVGNzElMkMldTYyMTAldTRFQkEldTUzNjEldTkwMUElMkMldTYyMTAldTRFQkEldTgwNEElMkMldTYyMTAldTRFQkEldTcyNDclMkMldTYyMTAldTRFQkEldTg5QzYldTk4OTElMkMldTYyMTAldTRFQkEldTUwNzcldTYyQ0QlMkMldTYyMTAldTRFQkEldTU2RkUlMkMldTYyMTAldTRFQkEldTY1ODclMkMldTYyMTAldTRFQkEldTVDMEYlMkMldTU0MDMldTdDQkUlMkMldTc1RjQldTU5NzMlMkMldTgwM0IldTlBQTglMkMldTgwM0IldTZCREIlMkMldTgwM0IldTRFMTglMkMldTYyQkQldTYzRDIlMkMldTYyQkQldTUyQTglMkMldTU5MDQldTU5NzMldTgxOUMlMkMldTU0MzkldTg0MjclMkMldTU0MzkldTdCQUIlMkMldTY2MjUldTYwQzUlMkMldTY2MjUldTZDMzQlMkMldTY2MjUldTVGQzMlMkMldTY2MjUldTgzNkYlMkMldTUwQUMldTYwQzUlMkMldTYyNTMldTk4REUldTY3M0ElMkMldTYyNTMldTYyNEIldTk0RjMlMkMldTYyNTMldTYyNEIldTY3QUElMkMldTYyNTMldTYyNEIldTY5Q0QlMkMldTgzNjEldTU5ODclMkMldTgzNjEldTU5NzMlMkMldTUyMzAldTgyQjEldTVGQzMlMkMldTcwNkYldTgzNDkldTU0OEMldTVDMUElMkMldTZFRjQldTg3MjElMkMldTVDNEMlMkMldThDMDMldTY1NTklMkMldTRFMDEldTVCNTcldTg4RTQlMkMldTk4NzYldTgyQjEldTVGQzMlMkMldTRFMUMldTRFQUMldTcwRUQlMkMldTY3NzEldTRFQUMldTcxQjElMkMldTZEMUUldTVDMEYldTUzRTMldTdEMjclMkMldTgwRjQldTRGNTMlMkMldTZCRDIldTlGOTklMkMldTY3NUMldTUxQjcldTRFMDElMkMldTUzRDEldTY2MjUlMkMldTUzRDEldTZENkElMkMldTUzRDEldTYwQzUlMkMldTUzRDEldTlBOUElMkMldTgyQjMldTdBNzQlMkMldTk4Q0UldTlBOUElMkMldTUxRTQldTY5N0MlMkMldTU5MkIldTU5QkIldTRFQTQldTYzNjIlMkMldTVFNzIldTZCN0IldTRGNjAlMkMldTVFNzIldTZCN0IldTYyMTElMkMldTVFNzIldTYyMTElMkMldTgwOUIldTRFQTQlMkMldTgwOUIldTU4NUUlMkMldTlBRDgldTZGNkUlMkMldTcyRDcldTY0Q0QlMkMldTcyRDcldTRFQTQlMkMldTcyRDcldTYwMjclMkMldTcyRDcldTUwNUElMkMldThDMzcldTkwNTMlMkMldTg5QzIldTk3RjMldTU3NTAldTgzQjIlMkMldTlGOUYldTU5MzQlMkMldTZFREEldTU3MDYldTU5MjcldTRFNzMlMkMldThDNkEldTRFNzMlMkMldTU0MEUldTVFQUQlMkMldTgyQjEldTg1NEElMkMldTYwMDAldTY2MjUlMkMldTZCMjIldTU5N0QlMkMldTYzNjIldTU5QkIlMkMldTZENjMldTgwQTAlMkMldTlFQzQldTgyNzIldTc1MzUldTVGNzElMkMldTlFQzQldTgyNzIldTVDMEYldThCRjQlMkMldTlFMjEldTVERjQlMkMldTlFMjEldTU0MjclMkMldTlFMjEldTU5NzglMkMldTYzMjQldTRFNzMldTZDNDElMkMldTY0RTAldTRFNzMldTZDNDElMkMldTU5OTMldTU5NzMlMkMldTU5OTMldTk2NjIlMkMldTU5NzgldTVDMzglMkMldTU3NUEldTYzM0ElMkMldTRFQTQldTVBQkUlMkMldTRFQTQldTU0MDglMkMldTRFQTQldTZCMjIlMkMldTVBMDcldTU1OTglMkMldTg5RDIldTUxNDgldTc1MUYlMkMldTUzRUIldTVFOEElMkMldTUzRUIldTY2MjUlMkMldTU5RDAldTUzMDUldTU5MUMlMkMldTU5RDAldTY3MEQldTUyQTElMkMldTU5RDAldTUxN0MldTgwNEMlMkMldTU5RDAldTRFMEEldTk1RTglMkMldTkxRDEldTc0RjYlMkMldTdDQkUldTZEQjIldTVDMDQlMkMldTdDQkUldTVCNTAldTVDMDQlMkMldTgzQ0EldTgyQjEldTRFMDAldTdEMjclMkMldTgzQ0EldTk1RTglMkMldTVERTgldTRFNzMlMkMldTVGMDAldTgyREUlMkMldTVDM0IlMkMldTUzRTMldTcyMDYlMkMldTUzRTMldTRFQTQlMkMldTUzRTMldTc0MDMlMkMldTUzRTMldTU4NUUlMkMldTVGRUIldTYxMUYlMkMldTcyQzIldTY0Q0QlMkMldTcwQzIldTkwM0MlMkMldTcwQzIldTZCRDQlMkMldTZENkEldTgzNjElMkMldTZENkEldTUzRUIlMkMldTZENkEldThFNDQldTVCNTAlMkMldTZENkEldTdCMTElMkMldTZENkEldTdBNzQlMkMldTgwMDEldTkwM0MlMkMldTgwMDEldTZDNDkldTYzQTgldThGNjYlMkMldTYwNEIldTVDMzglMkMldTYwNEIldThEQjMlMkMldTRFMjQldTgxN0YldTRFNEIldTk1RjQlMkMldTgwNEEldTg5QzYldTk4OTElMkMldTgwNEEldTY1OEIldTgyNzMlMkMldTY5N0MldTUxRTQlMkMldTY0QjgldTdCQTElMkMldTRFNzEldTU5NzglMkMldTRFNzEldTRGMjYlMkMldTRFODIldTUwMkIlMkMldTRGMjYldTc0MDYldTZCREIlMkMldThGNkUldTU5NzglMkMldTg4RjgldTgwNEElMkMldTg4RjgldTRGNTMlMkMldTg4RjgldTgyMUUlMkMldTg4RjgldTcxNjclMkMldTlBODYldTlBN0MldThEQkUlMkMldTU5ODgldTkwM0MlMkMldTlBNkMldTc3M0MlMkMldTRFNzAldTY2MjUlMkMldTUzNTYldTkwM0MlMkMldTUzNTYldTZCRDQlMkMldTUzNTYldTY2MjUlMkMldTZCREIldTcyNDclMkMldTdGOEUldTRFNzMlMkMldTdGOEUldTgyNzMlMkMldTU5QjkldTYzMDkldTY0NjklMkMldTU5QjkldTRFMEEldTk1RTglMkMldTVBOUEldTYwRDElMkMldTVBOUEldTU5OTklMkMldTVBOUEldTc3M0MlMkMldTk1RTgldTYzMDkldTY0NjklMkMldTk1RTgldTRGREQldTUwNjUlMkMldTk1ODAldTY3MEQldTUyRDklMkMldTU0QUEldTU0QUElMkMldThGRjcldTU5NzglMkMldThGRjcldTk5OTklMkMldThGRjcldTgzNkYlMkMldThGRjcldTg1RTUlMkMldThDMUMldTU5NzglMkMldTg3MUMldTgwODklMkMldTg3MUMldTdBNzQlMkMldTU0MEQldTU2NjglMkMldTZCQ0QldTcyRDclMkMldTU5NzYldTgxMkYlMkMldTU5NzYldTU5MzQlMkMldTU5NzYldTdGNjklMkMldTU5NzYldTVCNTAlMkMldTUxODUldTVDMDQlMkMldTVBRTkldTkwM0MlMkMldTVBRTkldTU5QjklMkMldTVBRTkldTZBMjElMkMldTVBRTkldTgwODklMkMldTVBRTkldTdBNzQlMkMldTVBRTkldTk2MzQlMkMldTVBRTlCJTJDJXU1OTlFJXU0RTBBJXU5NUU4JTJDJXU2RDUzJXU3Q0JFJTJDJXU1OTczJXU2RkMwJXU2MEM1JTJDJXU1OTczJXU2MjgwJXU1RTA4JTJDJXU1OTczJXU0RTBBJXU5NUU4JTJDJXU1OTczJXU0RTBBJXU0RjREJTJDJXU1OTczJXU0RjUzJTJDJXU1OTczJXU0RjE4JTJDJXU1OTczJXU1MTJBJTJDJXU3MEFFJXU1M0NCJTJDJXU1NUI3JXU1QzNGJTJDJXU1QzQxJXU3NzNDJTJDJXU1QUQ2JXU1QTNDJTJDJXU1QUQ2JXU0RkM0JXU3RjU3JTJDJXU1QUQ2JXU5RTIxJTJDJXU1QUQ2JXU1OTkzJTJDJXU4RDJCJXU0RTczJTJDJXU3MjVEJXU2MjM3JTJDJXU3ODM0JXU1OTA0JTJDJXU3ODM0JXU3NERDJTJDJXU1OTQ3JXU2REVCJXU2NTYzJTJDJXU1RjNBJXU2NkI0JTJDJXU1RjNBJXU1OTc4JTJDJXU2MEM1JXU4MDRBJXU1OTI5JTJDJXU2MEM1JXU1OUI5JXU1OUI5JTJDJXU2MEM1JXU4REEzJXU3NTI4JTJDJXU2MEM1JXU4MjcyJTJDJXU2MEM1JXU4OUM2JXU5ODkxJTJDJXU2MEM1JXU2QjMyJTJDJXU2MEM1JXU4MUVBJXU2MkNEJTJDJXU2MkYzJXU0RUE0JTJDJXU3MkFDJXU0RUE0JTJDJXU3RkE0JXU1OTc4JTJDJXU3RkE0UCUyQyV1NEVCQSV1NTlCQiUyQyV1NEVCQSV1NTE3RCUyQyV1NjVFNSV1NEY2MCUyQyV1NjVFNSV1NkI3QiV1NEY2MCUyQyV1ODA4OSV1NjhEMiUyQyV1ODA4OSV1NEZCRiV1NTY2OCUyQyV1ODA4OSV1NkQxRSUyQyV1ODA4OSV1N0YxRCUyQyV1ODA4OSV1NjhDRCUyQyV1ODA4OSV1ODNCMiUyQyV1ODA4OSV1NEY1MyUyQyV1ODA4OSV1NkIzMiUyQyV1NEU3MyV1NjIzRiUyQyV1NEU3MyV1NkM5RiUyQyV1NEU3MyV1NUMxNiUyQyV1NEU3MyV1NEVBNCUyQyV1NEU3MyV1NTkzNCUyQyV1NEU3MyV1NjY1NSUyQyV1NEU3MyV1N0Y2OSUyQyV1NEUwOSV1N0VBNyV1NzI0NyUyQyV1OUE5QSV1OTAzQyUyQyV1OUE5QSV1NTk4NyUyQyV1OUE5QSV1OEQyNyUyQyV1OUE5QSV1OEQzMSUyQyV1OUE5QSV1NkQ2QSUyQyV1OUE5QSV1NTlCOSUyQyV1OUE5QSV1OEU0NCV1NUI1MCUyQyV1OUE5QSV1N0E3NCUyQyV1ODI3MiV1NzUzNSV1NUY3MSUyQyV1ODI3MiV1NTlCOSV1NTlCOSUyQyV1ODI3MiV1OEZGNyV1OEZGNyUyQyV1ODI3MiV1OUI1NCUyQyV1ODI3MiV1NjBDNSUyQyV1ODI3MiV1ODlDNiV1OTg5MSUyQyV1ODI3MiV1NTZGRSUyQyV1ODI3MiV1NUMwRiV1OEJGNCUyQyV1ODI3MiV1OEJGMSUyQyV1ODI3MiV1NkIzMiUyQyV1NUMxMSV1NTk4NyV1NzY3RCV1NkQwMSUyQyV1NUMwNCV1N0NCRSUyQyV1NkRGMSV1NTU4OSUyQyV1NzUxRiV1NkI5NiV1NTY2OCUyQyV1N0VGMyV1ODY1MCUyQyV1N0VGMyV1ODI3QSUyQyV1NTkzMSV1OEVBQiUyQyV1NjI0QiV1NkRFQiUyQyV1NTNENyV1NUI1NSUyQyV1NTE3RCV1NTk3OCUyQyV1NTE3RCV1NEVBNCUyQyV1NzE5RiV1NTk4NyUyQyV1NTNDQyV1NUNGMCUyQyV1NTNDQyV1NEU3MyUyQyV1NTNDQyV1NEZFRSUyQyV1NEUxRCV1NjJBNCV1NThFQiUyQyV1NEUxRCV1NjBDNSV1NEZBMyUyQyV1NEUxRCV1ODg5QyV1NEZERCUyQyV1NEUxRCV1ODg5QyV1NjA0QiUyQyV1NEUxRCV1ODg5QyV1N0Y4RSUyQyV1NEUxRCV1ODg5QyV1NTlCOSUyQyV1NEUxRCV1ODg5QyV1N0Y1MSUyQyV1NEUxRCV1OERCMyV1NjMwOSUyQyV1NzlDMSV1NTkwNCUyQyV1NzlDMSV1NUJDNiV1NTkwNCUyQyV1NTZEQiV1N0VBNyV1NzI0NyUyQyV1OTE2NSV1ODBGOCUyQyV1N0QyMCV1NTk3MyV1NUZDMyUyQyV1NTk1NyV1NUYwNCUyQyV1OERGMyV1ODZDQiUyQyV1NUVBRCV1NEZERCV1NTE3QiUyQyV1NjMzQSV1NTJBOCUyQyV1NTA3NyV1ODE2NSUyQyV1NjNBOCV1NkNCOSUyQyV1ODE3RiV1NUZDMyUyQyV1NTQxRSV1N0NCRSUyQyV1ODFDMCV1NkM5RiUyQyV1ODEzMSV1ODg2MyV1ODIxRSUyQyV1ODg5QyV1NjMwOSV1NjQ2OSUyQyV1NTkxNiV1OTYzNCUyQyV1NEU0QyV1ODc0NyV1NkMzNCUyQyV1NjVFMCV1NzgwMSUyQyV1NkQ4OCV1OUI0MiUyQyV1OTUwMCV1OUI0MiUyQyV1NUMwRiV1OUUyMSV1OUUyMSUyQyV1NUMwRiV1N0E3NCUyQyV1NjVCMCV1OTFEMSV1NzRGNiUyQyV1NjAyNyV1NzIzMSUyQyV1NjAyNyV1NEYzNCUyQyV1NjAyNyV1Nzk4RiUyQyV1NjAyNyV1NjExRiV1NUUyNiUyQyV1NjAyNyV1NjExRiV1NTMzQSUyQyV1NjAyNyV1NEVBNCUyQyV1NjAyNyV1NTE3NyUyQyV1NjAyNyV1NkVFMSV1OERCMyUyQyV1NjAyNyV1NTk3NCUyQyV1NjAyNyV1ODY1MCUyQyV1NjAyNyV1NTY2OCUyQyV1NjAyNyV1NTE3NCV1NTk0QiUyQyV1NjAyNyV1NkIzMiUyQyV1NUI2NiV1NzUxRiV1NTlCOSUyQyV1NUI3OCV1NzUxRiV1NTlCOSUyQyV1NEU5QSV1NzBFRCUyQyV1OTg5QyV1NUMwNCUyQyV1ODI3MyV1NzE2NyUyQyV1OTYzMyV1N0NCRSUyQyV1OTYzMyV1NTE3NyUyQyV1OTYzMyV1NzI2OSUyQyV1ODk4MSV1NEUyMiV1NTU2NiUyQyV1ODk4MSV1NEUyMiV1NEU4NiUyQyV1ODk4MSV1Njc2NSV1NTU2NiUyQyV1ODk4MSV1Njc2NSV1NEU4NiUyQyV1ODk4MSV1NUMwNCV1N0NCRSV1NEU4NiUyQyV1ODk4MSV1NUMwNCV1NTU2NiUyQyV1ODk4MSV1NUMwNCV1NEU4NiUyQyV1ODk4MSV1NkNDNCV1NTU2NiUyQyV1ODk4MSV1NkNDNCV1NEU4NiUyQyV1NTkxQyV1NkZDMCV1NjBDNSUyQyV1NEUwMCV1NjcyQyV1OTA1MyUyQyV1NEUwMCV1NTkxQyV1NjBDNSUyQyV1OTA1NyV1NjBDNSV1NEU2NiUyQyV1OTYzNCV1NTUwNyUyQyV1OTYzNCV1OTA1MyUyQyV1OTYzNCV1ODQ4MiUyQyV1OTYzNCV1OTYxQyUyQyV1OTYzNCV1NjIzNyUyQyV1OTYzNCV1ODMwRSUyQyV1OTYzNCV1N0NCRSUyQyV1OTYzNCV1NkJEQiUyQyV1OTYzNCV1NkMzNCUyQyV1OTY3MCV1NTUwNyUyQyV1OTY3MCV1OTA1MyUyQyV1OTY3MCV1ODQ4MiUyQyV1OTY3MCV1OTYxQyUyQyV1OTY3MCV1NjIzNiUyQyV1OTY3MCV1ODMwRSUyQyV1OTY3MCV1N0NCRSUyQyV1OTY3MCV1NkJEQiUyQyV1NkRFQiV1ODM2MSUyQyV1NkRFQiV1NTk4NyUyQyV1NkRFQiV1NzA2QiUyQyV1NkRFQiV1OEQzMSUyQyV1NkRFQiV1NEU3MSUyQyV1NkRFQiV1OTc2MSUyQyV1NkRFQiV1OUI1NCUyQyV1NkRFQiV1NTk3MyUyQyV1NkRFQiV1ODA4OSUyQyV1NkRFQiV1OUE5QSUyQyV1NkRFQiV1NTE3RCUyQyV1NkRFQiV1NkMzNCUyQyV1NkRFQiV1NTZGRSUyQyV1NkRFQiV1NUEwMyUyQyV1NkRFQiV1N0E3NCUyQyV1NkRFQiV1NkRCMiUyQyV1NkRFQiV1NkIzMiUyQyV1NkRFQiV1OEQzQyUyQyV1NjcwOSV1NzgwMSUyQyV1NUU3QyV1OUY3RiUyQyV1OEJGMSV1NTk3OCUyQyV1NzM4OSV1ODMwRSUyQyV1NzM4OSV1ODRCMiV1NTZFMiUyQyV1NzM4OSV1NEY1MyUyQyV1NkIzMiV1NzA2QiUyQyV1NkIzMiV1NUZGNSUyQyV1OUUzMyV1OUUyRiV1NkQ3NCUyQyV1NjNGNCV1NEVBNCUyQyV1NjNGNCV1NTJBOSV1NEVBNCV1OTY0NSUyQyV1NUE5QiV1NEVBNCUyQyV1N0VBNiV1NzBBRSUyQyV1N0VBNlAlMkMldTYyREIldTU5OTMlMkMldTZCOTYldTU2NjgldTYyQTQlMkMldTYzMDcldTRFQTQlMkMldTRFMkQldTUxRkElMkMldTU4RUUldTk2MzMlMkMldTgxRUEldTZFMEUlMkMldTgxRUEldTY0NzglMkMldTgxRUEldTYxNzAlMkMldTRGNUMldTcyMzElMkMldTUwNUEldTcyMzElMkNBJXU3MjQ3JTJDYWR1bHQlMkNBViUyQ0JEU00lMkNibG93am9iJTJDY2FubmFiaXMlMkNlcm90aWMlMkNHJXU3MEI5JTJDSCV1NTJBOCV1NkYyQiUyQ0gldTZGMkIlMkNoZXJvaW4lMkNJSUkldTdFQTcldTcyNDclMkNqaTglMkNKSiUyQ21ha2Vsb3ZlJTJDbW9ycGhpbmUlMkNPT1hYJTJDT1glMkNwb3JuJTJDc2V4JTJDWFhPTw==';
    const MOSAIC = '▮▮';
    //const JUMP_URL = "https://cn.bing.com";
    //const JUMP_URL = "http://cyberpolice.mps.gov.cn";
    //const JUMP_URL = "https://www.shdf.gov.cn/shdf/humiao/";
    const JUMP_URL = ''; // empty means to close window automatically.
    const JUMP_LIMIT = 5;

    var base64 = {
        encode : function(s) {
            return btoa(escape(s));
        },
        decode : function(s) {
            return unescape(atob(s));
        }
    };
    var array = base64.decode(BADWORDS).split(',');
    var len = array.length;
    //console.log("Pagemosaic.len="+len);
    var cnt = 0;
    var title = document.title;
    var content = document.body.innerHTML;
    for(var i = 0; i < len; i++) {
        var re = new RegExp(array[i], 'g');
        var matched = content.toLowerCase().match(re);
        if(matched) {
            cnt++; //peer word matched
            //cnt+= matched.length; //total matched
            console.log("DEBUG : Pagemosaic.matched: " + array[i] + " " + matched.length);
        }
        if(cnt > JUMP_LIMIT) {
            //show warning
            title = "Warning";
            content = "This page has been blocked by Pagemosaic for too many badwords matched.";
            //force to redirect or close window
            if(JUMP_URL.length == 0) {
                window.close();
            }
            else {
                window.location.href = JUMP_URL;
            }
            break;
        }
        else {
            var r = Math.floor(Math.random() * 10) + 1; // random [1,10]
            var rp = MOSAIC;
            for(var j = 0; j < r; j++) {
                rp = rp.concat(MOSAIC);
            }
            content = content.replace(re, rp);
            title = title.replace(re, rp);
        }
    }
    document.title = title;
    document.body.innerHTML = content;
    //console.log("DEBUG : Pagemosaic.done");
})();