// ==UserScript== // @name Sanskrit Tools - Toolbar // @namespace sanskritToolsToolbar // @description Sanskrit Language Tools // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @version 1.0 // @downloadURL none // ==/UserScript== // TODO: // Decide about mini dictionary. (function() { const IGNORES = [ 'yahoo.com', // 'spokensanskrit.de', // 'sanskrit.inria.fr', // 'sambhashanasandesha.in', // 'youtube.com/user/sanskritanews' ]; const URLS = { verb: 'http://sanskrit.inria.fr/cgi-bin/SKT/sktconjug?lex=SH&q=%Q%&t=%E%&c=%C%&font=deva', noun: 'http://sanskrit.inria.fr/cgi-bin/SKT/sktdeclin?lex=SH&q=%Q%&t=%E%&g=%G%&font=deva', dict: 'http://spokensanskrit.de/index.php?trans=Translate&tinput=%Q%', join: 'http://sanskrit.inria.fr/cgi-bin/SKT/sktsandhier?lex=SH&l=%Q%&r=%R%&t=%E%&k=external' }; const WIN_NAME = "SanskritTools"; var numClicks = 0; function toolbar() { // Create widgets. var tbHTML = $( '
' + '' + '' + '' + '' + '' + '' + '' + 'Tools:' + ''+ 'पदम्' + 'पदे' + '' + 'लिङ्गम् ' + '' + 'गण: ' + '' + '' + '' + '
' ); var tbToggleHTML = '
\u0938
'; // Place them on the screen. place('toolbar', tbHTML, { position: 'fixed', 'top': 0, margin: 0, height: '40px', width: '100%', zIndex: 2999999999, paddingTop: '5px', backgroundColor: '#eeeeee', borderBottom: '1px solid orange', display:'none' }); place('tbToggle', tbToggleHTML, { cursor:'pointer', 'float':'right', fontSize:'large', padding: '0px 5px 18px', fontWeight:'bold', backgroundColor: 'white', color:'green', position:'fixed', right:0, bottom: 0, height:'10px', width:'10px', zIndex:9999 }); $('.spaced').css({ marginLeft:'10px', verticalAlign:'middle', fontSize:'16px', }); $('.st_button').css({ paddingRight:'10px !important', padding:'0px', fontSize:'16px', verticalAlign:'middle', height:'30px', cursor: 'pointer', }); $('.st_select').css({ verticalAlign:'middle', fontSize:'16px', height:'30px', padding:'0px' }); $('.st_input').css({ verticalAlign:'middle', padding:'0px', height:'30px', fontSize:'16px', verticalAlign:'middle' }); $('.bold').css('fontWeight', 'bold'); $('option').css({ paddingRight: '3px', paddingLeft: '3px', }); // Set initial state. var word = GM_getValue('word', ''); var word2 = GM_getValue('word2', ''); $('#st_word').val(word); $('#st_word2').val(word2); var opt = GM_getValue('opt', 'dict'); $('#tbMenu').val(opt); hilite(opt); if (GM_getValue('status', 0)) showTb(); else hideTb(); // Set event handlers. $('#tbToggle').on('click', toggleTb); $('#tbMenu').on('change', function() { hilite($('#tbMenu option:selected').val()); }); $('#st_mag').on('click', function() { show('st_mag', 'http://www.sambhashanasandesha.in/'); }); $('#st_news').on('click', function() { show('st_news', 'http://www.youtube.com/user/sanskritanews/videos'); }); $('#st_alpha').on('click', function() { show('st_alpha', 'http://en.wikipedia.org/wiki/Siva_Sutra#Text'); }); $('#st_wiki').on('click', function() { show('st_wiki', 'http://sa.wikipedia.org'); }); $('#st_action').on('click', action); $('#toolbar').on('submit', action); } function action(e) { e.preventDefault(); var action = $('#tbMenu :selected').val() GM_setValue('opt', action); var word = $('#st_word').val(); var word2 = $('#st_word2').val(); GM_setValue('word', word); GM_setValue('word2', word2); var c = word.charCodeAt(0); var enc = (c >= 0x0900 && c <= 0x097f) ? 'DN' : 'KH'; // TODO: Pass correct input encoding. show(action, URLS[action]. replace('%Q%', word). replace('%R%', word2). replace('%G%', $('#st_linga').val()). replace('%C%', $('#st_gana').val()). replace('%E%', enc) ); } function toggleTb() { if (GM_getValue('status', 0) == 0) { showTb(); } else { hideTb(); } } function showTb() { $('#toolbar').css({ 'display':'block', }); $('#tbToggle').css('color', 'green'); $('body').css('marginTop', '50px'); GM_setValue('status', 1); } function hideTb() { $('#toolbar').css({ 'display':'none', }); $('#tbToggle').css('color', 'red'); $('body').css('marginTop', 0); GM_setValue('status', 0); } function place(id, html, css) { $('body').prepend(html); $('#'+id).css(css); } function hilite(x) { $('#toolbar .act').hide(); $('#toolbar .'+x).show(); return $('#toolbar :visible').size(); } function handleClick(e) { var node = (e.target || e.srcElement); if (e.button != 0) return; if (node.nodeName == 'A') return; var n = node; while (n) { if (n.getAttribute) { var ce = n.getAttribute('contenteditable'); if (ce) return; } n = n.parentNode; } if (++numClicks == 1) { window.setTimeout(function() { var selectedText = getSelectedText(true); if (selectedText != null) { var i = selectedText.indexOf(' '); if (i >= 0) { selectedText = selectedText.slice(0,i); } if (selectedText.length > 0) { $('#st_word').val(selectedText); GM_setValue('word', selectedText); } } numClicks = 0; }, 300); } } 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 show(name, url) { window.location.href = url; } if (window.top == window.self) { var ok = true; for (var i in IGNORES) { if (document.URL.indexOf(IGNORES[i]) != -1) { ok = false; break; } } if (ok) { toolbar(); document.addEventListener('mouseup', handleClick, false); } } })();