![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Mam wielką prośbę o małe rozwinięcie rozszerzenia dla Google Chrome.
Chodzi o rozszerzenie Speakable Textareas, które pozwala na konwersję głosu do tekstu we wszystkich polach tekstowych w Internecie. Można więc dyktować, zamiast wpisywać wiadomości. Rozpoznawanie to jest całkiem OK, choć popełnia kilka typowych błędów, które chciałbym poprawić używając regexu lub czegoś w tym stylu. Rozszerzenie używa Javasriptu i jQuery, których nie znam. Znam natomiast wyrażenia regularne. Prosiłbym więc, żeby ktoś życzliwy podał mi wzór wstawiania regexu do tego rozszerzenia tak, żeby zmiana dokonywała się "w locie" - zaraz po odbiorze stringu, który odsyła serwer Google'a. Powiedzmy, że przykładowo chciałbym, żeby wyraz "kot" był zawsze zamieniany na "płot", a wyraz "idiota", żeby automatycznie zamieniało na "palikota". Kod rozszerzenia: Kod // ==UserScript==
// @name Speakable Textareas // @namespace speakable // @include * // @author Josh Mandel // @description Allow speech input in any textarea (Google Chrome). super quick and dirty because I broke my arm, so don't mind the awful hacked-together javascript. // ==/UserScript== function jq(callback) { var script = document.createElement("script"); script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"); script.addEventListener('load', function () { var script = document.createElement("script"); script.textContent = "(" + callback.toString() + ")();"; document.body.appendChild(script); }, false); document.body.appendChild(script); } function main() { jQuery.noConflict(); var lastblur = { ss: 0, se: 0 }; setInterval(function () { jQuery("input").each(function (i) { if (!jQuery(this).attr("taed")) { jQuery(this).attr("taed", "true"); jQuery(this).attr("x-webkit-speech", "true"); } }); jQuery("textarea:visible, *[g_editable='true']").each(function (i) { if (!jQuery(this).attr("taed") ) { var t = jQuery(this); t.blur(function () { lastblur = { time: new Date().getTime(), elt: t[0], ss: t[0].selectionStart, se: t[0].selectionEnd }; }); t.attr("taed", "true"); var b = jQuery("<input type='text' size='1' x-webkit-speech>.</input>"); b.css({ "position": "absolute", "left": t.offset().left + t.width() - 30, "top": t.offset().top, "width": 15, border: "0px" }); jQuery('body').append(b); b.click(function () { if (t[0] != lastblur.elt || (new Date().getTime() - t.time > 100)) { lastblur.ss = lastblur.se = t.val().length; } }); setInterval(function () { b.css({ "left": t.offset().left + t.width() - 30, "top": t.offset().top }); if (b.val() == "") return; b.val(b.val()+" "); if (t[0].tagName.toLowerCase()==="textarea") { var ot = t.val(); t.val(ot.substr(0, lastblur.ss) + b.val() + ot.substr(lastblur.se)); t.focus(); var bl = b.val().length; if (lastblur.se == lastblur.ss) { t[0].selectionStart = t[0].selectionEnd = lastblur.ss + bl; } else { t[0].selectionStart = lastblur.ss; t[0].selectionEnd = lastblur.ss + bl; } } else if (t.attr("g_editable")) { t.html(t.html() + b.val()); } b.val(""); }, 100); } }); }, 1000); } // load jQuery and execute the main function jq(main); |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 11:47 |