Revision: 8292
http://languagetool.svn.sourceforge.net/languagetool/?rev=8292&view=rev
Author: gulp21-1
Date: 2012-11-03 21:08:42 +0000 (Sat, 03 Nov 2012)
Log Message:
-----------
[extension/fx] add new firefox extension to svn, still under development
Added Paths:
-----------
trunk/extension/
trunk/extension/firefox/
trunk/extension/firefox/README.md
trunk/extension/firefox/TODO
trunk/extension/firefox/data/
trunk/extension/firefox/data/iconSmall.ico
trunk/extension/firefox/data/panel.css
trunk/extension/firefox/data/panel.html
trunk/extension/firefox/data/panel.js
trunk/extension/firefox/doc/
trunk/extension/firefox/doc/main.md
trunk/extension/firefox/icon.png
trunk/extension/firefox/lib/
trunk/extension/firefox/lib/main.js
trunk/extension/firefox/locale/
trunk/extension/firefox/locale/de-DE.properties
trunk/extension/firefox/locale/en-US.properties
trunk/extension/firefox/package.json
trunk/extension/firefox/package.json.backup
trunk/extension/firefox/test/
trunk/extension/firefox/test/test-main.js
Added: trunk/extension/firefox/README.md
===================================================================
--- trunk/extension/firefox/README.md (rev 0)
+++ trunk/extension/firefox/README.md 2012-11-03 21:08:42 UTC (rev 8292)
@@ -0,0 +1,20 @@
+LanguageToolFx
+==============
+
+LanguageTool for Firefox
+
+Usage
+-----
+
+Select the text that you want to check with LanguageTool and click the LT icon
in the add-on bar.
+
+The extensions tries to connect to a locally running LanguageTool server. If
the connection fails, the extensions uses the webservice at
http://api.languagetool.org:8081/ if it is enabled in the settings of the
extension.
+
+The default language is en-US. You might want to change this in the settings
of the extension.
+
+Build installable XPI file
+--------------------------
+
+1. get and extract the Add-on SDK from
https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/installation.html
+2. run source bin/activate
+3. run cfx xpi
Added: trunk/extension/firefox/TODO
===================================================================
--- trunk/extension/firefox/TODO (rev 0)
+++ trunk/extension/firefox/TODO 2012-11-03 21:08:42 UTC (rev 8292)
@@ -0,0 +1,4 @@
+- check if selectedText is null
+- use unobtrusive squiggles
+- move spelling errors to the end
+- autodetect language (needs code change in lt)
Added: trunk/extension/firefox/data/iconSmall.ico
===================================================================
(Binary files differ)
Property changes on: trunk/extension/firefox/data/iconSmall.ico
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/extension/firefox/data/panel.css
===================================================================
--- trunk/extension/firefox/data/panel.css (rev 0)
+++ trunk/extension/firefox/data/panel.css 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,40 @@
+body {
+ background-color: white;
+ counter-reset: i;
+}
+
+div {
+ font-family: Verdana, sans-serif;
+ font-size: 10px;
+}
+
+.msg:before {
+ counter-increment: i;
+ content: counter(i) ": ";
+}
+
+.msg {
+ font-weight: bold;
+}
+
+.context, .status {
+ color: gray;
+}
+
+.markerGrammar {
+/* background-image:
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAABmJLR0QA5QDgAOQX8gURAAAACXBIWXMAAArwAAAK8AFCrDSYAAAAB3RJTUUH3AoFFAY6Xz/r/wAAAC1JREFUGNNjYBgFdAKMCOb//0jCcHEmmOTMmRAJCI2smOH//5kzUQQYIHwIBgC15xTAY0o3qAAAAABJRU5ErkJggg==);
+ padding-bottom: 2px;
+ background-repeat: repeat-x;
+ background-position: left bottom; */
+ border-bottom: 1px dashed #9999FF;
+ color: DimGray;
+}
+
+.markerSpelling {
+ border-bottom: 1px dashed #FF9999;
+ color: DimGray;
+}
+
+hr:last-child {
+ display: none;
+}
\ No newline at end of file
Added: trunk/extension/firefox/data/panel.html
===================================================================
--- trunk/extension/firefox/data/panel.html (rev 0)
+++ trunk/extension/firefox/data/panel.html 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,8 @@
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="panel.css" />
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+</head>
+<body id="body">
+</body>
+</html>
Added: trunk/extension/firefox/data/panel.js
===================================================================
--- trunk/extension/firefox/data/panel.js (rev 0)
+++ trunk/extension/firefox/data/panel.js 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,16 @@
+self.port.on("setText", function(text) {
+ document.getElementById("body").innerHTML=text;
+});
+
+window.addEventListener(
+ 'click',
+ function(event) {
+ var t=event.target;
+ if(t.nodeName=="A") {
+ event.stopPropagation();
+ event.preventDefault();
+ self.port.emit('linkClicked', t.toString());
+ }
+ },
+ false
+);
Added: trunk/extension/firefox/doc/main.md
===================================================================
Added: trunk/extension/firefox/icon.png
===================================================================
(Binary files differ)
Property changes on: trunk/extension/firefox/icon.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/extension/firefox/lib/main.js
===================================================================
--- trunk/extension/firefox/lib/main.js (rev 0)
+++ trunk/extension/firefox/lib/main.js 2012-11-03 21:08:42 UTC (rev 8292)
@@ -0,0 +1,151 @@
+var preferencesservice=require("preferences-service");
+var Request=require("request").Request;
+var selection=require("selection");
+var self=require("self");
+var simpleprefs=require("simple-prefs");
+var tabs=require("tabs");
+// tabs.open("http://languagetool.org/de/");
+var widgets=require("widget");
+var _=require("l10n").get;
+
+var PLEASEWAITWHILECHECKING="<div
class=\"status\">"+_("pleaseWaitWhileChecking")+"</div>";
+var MAXCONTEXTLENGTH=20;
+
+var selectedText="";
+
+function selectionChanged(event) {
+ selectedText=selection.text;
+}
+
+selection.on("select", selectionChanged);
+
+/**
+ * escape %, ?, and & in url
+ * normal escape does not work properly with umlauts
+ */
+function myEscape(string) {
+ return
string.replace(/\%/g,"%25").replace(/\?/g,"%3F").replace(/\&/g,"%26")
+}
+
+function getAttributeValue(string, attribute) {
+ if(string.indexOf(attribute+"=\"")==-1)
+ return "";
+ return string.split(attribute+"=\"")[1].split("\"")[0];
+}
+
+function createReport(response, selectedText) {
+ var returnText="";
+ response=response.split("<error ");
+
+ if(response.length<2) {
+ return "<div class=\"status\">"+_("noProblemsFound")+"</div>";
+ }
+
+ for(var i=1; i<response.length; ++i) {
+ returnText+="<div
class=\"msg\">"+getAttributeValue(response[i],"msg")+"</div>";
+
+ fromx=getAttributeValue(response[i],"fromx");
+ tox=getAttributeValue(response[i],"tox");
+ l=selectedText.substring(0,fromx);
+ if(l.length>MAXCONTEXTLENGTH) {
+ l="…"+l.substring(l.length-MAXCONTEXTLENGTH);
+ }
+ m=selectedText.substring(fromx,tox);
+ r=selectedText.substring(tox);
+ if(r.length>MAXCONTEXTLENGTH) {
+ r=r.substring(0,MAXCONTEXTLENGTH)+"…";
+ }
+ id=getAttributeValue(response[i],"ruleId");
+ if(id.indexOf("MORFOLOGIK")!=-1 || id.indexOf("HUNSPELL")!=-1) {
+ spanclass="markerSpelling";
+ } else {
+ spanclass="markerGrammar";
+ }
+ returnText+="<div class=\"context\">"+l+"<span
class=\""+spanclass+"\">"+m+"</span>"+r+"</div>";
+
+ url=getAttributeValue(response[i],"url");
+ if(url!="") {
+ returnText+="<div class=\"url\"><a targer=\"_blank\"
href=\""+url+"\">"+_("moreInformation")+"</a></div>";
+ }
+
+ returnText+="<hr/>";
+ } // for each <error/>
+
+ console.log("returnText: "+returnText);
+ return returnText;
+}
+
+var panel=require("panel").Panel({
+ contentURL: self.data.url("panel.html"),
+ contentScriptFile: self.data.url("panel.js"),
+ onHide: function () {
+ panel.port.emit("setText", PLEASEWAITWHILECHECKING);
+ }
+});
+
+panel.port.emit("setText", PLEASEWAITWHILECHECKING);
+
+panel.port.on("linkClicked", function(url) {
+ tabs.open(url);
+});
+
+var widget=widgets.Widget({
+ id: "lt-check",
+ label: _("checkSelectionWithLT"),
+ contentURL: self.data.url("iconSmall.ico"),
+ panel: panel,
+ onClick: function() {
+ selectedText=selectedText.replace(/(\r\n|\n|\r)/gm," <BR> ") //
remove newlines
+
.replace(/(\s+\<BR\>\s+(\<BR\>\s+)*)/g," ") // remove extra spaces added after
newline
+ .replace(/^\s+|\s+$/g,""); // trim
+
+ console.log("Selection: "+selectedText);
+ console.log("Selection (escaped): "+myEscape(selectedText));
+
+ var checkTextOnline=Request({
+ url: "http://api.languagetool.org:8081/",
+ onComplete: function (response) {
+ if(response.status!=200) {
+ console.log("Response status:
"+response.status);
+ var errorText=_("errorOccuredStatus")+"
"+response.status
+ panel.port.emit("setText", "<div
class=\"status\">"+errorText+"</div>");
+ } else {
+ text=response.text;
+ console.log("Response: "+text);
+ panel.show();
+ panel.port.emit("setText",
createReport(text, selectedText));
+ }
+ },
+ content:
"language="+simpleprefs.prefs.language+"&text="+myEscape(selectedText)
+ });
+
+ var checkTextLocal=Request({
+ url: "http://localhost:8081",
+ onComplete: function (response) {
+ if(response.status!=200) {
+ console.log("Response status:
"+response.status);
+ var errorText=_("errorOccuredStatus")+"
"+response.status
+ if(simpleprefs.prefs.enableWebService) {
+ console.log("Connecting with
web service");
+
errorText+="<br>"+_("usingWebService");
+ panel.port.emit("setText",
"<div class=\"status\">"+errorText+"</div>");
+ checkTextOnline.post();
+ } else {
+ if(response.status==0) {
+
errorText+="<br/>"+_("checkLtRunning");
+ }
+ panel.port.emit("setText",
"<div class=\"status\">"+errorText+"</div>");
+ }
+ } else {
+ text=response.text;
+ console.log("Response: "+text);
+ panel.show();
+ panel.port.emit("setText",
createReport(text, selectedText));
+ }
+ },
+ content:
"language="+simpleprefs.prefs.language+"&text="+myEscape(selectedText)
+ });
+
+ checkTextLocal.post();
+ }
+});
Added: trunk/extension/firefox/locale/de-DE.properties
===================================================================
--- trunk/extension/firefox/locale/de-DE.properties
(rev 0)
+++ trunk/extension/firefox/locale/de-DE.properties 2012-11-03 21:08:42 UTC
(rev 8292)
@@ -0,0 +1,11 @@
+errorOccuredStatus=Es ist ein Fehler aufgetreten. Statuscode:
+pleaseWaitWhileChecking=Bitte warten Sie, während der markierte Text überprüft
wird …
+noProblemsFound=Es wurden keine Probleme gefunden.
+checkSelectionWithLT=Markierten Text mit LanguageTool überprüfen
+moreInformation=mehr Informationen
+usingWebService=Benutzen des lokalen Servers fehlgeschlagen, verbinde mit
Webservice …
+language_title=Sprache
+language_description=LanguageTool wird davon ausgehen, dass der zu prüfenden
Text in dieser Sprache ist. Benutzen Sie Sprachcodes wie 'en-US' oder 'de-DE'.
+checkLtRunning=Bitte stellen Sie sicher, dass ein LanguageTool Server auf Port
8081 läuft oder aktivieren Sie den Webservice in den <a
href="about:addons">Add-on-Einstellungen</a>.
+enableServer_title=Benutze den Webservice, wenn eine Verbindung mit dem
lokalen Server nicht erfolgreich ist
+enableServer_description=Die Erweiterung versucht zuerst, eine Verbindung mit
einem lokal laufenden LanguageTool-Server herzustellen. Wenn dies fehlschlägt
und diese Option aktiviert ist, verbindet sich die Erweiterung mit
api.languagetool.org, um den markierten Text zu prüfen. Bitte beachten Sie
jedoch, dass die Verbindung nicht verschlüsselt ist. Bitte lesen Sie die
Add-on-Beschreibung und die Datenschutzerklärung für Einzelheiten.
Added: trunk/extension/firefox/locale/en-US.properties
===================================================================
--- trunk/extension/firefox/locale/en-US.properties
(rev 0)
+++ trunk/extension/firefox/locale/en-US.properties 2012-11-03 21:08:42 UTC
(rev 8292)
@@ -0,0 +1,11 @@
+errorOccuredStatus=An error occured. Status code:
+pleaseWaitWhileChecking=Please wait while the selected text is being
checked …
+noProblemsFound=No problems have been found.
+checkSelectionWithLT=Check selected text with LanguageTool
+moreInformation=more information
+usingWebService=Using local server failed, connecting with web
service …
+language_title=Language
+language_description=LanguageTool will asume that the text to be checked is in
this language. Use language codes like 'en-US' or 'de-DE'.
+checkLtRunning=Please make sure that a LanguageTool Server is running on port
8081 or enable the web service in <a href="about:addons">the setttings of the
add-on</a>.
+enableServer_title=Use web service when connecting with the local server is
not successful
+enableServer_description=At first, the extension tries to connect to a locally
running LanguageTool server. If this fails and this option is enabled, the
extension conntects to api.languagetool.org to check the selected text. Please
note, however, that the connection is not encrypted. Please read the add-on
description and the privacy policy for details.
Added: trunk/extension/firefox/package.json
===================================================================
--- trunk/extension/firefox/package.json (rev 0)
+++ trunk/extension/firefox/package.json 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,23 @@
+{
+ "name": "languagetoolfx",
+ "license": "GPL 3.0",
+ "author": "Markus Brenneis",
+ "version": "0.1-pre",
+ "fullName": "LanguageToolFx",
+ "id": "jid1-j3KiX1n7UXrjxQ",
+ "description": "LanguageTool for Firefox",
+ "homepage": "http://languagetool.org",
+ "preferences": [{
+ "name": "language",
+ "title": "Language",
+ "description": "LanguageTool will asume that the text to be
checked is in this language. Use language codes like 'en-US' or 'de-DE'.",
+ "type": "string",
+ "value": "en-US"
+ }, {
+ "name": "enableWebService",
+ "title": "Use web service when connecting with the local server
is not successful",
+ "description": "At first, the extension tries to connect to a
locally running LanguageTool server. If this fails and this option is enabled,
the extension conntects to api.languagetool.org to check the selected text.
Please note, however, that the connection is not encrypted. Please read the
add-on description and the privacy policy for details.",
+ "type": "bool",
+ "value": false
+ }]
+}
Added: trunk/extension/firefox/package.json.backup
===================================================================
--- trunk/extension/firefox/package.json.backup (rev 0)
+++ trunk/extension/firefox/package.json.backup 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,8 @@
+{
+ "name": "languagetoolfx",
+ "fullName": "languagetoolFx",
+ "description": "a basic add-on",
+ "author": "",
+ "license": "MPL 2.0",
+ "version": "0.1"
+}
Added: trunk/extension/firefox/test/test-main.js
===================================================================
--- trunk/extension/firefox/test/test-main.js (rev 0)
+++ trunk/extension/firefox/test/test-main.js 2012-11-03 21:08:42 UTC (rev
8292)
@@ -0,0 +1,6 @@
+var main = require("main");
+
+exports.test_run = function(test) {
+ test.pass("Unit test running!");
+};
+
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
Languagetool-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-commits