Greasy Fork is available in English.

Auto Check Remember Login

The script will automatically check all remember login checkbox

// ==UserScript==
// @name              Auto Check Remember Login
// @name:en           Auto Check Remember Login
// @name:vi           Tự Động Check Ghi Nhớ Đăng nhập
// @namespace         https://greasyfork.org/users/37096/
// @homepage          https://greasyfork.org/scripts/30726/
// @supportURL        https://greasyfork.org/scripts/30726/feedback
// @version           1.3.0.3
// @description       The script will automatically check all remember login checkbox
// @description:en    The script will automatically check all remember login checkbox
// @description:vi    Script này sẽ tự động check tất cả các checkbox ghi nhớ đăng nhập
// @author            Hồng Minh Tâm
// @include           *
// @icon              https://4.bp.blogspot.com/-PijzdJYq1vk/WVhqpk1wGdI/AAAAAAAAAKw/Eu1Z_gDYU_UXtGGyN6v2ceE6unPCUaVSQCLcBGAs/s1600/auto-check-remember-login.png
// @compatible        chrome
// @compatible        firefox
// @compatible        opera
// @license           GNU GPLv3
// @grant             GM_registerMenuCommand
// @grant             GM_addStyle
// @grant             GM_setValue
// @grant             GM_getValue
// @grant             GM_info
// ==/UserScript==

