Community Central
Community Central

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*
Search Fix

TO INSTALL, PUT ALL THE CODE ON:
http://community.wikia.com/wiki/User:YOUR_USERNAME/global.js

Use the "..." button in the search dialog to configure
If you want to do "go" searches from an external source, do them like this:
http://tibia.wikia.com/wiki/Special:Search?search_fix_go=1&search=YOUR SEARCH HERE

Known issues:
"go" won't work on pages with special case like abbreviations, only lower-case, UPPER-CASE and Camel-Case.
"go" from external sources is a bit ugly but it does the job.
*/

/*global $, skin, addOnloadHook */
/*jslint devel: true, browser: true, indent: 2, plusplus: true, bitwise: true, white: true */
addOnloadHook(
function () {
  'use strict';
  if (skin !== 'oasis') { return; }
  var
    get_cookie = function () {
      var i, c, cl = document.cookie.split(';');
      for (i = 0; i < cl.length; i++) {
        c = $.trim(cl[i]);
        if (c.indexOf('search_fix=') === 0) { return parseInt(c.substring(11), 10) || 0; }
      }
      return 1;
    },
    set_cookie = function (val) {
      var date = new Date();
      date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000));
      date = date.toGMTString();
      document.cookie = 'search_fix=' + val + '; expires=' + date + '; domain=.wikia.com; path=/';
      return val;
    },
    settings,
    $original_search_button = $('#WikiaSearch button.secondary:first'),
    $go_button = $original_search_button.clone(),
    $options_button = $original_search_button.clone(),
    $search_text = $('#WikiaSearch input[name="search"]'),
    go_button_arrow = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAYAAAD52jQlAAAAAXNSR0IArs4c6QAAAFNJREFUOMtjYBgsoLq6+gw+eUZKDGxtbTWhiqHEGMxIjSBAN5iRWmGLbDAjNSMNZjAjMbFJCmhtbTVhokWSo533B01EUT1JUT3xE5NNaVKg0AQAAB9RMIjCqha0AAAAAElFTkSuQmCC',
    go_button_load = 'data:image/gif;base64,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',
    search_pos,
    search_text,
    do_go = function (t, external_search) {
      var
        camelcase = function (t, all) {
          if (typeof all === 'undefined') { all = false; }
          /*jslint regexp: true */
          t = t.replace(/^(.)|\s(.)|-(.)|_(.)/g, function ($1) { return $1.toUpperCase(); });
          /*jslint regexp: false */
          if (all) { return t; }
          return t.replace(/( (?:a|an|and|as|at|by|for|from|in|of|on|some|that|the|to|with) )/gi, function ($1) { return $1.toLowerCase(); });
        },
        x, case_variations = {}, titles = [], settings = get_cookie();
      if (typeof external_search === 'undefined') { external_search = false; }
      t = $.trim(t);
      if (t !== '') {
        $go_button.attr('disabled', 'disabled').find('img').attr('src', go_button_load);
        case_variations[t.substr(0, 1).toUpperCase() + t.substr(1)] = 0;
        case_variations[camelcase(t)] = 0;
        case_variations[camelcase(t, true)] = 0;
        case_variations[t.toLowerCase()] = 0;
        case_variations[t.toUpperCase()] = 0;
        for (x in case_variations) { if (case_variations.hasOwnProperty(x)) { titles.push(encodeURIComponent(x)); } }
        if (settings & 8) {
          for (x in case_variations) { if (case_variations.hasOwnProperty(x)) { titles.push(encodeURIComponent('Category:' + x)); } }
        }
        $.ajax({
          'url': '/api.php?action=query&titles=' + (titles.join('|')) + (settings & 8 ? '&prop=categoryinfo' : '') + '&format=json',
          'dataType': 'json',
          'type': 'GET',
          'async': (external_search || !(settings & 2)),
          'timeout': 5000,
          'success': function (o) {//alert(JSON.stringify(o, ' ', 2));
            var x, pages, url;
            if (o.hasOwnProperty('query') && o.query.hasOwnProperty('pages')) {
              pages = o.query.pages;
              for (x in pages) { if (pages.hasOwnProperty(x)) {
                if (parseInt(x, 10) > 0) {
                  url = 'http://' + location.host + '/wiki/' + encodeURI(pages[x].title);
                  if (!external_search && settings & 2) { window.open(url); }
                  else { window.location.href = url; }
                  return;
                }
              } }
              if (settings & 8) {
                for (x in pages) { if (pages.hasOwnProperty(x) && pages[x].hasOwnProperty('categoryinfo')) {
                  url = 'http://' + location.host + '/wiki/' + encodeURI(pages[x].title);
                  if (!external_search && settings & 2) { window.open(url); }
                  else { window.location.href = url; }
                  return;
                } }
              }
            }
          },
          'error': function () { },
          'complete': function () {
            $go_button.removeAttr('disabled').find('img').attr('src', go_button_arrow);
          }
        });
      }
    };
  /* external search */
  if (location.search.indexOf('search_fix_go=1') !== -1 && location.search.indexOf('search=') !== -1) {
    search_pos = location.search.indexOf('search=') + 7;
    search_text = decodeURIComponent(location.search.substr(search_pos).split(/&|;/)).replace('+', ' ');
    do_go(search_text, true);
  }
  if ($('#WikiaSearch').size() < 1) { return; }

  /*adding buttons*/
  $original_search_button.after($options_button).before($go_button);
  $go_button.add($options_button).find('img')
    .removeClass('sprite search')
    .attr('alt', function (i) { return ['Go', 'Options'][i]; })
    .attr('src', function (i) { return [
      go_button_arrow,
      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAAXNSR0IArs4c6QAAAB1JREFUKM9jYBgFo2CkgOrq6jPV1dVniOUz0d2FAHu/DXFavA0iAAAAAElFTkSuQmCC'
    ][i]; })
    .add($original_search_button.find('img'))
    .height(16).width(function (i) { return [21, 21, 10][i]; })
    .parent().css('padding', '0px 6px');
  $go_button.css('right', '+=' + ($original_search_button.outerWidth() + $options_button.outerWidth()));
  $original_search_button.css('right', '+=' + $options_button.outerWidth());
  $search_text.css('padding-right', '+=' + (($original_search_button.outerWidth() + $options_button.outerWidth())))
    .width($search_text.width() - ($original_search_button.outerWidth() + $options_button.outerWidth()));

  /*removing auto complete*/
  $(document).ready(function () { if (get_cookie() & 4) { $.loadJQueryAutocomplete = function () { }; } });

  /*events*/
  $go_button.click(function () {
    do_go($search_text.val());
    return false;
  });
  $original_search_button.click(function () {
    $('#WikiaSearch').attr('target', get_cookie() & 2 ? '_blank' : '_self');
    $('#WikiaSearch').submit();
    return false;
  });
  $options_button.click(function () {
    var check_settings = function (name, num) {
      if (settings & num) { $('#search_fix_opt_' + name).attr('checked', 'checked'); }
      else { $('#search_fix_opt_' + name).removeAttr('checked'); }
    };
    if ($('#search_fix_options').size() < 1) {
      $('#WikiaSearch').after(
        $('<section />', {'id': 'search_fix_options', 'class': 'asasamodule'})
          .css({
            'background': '#FFFFFF',
            'border': '1px solid #CCCCCC',
            'box-shadow': '0px 2px 5px 0px #E0E0E0',
            'display': 'none',
            'line-height': '1.5em',
            'margin-bottom': '10px',
            'max-width': '282px',
            'padding': '8px',
            'position': ($('#WikiaRail #WikiaSearch').size() ? 'relative' : 'absolute'),
            'right': ($('#WikiaRail #WikiaSearch').size() ? 0 : 10) + 'px',
            'top': ($('#WikiHeader #WikiaSearch').size() ? 83 : ($('#WikiaArticle #WikiaSearch').size() ? 38 : 0)) + 'px'
          })
          .append(
            'What to use when you press Enter:',
            $('<br />'),
            $('<input />', {'type': 'radio', 'id': 'search_fix_opt_search', 'value': '0', 'name': 'search_fix_default_button', 'checked': 'checked'}),
            'Search',
            $('<br />'),
            $('<input />', {'type': 'radio', 'id': 'search_fix_opt_go',  'value': '1', 'name': 'search_fix_default_button'}),
            'Go',
            $('<br />'),
            $('<br />'),
            $('<input />', {'type': 'checkbox', 'value': '1', 'id': 'search_fix_opt_new_window', 'name': 'search_fix_new_window'}),
            'Open all searches in a new window',
            $('<br />'),
            $('<input />', {'type': 'checkbox', 'value': '1', 'id': 'search_fix_opt_acomplete', 'name': 'search_fix_acomplete'}),
            'Disable wikia autocomplete (for future pages)',
            $('<br />'),
            $('<input />', {'type': 'checkbox', 'value': '1', 'id': 'search_fix_opt_cat', 'name': 'search_fix_cat'}),
            'Include categories in Go',
            $('<button />', {'id': 'search_fix_options_save', 'value': '1', 'name': 'search_fix_new_window'})
              .text('Save')
              .css({'top': '30%', 'right': '18px', 'position': 'absolute'})
              .click(function () {
                settings = set_cookie(
                  parseInt($('#search_fix_options input[name="search_fix_default_button"]:checked').val(), 10) +
                    ($('#search_fix_opt_new_window').is(':checked') ? 2 : 0) +
                    ($('#search_fix_opt_acomplete').is(':checked') ? 4 : 0) +
                    ($('#search_fix_opt_cat').is(':checked') ? 8 : 0)
                );
                $('#search_fix_options').slideUp('fast');
              })
          )
      );
    }
    settings = get_cookie();
    $('#' + (settings & 1 ? 'search_fix_opt_go' : 'search_fix_opt_search')).click();
    check_settings('new_window', 2);
    check_settings('acomplete', 4);
    check_settings('cat', 8);

    $('#search_fix_options').slideToggle('fast');
    return false;
  });
  $('#WikiaSearch input:submit').click(function () {
    settings = get_cookie();
    if (settings & 1) { $go_button.click(); }
    else { $original_search_button.click(); }
    return false;
  });
});