svn commit: r578051 [27/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...
[email protected] Fri, 21 Sep 2007 10:37:48 -0000
Newsgroups
gmane.comp.cms.lenya.cvs
Message-ID
<[email protected] >
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.cgi
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.cgi?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.cgi (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.cgi Fri Sep 21 03:36:30 2007
@@ -0,0 +1,210 @@
+#! /usr/bin/perl -w
+
+# Spell Checker Plugin for HTMLArea-3.0
+# Sponsored by www.americanbible.org
+# Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+#
+# (c) dynarch.com 2003.
+# Distributed under the same terms as HTMLArea itself.
+# This notice MUST stay intact for use (see license.txt).
+#
+# $Id: spell-check-logic.cgi 21 2005-02-19 05:23:56Z gogo $
+
+use strict;
+use utf8;
+use Encode;
+use Text::Aspell;
+use XML::DOM;
+use CGI;
+
+my $TIMER_start = undef;
+eval {
+ use Time::HiRes qw( gettimeofday tv_interval );
+ $TIMER_start = [gettimeofday()];
+};
+# use POSIX qw( locale_h );
+
+binmode STDIN, ':utf8';
+binmode STDOUT, ':utf8';
+
+my $debug = 0;
+
+my $speller = new Text::Aspell;
+my $cgi = new CGI;
+
+my $total_words = 0;
+my $total_mispelled = 0;
+my $total_suggestions = 0;
+my $total_words_suggested = 0;
+
+# FIXME: report a nice error...
+die "Can't create speller!" unless $speller;
+
+my $dict = $cgi->param('dictionary') || $cgi->cookie('dictionary') || 'en';
+
+# add configurable option for this
+$speller->set_option('lang', $dict);
+$speller->set_option('encoding', 'UTF-8');
+#setlocale(LC_CTYPE, $dict);
+
+# ultra, fast, normal, bad-spellers
+# bad-spellers seems to cause segmentation fault
+$speller->set_option('sug-mode', 'normal');
+
+my %suggested_words = ();
+keys %suggested_words = 128;
+
+my $file_content = decode('UTF-8', $cgi->param('content'));
+$file_content = parse_with_dom($file_content);
+
+my $ck_dictionary = $cgi->cookie(-name => 'dictionary',
+ -value => $dict,
+ -expires => '+30d');
+
+print $cgi->header(-type => 'text/html; charset: utf-8',
+ -cookie => $ck_dictionary);
+
+my $js_suggested_words = make_js_hash(\%suggested_words);
+my $js_spellcheck_info = make_js_hash_from_array
+ ([
+ [ 'Total words' , $total_words ],
+ [ 'Mispelled words' , $total_mispelled . ' in dictionary \"'.$dict.'\"' ],
+ [ 'Total suggestions' , $total_suggestions ],
+ [ 'Total words suggested' , $total_words_suggested ],
+ [ 'Spell-checked in' , defined $TIMER_start ? (tv_interval($TIMER_start) . ' seconds') : 'n/a' ]
+ ]);
+
+print qq^<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" type="text/css" media="all" href="spell-check-style.css" />
+<script type="text/javascript">
+ var suggested_words = { $js_suggested_words };
+ var spellcheck_info = { $js_spellcheck_info }; </script>
+</head>
+<body onload="window.parent.finishedSpellChecking();">^;
+
+print $file_content;
+if ($cgi->param('init') eq '1') {
+ my @dicts = $speller->dictionary_info();
+ my $dictionaries = '';
+ foreach my $i (@dicts) {
+ next if $i->{jargon};
+ my $name = $i->{name};
+ if ($name eq $dict) {
+ $name = '@'.$name;
+ }
+ $dictionaries .= ',' . $name;
+ }
+ $dictionaries =~ s/^,//;
+ print qq^<div id="HA-spellcheck-dictionaries">$dictionaries</div>^;
+}
+
+print '</body></html>';
+
+# Perl is beautiful.
+sub spellcheck {
+ my $node = shift;
+ my $doc = $node->getOwnerDocument;
+ my $check = sub { # called for each word in the text
+ # input is in UTF-8
+ my $word = shift;
+ my $already_suggested = defined $suggested_words{$word};
+ ++$total_words;
+ if (!$already_suggested && $speller->check($word)) {
+ return undef;
+ } else {
+ # we should have suggestions; give them back to browser in UTF-8
+ ++$total_mispelled;
+ if (!$already_suggested) {
+ # compute suggestions for this word
+ my @suggestions = $speller->suggest($word);
+ my $suggestions = decode($speller->get_option('encoding'), join(',', @suggestions));
+ $suggested_words{$word} = $suggestions;
+ ++$total_suggestions;
+ $total_words_suggested += scalar @suggestions;
+ }
+ # HA-spellcheck-error
+ my $err = $doc->createElement('span');
+ $err->setAttribute('class', 'HA-spellcheck-error');
+ my $tmp = $doc->createTextNode;
+ $tmp->setNodeValue($word);
+ $err->appendChild($tmp);
+ return $err;
+ }
+ };
+ while ($node->getNodeValue =~ /([\p{IsWord}']+)/) {
+ my $word = $1;
+ my $before = $`;
+ my $after = $';
+ my $df = &$check($word);
+ if (!$df) {
+ $before .= $word;
+ }
+ {
+ my $parent = $node->getParentNode;
+ my $n1 = $doc->createTextNode;
+ $n1->setNodeValue($before);
+ $parent->insertBefore($n1, $node);
+ $parent->insertBefore($df, $node) if $df;
+ $node->setNodeValue($after);
+ }
+ }
+};
+
+sub check_inner_text {
+ my $node = shift;
+ my $text = '';
+ for (my $i = $node->getFirstChild; defined $i; $i = $i->getNextSibling) {
+ if ($i->getNodeType == TEXT_NODE) {
+ spellcheck($i);
+ }
+ }
+};
+
+sub parse_with_dom {
+ my ($text) = @_;
+ $text = '<spellchecker>'.$text.'</spellchecker>';
+
+ my $parser = new XML::DOM::Parser;
+ if ($debug) {
+ open(FOO, '>:utf8', '/tmp/foo');
+ print FOO $text;
+ close FOO;
+ }
+ my $doc = $parser->parse($text);
+ my $nodes = $doc->getElementsByTagName('*');
+ my $n = $nodes->getLength;
+
+ for (my $i = 0; $i < $n; ++$i) {
+ my $node = $nodes->item($i);
+ if ($node->getNodeType == ELEMENT_NODE) {
+ check_inner_text($node);
+ }
+ }
+
+ my $ret = $doc->toString;
+ $ret =~ s{<spellchecker>(.*)</spellchecker>}{$1}sg;
+ return $ret;
+};
+
+sub make_js_hash {
+ my ($hash) = @_;
+ my $js_hash = '';
+ while (my ($key, $val) = each %$hash) {
+ $js_hash .= ',' if $js_hash;
+ $js_hash .= '"'.$key.'":"'.$val.'"';
+ }
+ return $js_hash;
+};
+
+sub make_js_hash_from_array {
+ my ($array) = @_;
+ my $js_hash = '';
+ foreach my $i (@$array) {
+ $js_hash .= ',' if $js_hash;
+ $js_hash .= '"'.$i->[0].'":"'.$i->[1].'"';
+ }
+ return $js_hash;
+};
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.php
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.php?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.php (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-logic.php Fri Sep 21 03:36:30 2007
@@ -0,0 +1,171 @@
+<?php
+ $text = stripslashes($_POST['content']);
+
+ // Convert UTF-8 multi-bytes into decimal character entities. This is because
+ // aspell isn't fully utf8-aware - ticket:120 raises the possibility
+ // that this is not required (any more) and so you can turn it off
+ // with editor.config.SpellChecker.utf8_to_entities = false
+ if(!isset($_REQUEST['utf8_to_entitis']) || $_REQUEST['utf8_to_entities'])
+ {
+ $text = preg_replace('/([\xC0-\xDF][\x80-\xBF])/e', "'&#' . utf8_ord('\$1') . ';'", $text);
+ $text = preg_replace('/([\xE0-\xEF][\x80-\xBF][\x80-\xBF])/e', "'&#' . utf8_ord('\$1') . ';'", $text);
+ $text = preg_replace('/([\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF])/e', "'&#' . utf8_ord('\$1') . ';'", $text);
+ }
+
+ function utf8_ord($chr)
+ {
+ switch(strlen($chr))
+ {
+ case 1 :
+ return ord($chr);
+
+ case 2 :
+ $ord = ord($chr{1}) & 63;
+ $ord = $ord | ((ord($chr{0}) & 31) << 6);
+ return $ord;
+
+ case 3 :
+ $ord = ord($chr{2}) & 63;
+ $ord = $ord | ((ord($chr{1}) & 63) << 6);
+ $ord = $ord | ((ord($chr{0}) & 15) << 12);
+ return $ord;
+
+ case 4 :
+ $ord = ord($chr{3}) & 63;
+ $ord = $ord | ((ord($chr{2}) & 63) << 6);
+ $ord = $ord | ((ord($chr{1}) & 63) << 12);
+ $ord = $ord | ((ord($chr{0}) & 7) << 18);
+ return $ord;
+
+ default :
+ trigger_error('Character not utf-8', E_USER_ERROR);
+ }
+ }
+
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'aspell_setup.php');
+
+##############################################################################
+header('Content-Type: text/html; charset=utf-8');
+ echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" type="text/css" media="all" href="spell-check-style.css" />';
+
+// Lets define some values outside the condition below, in case we have an empty
+// document.
+$textarray = array();
+$varlines = '<script type="text/javascript">var suggested_words = { ';
+$infolines = 'var spellcheck_info = {';
+$counter = 0;
+$suggest_count = 0;
+
+if (trim($text) != "")
+{
+ if ($fd = fopen($temptext, 'w'))
+ {
+ $textarray = explode("\n", $text);
+ fwrite ($fd, "!\n");
+ foreach ($textarray as $key=>$value)
+ {
+ // adding the carat to each line prevents the use of aspell commands within the text...
+ fwrite($fd, "^$value\n");
+ }
+ fclose($fd);
+ chmod($temptext, 0777);
+ // next run aspell
+ $return = shell_exec($aspellcommand . ' 2>&1');
+ // echo $return;
+ unlink($temptext);
+ $returnarray = explode("\n", $return);
+ $returnlines = count($returnarray);
+//print_r(htmlentities($return));
+ $textlines = count($textarray);
+
+ $lineindex = -1;
+ $poscorrect = 0;
+ foreach ($returnarray as $key=>$value)
+ {
+ // if there is a correction here, processes it, else move the $textarray pointer to the next line
+ if (substr($value, 0, 1) == '&')
+ {
+ $counter=$counter+1;
+ $correction = explode(' ', $value);
+ $word = $correction[1];
+ $suggest_count += $correction[2];
+ $absposition = substr($correction[3], 0, -1) - 1;
+ $position = $absposition + $poscorrect;
+ $niceposition = $lineindex.','.$absposition;
+ $suggstart = strpos($value, ':') + 2;
+ $suggestions = substr($value, $suggstart);
+ $suggestionarray = explode(', ', $suggestions);
+
+ $beforeword = substr($textarray[$lineindex], 0, $position);
+ $afterword = substr($textarray[$lineindex], $position + strlen($word));
+ $textarray[$lineindex] = $beforeword.'<span class="HA-spellcheck-error">'.$word.'</span>'.$afterword;
+
+ $suggestion_list = '';
+ foreach ($suggestionarray as $key=>$value)
+ {
+ $suggestion_list .= $value.',';
+ }
+ $suggestion_list = substr($suggestion_list, 0, strlen($suggestion_list) - 1);
+ $varlines .= '"'.$word.'":"'.$suggestion_list.'",';
+
+ $poscorrect = $poscorrect + 41;
+ }
+ elseif (substr($value, 0, 1) == '#')
+ {
+ $correction = explode(' ', $value);
+ $word = $correction[1];
+ $absposition = $correction[2] - 1;
+ $position = $absposition + $poscorrect;
+ $niceposition = $lineindex.','.$absposition;
+ $beforeword = substr($textarray[$lineindex], 0, $position);
+ $afterword = substr($textarray[$lineindex], $position + strlen($word));
+ $textarray[$lineindex] = $beforeword.$word.$afterword;
+ $textarray[$lineindex] = $beforeword.'<span class="HA-spellcheck-error">'.$word.'</span><span class="HA-spellcheck-suggestions">'.$word.'</span>'.$afterword;
+// $poscorrect = $poscorrect;
+ $poscorrect = $poscorrect + 88 + strlen($word);
+ }
+ else
+ {
+ //print "Done with line $lineindex, next line...<br><br>";
+ $poscorrect = 0;
+ $lineindex = $lineindex + 1;
+ }
+ }
+ }
+ else
+ {
+ // This one isnt used for anything at the moment!
+ $return = 'failed to open!';
+ }
+}
+else
+{
+ $returnlines=0;
+}
+$infolines .= '"Language Used":"'.$lang.'",';
+$infolines .= '"Mispelled words":"'.$counter.'",';
+$infolines .= '"Total words suggested":"'.$suggest_count.'",';
+$infolines .= '"Total Lines Checked":"'.$returnlines.'"';
+$infolines .= '};';
+$varlines = substr($varlines, 0, strlen($varlines) - 1);
+echo $varlines.'};'.$infolines.'</script>';
+
+echo '</head>
+<body onload="window.parent.finishedSpellChecking();">';
+
+foreach ($textarray as $key=>$value)
+{
+ echo $value;
+}
+
+$dictionaries = str_replace(chr(10),",", shell_exec($aspelldictionaries));
+if(ereg(",$",$dictionaries))
+ $dictionaries = ereg_replace(",$","",$dictionaries);
+echo '<div id="HA-spellcheck-dictionaries">'.$dictionaries.'</div>';
+
+echo '</body></html>';
+?>
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-savedicts.php
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-savedicts.php?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-savedicts.php (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-savedicts.php Fri Sep 21 03:36:30 2007
@@ -0,0 +1,38 @@
+<?php
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'aspell_setup.php');
+
+
+ $to_p_dict = $_REQUEST['to_p_dict'] ? $_REQUEST['to_p_dict'] : array();
+ $to_r_list = $_REQUEST['to_r_list'] ? $_REQUEST['to_r_list'] : array();
+print_r($to_r_list);
+ if($to_p_dict || $to_r_list)
+ {
+ if($fh = fopen($temptext, 'w'))
+ {
+ foreach($to_p_dict as $personal_word)
+ {
+ $cmd = '&' . $personal_word . "\n";
+ echo $cmd;
+ fwrite($fh, $cmd, strlen($cmd));
+ }
+
+ foreach($to_r_list as $replace_pair)
+ {
+ $cmd = '$$ra ' . $replace_pair[0] . ' , ' . $replace_pair[1] . "\n";
+ echo $cmd;
+ fwrite($fh, $cmd, strlen($cmd));
+ }
+ $cmd = "#\n";
+ echo $cmd;
+ fwrite($fh, $cmd, strlen($cmd));
+ fclose($fh);
+ }
+ else
+ {
+ die("Can't Write");
+ }
+ echo $aspellcommand."\n";
+ echo shell_exec($aspellcommand . ' 2>&1');
+ unlink($temptext);
+ }
+?>
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-style.css
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-style.css?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-style.css (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-style.css Fri Sep 21 03:36:30 2007
@@ -0,0 +1,10 @@
+.HA-spellcheck-error { border-bottom: 1px dashed #f00; cursor: default; }
+.HA-spellcheck-same { background-color: #cef; color: #000; }
+.HA-spellcheck-hover { background-color: #433; color: white; }
+.HA-spellcheck-fixed { border-bottom: 1px dashed #0b8; }
+.HA-spellcheck-current { background-color: #9be; color: #000; }
+.HA-spellcheck-suggestions { display: none; }
+
+#HA-spellcheck-dictionaries { display: none; }
+
+a:link, a:visited { color: #55e; }
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,125 @@
+<!--
+
+ Strangely, IE sucks with or without the DOCTYPE switch.
+ I thought it would only suck without it.
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+ Spell Checker Plugin for HTMLArea-3.0
+ Sponsored by www.americanbible.org
+ Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+
+ (c) dynarch.com 2003.
+ Distributed under the same terms as HTMLArea itself.
+ This notice MUST stay intact for use (see license.txt).
+
+ $Id: spell-check-ui.html 498 2006-04-30 09:46:23Z gogo $
+
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+
+ <head>
+ <title>Spell Checker</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <script type="text/javascript" src="spell-check-ui.js"></script>
+
+ <style type="text/css">
+ html, body { height: 100%; margin: 0px; padding: 0px; background-color: #fff;
+ color: #000; }
+ a:link, a:visited { color: #00f; text-decoration: none; }
+ a:hover { color: #f00; text-decoration: underline; }
+
+ table { background-color: ButtonFace; color: ButtonText;
+ font-family: tahoma,verdana,sans-serif; font-size: 11px; }
+
+ iframe { background-color: #fff; color: #000; height: 100%; width: 100%; }
+
+ .controls { width: 13em; }
+ .controls .sectitle { /* background-color: #736c6c; color: #fff;
+ border-top: 1px solid #000; border-bottom: 1px solid #fff; */
+ text-align: center;
+ font-weight: bold; padding: 2px 4px; }
+ .controls .secbody { margin-bottom: 10px; }
+
+ button, select { font-family: tahoma,verdana,sans-serif; font-size: 11px; }
+ button { width: 6em; padding: 0px; }
+
+ input, select { font-family: fixed,"andale mono",monospace; }
+
+ #v_currentWord { color: #f00; font-weight: bold; }
+ #statusbar { padding: 7px 0px 0px 5px; }
+ #status { font-weight: bold; }
+ </style>
+
+ </head>
+
+ <body onload="initDocument()">
+
+ <form style="display: none;" action="spell-check-logic.cgi"
+ method="post" target="framecontent"
+ accept-charset="UTF-8"
+ ><input type="hidden" name="content" id="f_content"
+ /><input type="hidden" name="dictionary" id="f_dictionary"
+ /><input type="hidden" name="init" id="f_init" value="1"
+ /><input type="hidden" name="utf8_to_entities" id="utf8_to_entities" value="1"
+ /></form>
+
+ <table style="height: 100%; width: 100%; border-collapse: collapse;" cellspacing="0" cellpadding="0">
+ <tr>
+ <td colspan="2" style="height: 1em; padding: 2px;">
+ <div style="float: right; padding: 2px;"><span>Dictionary</span>
+ <select id="v_dictionaries" style="width: 10em"></select>
+ <button id="b_recheck">Re-check</button>
+ </div>
+ <span id="status">Please wait. Calling spell checker.</span>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top" class="controls">
+ <div class="secbody" style="text-align: center">
+ <button id="b_info">Info</button>
+ </div>
+ <div class="sectitle">Original word</div>
+ <div class="secbody" id="v_currentWord" style="text-align:
+ center; margin-bottom: 0px;">pliz weit ;-)</div>
+ <div class="secbody" style="text-align: center">
+ <button id="b_revert">Revert</button>
+ </div>
+ <div class="sectitle">Replace with</div>
+ <div class="secbody">
+ <input type="text" id="v_replacement" style="width: 94%; margin-left: 3%;" /><br />
+ <div style="text-align: center; margin-top: 2px;">
+ <button id="b_replace">Replace</button><button
+ id="b_replall">Replace all</button><br /><button
+ id="b_ignore">Ignore</button><button
+ id="b_ignall">Ignore all</button>
+ <button
+ id="b_learn">Learn</button>
+ </div>
+ </div>
+ <div class="sectitle">Suggestions</div>
+ <div class="secbody">
+ <select size="11" style="width: 94%; margin-left: 3%;" id="v_suggestions"></select>
+ </div>
+ </td>
+
+ <td>
+ <iframe src="../../popups/blank.html" width="100%" height="100%"
+ id="i_framecontent" name="framecontent"></iframe>
+ </td>
+ </tr>
+ <tr>
+ <td style="height: 1em;" colspan="2">
+ <div style="padding: 4px 2px 2px 2px; float: right;">
+ <button id="b_ok">OK</button>
+ <button id="b_cancel">Cancel</button>
+ </div>
+ <div id="statusbar"></div>
+ </td>
+ </tr>
+ </table>
+
+ </body>
+
+</html>
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-check-ui.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,392 @@
+var SpellChecker=window.opener.SpellChecker;
+var Xinha=window.opener.Xinha;
+var HTMLArea=Xinha;
+var _editor_url=window.opener._editor_url;
+var is_ie=HTMLArea.is_ie;
+var editor=SpellChecker.editor;
+var frame=null;
+var currentElement=null;
+var wrongWords=null;
+var modified=false;
+var allWords={};
+var fixedWords=[];
+var suggested_words={};
+var to_p_dict=[];
+var to_r_list=[];
+function _lc(_1){
+return HTMLArea._lc(_1,"SpellChecker");
+}
+function makeCleanDoc(_2){
+var _3=wrongWords.concat(fixedWords);
+for(var i=_3.length;--i>=0;){
+var el=_3[i];
+if(!(_2&&/HA-spellcheck-fixed/.test(el.className))){
+if(el.firstChild){
+el.parentNode.insertBefore(el.firstChild,el);
+}
+el.parentNode.removeChild(el);
+}else{
+el.className="HA-spellcheck-fixed";
+}
+}
+return Xinha.getHTML(frame.contentWindow.document.body,true,editor);
+}
+function recheckClicked(){
+document.getElementById("status").innerHTML=_lc("Please wait: changing dictionary to")+": \""+document.getElementById("f_dictionary").value+"\".";
+var _6=document.getElementById("f_content");
+_6.value=makeCleanDoc(true);
+_6.form.submit();
+}
+function saveClicked(){
+if(modified){
+editor.setHTML(makeCleanDoc(false));
+}
+if(to_p_dict.length||to_r_list.length&&editor.config.SpellChecker.backend=="php"){
+var _7={};
+for(var i=0;i<to_p_dict.length;i++){
+_7["to_p_dict["+i+"]"]=to_p_dict[i];
+}
+for(var i=0;i<to_r_list.length;i++){
+_7["to_r_list["+i+"][0]"]=to_r_list[i][0];
+_7["to_r_list["+i+"][1]"]=to_r_list[i][1];
+}
+window.opener.HTMLArea._postback(_editor_url+"/plugins/SpellChecker/spell-check-savedicts.php",_7);
+window.close();
+}else{
+window.close();
+}
+return false;
+}
+function cancelClicked(){
+var ok=true;
+if(modified){
+ok=confirm(_lc("This will drop changes and quit spell checker. Please confirm."));
+}
+if(ok){
+window.close();
+}
+return false;
+}
+function replaceWord(el){
+var _b=document.getElementById("v_replacement").value;
+var _c=(el.innerHTML!=_b);
+if(_c){
+modified=true;
+}
+if(el){
+el.className=el.className.replace(/\s*HA-spellcheck-(hover|fixed)\s*/g," ");
+}
+el.className+=" HA-spellcheck-fixed";
+el.__msh_fixed=true;
+if(!_c){
+return false;
+}
+to_r_list.push([el.innerHTML,_b]);
+el.innerHTML=_b;
+}
+function replaceClicked(){
+replaceWord(currentElement);
+var _d=currentElement.__msh_id;
+var _e=_d;
+do{
+++_e;
+if(_e==wrongWords.length){
+_e=0;
+}
+}while((_e!=_d)&&wrongWords[_e].__msh_fixed);
+if(_e==_d){
+_e=0;
+alert(_lc("Finished list of mispelled words"));
+}
+wrongWords[_e].__msh_wordClicked(true);
+return false;
+}
+function revertClicked(){
+document.getElementById("v_replacement").value=currentElement.__msh_origWord;
+replaceWord(currentElement);
+currentElement.className="HA-spellcheck-error HA-spellcheck-current";
+return false;
+}
+function replaceAllClicked(){
+var _f=document.getElementById("v_replacement").value;
+var ok=true;
+var _11=allWords[currentElement.__msh_origWord];
+if(_11.length==0){
+alert("An impossible condition just happened. Call FBI. ;-)");
+}else{
+if(_11.length==1){
+replaceClicked();
+return false;
+}
+}
+if(ok){
+for(var i=0;i<_11.length;++i){
+if(_11[i]!=currentElement){
+replaceWord(_11[i]);
+}
+}
+replaceClicked();
+}
+return false;
+}
+function ignoreClicked(){
+document.getElementById("v_replacement").value=currentElement.__msh_origWord;
+replaceClicked();
+return false;
+}
+function ignoreAllClicked(){
+document.getElementById("v_replacement").value=currentElement.__msh_origWord;
+replaceAllClicked();
+return false;
+}
+function learnClicked(){
+to_p_dict.push(currentElement.__msh_origWord);
+return ignoreAllClicked();
+}
+function internationalizeWindow(){
+var _13=["div","span","button"];
+for(var i=0;i<_13.length;++i){
+var tag=_13[i];
+var els=document.getElementsByTagName(tag);
+for(var j=els.length;--j>=0;){
+var el=els[j];
+if(el.childNodes.length==1&&/\S/.test(el.innerHTML)){
+var txt=el.innerHTML;
+el.innerHTML=_lc(txt);
+}
+}
+}
+}
+function initDocument(){
+internationalizeWindow();
+modified=false;
+frame=document.getElementById("i_framecontent");
+var _1a=document.getElementById("f_content");
+_1a.value=HTMLArea.getHTML(editor._doc.body,false,editor);
+var _1b=document.getElementById("f_dictionary");
+if(typeof editor.config.SpellChecker.defaultDictionary!="undefined"&&editor.config.SpellChecker.defaultDictionary!=""){
+_1b.value=editor.config.SpellChecker.defaultDictionary;
+}else{
+_1b.value="en_GB";
+}
+if(editor.config.SpellChecker.backend=="php"){
+_1a.form.action=_editor_url+"/plugins/SpellChecker/spell-check-logic.php";
+}
+if(editor.config.SpellChecker.utf8_to_entities){
+document.getElementById("utf8_to_entities").value=1;
+}else{
+document.getElementById("utf8_to_entities").value=0;
+}
+_1a.form.submit();
+document.getElementById("f_init").value="0";
+var _1c=document.getElementById("v_suggestions");
+_1c.onchange=function(){
+document.getElementById("v_replacement").value=this.value;
+};
+if(is_ie){
+_1c.attachEvent("ondblclick",replaceClicked);
+}else{
+_1c.addEventListener("dblclick",replaceClicked,true);
+}
+document.getElementById("b_replace").onclick=replaceClicked;
+if(editor.config.SpellChecker.backend=="php"){
+document.getElementById("b_learn").onclick=learnClicked;
+}else{
+document.getElementById("b_learn").parentNode.removeChild(document.getElementById("b_learn"));
+}
+document.getElementById("b_replall").onclick=replaceAllClicked;
+document.getElementById("b_ignore").onclick=ignoreClicked;
+document.getElementById("b_ignall").onclick=ignoreAllClicked;
+document.getElementById("b_recheck").onclick=recheckClicked;
+document.getElementById("b_revert").onclick=revertClicked;
+document.getElementById("b_info").onclick=displayInfo;
+document.getElementById("b_ok").onclick=saveClicked;
+document.getElementById("b_cancel").onclick=cancelClicked;
+_1c=document.getElementById("v_dictionaries");
+_1c.onchange=function(){
+document.getElementById("f_dictionary").value=this.value;
+};
+}
+function getAbsolutePos(el){
+var r={x:el.offsetLeft,y:el.offsetTop};
+if(el.offsetParent){
+var tmp=getAbsolutePos(el.offsetParent);
+r.x+=tmp.x;
+r.y+=tmp.y;
+}
+return r;
+}
+function wordClicked(_20){
+var _21=this;
+if(_20){
+(function(){
+var pos=getAbsolutePos(_21);
+var ws={x:frame.offsetWidth-4,y:frame.offsetHeight-4};
+var wp={x:frame.contentWindow.document.body.scrollLeft,y:frame.contentWindow.document.body.scrollTop};
+pos.x-=Math.round(ws.x/2);
+if(pos.x<0){
+pos.x=0;
+}
+pos.y-=Math.round(ws.y/2);
+if(pos.y<0){
+pos.y=0;
+}
+frame.contentWindow.scrollTo(pos.x,pos.y);
+})();
+}
+if(currentElement){
+var a=allWords[currentElement.__msh_origWord];
+currentElement.className=currentElement.className.replace(/\s*HA-spellcheck-current\s*/g," ");
+for(var i=0;i<a.length;++i){
+var el=a[i];
+if(el!=currentElement){
+el.className=el.className.replace(/\s*HA-spellcheck-same\s*/g," ");
+}
+}
+}
+currentElement=this;
+this.className+=" HA-spellcheck-current";
+var a=allWords[currentElement.__msh_origWord];
+for(var i=0;i<a.length;++i){
+var el=a[i];
+if(el!=currentElement){
+el.className+=" HA-spellcheck-same";
+}
+}
+var txt;
+if(a.length==1){
+txt="one occurrence";
+}else{
+if(a.length==2){
+txt="two occurrences";
+}else{
+txt=a.length+" occurrences";
+}
+}
+var _29=suggested_words[this.__msh_origWord];
+if(_29){
+_29=_29.split(/,/);
+}else{
+_29=[];
+}
+var _2a=document.getElementById("v_suggestions");
+document.getElementById("statusbar").innerHTML="Found "+txt+" for word \"<b>"+currentElement.__msh_origWord+"</b>\"";
+for(var i=_2a.length;--i>=0;){
+_2a.remove(i);
+}
+for(var i=0;i<_29.length;++i){
+var txt=_29[i];
+var _2b=document.createElement("option");
+_2b.value=txt;
+_2b.appendChild(document.createTextNode(txt));
+_2a.appendChild(_2b);
+}
+document.getElementById("v_currentWord").innerHTML=this.__msh_origWord;
+if(_29.length>0){
+_2a.selectedIndex=0;
+_2a.onchange();
+}else{
+document.getElementById("v_replacement").value=this.innerHTML;
+}
+_2a.style.display="none";
+_2a.style.display="block";
+return false;
+}
+function wordMouseOver(){
+this.className+=" HA-spellcheck-hover";
+}
+function wordMouseOut(){
+this.className=this.className.replace(/\s*HA-spellcheck-hover\s*/g," ");
+}
+function displayInfo(){
+var _2c=frame.contentWindow.spellcheck_info;
+if(!_2c){
+alert("No information available");
+}else{
+var txt="** Document information **";
+for(var i in _2c){
+txt+="\n"+i+" : "+_2c[i];
+}
+alert(txt);
+}
+return false;
+}
+function finishedSpellChecking(){
+currentElement=null;
+wrongWords=null;
+allWords={};
+fixedWords=[];
+suggested_words=frame.contentWindow.suggested_words;
+document.getElementById("status").innerHTML="HTMLArea Spell Checker (<a href='readme-tech.html' target='_blank' title='Technical information'>info</a>)";
+var doc=frame.contentWindow.document;
+var _30=doc.getElementsByTagName("span");
+var sps=[];
+var id=0;
+for(var i=0;i<_30.length;++i){
+var el=_30[i];
+if(/HA-spellcheck-error/.test(el.className)){
+sps.push(el);
+el.__msh_wordClicked=wordClicked;
+el.onclick=function(ev){
+ev||(ev=window.event);
+ev&&HTMLArea._stopEvent(ev);
+return this.__msh_wordClicked(false);
+};
+el.onmouseover=wordMouseOver;
+el.onmouseout=wordMouseOut;
+el.__msh_id=id++;
+var txt=(el.__msh_origWord=el.firstChild.data);
+el.__msh_fixed=false;
+if(typeof allWords[txt]=="undefined"){
+allWords[txt]=[el];
+}else{
+allWords[txt].push(el);
+}
+}else{
+if(/HA-spellcheck-fixed/.test(el.className)){
+fixedWords.push(el);
+}
+}
+}
+var _37=doc.getElementById("HA-spellcheck-dictionaries");
+if(_37){
+_37.parentNode.removeChild(_37);
+_37=_37.innerHTML.split(/,/);
+var _38=document.getElementById("v_dictionaries");
+for(var i=_38.length;--i>=0;){
+_38.remove(i);
+}
+var _39=document.getElementById("f_dictionary").value;
+for(var i=0;i<_37.length;++i){
+var txt=_37[i];
+var _3a=document.createElement("option");
+if(txt==_39){
+_3a.selected=true;
+}
+_3a.value=txt;
+_3a.appendChild(document.createTextNode(txt));
+_38.appendChild(_3a);
+}
+}
+wrongWords=sps;
+if(sps.length==0){
+if(!modified){
+alert(_lc("No mispelled words found with the selected dictionary."));
+}else{
+alert(_lc("No mispelled words found with the selected dictionary."));
+}
+return false;
+}
+(currentElement=sps[0]).__msh_wordClicked(true);
+var as=doc.getElementsByTagName("a");
+for(var i=as.length;--i>=0;){
+var a=as[i];
+a.onclick=function(){
+if(confirm(_lc("Please confirm that you want to open this link")+":\n"+this.href+"\n"+_lc("I will open it in a new page."))){
+window.open(this.href);
+}
+return false;
+};
+}
+}
+
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-checker.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-checker.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-checker.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SpellChecker/spell-checker.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,73 @@
+// Spell Checker Plugin for HTMLArea-3.0
+// Sponsored by www.americanbible.org
+// Implementation by Mihai Bazon, http://dynarch.com/mishoo/
+//
+// (c) dynarch.com 2003.
+// Distributed under the same terms as HTMLArea itself.
+// This notice MUST stay intact for use (see license.txt).
+//
+// $Id: spell-checker.js 498 2006-04-30 09:46:23Z gogo $
+
+HTMLArea.Config.prototype.SpellChecker = { 'backend': 'php', 'personalFilesDir' : '', 'defaultDictionary' : 'en_GB', 'utf8_to_entities' : true };
+
+function SpellChecker(editor) {
+ this.editor = editor;
+
+ var cfg = editor.config;
+ var bl = SpellChecker.btnList;
+ var self = this;
+
+ // see if we can find the mode switch button, insert this before that
+ var id = "SC-spell-check";
+ cfg.registerButton(id, this._lc("Spell-check"), editor.imgURL("spell-check.gif", "SpellChecker"), false,
+ function(editor, id) {
+ // dispatch button press event
+ self.buttonPress(editor, id);
+ });
+
+ cfg.addToolbarElement("SC-spell-check", "htmlmode", 1);
+}
+
+SpellChecker._pluginInfo = {
+ name : "SpellChecker",
+ version : "1.0",
+ developer : "Mihai Bazon",
+ developer_url : "http://dynarch.com/mishoo/",
+ c_owner : "Mihai Bazon",
+ sponsor : "American Bible Society",
+ sponsor_url : "http://www.americanbible.org",
+ license : "htmlArea"
+};
+
+SpellChecker.prototype._lc = function(string) {
+ return HTMLArea._lc(string, 'SpellChecker');
+};
+
+SpellChecker.btnList = [
+ null, // separator
+ ["spell-check"]
+ ];
+
+SpellChecker.prototype.buttonPress = function(editor, id) {
+ switch (id) {
+ case "SC-spell-check":
+ SpellChecker.editor = editor;
+ SpellChecker.init = true;
+ var uiurl = _editor_url + "plugins/SpellChecker/spell-check-ui.html";
+ var win;
+ if (HTMLArea.is_ie) {
+ win = window.open(uiurl, "SC_spell_checker",
+ "toolbar=no,location=no,directories=no,status=no,menubar=no," +
+ "scrollbars=no,resizable=yes,width=600,height=450");
+ } else {
+ win = window.open(uiurl, "SC_spell_checker",
+ "toolbar=no,menubar=no,personalbar=no,width=600,height=450," +
+ "scrollbars=no,resizable=yes");
+ }
+ win.focus();
+ break;
+ }
+};
+
+// this needs to be global, it's accessed from spell-check-ui.html
+SpellChecker.editor = null;
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,6 @@
+// I18N constants
+// LANG: "de", ENCODING: UTF-8
+// Author: Mihai Bazon, http://dynarch.com/mishoo
+{
+ "Styles": "Stile"
+};
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/fr.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/fr.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/fr.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/fr.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,5 @@
+// I18N constants
+// LANG: "fr", ENCODING: UTF-8
+{
+ "Styles": "Styles"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,5 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+ "Styles": "ã¹ã¿ã¤ã«"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/nb.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/nb.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/nb.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/nb.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,6 @@
+// I18N constants
+// LANG: "nb", ENCODING: UTF-8
+// translated: Kim Steinhaug, http://www.steinhaug.com/, [email protected]
+{
+ "Styles": "Stiler"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/pl.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/pl.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/pl.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/lang/pl.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,6 @@
+// I18N constants
+// LANG: "pl", ENCODING: UTF-8
+// translated: Krzysztof Kotowicz [email protected]
+{
+ "Styles": "Style"
+};
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/stylist.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/stylist.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/stylist.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/Stylist/stylist.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,372 @@
+Xinha.Config.prototype.css_style={};
+Xinha.Config.prototype.stylistLoadStylesheet=function(_1,_2){
+if(!_2){
+_2={};
+}
+var _3=Xinha.ripStylesFromCSSFile(_1);
+for(var i in _3){
+if(_2[i]){
+this.css_style[i]=_2[i];
+}else{
+this.css_style[i]=_3[i];
+}
+}
+this.pageStyleSheets[this.pageStyleSheets.length]=_1;
+};
+Xinha.Config.prototype.stylistLoadStyles=function(_5,_6){
+if(!_6){
+_6={};
+}
+var _7=Xinha.ripStylesFromCSSString(_5);
+for(var i in _7){
+if(_6[i]){
+this.css_style[i]=_6[i];
+}else{
+this.css_style[i]=_7[i];
+}
+}
+this.pageStyle+=_5;
+};
+Xinha.prototype._fillStylist=function(){
+if(!this._stylist){
+return false;
+}
+this.plugins.Stylist.instance.main.innerHTML="";
+var _9=true;
+var _a=this._getSelection();
+var _b=this._activeElement(_a);
+for(var x in this.config.css_style){
+var _d=null;
+var _e=x.trim();
+var _f=true;
+var _10=_b;
+if(_f&&/[^a-zA-Z0-9_.-]/.test(_e)){
+_f=false;
+}
+if(_e.indexOf(".")<0){
+_f=false;
+}
+if(_f&&(_e.indexOf(".")>0)){
+_d=_e.substring(0,_e.indexOf(".")).toLowerCase();
+_e=_e.substring(_e.indexOf("."),_e.length);
+if(_b!=null&&_b.tagName.toLowerCase()==_d){
+_f=true;
+_10=_b;
+}else{
+if(this._getFirstAncestor(this._getSelection(),[_d])!=null){
+_f=true;
+_10=this._getFirstAncestor(this._getSelection(),[_d]);
+}else{
+if((_d=="div"||_d=="span"||_d=="p"||(_d.substr(0,1)=="h"&&_d.length==2&&_d!="hr"))){
+if(!this._selectionEmpty(this._getSelection())){
+_f=true;
+_10="new";
+}else{
+_10=this._getFirstAncestor(_a,["p","h1","h2","h3","h4","h5","h6","h7"]);
+if(_10!=null){
+_f=true;
+}
+}
+}else{
+_f=false;
+}
+}
+}
+}
+if(_f){
+_e=_e.substring(_e.indexOf("."),_e.length);
+_e=_e.replace("."," ");
+if(_10==null){
+if(this._selectionEmpty(this._getSelection())){
+_10=this._getFirstAncestor(this._getSelection(),null);
+}else{
+_10="new";
+_d="span";
+}
+}
+}
+var _11=(this._ancestorsWithClasses(_a,_d,_e).length>0?true:false);
+var _12=this._ancestorsWithClasses(_a,_d,_e);
+if(_f){
+var _13=document.createElement("a");
+_13._stylist_className=_e.trim();
+_13._stylist_applied=_11;
+_13._stylist_appliedTo=_12;
+_13._stylist_applyTo=_10;
+_13._stylist_applyTag=_d;
+_13.innerHTML=this.config.css_style[x];
+_13.href="javascript:void(0)";
+var _14=this;
+_13.onclick=function(){
+if(this._stylist_applied==true){
+_14._stylistRemoveClasses(this._stylist_className,this._stylist_appliedTo);
+}else{
+_14._stylistAddClasses(this._stylist_applyTo,this._stylist_applyTag,this._stylist_className);
+}
+return false;
+};
+_13.style.display="block";
+_13.style.paddingLeft="3px";
+_13.style.paddingTop="1px";
+_13.style.paddingBottom="1px";
+_13.style.textDecoration="none";
+if(_11){
+_13.style.background="Highlight";
+_13.style.color="HighlightText";
+}
+this.plugins.Stylist.instance.main.appendChild(_13);
+}
+}
+};
+Xinha.prototype._stylistAddClasses=function(el,tag,_17){
+if(el=="new"){
+this.insertHTML("<"+tag+" class=\""+_17+"\">"+this.getSelectedHTML()+"</"+tag+">");
+}else{
+if(tag!=null&&el.tagName.toLowerCase()!=tag){
+var _18=this.switchElementTag(el,tag);
+if(typeof el._stylist_usedToBe!="undefined"){
+_18._stylist_usedToBe=el._stylist_usedToBe;
+_18._stylist_usedToBe[_18._stylist_usedToBe.length]={"tagName":el.tagName,"className":el.getAttribute("class")};
+}else{
+_18._stylist_usedToBe=[{"tagName":el.tagName,"className":el.getAttribute("class")}];
+}
+Xinha.addClasses(_18,_17);
+}else{
+Xinha._addClasses(el,_17);
+}
+}
+this.focusEditor();
+this.updateToolbar();
+};
+Xinha.prototype._stylistRemoveClasses=function(_19,_1a){
+for(var x=0;x<_1a.length;x++){
+this._stylistRemoveClassesFull(_1a[x],_19);
+}
+this.focusEditor();
+this.updateToolbar();
+};
+Xinha.prototype._stylistRemoveClassesFull=function(el,_1d){
+if(el!=null){
+var _1e=el.className.trim().split(" ");
+var _1f=[];
+var _20=_1d.split(" ");
+for(var x=0;x<_1e.length;x++){
+var _22=false;
+for(var i=0;_22==false&&i<_20.length;i++){
+if(_20[i]==_1e[x]){
+_22=true;
+}
+}
+if(_22==false){
+_1f[_1f.length]=_1e[x];
+}
+}
+if(_1f.length==0&&el._stylist_usedToBe&&el._stylist_usedToBe.length>0&&el._stylist_usedToBe[el._stylist_usedToBe.length-1].className!=null){
+var _24=el._stylist_usedToBe[el._stylist_usedToBe.length-1];
+var _25=Xinha.arrayFilter(_24.className.trim().split(" "),function(c){
+if(c==null||c.trim()==""){
+return false;
+}
+return true;
+});
+if((_1f.length==0)||(Xinha.arrayContainsArray(_1f,_25)&&Xinha.arrayContainsArray(_25,_1f))){
+el=this.switchElementTag(el,_24.tagName);
+_1f=_25;
+}else{
+el._stylist_usedToBe=[];
+}
+}
+if(_1f.length>0||el.tagName.toLowerCase()!="span"||(el.id&&el.id!="")){
+el.className=_1f.join(" ").trim();
+}else{
+var _27=el.parentNode;
+var _28=el.childNodes;
+for(var x=0;x<_28.length;x++){
+_27.insertBefore(_28[x],el);
+}
+_27.removeChild(el);
+}
+}
+};
+Xinha.prototype.switchElementTag=function(el,tag){
+var _2b=el.parentNode;
+var _2c=this._doc.createElement(tag);
+if(Xinha.is_ie||el.hasAttribute("id")){
+_2c.setAttribute("id",el.getAttribute("id"));
+}
+if(Xinha.is_ie||el.hasAttribute("style")){
+_2c.setAttribute("style",el.getAttribute("style"));
+}
+var _2d=el.childNodes;
+for(var x=0;x<_2d.length;x++){
+_2c.appendChild(_2d[x].cloneNode(true));
+}
+_2b.insertBefore(_2c,el);
+_2c._stylist_usedToBe=[el.tagName];
+_2b.removeChild(el);
+this.selectNodeContents(_2c);
+return _2c;
+};
+Xinha.prototype._getAncestorsClassNames=function(sel){
+var _30=this._activeElement(sel);
+if(_30==null){
+_30=(Xinha.is_ie?this._createRange(sel).parentElement():this._createRange(sel).commonAncestorContainer);
+}
+var _31=[];
+while(_30){
+if(_30.nodeType==1){
+var _32=_30.className.trim().split(" ");
+for(var x=0;x<_32.length;x++){
+_31[_31.length]=_32[x];
+}
+if(_30.tagName.toLowerCase()=="body"){
+break;
+}
+if(_30.tagName.toLowerCase()=="table"){
+break;
+}
+}
+_30=_30.parentNode;
+}
+return _31;
+};
+Xinha.prototype._ancestorsWithClasses=function(sel,tag,_36){
+var _37=[];
+var _38=this._activeElement(sel);
+if(_38==null){
+try{
+_38=(Xinha.is_ie?this._createRange(sel).parentElement():this._createRange(sel).commonAncestorContainer);
+}
+catch(e){
+return _37;
+}
+}
+var _39=_36.trim().split(" ");
+while(_38){
+if(_38.nodeType==1&&_38.className){
+if(tag==null||_38.tagName.toLowerCase()==tag){
+var _36=_38.className.trim().split(" ");
+var _3a=true;
+for(var i=0;i<_39.length;i++){
+var _3c=false;
+for(var x=0;x<_36.length;x++){
+if(_39[i]==_36[x]){
+_3c=true;
+break;
+}
+}
+if(!_3c){
+_3a=false;
+break;
+}
+}
+if(_3a){
+_37[_37.length]=_38;
+}
+}
+if(_38.tagName.toLowerCase()=="body"){
+break;
+}
+if(_38.tagName.toLowerCase()=="table"){
+break;
+}
+}
+_38=_38.parentNode;
+}
+return _37;
+};
+Xinha.ripStylesFromCSSFile=function(URL){
+var css=Xinha._geturlcontent(URL);
+return Xinha.ripStylesFromCSSString(css);
+};
+Xinha.ripStylesFromCSSString=function(css){
+RE_comment=/\/\*(.|\r|\n)*?\*\//g;
+RE_rule=/\{(.|\r|\n)*?\}/g;
+css=css.replace(RE_comment,"");
+css=css.replace(RE_rule,",");
+css=css.split(",");
+var _41={};
+for(var x=0;x<css.length;x++){
+if(css[x].trim()){
+_41[css[x].trim()]=css[x].trim();
+}
+}
+return _41;
+};
+function Stylist(_43,_44){
+this.editor=_43;
+var _45=this;
+}
+Stylist._pluginInfo={name:"Stylist",version:"1.0",developer:"James Sleeman",developer_url:"http://www.gogo.co.nz/",c_owner:"Gogo Internet Services",license:"HTMLArea",sponsor:"Gogo Internet Services",sponsor_url:"http://www.gogo.co.nz/"};
+Stylist.prototype.onGenerateOnce=function(){
+var _46=this.editor;
+var _47=this;
+if(typeof _46.config.css_style!="undefined"&&Xinha.objectProperties(_46.config.css_style).length!=0){
+_46._stylist=null;
+_46._stylist=_46.addPanel("right");
+Xinha.addClass(_46._stylist,"stylist");
+this.caption=document.createElement("h1");
+this.caption.innerHTML=Xinha._lc("Styles","Stylist");
+_46._stylist.appendChild(this.caption);
+this.main=document.createElement("div");
+this.main.style.overflow="auto";
+this.main.style.height=this.editor._framework.ed_cell.offsetHeight-this.caption.offsetHeight+"px";
+_46._stylist.appendChild(this.main);
+Xinha.freeLater(this,"caption");
+Xinha.freeLater(this,"main");
+_46.notifyOn("modechange",function(e,_49){
+switch(_49.mode){
+case "text":
+_46.hidePanel(_46._stylist);
+break;
+case "wysiwyg":
+_46.showPanel(_46._stylist);
+break;
+}
+});
+_46.notifyOn("panel_change",function(e,_4b){
+switch(_4b.action){
+case "show":
+var _4c=_47.main.offsetHeight-_4b.panel.offsetHeight;
+_47.main.style.height=((_4c>0)?_47.main.offsetHeight-_4b.panel.offsetHeight:0)+"px";
+_46._stylist.style.height=_47.caption.offsetHeight+"px";
+_46.sizeEditor();
+break;
+case "hide":
+_47.resize();
+break;
+}
+});
+_46.notifyOn("before_resize",function(){
+_46._stylist.style.height=_47.caption.offsetHeight+"px";
+});
+_46.notifyOn("resize",function(){
+_47.resize();
+});
+}
+};
+Stylist.prototype.resize=function(){
+var _4d=this.editor;
+var _4e=_4d._stylist.parentNode;
+var _4f=_4e.offsetHeight;
+for(var i=0;i<_4e.childNodes.length;++i){
+if(_4e.childNodes[i]==_4d._stylist||!_4e.childNodes[i].offsetHeight){
+continue;
+}
+_4f-=_4e.childNodes[i].offsetHeight;
+}
+_4d._stylist.style.height=_4f+"px";
+this.main.style.height=_4f-this.caption.offsetHeight+"px";
+};
+Stylist.prototype.onUpdateToolbar=function(){
+if(this.editor._stylist){
+if(this._timeoutID){
+window.clearTimeout(this._timeoutID);
+}
+var e=this.editor;
+this._timeoutID=window.setTimeout(function(){
+e._fillStylist();
+},250);
+}
+};
+
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/dialog.html
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/dialog.html?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/dialog.html (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/dialog.html Fri Sep 21 03:36:30 2007
@@ -0,0 +1,9 @@
+<h1 id="[h1]"><l10n>Clean up HTML</l10n></h1>
+<div style="margin-left: 10px;">
+ <l10n>Please select from the following cleaning options...</l10n>
+ <!--filters-->
+ <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/SuperClean/filters/paragraph.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/paragraph.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/paragraph.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/paragraph.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,6 @@
+function(html) {
+ html = html.replace(/<\s*p[^>]*>/gi, '');
+ html = html.replace(/<\/\s*p\s*>/gi, '');
+ html = html.trim();
+ return html;
+}
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/word.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/word.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/word.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/filters/word.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,53 @@
+function(html) {
+ // Remove HTML comments
+ html = html.replace(/<!--[\w\s\d@{}:.;,'"%!#_=&|?~()[*+\/\-\]]*-->/gi, "" );
+ html = html.replace(/<!--[^\0]*-->/gi, '');
+ // Remove all HTML tags
+ html = html.replace(/<\/?\s*HTML[^>]*>/gi, "" );
+ // Remove all BODY tags
+ html = html.replace(/<\/?\s*BODY[^>]*>/gi, "" );
+ // Remove all META tags
+ html = html.replace(/<\/?\s*META[^>]*>/gi, "" );
+ // Remove all SPAN tags
+ html = html.replace(/<\/?\s*SPAN[^>]*>/gi, "" );
+ // Remove all FONT tags
+ html = html.replace(/<\/?\s*FONT[^>]*>/gi, "");
+ // Remove all IFRAME tags.
+ html = html.replace(/<\/?\s*IFRAME[^>]*>/gi, "");
+ // Remove all STYLE tags & content
+ html = html.replace(/<\/?\s*STYLE[^>]*>(.|[\n\r\t])*<\/\s*STYLE\s*>/gi, "" );
+ // Remove all TITLE tags & content
+ html = html.replace(/<\s*TITLE[^>]*>(.|[\n\r\t])*<\/\s*TITLE\s*>/gi, "" );
+ // Remove javascript
+ html = html.replace(/<\s*SCRIPT[^>]*>[^\0]*<\/\s*SCRIPT\s*>/gi, "");
+ // Remove all HEAD tags & content
+ html = html.replace(/<\s*HEAD[^>]*>(.|[\n\r\t])*<\/\s*HEAD\s*>/gi, "" );
+ // Remove Class attributes
+ html = html.replace(/<\s*(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+ // Remove Style attributes
+ html = html.replace(/<\s*(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
+ // Remove Lang attributes
+ html = html.replace(/<\s*(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
+ // Remove XML elements and declarations
+ html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
+ // Remove Tags with XML namespace declarations: <o:p></o:p>
+ html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
+ // Replace the
+ html = html.replace(/ /, " " );
+
+ // Transform <p><br /></p> to <br>
+ //html = html.replace(/<\s*p[^>]*>\s*<\s*br\s*\/>\s*<\/\s*p[^>]*>/gi, "<br>");
+ html = html.replace(/<\s*p[^>]*><\s*br\s*\/?>\s*<\/\s*p[^>]*>/gi, "<br>");
+
+ // Remove <P>
+ html = html.replace(/<\s*p[^>]*>/gi, "");
+
+ // Replace </p> with <br>
+ html = html.replace(/<\/\s*p[^>]*>/gi, "<br>");
+
+ // Remove any <br> at the end
+ html = html.replace(/(\s*<br>\s*)*$/, "");
+
+ html = html.trim();
+ return html;
+}
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/img/ed_superclean.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/img/ed_superclean.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/img/ed_superclean.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/de.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/de.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/de.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/de.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,17 @@
+// I18N constants
+// LANG: "de", ENCODING: UTF-8
+// translated: Raimund Meyer [email protected]
+{
+ "Clean up HTML": "HTML säubern",
+ "Please select from the following cleaning options...": "Bitte Optionen auswählen...",
+ "General tidy up and correction of some problems.": "Allgemeines aufräumen und Korrektur einiger Probleme.",
+ "Clean bad HTML from Microsoft Word": "Schlechtes HTML aus Microsoft Word aufräumen",
+ "Remove custom typefaces (font \"styles\").": "Schriftarten entfernen (font face).",
+ "Remove custom font sizes.": "SchriftgröÃen entfernen (font size).",
+ "Remove custom text colors.": "Schriftfarben entfernen (font color).",
+ "Remove lang attributes.": "Sprachattribute entfernen.",
+ "Go": "Go",
+ "Cancel": "Abbrechen",
+ "Tidy failed. Check your HTML for syntax errors.": "Säubern fehlgeschlagen. Ãberprüfen Sie Ihren Code auf Fehler.",
+ "You don't have anything to tidy!": "Es gibt nichts zu säubern...!"
+};
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/fr.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/fr.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/fr.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/fr.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,16 @@
+// I18N constants
+// LANG: "fr", ENCODING: UTF-8
+{
+ "Clean up HTML": "Nettoyer le code HTML",
+ "Please select from the following cleaning options...": "Veuillez sélectionner une option de nettoyage.",
+ "General tidy up and correction of some problems.": "Nettoyage générique et correction des problèmes mineurs.",
+ "Clean bad HTML from Microsoft Word": "Nettoyer les balises HTML de Microsoft Word",
+ "Remove custom typefaces (font \"styles\").": "Supprimer les polices personalisées (font \"styles\").",
+ "Remove custom font sizes.": "Supprimer les tailles de polices personnalisées.",
+ "Remove custom text colors.": "Supprimer les couleurs de texte personalisées.",
+ "Remove lang attributes.": "Supprimer les attributs de langue.",
+ "Go": "Commencer",
+ "Cancel": "Annuler",
+ "Tidy failed. Check your HTML for syntax errors.": "Tidy a échoué. Vérifier la syntaxe HTML.",
+ "You don't have anything to tidy!": "Rien à transmettre à tidy !"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/ja.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/ja.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/ja.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/ja.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,18 @@
+// I18N constants
+// LANG: "ja", ENCODING: UTF-8
+{
+ "Clean up HTML": "HTMLã®ã¯ãªã¼ã³ããã",
+ "Please select from the following cleaning options...": "以ä¸ã®ã¯ãªã¼ã³ããããªãã·ã§ã³ã鏿ãã¦ãã ãã...",
+ "General tidy up and correction of some problems.": "ä¸è¬çãªé©æ£åã¨ããã¤ãã®åé¡ãä¿®æ£ãã¾ãã",
+ "Clean bad HTML from Microsoft Word": "Microsoft Wordã«ãã䏿£ãªHTMLã®æ¸
æ½å",
+ "Remove custom typefaces (font \"styles\").": "ç¬èªãã©ã³ãåè¨å®ã®é¤å» (font face)ã",
+ "Remove custom font sizes.": "ç¬èªãã©ã³ããµã¤ãºè¨å®ã®é¤å»ã",
+ "Remove custom text colors.": "ç¬èªæåè²è¨å®ã®é¤å»ã",
+ "Remove lang attributes.": "è¨èªå±æ§ã®é¤å»ã",
+ "Go": "å®è¡",
+ "Cancel": "䏿¢",
+ "Tidy failed. Check your HTML for syntax errors.": "驿£åã«å¤±æãã¾ãããHTMLã®ææ³ã¨ã©ã¼ã確èªãã¦ãã ããã",
+ "You don't have anything to tidy!": "驿£åãããã®ã¯ä½ãããã¾ãã!",
+ "Replace directional quote marks with non-directional quote marks.": "æ¹åã¤ãå¼ç¨ç¬¦ãæ¹åãªãå¼ç¨ç¬¦ã«ç½®æã",
+ "CANCEL": "䏿¢"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/nb.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/nb.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/nb.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/lang/nb.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,17 @@
+// I18N constants
+// LANG: "nb", ENCODING: UTF-8
+// translated: Kim Steinhaug, http://www.steinhaug.com/, [email protected]
+{
+ "Clean up HTML": "Vask HTML kode",
+ "Please select from the following cleaning options...": "Vennligst velg blandt de forskjellige mulighetene å vaske/ rydde i HTML koden",
+ "General tidy up and correction of some problems.": "Generell opprydding i HTML koden samt korrigering av typiske feil",
+ "Clean bad HTML from Microsoft Word": "Vask HTML kode for feil og problemer etter Microsoft Word",
+ "Remove custom typefaces (font \"styles\").": "Fjerne egendefinerte skrifttyper (font face)",
+ "Remove custom font sizes.": "Fjerne egendefinerte skriftstørrelser (font size)",
+ "Remove custom text colors.": "Fjerne egendefinerte skriftfarger (font color)",
+ "Remove lang attributes.": "Fjerne lang-attributter.",
+ "Go": "Utfør",
+ "Cancel": "Avbryt",
+ "Tidy failed. Check your HTML for syntax errors.": "Tidy (Programmet som retter HTML koden) feilet. Vennligst se over HTML koden for feil.",
+ "You don't have anything to tidy!": "Det finnes ingen HTML kode å vaske!"
+};
\ No newline at end of file
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/super-clean.js
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/super-clean.js?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/super-clean.js (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/super-clean.js Fri Sep 21 03:36:30 2007
@@ -0,0 +1,211 @@
+function SuperClean(_1,_2){
+this.editor=_1;
+var _3=this;
+_1._superclean_on=false;
+_1.config.registerButton("superclean",this._lc("Clean up HTML"),_1.imgURL("ed_superclean.gif","SuperClean"),true,function(e,_5,_6){
+_3._superClean(null,_6);
+});
+_1.config.addToolbarElement("superclean","killword",0);
+}
+SuperClean._pluginInfo={name:"SuperClean",version:"1.0",developer:"James Sleeman, Niko Sams",developer_url:"http://www.gogo.co.nz/",c_owner:"Gogo Internet Services",license:"htmlArea",sponsor:"Gogo Internet Services",sponsor_url:"http://www.gogo.co.nz/"};
+SuperClean.prototype._lc=function(_7){
+return Xinha._lc(_7,"SuperClean");
+};
+SuperClean.prototype._superClean=function(_8,_9){
+var _a=this;
+var _b=function(){
+var _c=_a._dialog.hide();
+var _d=_a.editor;
+if(_c.word_clean){
+_d._wordClean();
+}
+var D=_d.getInnerHTML();
+for(var _f in _d.config.SuperClean.filters){
+if(_f=="tidy"||_f=="word_clean"){
+continue;
+}
+if(_c[_f]){
+D=SuperClean.filterFunctions[_f](D,_d);
+}
+}
+D=D.replace(/(style|class)="\s*"/gi,"");
+D=D.replace(/<(font|span)\s*>/gi,"");
+_d.setHTML(D);
+if(_c.tidy){
+var _10=function(_11){
+eval("var response = "+_11);
+switch(response.action){
+case "setHTML":
+_d.setHTML(response.value);
+break;
+case "alert":
+alert(_a._lc(response.value));
+break;
+}
+};
+Xinha._postback(_d.config.SuperClean.tidy_handler,{"content":_d.getInnerHTML()},_10);
+}
+return true;
+};
+if(this.editor.config.SuperClean.show_dialog){
+var _12={};
+this._dialog.show(_12,_b);
+}else{
+var _13=this.editor;
+var _14=_13.getInnerHTML();
+for(var _15 in _13.config.SuperClean.filters){
+if(_15=="tidy"){
+continue;
+}
+_14=SuperClean.filterFunctions[_15](_14,_13);
+}
+_14=_14.replace(/(style|class)="\s*"/gi,"");
+_14=_14.replace(/<(font|span)\s*>/gi,"");
+_13.setHTML(_14);
+if(_13.config.SuperClean.filters.tidy){
+SuperClean.filterFunctions.tidy(_14,_13);
+}
+}
+};
+Xinha.Config.prototype.SuperClean={"tidy_handler":_editor_url+"plugins/SuperClean/tidy.php","filters":{"tidy":Xinha._lc("General tidy up and correction of some problems.","SuperClean"),"word_clean":Xinha._lc("Clean bad HTML from Microsoft Word","SuperClean"),"remove_faces":Xinha._lc("Remove custom typefaces (font \"styles\").","SuperClean"),"remove_sizes":Xinha._lc("Remove custom font sizes.","SuperClean"),"remove_colors":Xinha._lc("Remove custom text colors.","SuperClean"),"remove_lang":Xinha._lc("Remove lang attributes.","SuperClean"),"remove_fancy_quotes":{label:Xinha._lc("Replace directional quote marks with non-directional quote marks.","SuperClean"),checked:false}},"show_dialog":true};
+SuperClean.filterFunctions={};
+SuperClean.filterFunctions.remove_colors=function(D){
+D=D.replace(/color="?[^" >]*"?/gi,"");
+D=D.replace(/([^-])color:[^;}"']+;?/gi,"$1");
+return (D);
+};
+SuperClean.filterFunctions.remove_sizes=function(D){
+D=D.replace(/size="?[^" >]*"?/gi,"");
+D=D.replace(/font-size:[^;}"']+;?/gi,"");
+return (D);
+};
+SuperClean.filterFunctions.remove_faces=function(D){
+D=D.replace(/face="?[^" >]*"?/gi,"");
+D=D.replace(/font-family:[^;}"']+;?/gi,"");
+return (D);
+};
+SuperClean.filterFunctions.remove_lang=function(D){
+D=D.replace(/lang="?[^" >]*"?/gi,"");
+return (D);
+};
+SuperClean.filterFunctions.word_clean=function(_1a,_1b){
+_1b.setHTML(_1a);
+_1b._wordClean();
+return _1b.getInnerHTML();
+};
+SuperClean.filterFunctions.remove_fancy_quotes=function(D){
+D=D.replace(new RegExp(String.fromCharCode(8216),"g"),"'");
+D=D.replace(new RegExp(String.fromCharCode(8217),"g"),"'");
+D=D.replace(new RegExp(String.fromCharCode(8218),"g"),"'");
+D=D.replace(new RegExp(String.fromCharCode(8219),"g"),"'");
+D=D.replace(new RegExp(String.fromCharCode(8220),"g"),"\"");
+D=D.replace(new RegExp(String.fromCharCode(8221),"g"),"\"");
+D=D.replace(new RegExp(String.fromCharCode(8222),"g"),"\"");
+D=D.replace(new RegExp(String.fromCharCode(8223),"g"),"\"");
+return D;
+};
+SuperClean.filterFunctions.tidy=function(_1d,_1e){
+Xinha._postback(_1e.config.SuperClean.tidy_handler,{"content":_1d},function(_1f){
+eval(_1f);
+});
+};
+SuperClean.prototype.onGenerate=function(){
+if(this.editor.config.SuperClean.show_dialog&&!this._dialog){
+this._dialog=new SuperClean.Dialog(this);
+}
+if(this.editor.config.tidy_handler){
+this.editor.config.SuperClean.tidy_handler=this.editor.config.tidy_handler;
+this.editor.config.tidy_handler=null;
+}
+if(!this.editor.config.SuperClean.tidy_handler&&this.editor.config.filters.tidy){
+this.editor.config.filters.tidy=null;
+}
+var sc=this;
+for(var _21 in this.editor.config.SuperClean.filters){
+if(!SuperClean.filterFunctions[_21]){
+var _22=this.editor.config.SuperClean.filters[_21];
+if(typeof _22.filterFunction!="undefined"){
+SuperClean.filterFunctions[_21]=filterFunction;
+}else{
+Xinha._getback(_editor_url+"plugins/SuperClean/filters/"+_21+".js",function(_23){
+eval("SuperClean.filterFunctions."+_21+"="+_23+";");
+sc.onGenerate();
+});
+}
+return;
+}
+}
+};
+SuperClean.Dialog=function(_24){
+var _25=this;
+this.Dialog_nxtid=0;
+this.SuperClean=_24;
+this.id={};
+this.ready=false;
+this.files=false;
+this.html=false;
+this.dialog=false;
+this._prepareDialog();
+};
+SuperClean.Dialog.prototype._prepareDialog=function(){
+var _26=this;
+var _27=this.SuperClean;
+if(this.html==false){
+Xinha._getback(_editor_url+"plugins/SuperClean/dialog.html",function(txt){
+_26.html=txt;
+_26._prepareDialog();
+});
+return;
+}
+var _29="";
+for(var _2a in this.SuperClean.editor.config.SuperClean.filters){
+_29+=" <div>\n";
+var _2b=this.SuperClean.editor.config.SuperClean.filters[_2a];
+if(typeof _2b.label=="undefined"){
+_29+=" <input type=\"checkbox\" name=\"["+_2a+"]\" id=\"["+_2a+"]\" checked />\n";
+_29+=" <label for=\"["+_2a+"]\">"+this.SuperClean.editor.config.SuperClean.filters[_2a]+"</label>\n";
+}else{
+_29+=" <input type=\"checkbox\" name=\"["+_2a+"]\" id=\"["+_2a+"]\" "+(_2b.checked?"checked":"")+" />\n";
+_29+=" <label for=\"["+_2a+"]\">"+_2b.label+"</label>\n";
+}
+_29+=" </div>\n";
+}
+this.html=this.html.replace("<!--filters-->",_29);
+var _2c=this.html;
+var _2d=this.dialog=new Xinha.Dialog(_27.editor,this.html,"SuperClean");
+this.ready=true;
+};
+SuperClean.Dialog.prototype._lc=SuperClean.prototype._lc;
+SuperClean.Dialog.prototype.show=function(_2e,ok,_30){
+if(!this.ready){
+var _31=this;
+window.setTimeout(function(){
+_31.show(_2e,ok,_30);
+},100);
+return;
+}
+var _32=this.dialog;
+var _31=this;
+if(ok){
+this.dialog.getElementById("ok").onclick=ok;
+}else{
+this.dialog.getElementById("ok").onclick=function(){
+_31.hide();
+};
+}
+if(_30){
+this.dialog.getElementById("cancel").onclick=_30;
+}else{
+this.dialog.getElementById("cancel").onclick=function(){
+_31.hide();
+};
+}
+this.SuperClean.editor.disableToolbar(["fullscreen","SuperClean"]);
+this.dialog.show(_2e);
+this.dialog.onresize();
+};
+SuperClean.Dialog.prototype.hide=function(){
+this.SuperClean.editor.enableToolbar();
+return this.dialog.hide();
+};
+
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/tidy.php
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/tidy.php?rev=578051&view=auto
==============================================================================
--- lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/tidy.php (added)
+++ lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/SuperClean/tidy.php Fri Sep 21 03:36:30 2007
@@ -0,0 +1,179 @@
+<?php
+ /** This PHP file is intended for use with XMLHTTPRequest from Xinha
+ * it requrns javascript to set the Xinha html with tidied html that is
+ * submitted in a $_POST parameter called 'content'
+ */
+
+ if(get_magic_quotes_gpc())
+ {
+ // trigger_error('Magic Quotes GPC is on, cleaning GPC.', E_USER_NOTICE);
+ $to_clean = array(&$_GET, &$_POST, &$_REQUEST, &$_COOKIE);
+ while(count($to_clean))
+ {
+ $cleaning =& $to_clean[array_pop(array_keys($to_clean))];
+ unset($to_clean[array_pop(array_keys($to_clean))]);
+ foreach(array_keys($cleaning) as $k)
+ {
+ if(is_array($cleaning[$k]))
+ {
+ $to_clean[] =& $cleaning[$k];
+ }
+ else
+ {
+ $cleaning[$k] = stripslashes($cleaning[$k]);
+ }
+ }
+ }
+ }
+
+ header('Content-Type: text/javascript; charset=utf-8');
+
+ /** Function to POST some data to a URL */
+ function PostIt($DataStream, $URL)
+ {
+
+// Strip http:// from the URL if present
+ $URL = ereg_replace("^http://", "", $URL);
+
+// Separate into Host and URI
+ $Host = substr($URL, 0, strpos($URL, "/"));
+ $URI = strstr($URL, "/");
+
+// Form up the request body
+ $ReqBody = "";
+ while (list($key, $val) = each($DataStream)) {
+ if ($ReqBody) $ReqBody.= "&";
+ $ReqBody.= $key."=".urlencode($val);
+ }
+ $ContentLength = strlen($ReqBody);
+
+// Generate the request header
+ $ReqHeader =
+ "POST $URI HTTP/1.0\n".
+ "Host: $Host\n".
+ "User-Agent: PostIt\n".
+ "Content-Type: application/x-www-form-urlencoded\n".
+ "Content-Length: $ContentLength\n\n".
+ "$ReqBody\n";
+
+// echo $ReqHeader;
+
+
+// Open the connection to the host
+ $socket = fsockopen($Host, 80, &$errno, &$errstr);
+ if (!$socket) {
+ $result = "($errno) $errstr";
+ return $Result;
+ }
+
+ fputs($socket, $ReqHeader);
+
+ $result = '';
+ while(!feof($socket))
+ {
+ $result .= fgets($socket);
+ }
+ return $result;
+ }
+
+
+ function js_encode($string)
+ {
+ static $strings = "\\,\",',%,&,<,>,{,},@,\n,\r";
+
+ if(!is_array($strings))
+ {
+ $tr = array();
+ foreach(explode(',', $strings) as $chr)
+ {
+ $tr[$chr] = sprintf('\x%02X', ord($chr));
+ }
+ $strings = $tr;
+ }
+
+ return strtr($string, $strings);
+ }
+
+ // Any errors would screq up our javascript
+ error_reporting(E_NONE);
+ ini_set('display_errors', false);
+
+ if(trim(@$_REQUEST['content']))
+ {
+ // PHP's urldecode doesn't understand %uHHHH for unicode
+ $_REQUEST['content'] = preg_replace('/%u([a-f0-9]{4,4})/ei', 'utf8_chr(0x$1)', $_REQUEST['content']);
+ function utf8_chr($num)
+ {
+ if($num<128)return chr($num);
+ if($num<1024)return chr(($num>>6)+192).chr(($num&63)+128);
+ if($num<32768)return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
+ if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
+ return '';
+ }
+ ob_start();
+ passthru("echo " . escapeshellarg($_REQUEST['content']) . " | tidy -q -i -u -wrap 9999 -utf8 -bare -asxhtml 2>/dev/null", $result);
+ $content = ob_get_contents();
+ ob_end_clean();
+
+ if(strlen($content) < 4)
+ {
+ // Tidy on the local machine failed, try a post
+ $res_1
+ = PostIt(
+ array
+ (
+ '_function' => 'tidy',
+ '_html' => $_REQUEST['content'],
+ 'char-encoding' => 'utf8',
+ '_output' => 'warn',
+ 'indent' => 'auto',
+ 'wrap' => 9999,
+ 'break-before-br' => 'y',
+ 'bare' => 'n',
+ 'word-2000' => 'n',
+ 'drop-empty-paras' => 'y',
+ 'drop-font-tags' => 'n',
+
+ ),
+ 'http://infohound.net/tidy/tidy.pl');
+
+ if(preg_match('/<a href="([^"]+)" title="Save the tidied HTML/', $res_1, $m))
+ {
+ $tgt = strtr($m[1], array_flip(get_html_translation_table(HTML_ENTITIES)));
+ $content = implode('', file('http://infohound.net/tidy/' . $tgt));
+ }
+ }
+
+ if(strlen($content) && ! preg_match('/<\/body>/i', $_REQUEST['content']))
+ {
+ if( preg_match('/<body[^>]*>(.*)<\/body>/is', $content, $matches) )
+ {
+ $content = $matches[1];
+ }
+ }
+ elseif(!strlen($content))
+ {
+ $content = $_REQUEST['content'];
+ }
+
+ if($content)
+ {
+ ?>
+ {action:'setHTML',value:'<?php echo js_encode($content) ?>'};
+ <?php
+ }
+ else
+ {
+ ?>
+ {action:'alert',value:'Tidy failed. Check your HTML for syntax errors.'};
+ <?php
+ }
+ }
+ else
+ {
+ ?>
+ {action:'alert',value:"You don't have anything to tidy!"}
+ <?php
+ }
+
+?>
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-delete.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-delete.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-delete.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-after.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-after.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-after.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-before.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-before.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-insert-before.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-merge.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-merge.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-merge.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-prop.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-prop.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-prop.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-split.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-split.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/cell-split.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-delete.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-delete.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-delete.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-after.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-after.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-after.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-before.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-before.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-insert-before.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-split.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-split.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/col-split.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-delete.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-delete.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-delete.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-above.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-above.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-above.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-under.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-under.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-insert-under.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-prop.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-prop.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-prop.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-split.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-split.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/row-split.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/table-prop.gif
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/table-prop.gif?rev=578051&view=auto
==============================================================================
Binary file - no diff available.
Propchange: lenya/branches/revolution/1.3.x/src/webapp/lenya/modules/xinha/plugins/TableOperations/img/table-prop.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream