Greasy Fork

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.

当前为 2015-10-04 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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.16
// ==/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 id="l_news" title="Doordarshan Sanskrit News" 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 id="l_mags" title="Magazines" class="st_common st_menutrigger st_link" data-menu="#mag_menu">&#2346;&#2340;&#2381;&#2352;&#2367;&#2325;&#2366;&#2307; &dtrif;</a>\
            <ul id="mag_menu" class="st_menu">\
              <li class="st_li">\
                <a id="l_mag1" title="Sambhaashana Sandesha" class="st_common st_link" href="http://www.sambhashanasandesha.in/" target="l_mag1">&#2360;&#2306;&#2349;&#2366;&#2359;&#2339; &#2360;&#2344;&#2381;&#2342;&#2375;&#2358;&#2307;</a>\
              </li>\
              <li class="st_li">\
                <a id="l_mag2" title="Vishva Vani" 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>\
            </ul>\
          </li>\
          <li class="st_li">\
            <a id="l_books" 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 id="l_wiki" 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;&#2340;&#2381;&#2325;&#2367;&#2334;&#2381;&#2330;&#2344;&#2346;&#2342;&#2350;&#2381; </a>\
          </li>\
          <li class="st_li st_space">\
          </li>\
          <li class="st_li">\
            <a id="l_msutra" 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 id="l_dict" title="Dictionary" class="st_common st_link" target="l_dict">\
              &#2358;&#2348;&#2381;&#2342;&#2325;&#2379;&#2358;&#2307;</a>\
            </li>\
            <li class="st_li">\
              <a id="l_thes" title="Thesaurus" class="st_common st_link" href="http://sanskrit.uohyd.ernet.in/scl/amarakosha/frame.html" target="l_thes">\
                &#2309;&#2350;&#2352;&#2325;&#2379;&#2358;&#2307;</a>\
            </li>\
            <li class="st_li">\
              <a id="l_sandhi" 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">\
              <a id="l_search" title="Text Search Engine" class="st_common st_link" href="http://sanskrit.uohyd.ernet.in:8080/searchengine/index1.jsp" target="l_search">\
                &#2327;&#2357;&#2375;&#2359;&#2367;&#2325;&#2366;</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" checked="checked"/>\
                <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',
      display: 'inline',
    });
    $('.st_option').css({
      display: 'inline-block'
    });
    $('.st_link').hover(function() {
      $(this).css({color:'orange'});
    }, function() {
      $(this).css({color:'black'});
    });
    $('.st_checkbox').css({
      marginLeft:'10px',
    });
    $('.st_menutrigger').css({
      position: 'relative'
    });
    $('.st_menu').css({
      backgroundColor:'#eee',
      display:'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();
})();