Wod auto completion

Add auto completion text field for item type and skill bonus selector

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//-----------------------------------------------------------------------------
// [WoD] Item type / skill bonus auto completion
// Copyright (c) Jim Zhai
//-----------------------------------------------------------------------------
// ==UserScript==
// @name          Wod auto completion
// @author        Jim Zhai
// @namespace     org.toj
// @version       0.6.1
// @description   Add auto completion text field for item type and skill bonus selector
// @include       http*://*.world-of-dungeons.*/wod/*
// @exclude       http*://*.world-of-dungeons.*/wod/spiel/hero/skillconf*
// @grant         GM_addStyle
// @grant         GM_getResourceText
// @require       https://code.jquery.com/jquery-3.3.1.min.js
// @require       https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js
// @resource      select2-css https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css
// ==/UserScript==

GM_addStyle(GM_getResourceText("select2-css"));
GM_addStyle('.select2-results__option {padding: 2px}');
GM_addStyle('.select2-container--default .select2-results>.select2-results__options {max-height: 60vh}');

var minOptionCount = 13;
var ignoreFields = [/^EquipItem\[\d+\]$/i, /^sndgrp\d*\[\d+\]$/i];

var height, outerHeight, backgroundColor, fontColor, border, fontSize, borderRadius;

$("select").each(function() {
  $this = $(this);
  if (minOptionCount > 0 && $this.find("option").length > minOptionCount && doNotIgnore($this.prop("name"))) {
    $this.find("option").each(function() {
      if (!this.text) {
        this.text = " ";
      }
    });
    if (height == null) {
      height = $this.css("height");
      outerHeight = $this.outerHeight() + "px";
      backgroundColor = $this.css("background-color");
      fontColor = $this.css("color");
      border = $this.css("border");
      fontSize = (parseFloat($this.css("font-size")) * 72.0 / 96.0).toFixed() + "pt";
      borderRadius = $this.css("border-radius");
    }
    $this.select2({'width':'resolve'});
  }
});

GM_addStyle(".select2-container .select2-selection--single {" +
            "height: " + outerHeight + ";" +
            "border: " + border + ";" +
            "border-radius: " + borderRadius + ";" +
            "background-color: " + backgroundColor + ";" +
            "}");
GM_addStyle(".select2-container--default .select2-selection--single .select2-selection__rendered {" +
            "height: " + height + ";" +
            "font-size: " + fontSize + ";" +
            "color: " + fontColor + ";" +
            "padding-left: 5px;" +
            "line-height: 1.5;" +
            "text-overflow: inherit;" +
            "}");
GM_addStyle(".select2-container--default .select2-selection--single .select2-selection__arrow {height: " + height + "; top: " + 50% + ";}");
GM_addStyle(".select2-container--default .select2-selection--single {background-color: " + backgroundColor + "; font-size: " + fontSize + "; color: " + fontColor + "; border: " + border + ";}");
GM_addStyle(".select2-dropdown {background-color: " + backgroundColor + "; font-size: " + fontSize + "; color: " + fontColor + "; border: " + border + ";}");
GM_addStyle(".select2-selection {background-color: " + backgroundColor + "; font-size: " + fontSize + ";}");

function doNotIgnore(field) {
  if (ignoreFields.length <= 0) {
    return true;
  }

  var flag = true;
  $.each(ignoreFields, function(index, pattern) {
    if (field.search(pattern) != -1) {
      flag = false;
    }
  });
  return flag;
}