(function () {
  'use strict';

  var ACRL = {
    name: 'Auto Check Remember Login',
    optionsDefault: {
      language: 'default',
      checked: true,
      masks: {
        values: ['remember', 'cookie', 'persistent-login', 'ghinho', 'ricordami', 'lembrar', 'recordarme', 'recordar', 'keeplogged'],
        texts: ['remember', 'keep me', 'stay signed-in', 'ghi nhớ', 'ricordami', 'lembrar', 'lembre-se de mim', 'recordarme', 'recordar', 'Запомнить', 'se souvenir', '记住登录', '保持登入狀態', '記住我的資訊', 'ログインを記憶する'],
      },
      version: GM_info.script.version
    },
    languages: {
      vi: {
        name: 'Tiếng Việt',
        'Auto Check Remember Login': 'Tự Động Check Ghi Nhớ Đăng nhập',
        'Settings': 'Cài đặt',
        'Language': 'Ngôn ngữ',
        'Show advanced settings': 'Hiện thị cài đặt nâng cao',
        'Uncheck all remember login checkbox': 'Bỏ check tất cả các checkbox ghi nhớ đăng nhập',
        'Wait until a checkbox is found': 'Chờ cho đến khi một checkbox được tìm thấy',
        'Limit wait': 'Giới hạn chờ',
        'Delay wait': 'Trì hoãn chờ',
        'Browser default': 'Mặc định của trình duyệt',
        'Reset settings': 'Đặt lại cài đặt',
        'Cancel': 'Hủy bỏ'
      }
    },
    checkboxs: undefined,
    init: function () {
      ACRL.loadSettings();
      ACRL.setLangBrowser();
      ACRL.registerCommands();
      if (ACRL.options.masks) {
        ACRL.observeDOM(document, function () {
          ACRL.checkRememberLogin();
        });
      }
    },
    setSettings: function () {
      GM_setValue('options', ACRL.options);
    },
    getSettings: function () {
      return GM_getValue('options');
    },
    loadSettings: function () {
      var options = ACRL.getSettings('options');
      if (options) {
        if (ACRL.optionsDefault.version !== options.version) {
          ACRL.updateSetting(options);
        } else {
          ACRL.options = options;
        }
      } else {
        ACRL.options = ACRL.optionsDefault;
        ACRL.setSettings();
      }
    },
    resetSettings: function () {
      ACRL.options = ACRL.optionsDefault;
      ACRL.setSettings();
    },
    updateSetting: function (options) {
      var values = ACRL.array.unique(options.masks.values, ACRL.optionsDefault.masks.values);
      var texts = ACRL.array.unique(options.masks.texts, ACRL.optionsDefault.masks.texts);
      ACRL.options = options;
      ACRL.options.masks.values = values;
      ACRL.options.masks.texts = texts;
      ACRL.options.version = ACRL.optionsDefault.version;
      ACRL.setSettings();
    },
    getLangs: function () {
      var language;
      var languages = [{
        value: 'en',
        label: 'English'
      }];
      for (language in ACRL.languages) {
        languages.push({
          value: language,
          label: ACRL.languages[language].name
        });
      }
      languages.sort(ACRL.sort.dynamicSort('label'));
      return languages;
    },
    setLangBrowser: function () {
      ACRL.languageBrowser = ACRL.getLangBrowser();
    },
    getLangBrowser: function () {
      return (navigator.language || navigator.userLanguage || 'en').replace('-', '_').toLowerCase().split('_')[0];
    },
    changeLang: function (text, language) {
      if (typeof (language) === "undefined") {
        if (typeof (ACRL.options.language) !== "undefined") {
          language = ACRL.options.language;
        } else {
          language = ACRL.languageBrowser;
        }
      }
      if (ACRL.languages[language] && ACRL.languages[language][text]) {
        return ACRL.languages[language][text];
      }
      return text;
    },
    sort: {
      dynamicSort: function (property) {
        var sortOrder = 1;
        if (property[0] === '-') {
          sortOrder = -1;
          property = property.substr(1);
        }
        return function (a, b) {
          var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
          return result * sortOrder;
        };
      }
    },
    array: {
      unique: function (array1, array2) {
        var array3 = array1.slice(0);
        var len1 = array1.length;
        var len2 = array2.length;
        var assoc = {};
        while (len1--) {
          assoc[array1[len1]] = null;
        }
        while (len2--) {
          var itm = array2[len2];
          if (assoc[itm] === undefined) {
            array3.push(itm);
            assoc[itm] = null;
          }
        }
        return array3;
      }
    },
    commands: [{
      caption: 'Settings',
      execute: function () {
        ACRL.openSettings();
      }
    }],
    addCommands: function (cmd) {
      if (typeof GM_registerMenuCommand != 'undefined') {
        GM_registerMenuCommand(ACRL.changeLang(ACRL.name) + ' - ' + ACRL.changeLang(cmd.caption), cmd.execute);
      }
    },
    registerCommands: function () {
      ACRL.commands.forEach(function (cmd) {
        ACRL.addCommands(cmd);
      });
    },
    checkRememberLogin: function () {
      ACRL.checkboxs = document.querySelectorAll('input[type=checkbox]:not([data-acrl="true"]):not([class*="acrl-"])');
      if (ACRL.checkboxs.length > 0) {
        for (var i = 0; i < ACRL.checkboxs.length; i++) {
          var checkbox = ACRL.checkboxs[i];
          ACRL.checkValues(checkbox);
          ACRL.checkTexts(checkbox);
          checkbox.dataset.acrl = true;
        }
      }
    },
    observeDOM: (function () {
      var MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
        eventListenerSupported = window.addEventListener;

      return function (obj, callback) {
        if (MutationObserver) {
          var obs = new MutationObserver(function (mutations, observer) {
            if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
              callback();
            }
          });
          obs.observe(obj, {
            childList: true,
            subtree: true
          });
        } else if (eventListenerSupported) {
          obj.addEventListener('DOMNodeInserted', callback, false);
          obj.addEventListener('DOMNodeRemoved', callback, false);
        }
      };
    })(),
    createPattern: function (value) {
      return new RegExp(value, 'i');
    },
    getCheckBoxText: function (element) {
      var checkboxElementText = element;
      var checkboxText = null;
      do {
        checkboxElementText = checkboxElementText.nextSibling;
        if (checkboxElementText) {
          checkboxText = (checkboxElementText.textContent || checkboxElementText.innerText || checkboxElementText.nodeValue || checkboxElementText.innerHTML).trim();
        } else {
          checkboxText = null;
          break;
        }
      } while (!checkboxText);
      return checkboxText;
    },
    checkValue: function (element, value) {
      var patt = ACRL.createPattern(value);
      if (patt.test(element.name) || patt.test(element.id) || patt.test(element.className) || patt.test(element.value)) {
        return true;
      }
      return false;
    },
    checkText: function (checkboxText, text) {
      var patt = ACRL.createPattern(text);
      if (patt.test(checkboxText)) {
        return true;
      }
      return false;
    },
    checkValues: function (checkbox) {
      if (ACRL.options.masks.values && checkbox.checked !== ACRL.options.checked) {
        for (var i = 0; i < ACRL.options.masks.values.length; i++) {
          var value = ACRL.options.masks.values[i];
          if (ACRL.checkValue(checkbox, value)) {
            checkbox.click();
            break;
          }
        }
      }
    },
    checkTexts: function (checkbox) {
      if (ACRL.options.masks.texts && checkbox.checked !== ACRL.options.checked) {
        var checkboxText = ACRL.getCheckBoxText(checkbox);
        if (checkboxText) {
          for (var i = 0; i < ACRL.options.masks.texts.length; i++) {
            var text = ACRL.options.masks.texts[i];
            if (ACRL.checkText(checkboxText, text) || ACRL.checkText(checkboxText, text.replace('-', ' '))) {
              checkbox.click();
              break;
            }
          }
        }
      }
    },
    openSettings: function () {
      ACRL.loadSettings();
      var itemLanguages = ACRL.getLangs();
      itemLanguages.unshift({
        value: 'default',
        label: ACRL.changeLang('Browser default')
      });
      var comboboxLanguage = new ACRL.form.Select(ACRL.changeLang('Language') + ':', {
        required: true,
        items: itemLanguages,
        value: ACRL.options.language
      }, function (e) {
        ACRL.options.language = e.target.value;
        ACRL.setSettings();
        ACRL.openSettings();
      });
      // var listValue = new ACRL.form.List(ACRL.changeLang('Values') + ':', {
      //   items: ACRL.options.masks.values
      // });
      var checkboxUncheck = new ACRL.form.CheckInput('checkbox', ACRL.changeLang('Uncheck all remember login checkbox'), {
        checked: !ACRL.options.checked
      }, function (e) {
        ACRL.options.checked = !e.target.checked;
        ACRL.setSettings();
      });
      var formElement = ACRL.createElement('acrl-form', undefined, [comboboxLanguage.element, checkboxUncheck.element /* , listValue.element */ ]);
      var buttonResetElement = ACRL.createElement('button', {
        class: 'acrl-btn red'
      }, ACRL.changeLang('Reset settings'));
      ACRL.Dialog.closeId('modal-setting');
      var dialog = new ACRL.Dialog(ACRL.changeLang(ACRL.name) + ' - ' + ACRL.changeLang('Settings'), formElement, 'modal-setting', [buttonResetElement]);
      buttonResetElement.onclick = function () {
        ACRL.resetSettings();
        ACRL.openSettings();
      };
      dialog.show();
    },
    Dialog: (function () {
      function Dialog(title, htmlContent, id, buttonFooters) {
        if (typeof (id) === "undefined") {
          id = 'modal-' + (Math.floor(Math.random() * 1000000) + 1);
        }
        this.title = title;
        this.htmlContent = htmlContent;
        this.id = id;
        var buttonCloseElement = ACRL.createElement('button', {
          'class': 'acrl-close'
        }, '\u00d7');
        var modalHeaderElement = ACRL.createElement('div', {
          'class': 'acrl-modal-header'
        }, [this.title, buttonCloseElement]);
        var modalBodyElement = ACRL.createElement('div', {
          'class': 'acrl-modal-body'
        }, this.htmlContent);
        var modalFooterElement = ACRL.createElement('div', {
          'class': 'acrl-modal-footer'
        }, buttonFooters);
        var modalContentElement = ACRL.createElement('div', {
          'class': 'acrl-modal-content'
        }, [modalHeaderElement, modalBodyElement, modalFooterElement]);
        var modalElement = ACRL.createElement('div', {
          'class': 'acrl-modal',
          'id': this.id
        }, [modalContentElement]);
        buttonCloseElement.onclick = this.close.bind(this);
        modalElement.onclick = this.close.bind(this);
        modalContentElement.onclick = function (e) {
          e.stopPropagation();
        };
        this.dialog = modalElement;
      }
      Dialog.prototype = {
        show: function () {
          document.body.appendChild(this.dialog);
        },
        close: function (dialog) {
          this.dialog.remove();
        }
      };
      Dialog.closeId = function (id) {
        if (document.getElementById(id) !== null) {
          document.getElementById(id).remove();
        }
      };
      return Dialog;
    }()),
    form: {
      Control: (function () {
        function Control(type, label, attribute, event) {
          if (typeof (attribute) !== 'object') {
            attribute = {};
          }
          if (typeof (attribute.id) === 'undefined') {
            attribute.id = type + '-' + (Math.floor(Math.random() * 1000000) + 1);
          }
          var inputElement = ACRL.createElement('input', attribute);
          inputElement.type = type;
          inputElement.className = 'acrl-form-control';
          var labelElement = ACRL.createElement('label', {
            for: attribute.id
          }, label);
          var controlElement = ACRL.createElement('div', {
            class: 'acrl-form-group',
          }, [labelElement, inputElement]);
          this.label = label;
          this.id = attribute.id;
          this.inputElement = inputElement;
          this.element = controlElement;
          inputElement.oninput = event;
          if (type === 'number') {
            inputElement.oninput = function (e) {
              e.target.value = parseInt(e.target.value) ? e.target.value.replace(/^0+/, '') : (this.min || 0);
              event(e);
            };
          } else {
            inputElement.oninput = event;
          }
        }
        Control.prototype = {
          oninput: function (event) {
            this.inputElement.oninput = function (e) {
              e.target.value = parseInt(e.target.value) ? e.target.value.replace(/^0+/, '') : (this.min || 0);
              event(e);
            };
          }
        };
        return Control;
      }()),
      Select: (function () {
        function Select(label, attribute, event) {
          var items = [],
            itemElements = [];
          if (typeof (attribute) !== 'object') {
            attribute = {};
          }
          if (typeof (attribute.id) === 'undefined') {
            attribute.id = 'select-' + (Math.floor(Math.random() * 1000000) + 1);
          }
          if (typeof (attribute.items) !== 'undefined') {
            items = attribute.items;
            delete attribute.items;
          }
          var selectElement = ACRL.createElement('select', attribute);
          selectElement.className = 'acrl-form-control';
          if (!Array.isArray(items)) {
            items = [items];
          }
          for (var i = 0; i < items.length; i++) {
            var text = items[i].label;
            delete items[i].label;
            var itemElement = ACRL.createElement('option', items[i], text);
            selectElement.appendChild(itemElement);
            itemElements.push(itemElement);
          }
          if (typeof (attribute.value) !== 'undefined') {
            selectElement.value = attribute.value;
          }
          var labelElement = ACRL.createElement('label', {
            for: attribute.id
          }, label);
          var controlElement = ACRL.createElement('div', {
            class: 'acrl-form-group',
          }, [labelElement, selectElement]);
          this.label = label;
          this.id = attribute.id;
          this.selectElement = selectElement;
          this.element = controlElement;
          this.itemElements = itemElements;
          selectElement.onchange = event;
        }
        Select.prototype = {
          onchange: function (event) {
            this.selectElement.onchange = event();
          }
        };
        return Select;
      }()),
      CheckInput: (function () {
        function CheckInput(type, label, attribute, event) {
          if (typeof (attribute) !== 'object') {
            attribute = {};
          }
          if (typeof (attribute.id) === 'undefined') {
            attribute.id = type + '-' + (Math.floor(Math.random() * 1000000) + 1);
          }
          var inputElement = ACRL.createElement('input', attribute);
          inputElement.type = type;
          inputElement.className = 'acrl-form-check-input';
          var textElement = ACRL.createElement('span', undefined, label);
          var labelElement = ACRL.createElement('label', {
            class: 'acrl-form-check-label'
          }, [inputElement, textElement]);
          var checkInputElement = ACRL.createElement('div', {
            class: 'acrl-form-check',
          }, labelElement);
          this.label = label;
          this.id = attribute.id;
          this.inputElement = inputElement;
          this.element = checkInputElement;
          inputElement.onchange = event;
        }
        CheckInput.prototype = {
          onchange: function (event) {
            this.inputElement.onchange = event;
          },
        };
        CheckInput.createGroup = function (name, checkInputs) {
          var checkInputGroup = ACRL.createElement('div', {
            class: 'acrl-form-group',
            id: name
          });
          for (var i = 0; i < checkInputs.length; i++) {
            var checkInput = checkInputs[i];
            checkInput.inputElement.name = name;
            checkInputGroup.appendChild(checkInput.element);
          }
          return checkInputGroup;
        };
        return CheckInput;
      }()),
      // List: (function () {
      //   function List(label, attribute, event) {
      //     var items = [],
      //       itemElements = [];
      //     if (typeof (attribute) !== 'object') {
      //       attribute = {};
      //     }
      //     if (typeof (attribute.id) === 'undefined') {
      //       attribute.id = 'list-' + (Math.floor(Math.random() * 1000000) + 1);
      //     }
      //     if (typeof (attribute.items) !== 'undefined') {
      //       items = attribute.items;
      //       delete attribute.items;
      //     }
      //     var listElement = ACRL.createElement('ul', attribute);
      //     listElement.className = 'acrl-form-control';
      //     if (!Array.isArray(items)) {
      //       items = [items];
      //     }
      //     items.forEach(function (item) {
      //       var itemElement = ACRL.createElement('li', {}, item);
      //       listElement.appendChild(itemElement);
      //       var buttonCloseElement = ACRL.createElement('button', {
      //         class: 'acrl-btn'
      //       }, '\u00d7');
      //       buttonCloseElement.onclick = function (e) {
      //         var index = Array.prototype.indexOf.call(itemElements, itemElement);
      //         if (index > -1) {
      //           listElement.removeChild(itemElement);
      //           items.splice(index, 1);
      //           itemElements.splice(index, 1);
      //         }
      //         console.log(items);
      //       };
      //       itemElement.appendChild(buttonCloseElement);
      //       itemElements.push(itemElement);
      //     });
      //     var labelElement = ACRL.createElement('label', {
      //       for: attribute.id
      //     }, label);
      //     var controlElement = ACRL.createElement('div', {
      //       class: 'acrl-form-group',
      //     }, [labelElement, listElement]);
      //     this.label = label;
      //     this.id = attribute.id;
      //     this.listElement = listElement;
      //     this.element = controlElement;
      //     this.itemElements = itemElements;
      //   }
      //   List.prototype = {
      //     getItems: function () {
      //       return this.items;
      //     }
      //   };
      //   return List;
      // }()),
    },
    createElement: function (element, attribute, inner) {
      if (typeof (element) === "undefined") {
        return false;
      }
      if (typeof (inner) === "undefined") {
        inner = "";
      }
      var el = document.createElement(element);
      if (typeof (attribute) === 'object') {
        for (var key in attribute) {
          el.setAttribute(key, attribute[key]);
        }
        if (typeof (attribute.value) !== 'undefined') {
          el.value = attribute.value;
        }
        if (typeof (attribute.disabled) !== 'undefined') {
          el.disabled = attribute.disabled;
        }
        if (typeof (attribute.checked) !== 'undefined') {
          el.checked = attribute.checked;
        }
        if (typeof (attribute.required) !== 'undefined') {
          el.required = attribute.required;
        }
      }
      if (!Array.isArray(inner)) {
        inner = [inner];
      }
      for (var k = 0; k < inner.length; k++) {
        if (inner[k].nodeName) {
          el.appendChild(inner[k]);
        } else {
          el.appendChild(document.createTextNode(inner[k]));
        }
      }
      return el;
    }
  };

  GM_addStyle([
    '[class*="acrl-"], [class*="acrl-"] * { color: #333; font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: 400; line-height: 1.5; padding: 0; margin: 0; min-width: auto; min-height: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }',
    '[class*="acrl-"]:before, [class*="acrl-"]:after, [class*="acrl-"] *:before, [class*="acrl-"] *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }',
    '.inline[class*="acrl-"] { display: inline-block; }',
    '.inline[class*="acrl-"] + .inline { margin-left: 10px }',
    /*modal*/
    '.acrl-modal { z-index: 9999999999; padding-top: 100px; position: fixed; top: 0; right: 0; bottom: 0; left: 0; overflow: auto; background-color: rgba(0,0,0,0.5); }',
    '.acrl-modal-content { margin: auto; background-color: #fff; position: relative; outline: 0; width: 600px; }',
    '.acrl-modal-header { color: #fff; background-color: #2196F3; padding: 15px; font-weight: 700; position: relative; }',
    '.acrl-modal-body { padding: 15px; }',
    '.acrl-modal-footer { background-color: #f9f9f9; border-top: 1px solid #ddd; padding: 8px 15px; text-align: right; }',
    '.acrl-modal-footer > button + button {  margin-left: 8px; }',
    '.acrl-modal-footer:empty { display: none; }',
    '.acrl-modal-footer:before, .acrl-modal-footer:after { content: ""; display: table; clear: both; }',
    '.acrl-modal .acrl-close { position: absolute; right: 0; top: 0; bottom: 0; padding: 0 20px; border: none; box-shadow: none; border-radius: 0; outline: 0; text-decoration: none; color: inherit; background-color: inherit; font-size: 24px; font-weight: 700; }',
    '.acrl-modal .acrl-close:hover { color: #fff; background-color: #f44336; }',
    /*form*/
    '.acrl-form-group > label { display: inline-block; margin-bottom: 5px; }',
    '.acrl-form-control { padding: 5px 10px; color: #333; background-color: #fff; border: 1px solid #ccc; width: 100%; display: block; margin-bottom: 10px }',
    '.acrl-form-group.inline .acrl-form-control { display: inline-block; margin-left: 8px; width: auto; }',
    '.acrl-form-control[disabled] { background-color: #eee; color: #888 }',

    '.acrl-form-check { display: block; margin-bottom: 10px; }',
    '.acrl-form-group.inline .acrl-form-check { display: inline-block; }',
    '.acrl-form-group.inline .acrl-form-check + .acrl-form-check { margin-left: 10px; }',
    '.acrl-form-check-label { position: relative; padding: 0; margin: 0; display: inline-block; }',
    '.acrl-form-check-input { display: none !important; }',
    'input.acrl-form-check-input + span, input.acrl-form-check-input + span { padding: 0; margin: 0; }',
    '.acrl-form-check-input + span:before { position: relative; top: 5px; display: inline-block; width: 20px; height: 20px; content: ""; border: 2px solid #c0c0c0; margin-right: 8px }',
    '.acrl-form-check-input:checked + span:before { border-color: #3e97eb; }',
    '.acrl-form-check-input:checked + span:after { content: ""; position: absolute; }',
    '.acrl-form-check-input[type="checkbox"] +span:before { border-radius: 2px; }',
    '.acrl-form-check-input[type="checkbox"]:checked + span:before { background: #3e97eb; }',
    '.acrl-form-check-input[type="checkbox"]:checked + span:after { top: 8px; left: 7px; width: 6px; height: 12px; transform: rotate(45deg); border: 2px solid #fff; border-top: 0; border-left: 0; }',
    '.acrl-form-check-input[type="radio"] +span:before { border-radius: 50%; }',
    '.acrl-form-check-input[type="radio"]:checked + span:after { top: 10px; left: 5px; width: 10px; height: 10px; border-radius: 50%; background: #3e97eb; }',
    /*button*/
    '.acrl-btn { padding: 5px 10px; color: #333; background-color: #fff; border: 1px solid #ccc; }',
    '.acrl-btn:hover { color: #333; background-color: #e6e6e6; }',
    '.acrl-btn.blue { color: #fff; background-color: #2196F3; border-color: #2196F3; }',
    '.acrl-btn.red { color: #fff; background-color: #f44336; border-color: #f44336; }',
    '.acrl-btn.left { float: left; }'
  ].join('\n'));
  ACRL.init();
})();