You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by so...@apache.org on 2007/09/21 12:37:48 UTC

svn commit: r578051 [26/31] - in /lenya/branches/revolution/1.3.x/src: java/org/apache/lenya/cms/content/flat/ webapp/lenya/modules/xinha/ webapp/lenya/modules/xinha/contrib/ webapp/lenya/modules/xinha/examples/ webapp/lenya/modules/xinha/images/ webap...

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/popups/quicktag.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/popups/quicktag.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/popups/quicktag.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/popups/quicktag.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,354 @@
+<html>
+<head>
+<title>Quick Tag Editor</title>
+<script type="text/javascript" src="../tag-lib.js"></script>
+<script type="text/javascript" src="../../../popups/popup.js"></script>
+<script type="text/javascript">
+
+window.resizeTo(400, 180);
+var QuickTag = window.opener.QuickTag;
+var curTag = 'none';
+var curTagOpt = false;
+var CSSEdit = false;
+var editor = null;
+
+function Init() {
+  __dlg_translate("QuickTag");
+  __dlg_init();
+
+  var param = window.dialogArguments;
+  editor = param['editor'];
+  var selectext = param['selectedText']; // sem uso...
+
+  createDropdown("tags");
+
+  var to = document.getElementById('tagopen');
+  if (document.all) 
+    to.attachEvent("onkeypress", function(e) { choice_dropdown(e) });
+  else 
+    to.addEventListener("keypress", function(e) { choice_dropdown(e) }, true);
+  to.focus();
+
+  document.getElementById('bt_colors').style.display = 'none';
+  document.body.onkeypress = __dlg_key_press;
+}
+
+function onCancel() {
+  __dlg_close(null);
+  return false;
+}
+
+function quoteTest(val) {
+  var er = /^\w+\s*(\w+=\"[^\"]*\"\s*|\w+=\'[^\']*\'\s*)*$/;
+  return er.test(val);
+}
+
+function onOK() {
+  var el = document.getElementById('tagopen');
+  if(!el.value) {
+  alert(HTMLArea._lc("Enter the TAG you want to insert", "QuickTag"));
+  el.focus();
+  return false;
+  }
+  if(!quoteTest(el.value)) {
+    alert(HTMLArea._lc("There are some unclosed quote", "QuickTag"));
+    el.focus();
+    el.select();
+    return false;
+  }
+  var param = {};
+  var cleanTO = document.getElementById('tagopen').value.replace(/(<|>)/g,"");
+  param.tagopen = "<"+cleanTO+">";
+  param.tagclose = param.tagopen.replace(/^<(\w+) ?.*>/,"</$1>");
+
+  var subtag = subTagLib[curTag];
+  if(typeof subtag == 'object') {
+    param.tagopen = param.tagopen+subtag.op;
+    param.tagclose = subtag.cl+param.tagclose;
+  }
+
+  __dlg_close(param);
+  return false;
+}
+
+function __dlg_key_press(ev) {
+  ev || (ev = window.event);
+  switch(ev.keyCode) {
+    case 13:
+    document.getElementById('bt_ok').click();
+      break;
+    case 27:
+    __dlg_close();
+    return false;
+  }
+  return true;
+}
+
+function selchange() {
+  var toadd = document.getElementById('selectag').value;
+  var oldval = document.getElementById('tagopen').value;
+  var text = (oldval+toadd).replace(/^\s*(.+)\s*$/,"$1");
+  var atrib = /(\w+)=\"$/.test(toadd) ? toadd.replace(/(\w+)=\"$/, "$1") : null;
+  var showcolors = (/color\: ?$/.test(toadd)) ? true : false;
+  var noCSSclasses = false;
+  var obj = null;
+  curTag = text.replace(/(^\w+) ?.*$/, "$1");
+  curTagOpt = (tagLib[curTag] == true);
+
+  if(atrib) {
+    var atrer = eval('/'+atrib+'=/ig');
+    if(atrer.test(oldval) && !(/[^=]\"$/.test(toadd))) {
+      alert(HTMLArea._lc("This attribute already exists in the TAG", "QuickTag"));
+      return false;
+    }
+
+    switch(atrib) {
+    case 'style':
+      CSSEdit = true;
+      break;
+    case 'class':
+      if(captureClasses() == 0) noCSSclasses = true;
+      break;
+    case 'color': case 'bgcolor': case 'bordercolor':
+    case 'bordercolorlight': case 'bordercolordark':
+      showcolors = true;
+      break;
+    }
+
+    if(curTagOpt == true)
+      obj = eval('opAtt_'+curTag+'["'+atrib+'"]');
+    else
+      obj = opAtt_all[atrib];
+  }
+  else if(!CSSEdit && (/(^\w+$|\"$)/.test(toadd))) {
+    obj = 'all';
+    if(curTagOpt == true) obj = curTag;
+    toadd += ' ';
+  }
+
+  if(CSSEdit && quoteTest(text))
+    CSSEdit = false;
+
+  if(showcolors)
+    document.getElementById('bt_colors').style.display = '';
+
+  if(obj)
+    createDropdown(obj);
+  else if(!CSSEdit)
+    document.getElementById('showselect').style.visibility = 'hidden';
+
+  if(noCSSclasses) {
+    document.getElementById('showselect').innerHTML = HTMLArea._lc("No CSS class avaiable", "QuickTag");
+    document.getElementById('showselect').style.visibility = 'visible';
+  }
+
+  addchanges();
+
+  function addchanges() {
+    document.getElementById('tagopen').focus();
+    document.getElementById('tagopen').value += toadd;
+  }
+}
+
+function captureClasses() {
+  var cont = 0;
+  // If there is no '<HTML>' in the HTMLArea content, when using
+  // styleSheets[..].rule, IE generates an error.
+  // In this case, we lost the classes in external CSS files.
+  // If FullPage is loaded, there is no problem.
+  if(!(/<\s*html\s*>/i.test(editor.getHTML())) && document.all) {
+    var styles = editor._doc.getElementsByTagName("style");
+    for(var i in styles) {
+      var cont = styles[i].innerHTML;
+      if(typeof cont != 'undefined') {
+        var cls = cont.match(/\.\w+/ig,"");
+        for(j in cls) if(/^\.\w+$/.test(cls[j])) {
+          var classname = cls[j].replace(/\./,"")+'"';
+          opAtt_all['class'][cls[j]] = classname;
+          cont++;
+        }
+      }
+    }
+    return cont;
+  }
+
+  var styleSheet = null;
+  var styles = editor._doc.styleSheets;
+
+  for (var i = 0; i < styles.length; i++) {
+    styleSheet = styles[i];
+    if(document.all)
+      var _rules = styleSheet.rules;
+    else
+      var _rules = styleSheet.cssRules;
+    for (var j = 0; j < _rules.length; j++) {
+      rule = _rules[j];
+      if(/^\.\w+$/.test(rule.selectorText)) {
+        var classname = rule.selectorText.replace(/\./,"")+'"';
+        opAtt_all['class'][rule.selectorText] = classname;
+        cont++;
+      }
+    }
+  }
+  return cont;
+}
+
+function choice_dropdown(e) {
+  if (document.all) Key = e.keyCode;
+  else Key = e.charCode;
+
+  if(Key != 32) return;
+
+  var text = document.getElementById('tagopen').value.replace(/^\s*([^\s]+)\s*$/,"$1");
+
+  if(CSSEdit && quoteTest(text)) CSSEdit = false;
+  if(CSSEdit) return;
+
+  if(curTag == 'none') {
+    curTag = text.replace(/(^\w+) ?.*$/, "$1");
+    curTagOpt = tagLib[curTag];
+  }
+
+  if(!/\w/.test(text)) {
+    document.getElementById('tagopen').value = '';
+    createDropdown("tags");
+    return;
+  }
+
+  var att = 'all';
+  if(curTagOpt == true)
+    att = curTag;
+
+  createDropdown(att);
+}
+
+function createDropdown(type) {
+  var _div = document.getElementById('showselect');
+  while(_div.hasChildNodes())
+    _div.removeChild(_div.firstChild);
+  _div.style.visibility = 'visible';
+
+  var _sel = document.createElement("select");
+  _sel.id = "selectag";
+  _sel.onchange = function() { selchange(); };
+
+  if(typeof type == 'object') {
+    var obj = type;
+    forObj(HTMLArea._lc("OPTIONS", "QuickTag"));
+    _div.appendChild(_sel);
+    return;
+  }
+
+  if(type == 'tags') {
+    var obj = allTags;
+    forObj(HTMLArea._lc("TAGs", "QuickTag"));
+    _div.appendChild(_sel);
+    return;
+  }
+
+  type = type.replace(/^h[1-6]$/,"h");
+  var topt = eval('opTag_'+type);
+  if(typeof topt == 'object') 
+    var obj = topt;
+  else 
+    return;
+
+  forObj(HTMLArea._lc("ATTRIBUTES", "QuickTag"));
+  _div.appendChild(_sel);
+
+  function forObj(first) {
+    if(first) {
+      var _op = document.createElement("option");
+      _op.appendChild(document.createTextNode(first));
+      _sel.appendChild(_op);
+    }
+    for(i in obj) {
+      var opt = document.createElement("option");
+      opt.appendChild(document.createTextNode(i));
+      opt.value = obj[i];
+      _sel.appendChild(opt);
+    }
+  }
+}
+
+function colors() {
+  var colloc = window.location.toString().replace(/plugins.+$/,"") +
+               "popups/select_color.html";
+  window.open(colloc, 'colors', "toolbar=no,location=no,directories=no," +
+              "status=no,menubar=no,scrollbars=no,resizable=no,width=240,height=182");
+}
+
+// simulation of Dialog._return - select_color.html needs it.
+var Dialog = new Object();
+Dialog._return = function (val) {
+  if(val != null) {
+    if(CSSEdit)
+      val += '; ';
+    else
+      val += '"';
+    document.getElementById('tagopen').focus();
+    document.getElementById('tagopen').value += "#"+val;
+    document.getElementById('bt_colors').style.display = 'none';
+  }
+};
+</script>
+<style type="text/css">
+html, body {
+background: ButtonFace;
+color: ButtonText;
+font: 11px Tahoma,Verdana,sans-serif;
+margin: 0px;
+padding: 0px;
+border-width: 0px;
+}
+body { padding: 5px; }
+table { font: 11px Tahoma,Verdana,sans-serif; }
+select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
+button { width: 70px; }
+.space { padding: 2px; }
+.title {
+background: #ddf;
+color: #000;
+font-weight: bold;
+font-size: 120%;
+padding: 3px 10px;
+margin-bottom: 10px;
+border-bottom: 1px solid black;
+letter-spacing: 2px;
+}
+.buttons {
+border-top: 1px solid #999;
+padding: 5px;
+text-align: right;
+height: 20px;
+}
+form { padding: 0px; margin: 0px; }
+</style>
+</head>
+  <body class="dialog" onload="Init()">
+<form action="" method="get">
+  <div class="title" style="width: 360px">Quick Tag Editor</div>
+  <div align="center">
+  <table border="0" width="370">
+    <tbody>
+      <tr>
+        <td colspan="2" align="center" style="padding: 3px; background-color: #e9e9e9;">
+        <strong style="font-size: 14px">&lt;</strong>
+        <input id="tagopen" type="text" style="background-color: #e9e9e9; width: 327px; border-width: 0px;">
+        <strong style="font-size: 14px">&gt;</strong>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+  </div>
+<div class="space"></div>
+<div class="buttons">
+<button type="button" id="bt_colors" onclick="colors();">Colors</button>
+<button type="button" id="bt_ok" onclick="return onOK();">Ok</button>
+<button type="button" onclick="return onCancel();">Cancel</button>
+</div>
+<div id="showselect" style="position:absolute; left:7px; top:75px; width:150px; z-index:100; visibility: visible; height: 13px; color: red;">
+</div>
+</form>
+</body>
+</html>
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/quick-tag.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/quick-tag.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/quick-tag.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/quick-tag.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,53 @@
+/*---------------------------------------*\
+ Quick Tag Editor Plugin for HTMLArea-3.0
+ -----------------------------------------
+ author: Cau guanabara 
+ e-mail: caugb@ibest.com.br
+\*---------------------------------------*/
+
+function QuickTag(editor) {
+  var cfg = editor.config;
+  var self = this;
+
+  cfg.registerButton({
+	id       : "quickeditor",
+	tooltip  : this._lc("Quick Tag Editor"),
+	image    : editor.imgURL("ed_quicktag.gif", "QuickTag"), 
+	textMode : false,
+  action   : function(editor) { 
+               self.buttonPress(editor); 
+             }
+  });
+  cfg.addToolbarElement("quickeditor", "htmlmode", 1);  
+}
+
+QuickTag.prototype.buttonPress = function(editor) { 
+var self = this;
+var sel = editor.getSelectedHTML().replace(/(<[^>]*>|&nbsp;|\n|\r)/g,""); 
+var param = new Object();
+param.editor = editor;
+
+  if(/\w/.test(sel))
+    editor._popupDialog("plugin://QuickTag/quicktag", function(p) { self.setTag(editor, p); }, param);
+  else
+    alert(this._lc('You have to select some text'));
+};
+
+QuickTag.prototype.setTag = function(editor, param) {
+editor.surroundHTML(param.tagopen,param.tagclose);
+};
+
+QuickTag._pluginInfo = {
+name          : "QuickTag",
+version       : "1.0 - beta",
+developer     : "Cau Guanabara",
+developer_url : "mailto:caugb@ibest.com.br",
+c_owner       : "Cau Guanabara",
+sponsor       : "Independent production",
+sponsor_url   : "http://www.netflash.com.br/gb/HA3-rc1/examples/quick-tag.html",
+license       : "htmlArea"
+};
+
+QuickTag.prototype._lc = function(string) {
+    return HTMLArea._lc(string, 'QuickTag');
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/tag-lib.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/tag-lib.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/tag-lib.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/QuickTag/tag-lib.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,27 @@
+var allTags={"a":"a","a (full)":"a href=\"\" target=\"\"","address":"address","b":"b","big":"big","blockquote":"blockquote","code":"code","div":"div","em":"em","fieldset":"fieldset","font":"font","font (full)":"font face=\"\" size=\"\" color=\"\"","h1":"h1","h2":"h2","h3":"h3","h4":"h4","h5":"h5","h6":"h6","i":"i","legend":"legend","li":"li","ol":"ol","ul":"ul","p":"p","pre":"pre","small":"small","span":"span","strong":"strong","sub":"sub","sup":"sup","table":"table"};
+var tagLib={"a":true,"div":true,"font":true,"h1":true,"h2":true,"h3":true,"h4":true,"h5":true,"h6":true,"p":true,"table":true};
+var subTagLib={"table":{"op":"<tbody><tr><td>","cl":"</td></tr></tbody>"}};
+var opTag_a={"href":"href=\"","name":"name=\"","target":"target=\""};
+var opAtt_a={"href":{"http://":"http://","https://":"https://","ftp://":"ftp://","mailto:":"mailto:","#":"#\""},"target":{"_top":"_top\"","_self":"_self\"","_parent":"_parent\"","_blank":"_blank\""}};
+var opTag_font={"face":"face=\"","size":"size=\"","color":"color=\""};
+var opAtt_font={"face":{"Verdana":"Verdana\"","Arial":"Arial\"","Tahoma":"Tahoma\"","Courier New":"Courier New\"","Times New Roman":"Times New Roman\""},"size":{"1":"1\"","2":"2\"","3":"3\"","4":"4\"","5":"5\"","6":"6\"","+1":"+1\"","+2":"+2\"","+3":"+3\"","+4":"+4\"","+5":"+5\"","+6":"+6\"","-1":"-1\"","-2":"-2\"","-3":"-3\"","-4":"-4\"","-5":"-5\"","-6":"-6\""}};
+var opTag_div={"align":"align=\""};
+var opAtt_div={"align":{"center":"center\"","left":"left\"","right":"right\"","justify":"justify\""}};
+var opTag_h={"align":"align=\""};
+var opAtt_h={"align":{"center":"center\"","left":"left\"","right":"right\"","justify":"justify\""}};
+var opTag_p={"align":"align=\""};
+var opAtt_p={"align":{"center":"center\"","left":"left\"","right":"right\"","justify":"justify\""}};
+var opTag_table={"align":"align=\"","width":"width=\"","height":"height=\"","cellpadding":"cellpadding=\"","cellspacing":"cellspacing=\"","background":"background=\"","bgcolor":"bgcolor=\"","border":"border=\"","bordercolor":"bordercolor=\"","bordercolorlight":"bordercolorlight=\"","bordercolordark":"bordercolordark=\""};
+var opAtt_table={"align":{"center":"center\"","left":"left\"","right":"right\""}};
+var opTag_all={"class":"class=\"","dir":"dir=\"","id":"id=\"","lang":"lang=\"","onFocus":"onFocus=\"","onBlur":"onBlur=\"","onClick":"onClick=\"","onDblClick":"onDblClick=\"","onMouseDown":"onMouseDown=\"","onMouseUp":"onMouseUp=\"","onMouseOver":"onMouseOver=\"","onMouseMove":"onMouseMove=\"","onMouseOut":"onMouseOut=\"","onKeyPress":"onKeyPress=\"","onKeyDown":"onKeyDown=\"","onKeyUp":"onKeyUp=\"","style":"style=\"","title":"title=\""};
+var opAtt_all={"class":{},"dir":{"rtl":"rtl\"","ltr":"ltr\""},"lang":{"Afrikaans ":"af\"","Albanian ":"sq\"","Arabic ":"ar\"","Basque ":"eu\"","Breton ":"br\"","Bulgarian ":"bg\"","Belarusian ":"be\"","Catalan ":"ca\"","Chinese ":"zh\"","Croatian ":"hr\"","Czech ":"cs\"","Danish ":"da\"","Dutch ":"nl\"","English ":"en\"","Estonian ":"et\"","Faeroese ":"fo\"","Farsi ":"fa\"","Finnish ":"fi\"","French ":"fr\"","Gaelic ":"gd\"","German ":"de\"","Greek ":"el\"","Hebrew ":"he\"","Hindi ":"hi\"","Hungarian ":"hu\"","Icelandic ":"is\"","Indonesian ":"id\"","Italian ":"it\"","Japanese ":"ja\"","Korean ":"ko\"","Latvian ":"lv\"","Lithuanian ":"lt\"","Macedonian ":"mk\"","Malaysian ":"ms\"","Maltese ":"mt\"","Norwegian ":"no\"","Polish ":"pl\"","Portuguese ":"pt\"","Rhaeto-Romanic ":"rm\"","Romanian ":"ro\"","Russian ":"ru\"","Sami ":"sz\"","Serbian ":"sr\"","Setswana ":"tn\"","Slovak ":"sk\"","Slovenian ":"sl\"","Spanish ":"es\"","Sutu ":"sx\"","Swedish ":"sv\"","Thai ":"th\"","Tsong
 a ":"ts\"","Turkish ":"tr\"","Ukrainian ":"uk\"","Urdu ":"ur\"","Vietnamese ":"vi\"","Xhosa ":"xh\"","Yiddish ":"yi\"","Zulu":"zu\""},"style":{"azimuth":"azimuth: ","background":"background: ","background-attachment":"background-attachment: ","background-color":"background-color: ","background-image":"background-image: ","background-position":"background-position: ","background-repeat":"background-repeat: ","border":"border: ","border-bottom":"border-bottom: ","border-left":"border-left: ","border-right":"border-right: ","border-top":"border-top: ","border-bottom-color":"border-bottom-color: ","border-left-color":"border-left-color: ","border-right-color":"border-right-color: ","border-top-color":"border-top-color: ","border-bottom-style":"border-bottom-style: ","border-left-style":"border-left-style: ","border-right-style":"border-right-style: ","border-top-style":"border-top-style: ","border-bottom-width":"border-bottom-width: ","border-left-width":"border-left-width: ","b
 order-right-width":"border-right-width: ","border-top-width":"border-top-width: ","border-collapse":"border-collapse: ","border-color":"border-color: ","border-style":"border-style: ","border-width":"border-width: ","bottom":"bottom: ","caption-side":"caption-side: ","cell-spacing":"cell-spacing: ","clear":"clear: ","clip":"clip: ","color":"color: ","column-span":"column-span: ","content":"content: ","cue":"cue: ","cue-after":"cue-after: ","cue-before":"cue-before: ","cursor":"cursor: ","direction":"direction: ","display":"display: ","elevation":"elevation: ","filter":"filter: ","float":"float: ","font-family":"font-family: ","font-size":"font-size: ","font-size-adjust":"font-size-adjust: ","font-style":"font-style: ","font-variant":"font-variant: ","font-weight":"font-weight: ","height":"height: ","!important":"!important: ","left":"left: ","letter-spacing":"letter-spacing: ","line-height":"line-height: ","list-style":"list-style: ","list-style-image":"list-style-image: ","
 list-style-position":"list-style-position: ","list-style-type":"list-style-type: ","margin":"margin: ","margin-bottom":"margin-bottom: ","margin-left":"margin-left: ","margin-right":"margin-right: ","margin-top":"margin-top: ","marks":"marks: ","max-height":"max-height: ","min-height":"min-height: ","max-width":"max-width: ","min-width":"min-width: ","orphans":"orphans: ","overflow":"overflow: ","padding":"padding: ","padding-bottom":"padding-bottom: ","padding-left":"padding-left: ","padding-right":"padding-right: ","padding-top":"padding-top: ","page-break-after":"page-break-after: ","page-break-before":"page-break-before: ","pause":"pause: ","pause-after":"pause-after: ","pause-before":"pause-before: ","pitch":"pitch: ","pitch-range":"pitch-range: ","play-during":"play-during: ","position":"position: ","richness":"richness: ","right":"right: ","row-span":"row-span: ","size":"size: ","speak":"speak: ","speak-date":"speak-date: ","speak-header":"speak-header: ","speak-numer
 al":"speak-numeral: ","speak-punctuation":"speak-punctuation: ","speak-time":"speak-time: ","speech-rate":"speech-rate: ","stress":"stress: ","table-layout":"table-layout: ","text-align":"text-align: ","text-decoration":"text-decoration: ","text-indent":"text-indent: ","text-shadow":"text-shadow: ","text-transform":"text-transform: ","top":"top: ","vertical-align":"vertical-align: ","visibility":"visibility: ","voice-family":"voice-family: ","volume":"volume: ","white-space":"white-space: ","widows":"widows: ","width":"width: ","word-spacing":"word-spacing: ","z-index":"z-index: "}};
+for(var i in tagLib){
+i=i.replace(/^h[1-6]$/,"h");
+for(var j in opTag_all){
+eval("opTag_"+i+"[\""+j+"\"] = opTag_all[\""+j+"\"];");
+}
+for(var j in opAtt_all){
+eval("opAtt_"+i+"[\""+j+"\"] = opAtt_all[\""+j+"\"];");
+}
+}
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/README.txt
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/README.txt?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/README.txt (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/README.txt Fri Sep 21 03:36:30 2007
@@ -0,0 +1,15 @@
+SaveSubmit for Xinha
+
+developed by Raimund Meyer (ray) xinha @ raimundmeyer.de
+
+Registers a button for submiting the Xinha form using asynchronous
+postback for sending the data to the server
+
+Usage: This should be a drop-in replacement for a normal submit button.
+While saving a message is displayed to inform the user what's going on.
+On successful transmission the output of the target script is shown, so it should print some information
+about the success of saving.
+
+ATTENTION: The data sent by this method is always UTF-8 encoded, regardless of the actual charset used. So, if you 
+are using a different encoding you have to convert on the server side.
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_green.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_green.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_green.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_red.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_red.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/img/ed_save_red.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+// I18N constants
+// LANG: "de", ENCODING: UTF-8
+{ 
+	"Save": "Speichern",
+	"Saving...": "Speichern...",
+	"in progress": "in Arbeit",
+	"Ready": "Fertig"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/fr.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/fr.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/fr.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/fr.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+// I18N constants
+// LANG: "fr", ENCODING: UTF-8
+{ 
+	"Save": "Enregistrer",
+	"Saving...": "Enregistrement...",
+	"in progress": "en cours",
+	"Ready": "Prêt"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+	"Save": "保存",
+	"Saving...": "保存中...",
+	"in progress": "処理中",
+	"Ready": "レディ"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ru.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ru.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ru.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/lang/ru.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,9 @@
+// I18N constants
+// LANG: "ru", ENCODING: UTF-8
+// Simple job done by Alexey Kirpichnikov <alexkir at kiwistudio dot ru>
+{ 
+	"Save": "Сохранить",
+	"Saving...": "Сохранение...",
+	"in progress": "пожалуйста, ждите",
+	"Ready": "Готово"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/save-submit.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/save-submit.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/save-submit.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SaveSubmit/save-submit.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,130 @@
+function SaveSubmit(_1){
+this.editor=_1;
+this.changed=false;
+var _2=this;
+var _3=_1.config;
+this.textarea=this.editor._textArea;
+this.image_changed=_editor_url+"plugins/SaveSubmit/img/ed_save_red.gif";
+this.image_unchanged=_editor_url+"plugins/SaveSubmit/img/ed_save_green.gif";
+_3.registerButton({id:"savesubmit",tooltip:_2._lc("Save"),image:this.image_unchanged,textMode:false,action:function(_4){
+_2.save(_4);
+}});
+_3.addToolbarElement("savesubmit","popupeditor",-1);
+}
+SaveSubmit.prototype._lc=function(_5){
+return Xinha._lc(_5,"SaveSubmit");
+};
+SaveSubmit._pluginInfo={name:"SaveSubmit",version:"1.0",developer:"Raimund Meyer",developer_url:"http://rheinauf.de",c_owner:"Raimund Meyer",sponsor:"",sponsor_url:"",license:"htmlArea"};
+SaveSubmit.prototype.onGenerateOnce=function(){
+this.initial_html=this.editor.getInnerHTML();
+};
+SaveSubmit.prototype.onKeyPress=function(ev){
+if(ev.ctrlKey&&this.editor.getKey(ev)=="s"){
+this.save(this.editor);
+Xinha._stopEvent(ev);
+return true;
+}else{
+if(!this.changed){
+if(this.getChanged()){
+this.setChanged();
+}
+return false;
+}
+}
+};
+SaveSubmit.prototype.onExecCommand=function(_7){
+if(this.changed&&_7=="undo"){
+if(this.initial_html==this.editor.getInnerHTML()){
+this.setUnChanged();
+}
+return false;
+}
+};
+SaveSubmit.prototype.onUpdateToolbar=function(){
+if(!this.changed){
+if(this.getChanged()){
+this.setChanged();
+}
+return false;
+}
+};
+SaveSubmit.prototype.getChanged=function(){
+if(this.initial_html===null){
+this.initial_html=this.editor.getInnerHTML();
+}
+if(this.initial_html!=this.editor.getInnerHTML()&&this.changed==false){
+this.changed=true;
+return true;
+}else{
+return false;
+}
+};
+SaveSubmit.prototype.setChanged=function(){
+this.editor._toolbarObjects.savesubmit.swapImage(this.image_changed);
+this.editor.updateToolbar();
+};
+SaveSubmit.prototype.setUnChanged=function(){
+this.changed=false;
+this.editor._toolbarObjects.savesubmit.swapImage(this.image_unchanged);
+};
+SaveSubmit.prototype.changedReset=function(){
+this.initial_html=null;
+this.setUnChanged();
+};
+SaveSubmit.prototype.save=function(_8){
+this.buildMessage();
+var _9=this;
+var _a=_8._textArea.form;
+_a.onsubmit();
+var _b="";
+for(var i=0;i<_a.elements.length;i++){
+_b+=((i>0)?"&":"")+_a.elements[i].name+"="+encodeURIComponent(_a.elements[i].value);
+}
+Xinha._postback(_8._textArea.form.action,_b,function(_d){
+if(_d){
+_9.setMessage(_d);
+_9.changedReset();
+}
+removeMessage=function(){
+_9.removeMessage();
+};
+window.setTimeout("removeMessage()",1000);
+});
+};
+SaveSubmit.prototype.setMessage=function(_e){
+var _f=this.textarea;
+if(!document.getElementById("message_sub_"+_f.id)){
+return;
+}
+var elt=document.getElementById("message_sub_"+_f.id);
+elt.innerHTML=Xinha._lc(_e,"SaveSubmit");
+};
+SaveSubmit.prototype.removeMessage=function(){
+var _11=this.textarea;
+if(!document.getElementById("message_"+_11.id)){
+return;
+}
+document.body.removeChild(document.getElementById("message_"+_11.id));
+};
+SaveSubmit.prototype.buildMessage=function(){
+var _12=this.textarea;
+var _13=this.editor._htmlArea;
+var _14=document.createElement("div");
+_14.id="message_"+_12.id;
+_14.className="loading";
+_14.style.width=_13.offsetWidth+"px";
+_14.style.left=Xinha.findPosX(_13)+"px";
+_14.style.top=(Xinha.findPosY(_13)+parseInt(_13.offsetHeight)/2)-50+"px";
+var _15=document.createElement("div");
+_15.className="loading_main";
+_15.id="loading_main_"+_12.id;
+_15.appendChild(document.createTextNode(this._lc("Saving...")));
+var _16=document.createElement("div");
+_16.className="loading_sub";
+_16.id="message_sub_"+_12.id;
+_16.appendChild(document.createTextNode(this._lc("in progress")));
+_14.appendChild(_15);
+_14.appendChild(_16);
+document.body.appendChild(_14);
+};
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/placeholder.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/placeholder.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/placeholder.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/set-id.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/set-id.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/img/set-id.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+// I18N constants
+// LANG: "de", ENCODING: UTF-8
+// translated: Raimund Meyer xinha@ray-of-light.org
+{
+  "Set Id and Name": "Objekt ID und Name einfügen",
+  "Name/Id": "Name (ID)",
+  "Delete": "Löschen"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,9 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+  "Set Id and Name": "IDと名前の設定",
+  "Name/Id": "名前/ID",
+  "Delete": "削除",
+  "Set ID/Name": "IDと名前の設定",
+  "ID/Name:": "ID/名前:"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/nb.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/nb.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/nb.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/lang/nb.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+// I18N constants
+// LANG: "nb", ENCODING: UTF-8
+// translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com
+{
+  "Set Id and Name": "Sett ID og navn",
+  "Name/Id": "Navn (ID)",
+  "Delete": "Slett"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/popups/set_id.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/popups/set_id.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/popups/set_id.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/popups/set_id.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,58 @@
+<html>
+<head>
+  <title>Set Id/Name</title>
+  <link rel="stylesheet" type="text/css" href="../../../popups/popup.css" />
+  <script type="text/javascript" src="../../../popups/popup.js"></script>
+  <script type="text/javascript">
+window.resizeTo(350, 100);
+function Init() {
+  __dlg_translate("SetId");
+  __dlg_init();
+  var param = window.dialogArguments;
+  if (param) {
+    document.getElementById("name").value = param["name"];
+  }
+  document.getElementById("name").focus();
+}
+
+function onOK() {
+  // pass data back to the calling window
+  var param = new Object();
+  param["name"] = document.getElementById("name").value;
+  __dlg_close(param);
+  return false;
+}
+
+function onDelete() {
+  // pass data back to the calling window
+  var param = new Object();
+  param["name"] = "";
+  __dlg_close(param);
+  return false;
+}
+
+function onCancel() {
+  __dlg_close(null);
+  return false;
+}
+</script>
+</head>
+
+<body class="dialog" onload="Init()">
+<div class="title">Set ID/Name</div>
+<form>
+<table border="0" style="width: 300px;">
+  <tr>
+    <td class="label">ID/Name:</td>
+    <td><input type="text" id="name" style="width: 200px" /></td>
+  </tr>
+</table>
+
+<div id="buttons">
+  <button type="submit" name="ok" onclick="return onOK();">OK</button>
+  <button type="button" name="delete" onclick="return onDelete();">Delete</button>
+  <button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
+</div>
+</form>
+</body>
+</html>
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,7 @@
+.hasid {
+  background-image: url(img/set-id.gif);
+  background-repeat: no-repeat;
+  background-position: left top;
+  padding-left: 19px;
+  border: 1px dotted blue;
+}

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SetId/set-id.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,96 @@
+function SetId(editor) {
+  this.editor = editor;
+  var cfg = editor.config;
+  var self = this;
+
+  // register the toolbar buttons provided by this plugin
+  cfg.registerButton({
+  id       : "setid",
+  tooltip  : this._lc("Set Id and Name"),
+  image    : editor.imgURL("set-id.gif", "SetId"),
+  textMode : false,
+  action   : function(editor) {
+               self.buttonPress(editor);
+             }
+  });
+  cfg.addToolbarElement("setid", "createlink", 1);
+}
+
+SetId._pluginInfo = {
+  name          : "SetId",
+  version       : "2.0",
+  developer     : "Udo Schmal",
+  developer_url : "http://www.schaffrath-neuemedien.de",
+  c_owner       : "Udo Schmal",
+  sponsor       : "L.N.Schaffrath NeueMedien",
+  sponsor_url   : "http://www.schaffrath-neuemedien.de",
+  license       : "htmlArea"
+};
+
+SetId.prototype._lc = function(string) {
+    return HTMLArea._lc(string, 'SetId');
+};
+
+
+SetId.prototype.onGenerate = function() {
+  var style_id = "ID-style";
+  var style = this.editor._doc.getElementById(style_id);
+  if (style == null) {
+    style = this.editor._doc.createElement("link");
+    style.id = style_id;
+    style.rel = 'stylesheet';
+    style.href = _editor_url + 'plugins/SetId/set-id.css';
+    this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(style);
+  }
+};
+
+SetId.prototype.buttonPress = function(editor) {
+  var outparam = null;
+  var html = editor.getSelectedHTML();
+  var sel  = editor._getSelection();
+  var range  = editor._createRange(sel);
+  var node = editor._activeElement(sel);
+  if (node)
+    outparam = { name : node.id };
+  else
+    outparam = { name : '' };
+
+  editor._popupDialog( "plugin://SetId/set_id", function( param ) {
+    if ( param ) {
+      var name = param["name"];
+      if (name == "" || name == null) {
+        if (node) {
+          node.removeAttribute("name");
+          node.removeAttribute("id");
+          node.removeAttribute("title");
+          if (node.className == "hasid") {
+            node.removeAttribute("class");
+          }
+        }
+        return;
+      }
+      try {
+        var doc = editor._doc;
+        if (!node) {
+          node = doc.createElement("span");
+          node.id = name;
+          node.name = name;
+          node.title = name;
+          node.className = "hasid";
+          node.innerHTML = html;
+          if (HTMLArea.is_ie) {
+            range.pasteHTML(node.outerHTML);
+          } else {
+            editor.insertNodeAtSelection(node);
+          }
+        } else {
+          node.id = name;
+          node.name = name;
+          node.title = name;
+          node.className = "hasid";
+        }
+      }
+      catch (e) { }
+    }
+  }, outparam);
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/dialog.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/dialog.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/dialog.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/dialog.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,17 @@
+<h1 id="[h1]"><l10n>SmartReplace Settings</l10n></h1>
+<div style="margin-left: 10px;">
+<table style="width: 100%;border:none">
+  <tr>
+    <td style="width:15px"><input type="checkbox" id="[enable]" name="[enable]"  /></td>
+    <td style="text-align:left"><l10n>Enable automatic replacements</l10n></td>
+  </tr>
+  <tr>
+    <td style="width:15px"><input type="checkbox" id="[convert]" name="[convert]" /></td>
+    <td style="text-align:left"><l10n>Convert all quotes and dashes in the current document</l10n></td>
+  </tr>
+</table>
+  <div style="margin-top: 10px;">
+    <input type="button" id="[ok]"     value="_(OK)"     />
+    <input type="button" id="[cancel]" value="_(Cancel)" />
+  </div>
+</div>
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/img/smartquotes.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/img/smartquotes.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/img/smartquotes.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,19 @@
+// I18N constants
+// LANG: "de", ENCODING: UTF-8
+{
+	"SmartReplace Settings" : "SmartReplace Einstellungen",
+	"Enable automatic replacements" : "Automatische Ersetzung aktivieren",
+	"Convert all quotes and dashes in the current document": "Alle Anführungszeichen und Gedankenstriche umwandeln",
+	
+	"OpeningDoubleQuotes": "„",
+	"ClosingDoubleQuotes": "“",
+	"OpeningSingleQuote": "‚",
+	"ClosingSingleQuote": "‘"
+	
+	/*
+	"OpeningDoubleQuotes": "»",
+	"ClosingDoubleQuotes": "«",
+	"OpeningSingleQuote": "›",
+	"ClosingSingleQuote": "‹"
+*/
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,19 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+	"SmartReplace Settings" : "SmartReplace設定",
+	"Enable automatic replacements" : "自動置換の有効化",
+	"Convert all quotes and dashes in the current document": "文書内の引用符とダッシュをすべて変換",
+	
+	"OpeningDoubleQuotes": "„",
+	"ClosingDoubleQuotes": "“",
+	"OpeningSingleQuote": "‚",
+	"ClosingSingleQuote": "‘"
+	
+	/*
+	"OpeningDoubleQuotes": "»",
+	"ClosingDoubleQuotes": "«",
+	"OpeningSingleQuote": "›",
+	"ClosingSingleQuote": "‹"
+*/
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/readme.txt
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/readme.txt?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/readme.txt (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/readme.txt Fri Sep 21 03:36:30 2007
@@ -0,0 +1,14 @@
+One irritating thing with text processing is the total absence of some typographic essentials on the keyboard -- "real" (typographic) quotes and the dash, typically miss-typed as inch or second sign (") and the hyphon(-).
+
+This plugin lends the good old Word behaviour to Xinha, as ",', and - get converted to their respective typographic correct relatives while typing.
+
+ Configuration (to change the quote style from default English):
+  * through language file (see lang/de.js)
+  * through a config variable (an array that holds four values: opening single quote, closing single quote, opening double quote, closing double quote)
+  
+ Additional config option:
+  * disable automatic replacement by default
+  
+ Additional features:
+  * can be switched on/off
+  * convert all quotes/dashes in a document that still has the boring  "/- stuff
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/smart-replace.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/smart-replace.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/smart-replace.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SmartReplace/smart-replace.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,228 @@
+function SmartReplace(_1){
+this.editor=_1;
+var _2=_1.config;
+var _3=this;
+_2.registerButton({id:"smartreplace",tooltip:this._lc("SmartReplace"),image:_editor_url+"plugins/SmartReplace/img/smartquotes.gif",textMode:false,action:function(e,_5,_6){
+_3.buttonPress(null,_6);
+}});
+_2.addToolbarElement("smartreplace","htmlmode",1);
+}
+SmartReplace._pluginInfo={name:"SmartReplace",version:"1.0",developer:"Raimund Meyer",developer_url:"http://rheinauf.de",c_owner:"Raimund Meyer",sponsor:"",sponsor_url:"",license:"htmlArea"};
+SmartReplace.prototype._lc=function(_7){
+return Xinha._lc(_7,"SmartReplace");
+};
+Xinha.Config.prototype.SmartReplace={"defaultActive":true,"quotes":null};
+SmartReplace.prototype.toggleActivity=function(_8){
+if(typeof _8!="undefined"){
+this.active=_8;
+}else{
+this.active=this.active?false:true;
+}
+this.editor._toolbarObjects.smartreplace.state("active",this.active);
+};
+SmartReplace.prototype.onUpdateToolbar=function(){
+this.editor._toolbarObjects.smartreplace.state("active",this.active);
+};
+SmartReplace.prototype.onGenerate=function(){
+this.active=this.editor.config.SmartReplace.defaultActive;
+this.editor._toolbarObjects.smartreplace.state("active",this.active);
+var _9=this;
+Xinha._addEvents(_9.editor._doc,["keypress"],function(_a){
+return _9.keyEvent(Xinha.is_ie?_9.editor._iframe.contentWindow.event:_a);
+});
+var _b=this.editor.config.SmartReplace.quotes;
+if(_b&&typeof _b=="object"){
+this.openingQuotes=_b[0];
+this.closingQuotes=_b[1];
+this.openingQuote=_b[2];
+this.closingQuote=_b[3];
+}else{
+this.openingQuotes=this._lc("OpeningDoubleQuotes");
+this.closingQuote=this._lc("ClosingSingleQuote");
+this.closingQuotes=this._lc("ClosingDoubleQuotes");
+this.openingQuote=this._lc("OpeningSingleQuote");
+}
+if(this.openingQuotes=="OpeningDoubleQuotes"){
+this.openingQuotes=String.fromCharCode(8220);
+this.closingQuotes=String.fromCharCode(8221);
+this.openingQuote=String.fromCharCode(8216);
+this.closingQuote=String.fromCharCode(8217);
+}
+};
+SmartReplace.prototype.keyEvent=function(ev){
+if(!this.active){
+return true;
+}
+var _d=this.editor;
+var _e=Xinha.is_ie?ev.keyCode:ev.charCode;
+var _f=String.fromCharCode(_e);
+if(_e==32){
+return this.smartDash();
+}
+if(_f=="\""||_f=="'"){
+Xinha._stopEvent(ev);
+return this.smartQuotes(_f);
+}
+return true;
+};
+SmartReplace.prototype.smartQuotes=function(_10){
+if(_10=="'"){
+var _11=this.openingQuote;
+var _12=this.closingQuote;
+}else{
+var _11=this.openingQuotes;
+var _12=this.closingQuotes;
+}
+var _13=this.editor;
+var sel=_13.getSelection();
+if(Xinha.is_ie){
+var r=_13.createRange(sel);
+if(r.text!==""){
+r.text="";
+}
+r.moveStart("character",-1);
+if(r.text.match(/\S/)){
+r.moveStart("character",+1);
+r.text=_12;
+}else{
+r.moveStart("character",+1);
+r.text=_11;
+}
+}else{
+if(!sel.isCollapsed){
+_13.insertNodeAtSelection(document.createTextNode(""));
+}
+if(sel.anchorOffset>0){
+sel.extend(sel.anchorNode,sel.anchorOffset-1);
+}
+if(sel.toString().match(/\S/)){
+sel.collapse(sel.anchorNode,sel.anchorOffset);
+_13.insertNodeAtSelection(document.createTextNode(_12));
+}else{
+sel.collapse(sel.anchorNode,sel.anchorOffset);
+_13.insertNodeAtSelection(document.createTextNode(_11));
+}
+}
+};
+SmartReplace.prototype.smartDash=function(){
+var _16=this.editor;
+var sel=this.editor.getSelection();
+if(Xinha.is_ie){
+var r=this.editor.createRange(sel);
+r.moveStart("character",-2);
+if(r.text.match(/\s-/)){
+r.text=" "+String.fromCharCode(8211);
+}
+}else{
+sel.extend(sel.anchorNode,sel.anchorOffset-2);
+if(sel.toString().match(/^-/)){
+this.editor.insertNodeAtSelection(document.createTextNode(" "+String.fromCharCode(8211)));
+}
+sel.collapse(sel.anchorNode,sel.anchorOffset);
+}
+};
+SmartReplace.prototype.replaceAll=function(){
+var _19=["&quot;",String.fromCharCode(8220),String.fromCharCode(8221),String.fromCharCode(8222),String.fromCharCode(187),String.fromCharCode(171)];
+var _1a=["'",String.fromCharCode(8216),String.fromCharCode(8217),String.fromCharCode(8218),String.fromCharCode(8250),String.fromCharCode(8249)];
+var _1b=this.editor.getHTML();
+var _1c=new RegExp("(\\s|^|>)("+_19.join("|")+")(\\S)","g");
+_1b=_1b.replace(_1c,"$1"+this.openingQuotes+"$3");
+var _1d=new RegExp("(\\s|^|>)("+_1a.join("|")+")(\\S)","g");
+_1b=_1b.replace(_1d,"$1"+this.openingQuote+"$3");
+var _1e=new RegExp("(\\S)("+_19.join("|")+")","g");
+_1b=_1b.replace(_1e,"$1"+this.closingQuotes);
+var _1f=new RegExp("(\\S)("+_1a.join("|")+")","g");
+_1b=_1b.replace(_1f,"$1"+this.closingQuote);
+var _20=new RegExp("( |&nbsp;)(-)( |&nbsp;)","g");
+_1b=_1b.replace(_20," "+String.fromCharCode(8211)+" ");
+this.editor.setHTML(_1b);
+};
+SmartReplace.prototype.dialog=function(){
+var _21=this;
+var _22=function(_23){
+_21.toggleActivity(_23.enable);
+if(_23.convert){
+_21.replaceAll();
+}
+};
+var _24=this;
+Dialog(_editor_url+"plugins/SmartReplace/popups/dialog.html",_22,_24);
+};
+SmartReplace.prototype.buttonPress=function(_25,obj){
+var _27=this;
+if(this._dialog.dialog.rootElem.style.display!="none"){
+return this._dialog.hide();
+}
+var _28=function(){
+var _29=_27._dialog.hide();
+_27.toggleActivity((_29.enable)?true:false);
+if(_29.convert){
+_27.replaceAll();
+_27._dialog.dialog.getElementById("convert").checked=false;
+}
+};
+var _2a={enable:_27.active?"on":"",convert:""};
+this._dialog.show(_2a,_28);
+};
+SmartReplace.prototype.onGenerateOnce=function(){
+if(!this._dialog){
+this._dialog=new SmartReplace.Dialog(this);
+}
+};
+SmartReplace.Dialog=function(_2b){
+this.Dialog_nxtid=0;
+this.mainPluginObject=_2b;
+this.id={};
+this.ready=false;
+this.files=false;
+this.html=false;
+this.dialog=false;
+this._prepareDialog();
+};
+SmartReplace.Dialog.prototype._prepareDialog=function(){
+var _2c=this;
+var _2d=this.mainPluginObject.editor;
+if(this.html==false){
+Xinha._getback(_editor_url+"plugins/SmartReplace/dialog.html",function(_2e){
+_2c.html=_2e;
+_2c._prepareDialog();
+});
+return;
+}
+this.dialog=new Xinha.Dialog(_2d,this.html,"SmartReplace");
+this.ready=true;
+};
+SmartReplace.Dialog.prototype._lc=SmartReplace.prototype._lc;
+SmartReplace.Dialog.prototype.show=function(_2f,ok,_31){
+if(!this.ready){
+var _32=this;
+window.setTimeout(function(){
+_32.show(_2f,ok,_31);
+},100);
+return;
+}
+var _33=this.dialog;
+var _32=this;
+if(ok){
+this.dialog.getElementById("ok").onclick=ok;
+}else{
+this.dialog.getElementById("ok").onclick=function(){
+_32.hide();
+};
+}
+if(_31){
+this.dialog.getElementById("cancel").onclick=_31;
+}else{
+this.dialog.getElementById("cancel").onclick=function(){
+_32.hide();
+};
+}
+this.mainPluginObject.editor.disableToolbar(["fullscreen","smartreplace"]);
+this.dialog.show(_2f);
+this.dialog.onresize();
+};
+SmartReplace.Dialog.prototype.hide=function(){
+this.mainPluginObject.editor.enableToolbar();
+return this.dialog.hide();
+};
+

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/README
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/README?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/README (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/README Fri Sep 21 03:36:30 2007
@@ -0,0 +1,8 @@
+ExecCGI Note:
+If you intend to use the perl (.cgi) backend then you will need to have the ExecCGI option enabled for this directory (if you are using Apache), you may be able to do this by adding a file called .htaccess in this directory, with the below contents.
+
+## EXAMPLE .htaccess
+Options +ExecCGI
+####################
+
+It is however recommended that you use the PHP backend where possible.
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/aspell_setup.php
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/aspell_setup.php?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/aspell_setup.php (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/aspell_setup.php Fri Sep 21 03:36:30 2007
@@ -0,0 +1,123 @@
+<?php
+// REVISION HISTORY:
+//
+// 2005-08-17 YmL:
+//	.	security fix on unchecked variables. Original author missed quite a few
+//		holes.
+
+  umask(000);
+  $temptext = tempnam('/tmp', 'spell_');
+  if ((!isset($_POST['dictionary'])) || (strlen(trim($_POST['dictionary'])) < 1))
+  {
+      $lang = 'en_GB';
+  }
+  else
+  {
+      $lang = $_POST['dictionary'];
+  }  
+  $lang = preg_replace('/[^a-z0-9_]/i', '', $lang);
+  
+  $aspell      = 'aspell';
+  $aspell_args = '-a --lang=' . $lang;
+
+  if(DIRECTORY_SEPARATOR == '\\') //windows
+  {
+    $aspell         = 'C:\Progra~1\Aspell\bin\aspell.exe';
+  }
+  else //linux
+  {
+    // See if there is a local install of aspell here
+    if(file_exists(dirname(__FILE__) . '/aspell/bin/aspell'))
+    {
+      putenv('PATH=' . dirname(__FILE__) . '/aspell/bin:' . getenv('PATH'));
+      putenv('LD_LIBRARY_PATH=' . dirname(__FILE__) . '/aspell/lib:' . getenv('LD_LIBRARY_PATH'));
+      $dicfil = dirname(__FILE__) .'/aspell/lib/' . preg_replace('/^.*\/lib\/(aspell\S*)\n.*/s', '$1', `aspell config dict-dir`);
+      $aspell_args .= ' --dict-dir=' . $dicfil . ' --add-filter-path=' . $dicfil ;
+    }
+  }
+
+
+  // Old aspell doesn't know about encoding, which means that unicode will be broke, but
+  // we should at least let it try.
+  preg_match('/really aspell ([0-9]+)\.([0-9]+)(?:\.([0-9]+))?/i', `$aspell version`, $aVer);
+
+  $aVer = array('major' => (int)$aVer[1], 'minor' => (int)$aVer[2], 'release' => (int)@$aVer[3]);
+  if($aVer['major'] >= 0 && $aVer['minor'] >= 60)
+  {
+    $aspell_args   .= ' -H --encoding=utf-8';
+  }
+  elseif(preg_match('/--encoding/', shell_exec('aspell 2>&1')))
+  {
+    $aspell_args   .= ' --mode=none --add-filter=sgml --encoding=utf-8';
+  }
+  else
+  {
+    $aspell_args   .= ' --mode=none --add-filter=sgml';
+  }
+
+  // Personal dictionaries
+  $p_dicts_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'personal_dicts';
+
+  if(isset($_REQUEST['p_dicts_path']) && file_exists($_REQUEST['p_dicts_path']) && is_writable($_REQUEST['p_dicts_path']))
+  {
+    if(!isset($_REQUEST['p_dicts_name']))
+    {
+      if(isset($_COOKIE['SpellChecker_p_dicts_name']))
+      {
+        $_REQUEST['p_dicts_name'] = $_COOKIE['SpellChecker_p_dicts_name'];
+      }
+      else
+      {
+        $_REQUEST['p_dicts_name'] = uniqid('dict');
+        setcookie('SpellChecker_p_dicts_name', $_REQUEST['p_dicts_name'], time() + 60*60*24*365*10);
+      }
+    }    
+    $p_dict_path = $_REQUEST['p_dicts_path'] . DIRECTORY_SEPARATOR . preg_replace('/[^a-z0-9_]/i', '', $_REQUEST['p_dicts_name']);
+
+    if(!file_exists($p_dict_path))
+    {
+	 	// since there is a single directory for all users this could end up containing
+		// quite a few subdirectories. To prevent a DOS situation we'll limit the 
+		// total directories created to 2000 (arbitrary). Adjust to suit your installation.
+
+		$count = 0;
+
+		if( $dir = @opendir( $p_dicts_path ) )
+			{
+
+			while( FALSE !== ($file = readdir($dir)) )
+				{
+				$count++;
+				}
+			}
+
+		// TODO: make this a config value.
+
+		if ( $count > 2000 )
+			{
+
+			// either very heavy use or a DOS attempt
+
+			die();
+
+			}
+
+      mkdir($p_dict_path);
+      chmod($p_dict_path, 02770);
+    }
+
+    if(file_exists($p_dict_path) && is_writable($p_dict_path))
+    {
+      // Good To Go!
+      $aspell_args .= ' --home-dir=' . $p_dict_path ;
+    }
+  }
+
+// as an additional precaution check the aspell_args for illegal 
+// characters
+  $aspell_args = preg_replace( "/[|><;\$]+/", '', $aspell_args );
+  $aspelldictionaries = "$aspell dump dicts";
+  $aspellcommand      = "$aspell $aspell_args < $temptext";
+
+
+?>

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/he-spell-check.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/he-spell-check.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/he-spell-check.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/spell-check.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/spell-check.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/img/spell-check.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/cz.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/cz.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/cz.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/cz.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "cz", ENCODING: UTF-8
+// Author: Jiri Löw, <ji...@jirilow.com>
+{
+  "Please confirm that you want to open this link": "Prosím potvrďte otevření tohoto odkazu",
+  "Cancel": "Zrušit",
+  "Dictionary": "Slovník",
+  "Finished list of mispelled words": "Dokončen seznam chybných slov",
+  "I will open it in a new page.": "Bude otevřen jej v nové stránce.",
+  "Ignore all": "Ignorovat vše",
+  "Ignore": "Ignorovat",
+  "No mispelled words found with the selected dictionary.": "Podle zvoleného slovníku nebyla nalezena žádná chybná slova.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Kontrola správnosti slov dokončena, nebyla nalezena žádná chybná slova. Ukončování ...",
+  "OK": "OK",
+  "Original word": "Původní slovo",
+  "Please wait.  Calling spell checker.": "Prosím čekejte. Komunikuace s kontrolou správnosti slov.",
+  "Please wait: changing dictionary to": "Prosím čekejte: změna adresáře na",
+  "This will drop changes and quit spell checker.  Please confirm.": "Změny budou zrušeny a kontrola správnosti slov ukončena. Prosím potvrďte.",
+  "Re-check": "Překontrolovat",
+  "Replace all": "Zaměnit všechno",
+  "Replace with": "Zaměnit za",
+  "Replace": "Zaměnit",
+  "Spell-check": "Kontrola správnosti slov",
+  "Suggestions": "Doporučení",
+  "One moment...": "strpení prosím ;-)"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/da.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/da.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/da.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/da.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "da", ENCODING: UTF-8
+// Author: Steen SÞnderup, <st...@soenderup.com>
+{
+  "Please confirm that you want to open this link": "Vil du fÞlge dette link?",
+  "Cancel": "Anuler",
+  "Dictionary": "Ordbog",
+  "Finished list of mispelled words": "Listen med stavefejl er gennemgået",
+  "I will open it in a new page.": "Jeg vil åbne det i en ny side.",
+  "Ignore all": "Ignorer alle",
+  "Ignore": "Ignorer",
+  "No mispelled words found with the selected dictionary.": "Der blev ikke fundet nogle stavefejl med den valgte ordbog.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Stavekontrollen er gennemfÞrt, der blev ikke fundet nogle stavefejl.  Lukker...",
+  "OK": "OK",
+  "Original word": "Oprindeligt ord",
+  "Please wait.  Calling spell checker.": "Vent venligst.  Henter stavekontrol.",
+  "Please wait: changing dictionary to": "Vent venligst: skifter ordbog til",
+  "This will drop changes and quit spell checker.  Please confirm.": "Alle dine Êndringer vil gå tabt, vil du fortsÊtte?",
+  "Re-check": "Tjek igen",
+  "Replace all": "Erstat alle",
+  "Replace with": "Erstat med",
+  "Replace": "Erstat",
+  "Spell-check": "Stavekontrol",
+  "Suggestions": "Forslag",
+  "One moment...": "Vent venligst"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "en", ENCODING: UTF-8
+// Author: Broxx, <br...@broxx.com>
+{
+  "Please confirm that you want to open this link": "Wollen Sie diesen Link oeffnen",
+  "Cancel": "Abbrechen",
+  "Dictionary": "Woerterbuch",
+  "Finished list of mispelled words": "Liste der nicht bekannten Woerter",
+  "I will open it in a new page.": "Wird auf neuer Seite geoeffnet",
+  "Ignore all": "Alle ignorieren",
+  "Ignore": "Ignorieren",
+  "No mispelled words found with the selected dictionary.": "Keine falschen Woerter mit gewaehlten Woerterbuch gefunden",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Rechtsschreibpruefung wurde ohne Fehler fertiggestellt.  Wird nun geschlossen...",
+  "OK": "OK",
+  "Original word": "Original Wort",
+  "Please wait.  Calling spell checker.": "Bitte warten.  Woerterbuch wird durchsucht.",
+  "Please wait: changing dictionary to": "Bitte warten: Woerterbuch wechseln zu",
+  "This will drop changes and quit spell checker.  Please confirm.": "Aenderungen werden nicht uebernommen.  Bitte bestaettigen.",
+  "Re-check": "Neuueberpruefung",
+  "Replace all": "Alle ersetzen",
+  "Replace with": "Ersetzen mit",
+  "Replace": "Ersetzen",
+  "Spell-check": "Ueberpruefung",
+  "Suggestions": "Vorschlag",
+  "One moment...": "Bitte warten..."
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/fr.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/fr.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/fr.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/fr.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "fr", ENCODING: UTF-8
+{
+  "Please confirm that you want to open this link": "Veuillez confirmer l'ouverture de ce lien",
+  "Cancel": "Annuler",
+  "Dictionary": "Dictionnaire",
+  "Finished list of mispelled words": "Liste des mots mal orthographiés",
+  "I will open it in a new page.": "Ouverture dans une nouvelle fenêtre",
+  "Ignore all": "Tout ignorer",
+  "Ignore": "Ignorer",
+  "No mispelled words found with the selected dictionary.": "Aucune erreur orthographique avec le dictionnaire sélectionné.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Vérification terminée, aucune erreur orthographique détectée.  Fermeture en cours...",
+  "OK": "OK",
+  "Original word": "Mot original",
+  "Please wait.  Calling spell checker.": "Veuillez patienter.  Appel du correcteur.",
+  "Please wait: changing dictionary to": "Veuillez patienter. Changement du dictionnaire vers",
+  "This will drop changes and quit spell checker.  Please confirm.": "Ceci fermera la fenêtre et annulera les modifications. Veuillez confirmer.",
+  "Re-check": "Vérifier encore",
+  "Replace all": "Tout remplacer",
+  "Replace with": "Remplacer par",
+  "Replace": "Remplacer",
+  "Revert": "Annuler",
+  "Spell-check": "Correction",
+  "Suggestions": "Suggestions",
+  "One moment...": "Veuillez patienter"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/he.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/he.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/he.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/he.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,27 @@
+// I18N constants
+// LANG: "en", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+{
+  "Please confirm that you want to open this link": "אנא אשר שברצונך לפתוח קישור זה",
+  "Cancel": "ביטול",
+  "Dictionary": "מילון",
+  "Finished list of mispelled words": "הסתיימה רשימת המילים המאויתות באופן שגוי",
+  "I will open it in a new page.": "אני אפתח את זה בחלון חדש.",
+  "Ignore all": "התעלם מהכל",
+  "Ignore": "התעלם",
+  "No mispelled words found with the selected dictionary.": "לא נמצאו מילים מאויתות באופן שגוי עם המילון הנבחר.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "בדיקת האיות נסתיימה, לא נמצאו מילים מאויתות באופן שגוי.  נסגר כעת...",
+  "OK": "אישור",
+  "Original word": "המילה המקורית",
+  "Please wait.  Calling spell checker.": "אנא המתן.  קורא לבודק איות.",
+  "Please wait: changing dictionary to": "אנא המתן: מחליף מילון ל-",
+  "This will drop changes and quit spell checker.  Please confirm.": "זה יבטל את השינויים ויצא מבודק האיות.  אנא אשר.",
+  "Re-check": "בדוק מחדש",
+  "Replace all": "החלף הכל",
+  "Replace with": "החלף ב-",
+  "Replace": "החלף",
+  "Revert": "החזר שינויים",
+  "Spell-check": "בדיקת איות",
+  "Suggestions": "הצעות",
+  "One moment...": "ענא המטן ;-)"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/hu.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/hu.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/hu.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/hu.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "hu", ENCODING: UTF-8
+// Author: Miklós Somogyi, <so...@vnet.hu>
+{
+  "Please confirm that you want to open this link": "Megerősítés",
+  "Cancel": "Mégsem",
+  "Dictionary": "Szótár",
+  "Finished list of mispelled words": "A tévesztett szavak listájának vége",
+  "I will open it in a new page.": "Megnyitás új lapon",
+  "Ignore all": "Minden elvetése",
+  "Ignore": "Elvetés",
+  "No mispelled words found with the selected dictionary.": "A választott szótár szerint nincs tévesztett szó.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "A helyesírásellenőrzés kész, tévesztett szó nem fordult elő. Bezárás...",
+  "OK": "Rendben",
+  "Original word": "Eredeti szó",
+  "Please wait.  Calling spell checker.": "Kis türelmet, a helyesírásellenőrző hívása folyamatban.",
+  "Please wait: changing dictionary to": "Kis türelmet, szótár cseréje",
+  "This will drop changes and quit spell checker.  Please confirm.": "Kilépés a változások eldobásával. Jóváhagyja?",
+  "Re-check": "Újraellenőrzés",
+  "Replace all": "Mind cseréje",
+  "Replace with": "Csere a következőre:",
+  "Replace": "Csere",
+  "Spell-check": "Helyesírásellenőrzés",
+  "Suggestions": "Tippek",
+  "One moment...": "Kis türelmet ;-)"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,28 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+  "Please confirm that you want to open this link": "本当にこのリンクを開きますか",
+  "Cancel": "中止",
+  "Dictionary": "辞書",
+  "Finished list of mispelled words": "つづり間違単語の一覧",
+  "I will open it in a new page.": "新しいページで開きます。",
+  "Ignore all": "すべて無視",
+  "Ignore": "無視",
+  "No mispelled words found with the selected dictionary.": "選択された辞書にはつづり間違い単語がありません。",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "スペルチェックが完了しましたが、つづり間違い単語はありませんでした。すぐに閉じます...",
+  "OK": "OK",
+  "Original word": "元の単語",
+  "Please wait.  Calling spell checker.": "しばらくお待ちください。スペルチェッカーを呼び出しています。",
+  "Please wait: changing dictionary to": "しばらくお待ちください: 辞書を切り替えています",
+  "This will drop changes and quit spell checker.  Please confirm.": "変更を破棄してスペルチェッカーを終了します。よろしいいですか。",
+  "Re-check": "再チェック",
+  "Replace all": "すべて置換",
+  "Replace with": "これに置換",
+  "Replace": "置換",
+  "Revert": "戻す",
+  "Spell-check": "スペルチェック",
+  "Suggestions": "候補",
+  "One moment...": "あともう少し...",
+  "Info": "情報",
+  "Learn": "学習"
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nb.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nb.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nb.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nb.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "nb", ENCODING: UTF-8
+// translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com
+{
+  "Please confirm that you want to open this link": "Ønsker du å åpne denne lenken",
+  "Cancel": "Avbryt",
+  "Dictionary": "Ordliste",
+  "Finished list of mispelled words": "Ferdig med liste over feilstavede ord",
+  "I will open it in a new page.": "Åpnes i ny side",
+  "Ignore all": "Ignorer alle",
+  "Ignore": "Ignorer",
+  "No mispelled words found with the selected dictionary.": "Ingen feilstavede ord funnet med den valgte ordlisten",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Stavekontroll fullført, ingen feilstavede ord ble funnet, stavekontroll avsluttes.",
+  "OK": "OK",
+  "Original word": "Opprinnelig ord",
+  "Please wait.  Calling spell checker.": "Vennligst vent, kaller opp stavekontrollprogrammet",
+  "Please wait: changing dictionary to": "Vennligst vent, endrer ordliste til",
+  "This will drop changes and quit spell checker.  Please confirm.": "Dette vil droppe endringene og avbryte stavekontrollen, vennligst bekreft.",
+  "Re-check": "Kjør stavekontroll på nytt",
+  "Replace all": "Erstatt alle",
+  "Replace with": "Erstatt med",
+  "Replace": "Erstatt",
+  "Spell-check": "Stavekontroll",
+  "Suggestions": "Forslag",
+  "One moment...": "Et øyeblikk..."
+};
\ No newline at end of file

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nl.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nl.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nl.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/nl.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,27 @@
+// I18N constants
+// LANG: "nl", ENCODING: UTF-8
+// Author: A.H van den Broek  http://www.kontaktfm.nl, tonbroek@kontaktfm.nl
+{
+  "Please confirm that you want to open this link": "Weet u zeker dat u deze link wilt openen?",
+  "Cancel": "Annuleer",
+  "Dictionary": "Woordenboek",
+  "Finished list of mispelled words": "klaar met de lijst van fouten woorden",
+  "I will open it in a new page.": "Ik zal het in een nieuwe pagina openen.",
+  "Ignore all": "alles overslaan",
+  "Ignore": "Overslaan",
+  "No mispelled words found with the selected dictionary.": "Geen fouten gevonden met dit woordenboek.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Spell checking is klaar, geen fouten gevonden.  spell checking word gesloten...",
+  "OK": "OK",
+  "Original word": "Originele woord",
+  "Please wait.  Calling spell checker.": "Even wachten. spell checker wordt geladen.",
+  "Please wait: changing dictionary to": "even wachten: woordenboek wordt veranderd naar",
+  "This will drop changes and quit spell checker.  Please confirm.": "Dit zal alle veranderingen annuleren en de spell checker sluiten.  Weet u het zeker?",
+  "Re-check": "Opnieuw",
+  "Replace all": "Alles vervangen",
+  "Replace with": "Vervangen met",
+  "Replace": "Vervangen",
+  "Revert": "Omkeren",
+  "Spell-check": "Spell-check",
+  "Suggestions": "Suggestie",
+  "One moment...": "Even wachten ;-)"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ro.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ro.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ro.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/lang/ro.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,26 @@
+// I18N constants
+// LANG: "ro", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+{
+  "Please confirm that you want to open this link": "Vă rog confirmaţi că vreţi să deschideţi acest link",
+  "Cancel": "Anulează",
+  "Dictionary": "Dicţionar",
+  "Finished list of mispelled words": "Am terminat lista de cuvinte greşite",
+  "I will open it in a new page.": "O voi deschide într-o altă fereastră.",
+  "Ignore all": "Ignoră toate",
+  "Ignore": "Ignoră",
+  "No mispelled words found with the selected dictionary.": "Nu am găsit nici un cuvânt greşit cu acest dicţionar.",
+  "Spell check complete, didn't find any mispelled words.  Closing now...": "Am terminat, nu am detectat nici o greşeală.  Acum închid fereastra...",
+  "OK": "OK",
+  "Original word": "Cuvântul original",
+  "Please wait.  Calling spell checker.": "Vă rog aşteptaţi.  Apelez spell-checker-ul.",
+  "Please wait: changing dictionary to": "Vă rog aşteptaţi.  Schimb dicţionarul cu",
+  "This will drop changes and quit spell checker.  Please confirm.": "Doriţi să renunţaţi la modificări şi să închid spell-checker-ul?",
+  "Re-check": "Scanează",
+  "Replace all": "Înlocuieşte toate",
+  "Replace with": "Înlocuieşte cu",
+  "Replace": "Înlocuieşte",
+  "Spell-check": "Detectează greşeli",
+  "Suggestions": "Sugestii",
+  "One moment...": "va rog ashteptatzi ;-)"
+};

Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/readme-tech.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/readme-tech.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/readme-tech.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/readme-tech.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
+<html>
+  <head>
+    <title>HTMLArea Spell Checker</title>
+  </head>
+
+  <body>
+    <h1>HTMLArea Spell Checker</h1>
+
+    <p>The HTMLArea Spell Checker subsystem consists of the following
+      files:</p>
+
+    <ul>
+
+      <li>spell-checker.js &mdash; the spell checker plugin interface for
+        HTMLArea</li>
+
+      <li>spell-checker-ui.html &mdash; the HTML code for the user
+        interface</li>
+
+      <li>spell-checker-ui.js &mdash; functionality of the user
+        interface</li>
+
+      <li>spell-checker-logic.cgi &mdash; Perl CGI script that checks a text
+        given through POST for spelling errors</li>
+
+      <li>spell-checker-style.css &mdash; style for mispelled words</li>
+
+      <li>lang/en.js &mdash; main language file (English).</li>
+
+    </ul>
+
+    <h2>Process overview</h2>
+
+    <p>
+      When an end-user clicks the "spell-check" button in the HTMLArea
+      editor, a new window is opened with the URL of "spell-check-ui.html".
+      This window initializes itself with the text found in the editor (uses
+      <tt>window.opener.SpellChecker.editor</tt> global variable) and it
+      submits the text to the server-side script "spell-check-logic.cgi".
+      The target of the FORM is an inline frame which is used both to
+      display the text and correcting.
+    </p>
+
+    <p>
+      Further, spell-check-logic.cgi calls Aspell for each portion of plain
+      text found in the given HTML.  It rebuilds an HTML file that contains
+      clear marks of which words are incorrect, along with suggestions for
+      each of them.  This file is then loaded in the inline frame.  Upon
+      loading, a JavaScript function from "spell-check-ui.js" is called.
+      This function will retrieve all mispelled words from the HTML of the
+      iframe and will setup the user interface so that it allows correction.
+    </p>
+
+    <h2>The server-side script (spell-check-logic.cgi)</h2>
+
+    <p>
+      <strong>Unicode safety</strong> &mdash; the program <em>is</em>
+      Unicode safe.  HTML entities are expanded into their corresponding
+      Unicode characters.  These characters will be matched as part of the
+      word passed to Aspell.  All texts passed to Aspell are in Unicode
+      (when appropriate).  <strike>However, Aspell seems to not support Unicode
+      yet (<a
+        href="http://mail.gnu.org/archive/html/aspell-user/2000-11/msg00007.html">thread concerning Aspell and Unicode</a>).
+      This mean that words containing Unicode
+      characters that are not in 0..255 are likely to be reported as "mispelled" by Aspell.</strike>
+    </p>
+
+    <p>
+      <strong style="font-variant: small-caps; color:
+      red;">Update:</strong> though I've never seen it mentioned
+      anywhere, it looks that Aspell <em>does</em>, in fact, speak
+      Unicode.  Or else, maybe <code>Text::Aspell</code> does
+      transparent conversion; anyway, this new version of our
+      SpellChecker plugin is, as tests show so far, fully
+      Unicode-safe... well, probably the <em>only</em> freeware
+      Web-based spell-checker which happens to have Unicode support.
+    </p>
+
+    <p>
+      The Perl Unicode manual (man perluniintro) states:
+    </p>
+
+    <blockquote>
+      <em>
+        Starting from Perl 5.6.0, Perl has had the capacity to handle Unicode
+        natively.  Perl 5.8.0, however, is the first recommended release for
+        serious Unicode work.  The maintenance release 5.6.1 fixed many of the
+        problems of the initial Unicode implementation, but for example regular
+        expressions still do not work with Unicode in 5.6.1.
+      </em>
+    </blockquote>
+
+    <p>In other words, do <em>not</em> assume that this script is
+      Unicode-safe on Perl interpreters older than 5.8.0.</p>
+
+    <p>The following Perl modules are required:</p>
+
+    <ul>
+      <li><a href="http://search.cpan.org/search?query=Text%3A%3AAspell&mode=all" target="_blank">Text::Aspell</a></li>
+      <li><a href="http://search.cpan.org/search?query=XML%3A%3ADOM&mode=all" target="_blank">XML::DOM</a></li>
+      <li><a href="http://search.cpan.org/search?query=CGI&mode=all" target="_blank">CGI</a></li>
+    </ul>
+
+    <p>Of these, only Text::Aspell might need to be installed manually.  The
+      others are likely to be available by default in most Perl distributions.</p>
+
+    <hr />
+    <address><a href="http://dynarch.com/mishoo/">Mihai Bazon</a></address>
+<!-- Created: Thu Jul 17 13:22:27 EEST 2003 -->
+<!-- hhmts start --> Last modified: Fri Jan 30 19:14:11 EET 2004 <!-- hhmts end -->
+<!-- doc-lang: English -->
+  </body>
+</html>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org