Greasy Fork is available in English.

Sanskrit Tools - Toolbar

Sanskrit Language Tools - Quick access to Sanskrit dictionary, thesarus, news and other tools, on Firefox and Chrome browsers.

Fra og med 06.02.2016. Se den nyeste version.

// ==UserScript==
// @name           Sanskrit Tools - Toolbar
// @namespace      stgeorge
// @description    Sanskrit Language Tools - Quick access to Sanskrit dictionary, thesarus, news and other tools, on Firefox and Chrome browsers.
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @grant          GM_setValue
// @grant          GM_getValue
// @version        2.4.19
// ==/UserScript==

(function() {
  var DEBUG = false;
  var IGNORES = [
    'mail.yahoo.com',
    'groups.yahoo.com',
    'spokensanskrit.de',
  ];
  var ALLOW_ANCHORS = [
    'sanskrit.uohyd.ernet.in/cgi-bin/scl/SHMT/generate.cgi',
  ];
  var TOOLBAR_HTML = '\
    <div id="s_toolbar">\
      <div style="float:left; display:inline-block">\
        <ul style="list-style:none;margin:0;padding:0">\
          <li class="st_li">\
            <a title="Doordarshan Sanskrit News/Magazine" class="st_common st_link" href="http://www.youtube.com/user/sanskritanews/videos" target="l_news">\
              &#2357;&#2366;&#2352;&#2381;&#2340;&#2366;&#2307;</a>\
          </li>\
          <li class="st_li">\
            <a title="\'Sambhaashana Sandesha\' Magazine" class="st_common st_link" href="http://www.sambhashanasandesha.in/" target="l_mag1">&#2360;&#2350;&#2381;&#2349;&#2366;&#2359;&#2339; &#2360;&#2344;&#2381;&#2342;&#2375;&#2358;&#2307;</a>\
          </li>\
          <li class="st_li">\
            <a title="\'Vishva Vani\' Magazine" class="st_common st_link" href="http://www.speaksanskrit.org/vishvavani.shtml" target="l_mag2">&#2357;&#2367;&#2358;&#2381;&#2357;&#2357;&#2366;&#2339;&#2368;</a>\
          </li>\
          <li class="st_li">\
            <a title="Books" class="st_common st_link" href="http://www.sanskrit.nic.in/ebook.htm" target="l_books">&#2346;&#2369;&#2360;&#2381;&#2340;&#2325;&#2366;&#2344;&#2367;</a>\
          </li>\
          <li class="st_li">\
            <a title="Wikipedia" class="st_common st_link" href="http://sa.wikipedia.org" target="l_wiki">\
              &#2357;&#2367;&#2325;&#2367;&#2346;&#2368;&#2337;&#2367;&#2351;&#2366</a>\
          </li>\
          <li class="st_li">\
            <a id="l_word" title="Show a random verb" class="st_common st_link" target="l_word">\&#2351;&#2342;&#2371;&#2330;&#2381;&#2331;&#2367;&#2325;&#2346;&#2342;&#2350;&#2381;</a>\
          </li>\
          <li class="st_li st_space">\
          </li>\
          <li class="st_li">\
            <a title="Maheshwara Sutras" class="st_common st_link" href="http://en.wikipedia.org/wiki/Siva_Sutra#Text" target="l_msutra">\
              &#2350;&#2366;&#2361;&#2375;&#2358;&#2381;&#2357;&#2352;&#2360;&#2370;&#2340;&#2381;&#2352;&#2366;&#2339;&#2367;</a>\
          </li>\
          <li class="st_li">\
            <a title="Noun/Verb Expansion" class="st_common st_link" href="http://sanskrit.inria.fr/DICO/grammar.fr.html" target="l_inria">\
              &#2358;&#2349;&#2381;&#2342;, &#2343;&#2366;&#2340;&#2369;&#2352;&#2370;&#2346;&#2366;&#2357;&#2354;&#2368;</a>\
          </li>\
          <li class="st_li">\
            <a title="Sandhi splitter" class="st_common st_link" href="http://tdil-dc.in/san/sandhi_splitter/index_dit.html" target="l_sandhi">\
              &#2360;&#2344;&#2381;&#2343;&#2367;&#2307;</a>\
          </li>\
          <li class="st_li st_space">\
          </li>\
          <li class="st_li">\
            <div title="Double-clicking a word will automatically launch the dictionary" class="st_common st_option">\
              <input type="checkbox" id="o_auto" class="st_common st_checkbox" title="Double-clicking a word will automatically launch the dictionary"/>\
              <label for="o_auto" class="st_label">Auto-dictionary</label>\
            </div>\
          </li>\
          <li class="st_li st_space">\
          </li>\
        </ul>\
      </div>\
    </div>\
    <a id="a_dict" style="display:none" href="" target="l_dict"></a>\
  </div>';
  var ICON_HTML = '\
      <div id="icon" title="Click to show/hide Sanskrit Toolbar">\u0938\
      </div>';
  var VERBS = [
'accept','account','achieve','act','add','admit','affect','afford','agree','aim','allow','answer','appear','apply','argue','arrange','arrive','ask','attack','avoid','base','be','beat','become','begin','believe','belong','break','build','burn','buy','call','can','care','carry','catch','cause','change','charge','check','choose','claim','clean','clear','climb','close','collect','come','commit','compare','complain','complete','concern','confirm','connect','consider','consist','contact','contain','continue','contribute','control','cook','copy','correct','cost','count','cover','create','cross','cry','cut','damage','dance','deal','decide','deliver','demand','deny','depend','describe','design','destroy','develop','die','disappear','discover','discuss','divide','do','draw','dress','drink','drive','drop','eat','enable','encourage','end','enjoy','examine','exist','expect','experience','explain','express','extend','face','fail','fall','fasten','feed','feel','fight','fill','find','finish','fit','fly','fold','follow','force','forget','forgive','form','found','gain','get','give','go','grow','handle','happen','hate','have','head','hear','help','hide','hit','hold','hope','hurt','identify','imagine','improve','include','increase','indicate','influence','inform','intend','introduce','invite','involve','join','jump','keep','kick','kill','knock','know','last','laugh','lay','lead','learn','leave','lend','let','lie','like','limit','link','listen','live','look','lose','love','make','manage','mark','matter','mean','measure','meet','mention','mind','miss','move','need','notice','obtain','occur','offer','open','order','own','pass','pay','perform','pick','place','plan','play','point','prefer','prepare','present','press','prevent','produce','promise','protect','prove','provide','publish','pull','push','put','raise','reach','read','realize','receive','recognize','record','reduce','refer','reflect','refuse','regard','relate','release','remain','remember','remove','repeat','replace','reply','report','represent','require','rest','result','return','reveal','ring','rise','roll','run','save','say','see','seem','sell','send','separate','serve','set','settle','shake','share','shoot','shout','show','shut','sing','sit','sleep','smile','sort','sound','speak','stand','start','state','stay','stick','stop','study','succeed','suffer','suggest','suit','supply','support','suppose','survive','take','talk','teach','tell','tend','test','thank','think','throw','touch','train','travel','treat','try','turn','understand','use','visit','vote','wait','walk','want','warn','wash','watch','wear','win','wish','wonder','work','worry','write'
  ];

  var toolbarHTML;
  var icon;
  var cbs = { l_word : show_word };
  var visible = {};
  var numClicks = 0;
  var vdiv = null;
  var allowAnchor = false;
  var selectedText = null;

  function main() {
    for (var i in IGNORES) {
      if (document.URL.indexOf(IGNORES[i]) != -1) {
        return;
      }
    }
    for (var i in ALLOW_ANCHORS) {
      if (document.URL.indexOf(ALLOW_ANCHORS[i]) != -1) {
        allowAnchor = true;
        break;
      }
    }
    init();
    if (window.top != window.self) return;
    display();
  }

  function display() {
    place('s_toolbar', TOOLBAR_HTML, {
      position: 'fixed',
      'top': 0,
      margin: 0,
      // minHeight: '30px',
      width: '100%',
      zIndex: 2999999999,
      paddingTop: '3px',
      paddingBottom: '3px',
      backgroundColor: 'white',
      borderBottom: '1px solid orange',
      float: 'left',
      display:'none'
    });
    for (var i in cbs) {
      (function(p) {
        $('#'+p).on('click', function(e) {
          e.preventDefault();
          e.stopPropagation();
          var cb = cbs[p];
          cb($(this).attr('id'));
        });
      })(i);
    }
    $('.st_li').css({
      background: 'none',
      border: 0,
      display:'inline',
      padding: 0,
    });
    $('.st_space').css({
      marginLeft:'20px',
    });
    $('.st_common').css({
      float: 'left',
      border: 0,
      margin: 0,
      padding: 0,
      // height: '30px',
      fontSize: '15px',
      verticalAlign:'middle',
    });
    $('.st_link').css({
      textDecoration: 'none',
      fontWeight: 'bolder',
      marginLeft:'5px',
      padding:'5px',
      cursor: 'pointer',
      backgroundColor: '#eeeeee',
      color: 'black',
    });
    $('.st_label').css({
      marginLeft: '5px',
    });
    $('.st_option').css({
      display: 'inline-block',
      margin: '5px'
    });
    $('.st_link').hover(function() {
      $(this).css({color:'orange'});
    }, function() {
      $(this).css({color:'black'});
    });
    $('.st_checkbox').css({
      margin: '5px'
    });
    $('.st_menutrigger').css({
      position: 'relative'
    });
    $('.st_menu').css({
      backgroundColor:'#eee',
      display:'none',
      listStyle: 'none',
      position:'absolute',
      width:'120px',
      // left:'50px',
      'top': '50px',
      boxShadow: '5px 5px 5px #888888',
      zIndex:'999',
    });
    $('.st_menu li').css({
      width:'100px',
      listStyle: 'none inside',
    });
    place('icon', ICON_HTML, {
      cursor:'pointer',
      'float':'right',
      padding: '0px 15px 18px',
      fontWeight:'bold',
      backgroundColor: 'transparent',
      color:'red',
      position:'fixed',
      right:0,
      bottom: 0,
      height:'10px',
      width:'10px',
      zIndex:9999
    });
    icon = $('#icon').get(0);
    $('#icon').on('click', toggle);
    $('#o_auto').on('change', function(e) {
      GM_setValue('auto', $(this).prop('checked'));
    });
    $('.st_menutrigger').on('click', function(e) {
      e.preventDefault();
      e.stopPropagation();
      show_menu(this);
    });
    $(document).on('click', function(e) {
      $('.st_menu').css('display', 'none');
      for (var i in visible) {
        visible[i] = false;
      }
    });
    if (GM_getValue('status', 0))
      show();
  }

  function show_menu(ele) {
    var trigger = $(ele);
    var tgt = trigger.attr('data-menu');
    var v = visible[tgt];
    if (v)
      $(tgt).css('display', 'none');
    else
      $(tgt).css('display', 'block');
    visible[tgt] = !v;
  }

  function place(id, html, css) {
    $('body').prepend(html);
    $('#'+id).css(css);
  }

  function toggle() {
    var v = $('#s_toolbar').css('display');
    if (v == 'none')
      show();
    else
      hide();
  }

  function show() {
    $('#s_toolbar').css({
      'display':'block',
    });
    $('body').css('marginTop', '50px');
    GM_setValue('status', 1);
  }

  function hide() {
    $('#s_toolbar').css({
      'display':'none',
    });
    $('body').css('marginTop', 0);
    GM_setValue('status', 0);
  }

  function init() {
    document.addEventListener('mouseup', function(e) {
      var node = (e.target || e.srcElement);
      if (e.button != 0 || (node.nodeName == 'A' && !allowAnchor)
        || node.nodeName == 'INPUT') {
        return;
      }
      var n = node;
      while (n) {
        if (n == icon) {
          return;
        }
        if (n.getAttribute) {
          var ce = n.getAttribute('contenteditable');
          if (ce) {
            return;
          }
        }
        n = n.parentNode;
      }
      if (++numClicks == 1) {
        window.setTimeout(function() {
          dictionaryLookup();
          numClicks = 0;
        }, 300);
      }
    }, false);
  }

  function show_dict(id) {
    showDict(selectedText ? selectedText : '');
  }

  function show_word(id) {
    var word = VERBS[Math.floor(Math.random() * VERBS.length)];
    showDict(word, '&direction=ES');
  }
  
  function dictionaryLookup() {
    selectedText = getSelectedText(true);
    if (selectedText != null && selectedText.length > 0) {
      if (selectedText.indexOf(' ') != -1) {
        selectedText = null;
        return;
      }
      if ($('#o_auto').prop('checked')) {
        showDict(selectedText);
      }
    } else {
      hideDict();
    }
  }

  function getSelectedText(trim) {
    var text =
      (window.getSelection) ? window.getSelection().toString() :
      (document.getSelection) ? document.getSelection().toString() :
      (document.selection) ? document.selection.createRange().text : null;
    if (trim && text != null)
      text = text.trim();
    return text;
  }

  function showDict(text) {
    hideDict();
    var a = $('#a_dict');
    a.on('click', function(e) {
      a.attr('href',
        'http://spokensanskrit.de/index.php?trans=Translate&tinput='+text);
    });
    a.get(0).click();
  }
  
  function hideDict() {
    if (vdiv) {
      vdiv.close();
      vdiv = null;
    }
  }

  function _debug(s) {
    if (DEBUG)
      console.log(s);
  }

  main();
})();