mailbox/0040775000567100000000000000000010572125251012053 5ustar jcameronrootmailbox/boxes-lib.pl0100644000567100000120000016052610570662270014432 0ustar jcameronwheel# boxes-lib.pl # Functions to parsing user mail files use POSIX; if ($userconfig{'date_tz'} || $config{'date_tz'}) { # Set the timezone for all date calculations, and force a conversion # now as in some cases the first on fails! $ENV{'TZ'} = $userconfig{'date_tz'} || $config{'date_tz'}; strftime('%H:%M', localtime(time())); } use Time::Local; # Always use DBM indexing $config{'index_dbm'} = 2; $config{'index_min'} = 1000000; # list_mails(user|file, [start], [end]) # Returns a subset of mail from a mbox format file sub list_mails { local (@rv, $h, $done); my (@index, %index, $itype); $itype = &index_type($_[0]); if ($itype == 0) { @index = &build_index($_[0]); } else { &build_dbm_index($_[0], \%index); } local ($start, $end); local $isize = $itype == 0 ? scalar(@index) : $index{'mailcount'}; if (@_ == 1 || !defined($_[1]) && !defined($_[2])) { $start = 0; $end = $isize-1; } elsif ($_[2] < 0) { $start = $isize+$_[2]-1; $end = $isize+$_[1]-1; $start = $start<0 ? 0 : $start; } else { $start = $_[1]; $end = $_[2]; $end = $isize-1 if ($end >= $isize); } $rv[$isize-1] = undef if ($isize); # force array to right size local $dash = &dash_mode($_[0]); open(MAIL, &user_mail_file($_[0])); $start = 0 if ($start < 0); for($i=$start; $i<=$end; $i++) { # Seek to mail position local $startline; if ($itype == 0) { seek(MAIL, $index[$i]->[0], 0); $startline = $index[$i]->[1]; } else { local @idx = split(/\0/, $index{$i}); seek(MAIL, $idx[0], 0); $startline = $idx[1]; } # Read the mail local $mail = &read_mail_fh(MAIL, $dash ? 2 : 1, 0); $mail->{'line'} = $startline; $mail->{'eline'} = $startline + $mail->{'lines'} - 1; $mail->{'idx'} = $i; $rv[$i] = $mail; } return @rv; } # select_mails(user|file, &indexes, headersonly) # Returns a list of messages with the given indexes sub select_mails { local (@rv); my (@index, %index, $itype); $itype = &index_type($_[0]); if ($itype == 0) { @index = &build_index($_[0]); } else { &build_dbm_index($_[0], \%index); } local $isize = $itype == 0 ? scalar(@index) : $index{'mailcount'}; open(MAIL, &user_mail_file($_[0])); foreach my $i (@{$_[1]}) { # Seek to mail position local $startline; if ($itype == 0) { seek(MAIL, $index[$i]->[0], 0); $startline = $index[$i]->[1]; } else { local @idx = split(/\0/, $index{$i}); seek(MAIL, $idx[0], 0); $startline = $idx[1]; } # Read the mail local $mail = &read_mail_fh(MAIL, $dash ? 2 : 1, $_[2]); $mail->{'line'} = $startline; $mail->{'eline'} = $startline + $mail->{'lines'} - 1; $mail->{'idx'} = $i; push(@rv, $mail); } close(MAIL); return @rv; } # search_mail(user, field, match) # Returns an array of messages matching some search sub search_mail { return &advanced_search_mail($_[0], [ [ $_[1], $_[2] ] ], 1); } # advanced_search_mail(user|file, &fields, andmode, [&limits]) # Returns an array of messages matching some search sub advanced_search_mail { local $itype = &index_type($_[0]); local (@index, %index, @rv, $i); local $dash = &dash_mode($_[0]); local @possible; # index positions of possible mails local $possible_certain = 0; # is possible list authoratative? local ($min, $max); if ($itype == 0) { # We have only a plain index .. @index = &build_index($_[0]); $min = 0; $max = scalar(@index)-1; if ($_[3] && $_[3]->{'latest'}) { $min = $max - $_[3]->{'latest'}; } @possible = ($min .. $max); } else { # We have a DBM index .. if the search includes the from and subject # fields, scan it first to cut down on the total time &build_dbm_index($_[0], \%index); # Check which fields are used in search local @dbmfields = grep { $_->[0] eq 'from' || $_->[0] eq 'subject' } @{$_[1]}; local $alldbm = (scalar(@dbmfields) == scalar(@{$_[1]})); $min = 0; $max = $index{'mailcount'}-1; if ($_[3] && $_[3]->{'latest'}) { $min = $max - $_[3]->{'latest'}; } # Only check DBM if it contains some fields, and if it contains all # fields when in 'or' mode. if (@dbmfields && ($alldbm || $_[2])) { # Scan the DBM to build up a list of 'possibles' for($i=$min; $i<=$max; $i++) { local @idx = split(/\0/, $index{$i}); local $fake = { 'header' => { 'from', $idx[2], 'subject', $idx[3] } }; local $m = &mail_matches(\@dbmfields, $_[2], $fake); push(@possible, $i) if ($m); } $possible_certain = $alldbm; } else { # None of the DBM fields are in the search .. have to scan all @possible = ($min .. $max); } } # Need to scan through possible messages to find those that match open(MAIL, &user_mail_file($_[0])); foreach $i (@possible) { # Seek to mail position local $startline; if ($itype == 0) { seek(MAIL, $index[$i]->[0], 0); $startline = $index[$i]->[1]; } else { local @idx = split(/\0/, $index{$i}); seek(MAIL, $idx[0], 0); $startline = $idx[1]; } # Read the mail local $mail = &read_mail_fh(MAIL, $dash ? 2 : 1, 0); $mail->{'line'} = $startline; $mail->{'eline'} = $startline + $mail->{'lines'} - 1; $mail->{'idx'} = $i; push(@rv, $mail) if ($possible_certain || &mail_matches($_[1], $_[2], $mail)); } return @rv; } # build_index(user|file) sub build_index { local @index; local $ifile = &user_index_file($_[0]); local $umf = &user_mail_file($_[0]); local @ist = stat($ifile); local @st = stat($umf); if (open(INDEX, $ifile)) { @index = map { /(\d+)\s+(\d+)/; [ $1, $2 ] } ; close(INDEX); } if (!@ist || !@st || $ist[9] < $st[9] || $st[7] < $config{'index_min'}) { # The mail file is newer than the index, or we are always re-indexing local $fromok = 1; local ($l, $ll); local $dash = &dash_mode($umf); if ($st[7] < $config{'index_min'}) { $fromok = 0; # Always re-index open(MAIL, $umf); } else { if (open(MAIL, $umf)) { local $il = $#index; local $i; for($i=($il>100 ? 100 : $il); $i>=0; $i--) { $l = $index[$il-$i]; seek(MAIL, $index[$il-$i]->[0], 0); $ll = ; $fromok = 0 if ($ll !~ /^From\s+(\S+).*\d+\r?\n/ || ($1 eq '-' && !$dash)); } } else { $fromok = 0; # No mail file yet } } local ($pos, $lnum); if (scalar(@index) && $fromok && $st[7] > $l->[0]) { # Mail file seems to have gotten bigger, most likely # because new mail has arrived ... only reindex the new mails $pos = $l->[0] + length($ll); $lnum = $l->[1] + 1; } else { # Mail file has changed in some other way ... do a rebuild $pos = 0; $lnum = 0; undef(@index); seek(MAIL, 0, 0); } while() { if (/^From\s+(\S+).*\d+\r?\n/ && ($1 ne '-' || $dash)) { push(@index, [ $pos, $lnum ]); } $pos += length($_); $lnum++; } close(MAIL); open(INDEX, ">$ifile"); print INDEX map { $_->[0]." ".$_->[1]."\n" } @index; close(INDEX); } return @index; } # build_dbm_index(user|file, &index) # Returns a reference to a DBM hash that indexes the given mail file. # Hash contains keys 0, 1, 2 .. each of which has a value containing the # position of the mail in the file, line number, subject and sender. # Special key lastchange = time index was last updated # mailcount = number of messages in index sub build_dbm_index { local $ifile = &user_index_file($_[0]); local $umf = &user_mail_file($_[0]); local @st = stat($umf); local $index = $_[1]; dbmopen(%$index, $ifile, 0600); if (!@st || $index->{'lastchange'} < $st[9] || $st[7] < $config{'index_min'}) { # The mail file is newer than the index, or we are always re-indexing local $fromok = 1; local ($ll, @idx); local $dash = &dash_mode($umf); if ($st[7] < $config{'index_min'}) { $fromok = 0; # Always re-index open(MAIL, $umf); } else { if (open(MAIL, $umf)) { # Check the last 100 messages (at most) local $il = $index->{'mailcount'}-1; local $i; for($i=($il>100 ? 100 : $il); $i>=0; $i--) { @idx = split(/\0/, $index->{$il-$i}); seek(MAIL, $idx[0], 0); $ll = ; $fromok = 0 if ($ll !~ /^From\s+(\S+).*\d+\r?\n/ || ($1 eq '-' && !$dash)); } } else { $fromok = 0; # No mail file yet } } local ($pos, $lnum, $istart); if ($index->{'mailcount'} && $fromok && $st[7] > $idx[0]) { # Mail file seems to have gotten bigger, most likely # because new mail has arrived ... only reindex the new mails $pos = $idx[0] + length($ll); $lnum = $idx[1] + 1; $istart = $index->{'mailcount'}; } else { # Mail file has changed in some other way ... do a rebuild $istart = 0; $pos = 0; $lnum = 0; seek(MAIL, 0, 0); } local ($doingheaders, @nidx); while() { if (/^From\s+(\S+).*\d+\r?\n/ && ($1 ne '-' || $dash)) { @nidx = ( $pos, $lnum ); $index->{$istart++} = join("\0", @nidx); $doingheaders = 1; } elsif ($_ eq "\n" || $_ eq "\r\n") { $doingheaders = 0; } elsif ($doingheaders && /^From:\s*(.{0,255})/i) { $nidx[2] = $1; $index->{$istart-1} = join("\0", @nidx); } elsif ($doingheaders && /^Subject:\s*(.{0,255})/i) { $nidx[3] = $1; $index->{$istart-1} = join("\0", @nidx); } $pos += length($_); $lnum++; } close(MAIL); $index->{'lastchange'} = time(); $index->{'mailcount'} = $istart; } } # index_type(user|file) # Returns 0 if an old-style index exists for some mailbox, 1 if not (indicating # that DBM indexing should be used) sub index_type { return 0 if (!$config{'index_dbm'}); return 1 if ($config{'index_dbm'} == 2); local $ifile = &user_index_file($_[0]); return -r $ifile ? 0 : 1; } # empty_mail(user|file) # Truncate a mail file to nothing sub empty_mail { local $umf = &user_mail_file($_[0]); local $itype = &index_type($_[0]); local $ifile = &user_index_file($_[0]); open(TRUNC, ">$umf"); close(TRUNC); if ($itype == 0) { # Truncate index too open(TRUNC, ">$ifile"); close(TRUNC); } else { # Set index size to 0 local %index; dbmopen(%index, $ifile, 0600); $index{'mailcount'} = 0; $index{'lastchange'} = time(); dbmclose(%index); } } # count_mail(user|file) # Returns the number of messages in some mail file sub count_mail { my (@index, %index, $itype); $itype = &index_type($_[0]); if ($itype == 0) { @index = &build_index($_[0]); return scalar(@index); } else { &build_dbm_index($_[0], \%index); return $index{'mailcount'}; } } # parse_mail(&mail, [&parent], [savebody]) # Extracts the attachments from the mail body sub parse_mail { return if ($_[0]->{'parsed'}++); local $ct = $_[0]->{'header'}->{'content-type'}; local (@attach, $h, $a); if ($ct =~ /multipart\/(\S+)/i && ($ct =~ /boundary="([^"]+)"/i || $ct =~ /boundary=([^;\s]+)/i)) { # Multipart MIME message local $bound = "--".$1; local @lines = split(/\r?\n/, $_[0]->{'body'}); local $l; local $max = @lines; while($l < $max && $lines[$l++] ne $bound) { # skip to first boundary } while(1) { # read attachment headers local (@headers, $attach); while($lines[$l]) { $attach->{'raw'} .= $lines[$l]."\n"; $attach->{'rawheaders'} .= $lines[$l]."\n"; if ($lines[$l] =~ /^(\S+):\s*(.*)/) { push(@headers, [ $1, $2 ]); } elsif ($lines[$l] =~ /^\s+(.*)/) { $headers[$#headers]->[1] .= $1 unless($#headers < 0); } $l++; } $attach->{'raw'} .= $lines[$l]."\n"; $l++; $attach->{'headers'} = \@headers; foreach $h (@headers) { $attach->{'header'}->{lc($h->[0])} = $h->[1]; } if ($attach->{'header'}->{'content-type'} =~ /^([^;]+)/) { $attach->{'type'} = lc($1); } else { $attach->{'type'} = 'text/plain'; } if ($attach->{'header'}->{'content-disposition'} =~ /filename\s*=\s*"([^"]+)"/i) { $attach->{'filename'} = $1; } elsif ($attach->{'header'}->{'content-disposition'} =~ /filename\s*=\s*([^;\s]+)/i) { $attach->{'filename'} = $1; } elsif ($attach->{'header'}->{'content-type'} =~ /name\s*=\s*"([^"]+)"/i) { $attach->{'filename'} = $1; } # read the attachment body while($l < $max && $lines[$l] ne $bound && $lines[$l] ne "$bound--") { $attach->{'data'} .= $lines[$l]."\n"; $attach->{'raw'} .= $lines[$l]."\n"; $l++; } $attach->{'data'} =~ s/\n\n$/\n/; # Lose trailing blank line $attach->{'raw'} =~ s/\n\n$/\n/; # decode if necessary if (lc($attach->{'header'}->{'content-transfer-encoding'}) eq 'base64') { # Standard base64 encoded attachment $attach->{'data'} = &b64decode($attach->{'data'}); } elsif (lc($attach->{'header'}->{'content-transfer-encoding'}) eq 'x-uue') { # UUencoded attachment $attach->{'data'} = &uudecode($attach->{'data'}); } elsif (lc($attach->{'header'}->{'content-transfer-encoding'}) eq 'quoted-printable') { # Quoted-printable text attachment $attach->{'data'} = "ed_decode($attach->{'data'}); } elsif (lc($attach->{'type'}) eq 'application/mac-binhex40' && &has_command("hexbin")) { # Macintosh binhex encoded attachment local $temp = &transname(); mkdir($temp, 0700); open(HEXBIN, "| (cd $temp ; hexbin -n attach -d 2>/dev/null)"); print HEXBIN $attach->{'data'}; close(HEXBIN); if (!$?) { open(HEXBIN, "$temp/attach.data"); local $/ = undef; $attach->{'data'} = ; close(HEXBIN); local $ct = &guess_mime_type($attach->{'filename'}); $attach->{'type'} = $ct; $attach->{'header'} = { 'content-type' => $ct }; $attach->{'headers'} = [ [ 'Content-Type', $ct ] ]; } unlink("$temp/attach.data"); rmdir($temp); } $attach->{'idx'} = scalar(@attach); $attach->{'parent'} = $_[1] ? $_[1] : $_[0]; push(@attach, $attach) if (@headers || $attach->{'data'}); if ($attach->{'type'} =~ /multipart\/(\S+)/i) { # This attachment contains more attachments .. # expand them. local $amail = { 'header' => $attach->{'header'}, 'body' => $attach->{'data'} }; &parse_mail($amail, $attach); $attach->{'attach'} = [ @{$amail->{'attach'}} ]; map { $_->{'idx'} += scalar(@attach) } @{$amail->{'attach'}}; push(@attach, @{$amail->{'attach'}}); } elsif (lc($attach->{'type'}) eq 'application/ms-tnef') { # This attachment is a winmail.dat file, which may # contain multiple other attachments! local ($opentnef, $tnef); if (!($opentnef = &has_command("opentnef")) && !($tnef = &has_command("tnef"))) { $attach->{'error'} = "tnef command not installed"; } else { # Can actually decode local $tempfile = &transname(); open(TEMPFILE, ">$tempfile"); print TEMPFILE $attach->{'data'}; close(TEMPFILE); local $tempdir = &transname(); mkdir($tempdir, 0700); if ($opentnef) { system("$opentnef -d $tempdir -i $tempfile >/dev/null 2>&1"); } else { system("$tnef -C $tempdir -f $tempfile >/dev/null 2>&1"); } pop(@attach); # lose winmail.dat opendir(DIR, $tempdir); while($f = readdir(DIR)) { next if ($f eq '.' || $f eq '..'); local $data; open(FILE, "$tempdir/$f"); while() { $data .= $_; } close(FILE); local $ct = &guess_mime_type($f); push(@attach, { 'type' => $ct, 'idx' => scalar(@attach), 'header' => { 'content-type' => $ct }, 'headers' => [ [ 'Content-Type', $ct ] ], 'filename' => $f, 'data' => $data }); } closedir(DIR); unlink(glob("$tempdir/*"), $tempfile); rmdir($tempdir); } } last if ($l >= $max || $lines[$l] eq "$bound--"); $l++; } $_[0]->{'attach'} = \@attach; } elsif ($_[0]->{'body'} =~ /begin\s+([0-7]+)\s+(.*)/i) { # Message contains uuencoded file(s) local @lines = split(/\n/, $_[0]->{'body'}); local ($attach, $rest); foreach $l (@lines) { if ($l =~ /^begin\s+([0-7]+)\s+(.*)/i) { $attach = { 'type' => &guess_mime_type($2), 'idx' => scalar(@{$_[0]->{'attach'}}), 'parent' => $_[1], 'filename' => $2 }; push(@{$_[0]->{'attach'}}, $attach); } elsif ($l =~ /^end/ && $attach) { $attach = undef; } elsif ($attach) { $attach->{'data'} .= unpack("u", $l); } else { $rest .= $l."\n"; } } if ($rest =~ /\S/) { # Some leftover text push(@{$_[0]->{'attach'}}, { 'type' => "text/plain", 'idx' => scalar(@{$_[0]->{'attach'}}), 'parent' => $_[1], 'data' => $rest }); } } elsif (lc($_[0]->{'header'}->{'content-transfer-encoding'}) eq 'base64') { # Signed body section $ct =~ s/;.*$//; $_[0]->{'attach'} = [ { 'type' => lc($ct), 'idx' => 0, 'parent' => $_[1], 'data' => &b64decode($_[0]->{'body'}) } ]; } elsif (lc($_[0]->{'header'}->{'content-type'}) eq 'x-sun-attachment') { # Sun attachment format, which can contain several sections local $sun; foreach $sun (split(/----------/, $_[0]->{'body'})) { local ($headers, $rest) = split(/\r?\n\r?\n/, $sun, 2); local $attach = { 'idx' => scalar(@{$_[0]->{'attach'}}), 'parent' => $_[1], 'data' => $rest }; if ($headers =~ /X-Sun-Data-Name:\s*(\S+)/) { $attach->{'filename'} = $1; } if ($headers =~ /X-Sun-Data-Type:\s*(\S+)/) { local $st = $1; $attach->{'type'} = $st eq "text" ? "text/plain" : $st eq "html" ? "text/html" : $st =~ /\// ? $st : "application/octet-stream"; } elsif ($attach->{'filename'}) { $attach->{'type'} = &guess_mime_type($attach->{'filename'}); } else { $attach->{'type'} = "text/plain"; # fallback } push(@{$_[0]->{'attach'}}, $attach); } } else { # One big attachment (probably text) local ($type, $body); ($type = $ct) =~ s/;.*$//; $type = 'text/plain' if (!$type); if (lc($_[0]->{'header'}->{'content-transfer-encoding'}) eq 'base64') { $body = &b64decode($_[0]->{'body'}); } elsif (lc($_[0]->{'header'}->{'content-transfer-encoding'}) eq 'quoted-printable') { $body = "ed_decode($_[0]->{'body'}); } else { $body = $_[0]->{'body'}; } $_[0]->{'attach'} = [ { 'type' => lc($type), 'idx' => 0, 'parent' => $_[1], 'data' => $body } ]; } delete($_[0]->{'body'}) if (!$_[2]); } # delete_mail(user|file, &mail, ...) # Delete mail messages from a user by copying the file and rebuilding the index sub delete_mail { local @m = sort { $a->{'line'} <=> $b->{'line'} } @_[1..@_-1]; local $i = 0; local $f = &user_mail_file($_[0]); local $ifile = &user_index_file($_[0]); local $itype = &index_type($_[0]); local $lnum = 0; local %dline; local ($dpos = 0, $dlnum = 0); local (@index, %index); if ($itype == 1) { &build_dbm_index($_[0], \%index); } local $tmpf = $< == 0 ? "$f.del" : $_[0] =~ /^\/.*\/([^\/]+)$/ ? "$user_module_config_directory/$1.del" : "$user_module_config_directory/$_[0].del"; open(SOURCE, $f) || &error("Read failed : $!"); open(DEST, ">$tmpf") || &error("Open of $tmpf failed : $!"); while() { if ($i >= @m || $lnum < $m[$i]->{'line'}) { if ($itype == 0 && /^From\s+(\S+).*\d+\r?\n/ && ($1 ne '-' || $dash)) { push(@index, [ $dpos, $dlnum ]); } $dpos += length($_); $dlnum++; local $w = (print DEST $_); if (!$w) { local $e = "$!"; close(DEST); close(SOURCE); unlink($tmpf); &error("Write to $tmpf failed : $e"); } } elsif ($lnum == $m[$i]->{'eline'}) { $dline{$m[$i]->{'line'}}++; $i++; } $lnum++; } close(SOURCE); close(DEST) || &error("Write to $tmpf failed : $?"); local @st = stat($f); unlink($f) if ($< == 0); if ($itype == 0) { open(INDEX, ">$ifile"); print INDEX map { $_->[0]." ".$_->[1]."\n" } @index; close(INDEX); } else { # Just force a total index re-build (XXX lazy!) $index{'mailcount'} = $in{'lastchange'} = 0; } if ($< == 0) { rename($tmpf, $f); } else { system("cat ".quotemeta($tmpf)." > ".quotemeta($f). " && rm -f ".quotemeta($tmpf)); } chown($st[4], $st[5], $f); chmod($st[2], $f); } # modify_mail(user|file, old, new, textonly) # Modify one email message in a mailbox by copying the file and rebuilding # the index. sub modify_mail { local $f = &user_mail_file($_[0]); local $ifile = &user_index_file($_[0]); local $itype = &index_type($_[0]); local $lnum = 0; local ($sizediff, $linesdiff); local (@index, %index); if ($itype == 0) { @index = &build_index($_[0]); } else { &build_dbm_index($_[0], \%index); } # Replace the email that gets modified local $tmpf = $< == 0 ? "$f.del" : $_[0] =~ /^\/.*\/([^\/]+)$/ ? "$user_module_config_directory/$1.del" : "$user_module_config_directory/$_[0].del"; open(SOURCE, $f); open(DEST, ">$tmpf"); while() { if ($lnum < $_[1]->{'line'} || $lnum > $_[1]->{'eline'}) { # before or after the message to change local $w = (print DEST $_); if (!$w) { local $e = "$?"; close(DEST); close(SOURCE); unlink($tmpf); &error("Write to $tmpf failed : $e"); } } elsif ($lnum == $_[1]->{'line'}) { # found start of message to change .. put in the new one close(DEST); local @ost = stat($tmpf); local $nlines = &send_mail($_[2], $tmpf, $_[3], 1); local @nst = stat($tmpf); local $newsize = $nst[7] - $ost[7]; $sizediff = $newsize - $_[1]->{'size'}; $linesdiff = $nlines - ($_[1]->{'eline'} - $_[1]->{'line'} + 1); open(DEST, ">>$tmpf"); } $lnum++; } close(SOURCE); close(DEST) || &error("Write failed : $!"); # Now update the index and delete the temp file if ($itype == 0) { # Update old-style index foreach $i (@index) { if ($i->[1] > $_[1]->{'line'}) { # Shift mails after the modified $i->[0] += $sizediff; $i->[1] += $linesdiff; } } } else { # Update DBM index for($i=0; $i<$index{'mailcount'}; $i++) { local @idx = split(/\0/, $index{$i}); if ($idx[1] > $_[1]->{'line'}) { $idx[0] += $sizediff; $idx[1] += $linesdiff; $index{$i} = join("\0", @idx); } } $index{'lastchange'} = time(); } local @st = stat($f); unlink($f); if ($itype == 0) { open(INDEX, ">$ifile"); print INDEX map { $_->[0]." ".$_->[1]."\n" } @index; close(INDEX); } if ($< == 0) { rename($tmpf, $f); } else { system("cat $tmpf >$f && rm -f $tmpf"); } chown($st[4], $st[5], $f); chmod($st[2], $f); } # send_mail(&mail, [file], [textonly], [nocr], [smtp-server], # [smtp-user], [smtp-pass], [smtp-auth-mode], # [¬ify-flags], [port]) # Send out some email message or append it to a file. # Returns the number of lines written. sub send_mail { return 0 if (&is_readonly_mode()); local (%header, $h); local $lnum = 0; local $sm = $_[4] || $config{'send_mode'}; local $eol = $_[3] || !$sm ? "\n" : "\r\n"; local $port = $_[9] || $config{'smtp_port'} || 25; foreach $h (@{$_[0]->{'headers'}}) { $header{lc($h->[0])} = $h->[1]; } local @tm = localtime(time()); push(@{$_[0]->{'headers'}}, [ 'Date', strftime("%a, %d %b %Y %H:%M:%S %z (%Z)", @tm) ]) if (!$header{'date'}); local @from = &address_parts($header{'from'}); local $esmtp = $_[8] ? 1 : 0; if ($_[1]) { # Just append the email to a file using mbox format open(MAIL, ">>$_[1]") || &error("Write failed : $!"); $lnum++; print MAIL $_[0]->{'fromline'} ? $_[0]->{'fromline'}."\n" : strftime("From $from[0] %a %b %e %H:%M:%S %Y\n", @tm); } elsif ($sm) { # Connect to SMTP server &open_socket($sm, $port, MAIL); &smtp_command(MAIL); if ($esmtp) { &smtp_command(MAIL, "ehlo ".&get_system_hostname()."\r\n"); } else { &smtp_command(MAIL, "helo ".&get_system_hostname()."\r\n"); } # Get username and password from parameters, or from module config local $user = $_[5] || $userconfig{'smtp_user'} || $config{'smtp_user'}; local $pass = $_[6] || $userconfig{'smtp_pass'} || $config{'smtp_pass'}; local $auth = $_[7] || $userconfig{'smtp_auth'} || $config{'smtp_auth'} || "Cram-MD5"; if ($user) { # Send authentication commands eval "use Authen::SASL"; if ($@) { &error("Perl module Authen::SASL is needed for SMTP authentication"); } my $sasl = Authen::SASL->new('mechanism' => uc($auth), 'callback' => { 'auth' => $user, 'user' => $user, 'pass' => $pass } ); &error("Failed to create Authen::SASL object") if (!$sasl); local $conn = $sasl->client_new("smtp", &get_system_hostname()); local $arv = &smtp_command(MAIL, "auth $auth\r\n", 1); if ($arv =~ /^(334)\s+(.*)/) { # Server says to go ahead $extra = $2; local $initial = $conn->client_start(); local $auth_ok; if ($initial) { local $enc = &encode_base64($initial); $enc =~ s/\r|\n//g; $arv = &smtp_command(MAIL, "$enc\r\n", 1); if ($arv =~ /^(\d+)\s+(.*)/) { if ($1 == 235) { $auth_ok = 1; } else { &error("Unknown SMTP authentication response : $arv"); } } $extra = $2; } while(!$auth_ok) { local $message = &decode_base64($extra); local $return = $conn->client_step($message); local $enc = &encode_base64($return); $enc =~ s/\r|\n//g; $arv = &smtp_command(MAIL, "$enc\r\n", 1); if ($arv =~ /^(\d+)\s+(.*)/) { if ($1 == 235) { $auth_ok = 1; } elsif ($1 == 535) { &error("SMTP authentication failed : $arv"); } $extra = $2; } else { &error("Unknown SMTP authentication response : $arv"); } } } } &smtp_command(MAIL, "mail from: <$from[0]>\r\n"); local $notify = $_[8] ? " NOTIFY=".join(",", @{$_[8]}) : ""; local $u; foreach $u (&address_parts($header{'to'}.",".$header{'cc'}. ",".$header{'bcc'})) { &smtp_command(MAIL, "rcpt to: <$u>$notify\r\n"); } &smtp_command(MAIL, "data\r\n"); } elsif (defined(&send_mail_program)) { # Use specified mail injector local $cmd = &send_mail_program($from[0]); $cmd || &error("No mail program was found on your system!"); open(MAIL, "| $cmd >/dev/null 2>&1"); } elsif ($config{'qmail_dir'}) { # Start qmail-inject open(MAIL, "| $config{'qmail_dir'}/bin/qmail-inject"); } elsif ($config{'postfix_control_command'}) { # Start postfix's sendmail wrapper local $cmd = -x "/usr/lib/sendmail" ? "/usr/lib/sendmail" : &has_command("sendmail"); $cmd || &error($text{'send_ewrapper'}); open(MAIL, "| $cmd -t -f$from[0] >/dev/null 2>&1"); } else { # Start sendmail &has_command($config{'sendmail_path'}) || &error(&text('send_epath', "$config{'sendmail_path'}")); open(MAIL, "| $config{'sendmail_path'} -t -f$from[0] >/dev/null 2>&1"); } local $ctype = "multipart/mixed"; local $msg_id; foreach $h (@{$_[0]->{'headers'}}) { if (defined($_[0]->{'body'}) || $_[2]) { print MAIL $h->[0],": ",$h->[1],$eol; $lnum++; } else { if ($h->[0] !~ /^(MIME-Version|Content-Type)$/i) { print MAIL $h->[0],": ",$h->[1],$eol; $lnum++; } elsif (lc($h->[0]) eq 'content-type') { $ctype = $h->[1]; } } if (lc($h->[0]) eq 'message-id') { $msg_id++; } } if (!$msg_id) { # Add a message-id header if missing print MAIL "Message-Id: <",time().".".$$."\@". &get_system_hostname(),">",$eol; } # Work out first attachment content type local ($ftype, $fenc); if (@{$_[0]->{'attach'}} >= 1) { local $first = $_[0]->{'attach'}->[0]; $ftype = "text/plain"; foreach my $h (@{$first->{'headers'}}) { if (lc($h->[0]) eq "content-type") { $ftype = $h->[1]; } if (lc($h->[0]) eq "content-transfer-encoding") { $fenc = $h->[1]; } } } if (defined($_[0]->{'body'})) { # Use original mail body print MAIL $eol; $lnum++; $_[0]->{'body'} =~ s/\r//g; $_[0]->{'body'} =~ s/\n\.\n/\n\. \n/g; $_[0]->{'body'} =~ s/\n/$eol/g; $_[0]->{'body'} .= $eol if ($_[0]->{'body'} !~ /\n$/); (print MAIL $_[0]->{'body'}) || &error("Write failed : $!"); $lnum += ($_[0]->{'body'} =~ tr/\n/\n/); } elsif (!$_[2] || $ftype !~ /text\/plain/i || $fenc =~ /quoted-printable|base64/) { # Sending MIME-encoded email if ($ctype !~ /multipart\/report/i) { $ctype =~ s/;.*$//; } print MAIL "MIME-Version: 1.0",$eol; local $bound = "bound".time(); print MAIL "Content-Type: $ctype; boundary=\"$bound\"",$eol; print MAIL $eol; $lnum += 3; # Send attachments print MAIL "This is a multi-part message in MIME format.",$eol; $lnum++; foreach $a (@{$_[0]->{'attach'}}) { print MAIL $eol; print MAIL "--",$bound,$eol; $lnum += 2; local $enc; foreach $h (@{$a->{'headers'}}) { print MAIL $h->[0],": ",$h->[1],$eol; $enc = $h->[1] if (lc($h->[0]) eq 'content-transfer-encoding'); $lnum++; } print MAIL $eol; $lnum++; if (lc($enc) eq 'base64') { local $enc = &encode_base64($a->{'data'}); $enc =~ s/\r//g; $enc =~ s/\n/$eol/g; print MAIL $enc; $lnum += ($enc =~ tr/\n/\n/); } else { $a->{'data'} =~ s/\r//g; $a->{'data'} =~ s/\n\.\n/\n\. \n/g; $a->{'data'} =~ s/\n/$eol/g; print MAIL $a->{'data'}; $lnum += ($a->{'data'} =~ tr/\n/\n/); if ($a->{'data'} !~ /\n$/) { print MAIL $eol; $lnum++; } } } print MAIL $eol; (print MAIL "--",$bound,"--",$eol) || &error("Write failed : $!"); print MAIL $eol; $lnum += 3; } else { # Sending text-only mail from first attachment local $a = $_[0]->{'attach'}->[0]; print MAIL $eol; $lnum++; $a->{'data'} =~ s/\r//g; $a->{'data'} =~ s/\n/$eol/g; (print MAIL $a->{'data'}) || &error("Write failed : $!"); $lnum += ($a->{'data'} =~ tr/\n/\n/); if ($a->{'data'} !~ /\n$/) { print MAIL $eol; $lnum++; } } if ($sm && !$_[1]) { &smtp_command(MAIL, ".$eol"); &smtp_command(MAIL, "quit$eol"); } if (!close(MAIL)) { # Only bother to report an error on close if writing to a file if ($_[1]) { &error("Write failed : $!"); } } return $lnum; } # mail_size(&mail, [textonly]) # Returns the size of an email message in bytes sub mail_size { local ($mail, $textonly) = @_; local $temp = &transname(); &send_mail($mail, $temp, $textonly); local @st = stat($temp); unlink($temp); return $st[7]; } # b64decode(string) # Converts a string from base64 format to normal sub b64decode { local($str) = $_[0]; local($res); $str =~ tr|A-Za-z0-9+=/||cd; $str =~ s/=+$//; $str =~ tr|A-Za-z0-9+/| -_|; while ($str =~ /(.{1,60})/gs) { my $len = chr(32 + length($1)*3/4); $res .= unpack("u", $len . $1 ); } return $res; } # can_read_mail(user) sub can_read_mail { return 1 if ($_[0] && $access{'sent'} eq $_[0]); local @u = getpwnam($_[0]); return 0 if (!@u); return 0 if ($_[0] =~ /\.\./); return 0 if ($access{'mmode'} == 0); return 1 if ($access{'mmode'} == 1); local $u; if ($access{'mmode'} == 2) { foreach $u (split(/\s+/, $access{'musers'})) { return 1 if ($u eq $_[0]); } return 0; } elsif ($access{'mmode'} == 4) { return 1 if ($_[0] eq $remote_user); } elsif ($access{'mmode'} == 5) { return $u[3] eq $access{'musers'}; } elsif ($access{'mmode'} == 3) { foreach $u (split(/\s+/, $access{'musers'})) { return 0 if ($u eq $_[0]); } return 1; } elsif ($access{'mmode'} == 6) { return ($_[0] =~ /^$access{'musers'}$/); } elsif ($access{'mmode'} == 7) { return (!$access{'musers'} || $u[2] >= $access{'musers'}) && (!$access{'musers2'} || $u[2] <= $access{'musers2'}); } return 0; # can't happen! } # from_hostname() sub from_hostname { local ($d, $masq); local $conf = &get_sendmailcf(); foreach $d (&find_type("D", $conf)) { if ($d->{'value'} =~ /^M\s*(\S*)/) { $masq = $1; } } return $masq ? $masq : &get_system_hostname(); } # mail_from_queue(qfile, [dfile|"auto"]) # Reads a message from the Sendmail mail queue sub mail_from_queue { local $mail = { 'file' => $_[0] }; $mail->{'quar'} = $_[0] =~ /\/hf/; $mail->{'lost'} = $_[0] =~ /\/Qf/; if ($_[1] eq "auto") { $mail->{'dfile'} = $_[0]; $mail->{'dfile'} =~ s/\/(qf|hf|Qf)/\/df/; } elsif ($_[1]) { $mail->{'dfile'} = $_[1]; } $mail->{'lfile'} = $_[0]; $mail->{'lfile'} =~ s/\/(qf|hf|Qf)/\/xf/; local $_; local @headers; open(QF, $_[0]) || return undef; while() { s/\r|\n//g; if (/^M(.*)/) { $mail->{'status'} = $1; } elsif (/^H\?[^\?]*\?(\S+):\s+(.*)/ || /^H(\S+):\s+(.*)/) { push(@headers, [ $1, $2 ]); $mail->{'rawheaders'} .= "$1: $2\n"; } elsif (/^\s+(.*)/) { $headers[$#headers]->[1] .= $1 unless($#headers < 0); $mail->{'rawheaders'} .= $_."\n"; } } close(QF); $mail->{'headers'} = \@headers; foreach $h (@headers) { $mail->{'header'}->{lc($h->[0])} = $h->[1]; } if ($mail->{'dfile'}) { # Read the mail body open(DF, $mail->{'dfile'}); while() { $mail->{'body'} .= $_; } close(DF); } local $datafile = $mail->{'dfile'}; if (!$datafile) { ($datafile = $mail->{'file'}) =~ s/\/(qf|hf|Qf)/\/df/; } local @st0 = stat($mail->{'file'}); local @st1 = stat($datafile); $mail->{'size'} = $st0[7] + $st1[7]; return $mail; } # wrap_lines(text, width) # Given a multi-line string, return an array of lines wrapped to # the given width sub wrap_lines { local @rv; local $w = $_[1]; foreach $rest (split(/\n/, $_[0])) { if ($rest =~ /\S/) { while($rest =~ /^(.{1,$w}\S*)\s*([\0-\377]*)$/) { push(@rv, $1); $rest = $2; } } else { # Empty line .. keep as it is push(@rv, $rest); } } return @rv; } # smtp_command(handle, command, no-error) sub smtp_command { local ($m, $c) = @_; print $m $c; local $r = <$m>; if ($r !~ /^[23]\d+/ && !$_[2]) { &error(&text('send_esmtp', "".&html_escape($c)."", "".&html_escape($r)."")); } $r =~ s/\r|\n//g; if ($r =~ /^(\d+)\-/) { # multi-line ESMTP response! while(1) { local $nr = <$m>; $nr =~ s/\r|\n//g; if ($nr =~ /^(\d+)\-(.*)/) { $r .= "\n".$2; } elsif ($nr =~ /^(\d+)\s+(.*)/) { $r .= "\n".$2; last; } } } return $r; } # address_parts(string) # Returns the email addresses in a string sub address_parts { local @rv; local $rest = $_[0]; while($rest =~ /([^<>\s,'"\@]+\@[A-z0-9\-\.\!]+)(.*)/) { push(@rv, $1); $rest = $2; } return wantarray ? @rv : $rv[0]; } # link_urls(text, separate) sub link_urls { local $r = $_[0]; local $tar = $_[1] ? "target=link".int(rand()*100000) : ""; $r =~ s/((http|ftp|https|mailto):[^><"'\s]+[^><"'\s\.\)])/$1<\/a>/g; return $r; } # link_urls_and_escape(text, separate) # HTML escapes some text, as well as properly linking URLs in it sub link_urls_and_escape { local $l = $_[0]; local $rv; local $tar = $_[1] ? " target=link".int(rand()*100000) : ""; while($l =~ /^(.*?)((http|ftp|https|mailto):[^><"'\s]+[^><"'\s\.\)])(.*)/) { local ($before, $url, $after) = ($1, $2, $4); $rv .= &eucconv_and_escape($before)."". &html_escape($url).""; $l = $after; } $rv .= &eucconv_and_escape($l); return $rv; } # uudecode(text) sub uudecode { local @lines = split(/\n/, $_[0]); local ($l, $data); for($l=0; $lines[$l] !~ /begin\s+([0-7]+)\s/i; $l++) { } while($lines[++$l]) { $data .= unpack("u", $lines[$l]); } return $data; } sub simplify_date { local $u = &parse_mail_date($_[0]); if ($u) { local $fmt = $userconfig{'date_fmt'} || $config{'date_fmt'} || "dmy"; local $strf = $fmt eq "dmy" ? "%d/%m/%Y" : $fmt eq "mdy" ? "%m/%d/%Y" : "%Y/%m/%d"; return strftime("$strf %H:%M", localtime($u)); } elsif ($_[0] =~ /^(\S+),\s+0*(\d+)\s+(\S+)\s+(\d+)\s+(\d+):(\d+)/) { return "$2/$3/$4 $5:$6"; } elsif ($_[0] =~ /^0*(\d+)\s+(\S+)\s+(\d+)\s+(\d+):(\d+)/) { return "$1/$2/$3 $4:$5"; } return $_[0]; } # simplify_from(from) # Simplifies a From: address for display in the mail list. Only the first # address is returned. sub simplify_from { local $rv = &eucconv(&decode_mimewords($_[0])); local @sp = &split_addresses($rv); if (!@sp) { return $text{'mail_nonefrom'}; } else { local $first = &html_escape($sp[0]->[1] ? $sp[0]->[1] : $sp[0]->[2]); if (length($first) > 80) { return substr($first, 0, 80)." .."; } else { return $first.(@sp > 1 ? " , ..." : ""); } } } # simplify_subject(subject) sub simplify_subject { local $rv = &eucconv(&decode_mimewords($_[0])); $rv = substr($rv, 0, 80)." .." if (length($rv) > 80); return $rv =~ /\S/ ? &html_escape($rv) : "
"; } # quoted_decode(text) sub quoted_decode { local $t = $_[0]; $t =~ s/=\n//g; $t =~ s/=([a-zA-Z0-9]{2})/pack("c",hex($1))/ge; return $t; } # quoted_encode(text) sub quoted_encode { local $t = $_[0]; $t =~ s/([=\177-\377])/sprintf("=%2.2X",ord($1))/ge; return $t; } sub decode_mimewords { my $encstr = shift; my %params = @_; my @tokens; $@ = ''; ### error-return ### Collapse boundaries between adjacent encoded words: $encstr =~ s{(\?\=)\r?\n[ \t](\=\?)}{$1$2}gs; pos($encstr) = 0; ### print STDOUT "ENC = [", $encstr, "]\n"; ### Decode: my ($charset, $encoding, $enc, $dec); while (1) { last if (pos($encstr) >= length($encstr)); my $pos = pos($encstr); ### save it ### Case 1: are we looking at "=?..?..?="? if ($encstr =~ m{\G # from where we left off.. =\?([^?]*) # "=?" + charset + \?([bq]) # "?" + encoding + \?([^?]+) # "?" + data maybe with spcs + \?= # "?=" }xgi) { ($charset, $encoding, $enc) = ($1, lc($2), $3); $dec = (($encoding eq 'q') ? _decode_Q($enc) : _decode_B($enc)); push @tokens, [$dec, $charset]; next; } ### Case 2: are we looking at a bad "=?..." prefix? ### We need this to detect problems for case 3, which stops at "=?": pos($encstr) = $pos; # reset the pointer. if ($encstr =~ m{\G=\?}xg) { $@ .= qq|unterminated "=?..?..?=" in "$encstr" (pos $pos)\n|; push @tokens, ['=?']; next; } ### Case 3: are we looking at ordinary text? pos($encstr) = $pos; # reset the pointer. if ($encstr =~ m{\G # from where we left off... ([\x00-\xFF]*? # shortest possible string, \n*) # followed by 0 or more NLs, (?=(\Z|=\?)) # terminated by "=?" or EOS }xg) { length($1) or die "MIME::Words: internal logic err: empty token\n"; push @tokens, [$1]; next; } ### Case 4: bug! die "MIME::Words: unexpected case:\n($encstr) pos $pos\n\t". "Please alert developer.\n"; } return join('',map {$_->[0]} @tokens); } # _decode_Q STRING # Private: used by _decode_header() to decode "Q" encoding, which is # almost, but not exactly, quoted-printable. :-P sub _decode_Q { my $str = shift; $str =~ s/_/\x20/g; # RFC-1522, Q rule 2 $str =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; # RFC-1522, Q rule 1 $str; } # _decode_B STRING # Private: used by _decode_header() to decode "B" encoding. sub _decode_B { my $str = shift; &decode_base64($str); } # user_mail_file(user|file, [other details]) sub user_mail_file { if ($_[0] =~ /^\//) { return $_[0]; } elsif ($config{'mail_dir'}) { return &mail_file_style($_[0], $config{'mail_dir'}, $config{'mail_style'}); } elsif (@_ > 1) { return "$_[7]/$config{'mail_file'}"; } else { local @u = getpwnam($_[0]); return "$u[7]/$config{'mail_file'}"; } } # mail_file_style(user, basedir, style) sub mail_file_style { if ($_[2] == 0) { return "$_[1]/$_[0]"; } elsif ($_[2] == 1) { return $_[1]."/".substr($_[0], 0, 1)."/".$_[0]; } elsif ($_[2] == 2) { return $_[1]."/".substr($_[0], 0, 1)."/". substr($_[0], 0, 2)."/".$_[0]; } else { return $_[1]."/".substr($_[0], 0, 1)."/". substr($_[0], 1, 1)."/".$_[0]; } } # user_index_file(user|file) sub user_index_file { local $us = $_[0]; $us =~ s/\//_/g; local $f; local $hn = &get_system_hostname(); if ($_[0] =~ /^\/.*\/([^\/]+)$/) { # A file .. the index file is in ~/.usermin/mailbox or # /etc/webmin/mailboxes if ($user_module_config_directory && $config{'shortindex'}) { # Use short name for index file $f = "$user_module_config_directory/$1.findex"; } else { $f = $user_module_config_directory ? "$user_module_config_directory/$us.findex" : "$module_config_directory/$us.findex"; } } else { # A username .. the index file is in /etc/webmin/mailboxes $f = $user_module_config_directory ? "$user_module_config_directory/$_[0].index" : "$module_config_directory/$_[0].index"; } return -r $f && !-r "$f.$hn" ? $f : "$f.$hn"; } # extract_mail(data) # Converts the text of a message into mail object. sub extract_mail { local $text = $_[0]; $text =~ s/^\s+//; local ($amail, @aheaders, $i); local @alines = split(/\n/, $text); while($i < @alines && $alines[$i]) { if ($alines[$i] =~ /^(\S+):\s*(.*)/) { push(@aheaders, [ $1, $2 ]); $amail->{'rawheaders'} .= $alines[$i]."\n"; } elsif ($alines[$i] =~ /^\s+(.*)/) { $aheaders[$#aheaders]->[1] .= $1 unless($#aheaders < 0); $amail->{'rawheaders'} .= $alines[$i]."\n"; } $i++; } $amail->{'headers'} = \@aheaders; foreach $h (@aheaders) { $amail->{'header'}->{lc($h->[0])} = $h->[1]; } splice(@alines, 0, $i); $amail->{'body'} = join("\n", @alines)."\n"; return $amail; } # split_addresses(string) # Splits a comma-separated list of addresses into [ email, real-name, original ] # triplets sub split_addresses { local (@rv, $str = $_[0]); while(1) { if ($str =~ /^[\s,]*(([^<>\(\)\s]+)\s+\(([^\(\)]+)\))(.*)$/) { # An address like foo@bar.com (Fooey Bar) push(@rv, [ $2, $3, $1 ]); $str = $4; } elsif ($str =~ /^[\s,]*("([^"]+)"\s*<([^\s<>,]+)>)(.*)$/ || $str =~ /^[\s,]*(([^<>]+)\s+<([^\s<>,]+)>)(.*)$/ || $str =~ /^[\s,]*(([^<>]+)<([^\s<>,]+)>)(.*)$/ || $str =~ /^[\s,]*(([^<>\[\]]+)\s+\[mailto:([^\s\[\]]+)\])(.*)$/|| $str =~ /^[\s,]*(()<([^<>,]+)>)(.*)/ || $str =~ /^[\s,]*(()([^\s<>,]+))(.*)/) { # Addresses like "Fooey Bar" # Fooey Bar # Fooey Bar [mailto:foo@bar.com] # # # foo@bar.com push(@rv, [ $3, $2, $1 ]); $str = $4; } else { last; } } return @rv; } $match_ascii = '\x1b\([BHJ]([\t\x20-\x7e]*)'; $match_jis = '\x1b\$[@B](([\x21-\x7e]{2})*)'; sub eucconv { local($_) = @_; if ($current_lang eq 'ja_JP.euc') { s/$match_jis/&j2e($1)/geo; s/$match_ascii/$1/go; } $_; } sub j2e { local($_) = @_; tr/\x21-\x7e/\xa1-\xfe/; $_; } # eucconv_and_escape(string) sub eucconv_and_escape { return &html_escape(&eucconv($_[0])); } # list_maildir(file, [start], [end]) # Returns a subset of mail from a maildir format directory sub list_maildir { local (@rv, $i, $f); local @files = &get_maildir_files($_[0]); local ($start, $end); if (!defined($_[1])) { $start = 0; $end = @files - 1; } elsif ($_[2] < 0) { $start = @files + $_[2] - 1; $end = @files + $_[1] - 1; $start = 0 if ($start < 0); } else { $start = $_[1]; $end = $_[2]; $end = @files-1 if ($end >= @files); } foreach $f (@files) { if ($i < $start || $i > $end) { # Skip files outside requested index range push(@rv, undef); $i++; next; } local $mail = &read_mail_file($f); $mail->{'idx'} = $i++; push(@rv, $mail); } return @rv; } # select_maildir(file, &indexes, headersonly) # Returns a list of messages with the given indexes, from a maildir directory sub select_maildir { local @files = &get_maildir_files($_[0]); local @rv; foreach my $i (@{$_[1]}) { local $mail = &read_mail_file($files[$i], $_[2]); $mail->{'idx'} = $i; push(@rv, $mail); } return @rv; } # Get ordered list of message files (with in-memory and on-disk caching, as # this can be slow) # get_maildir_files(directory) sub get_maildir_files { # Work out last modified time local $newest; foreach my $d ("$_[0]/cur", "$_[0]/new") { local @dst = stat($d); $newest = $dst[9] if ($dst[9] > $newest); } local @files; if (defined($main::list_maildir_cache{$_[0]}) && $main::list_maildir_cache_time{$_[0]} == $newest) { # Use the in-memory cache cache @files = @{$main::list_maildir_cache{$_[0]}}; } else { # Check the on-disk cache file local $cachefile = &get_maildir_cachefile($_[0]); local @cst = $cachefile ? stat($cachefile) : ( ); if ($cst[9] >= $newest) { # Can read the cache open(CACHE, $cachefile); while() { chop; push(@files, $_[0]."/".$_); } close(CACHE); } else { # Really read local @shorts; foreach my $d ("cur", "new") { opendir(DIR, "$_[0]/$d"); while(my $f = readdir(DIR)) { push(@shorts, "$d/$f") if ($f ne "." && $f ne ".."); } closedir(DIR); } @shorts = sort { substr($a, 4) cmp substr($b, 4) } @shorts; @files = map { "$_[0]/$_" } @shorts; # Write out the on-disk cache if ($cachefile) { &open_tempfile(CACHE, ">$cachefile", 1); my $err; foreach my $f (@shorts) { my $ok = (print CACHE $f,"\n"); $err++ if (!$ok); } &close_tempfile(CACHE) if (!$err); local @st = stat($_[0]); if ($< == 0) { # Cache should have some ownership as directory &set_ownership_permissions($st[4], $st[5], undef, $cachefile); } } } $main::list_maildir_cache{$_[0]} = \@files; $main::list_maildir_cache_time{$_[0]} = $st[7]; } return @files; } # search_maildir(file, field, what) # Search for messages in a maildir directory, and return the results sub search_maildir { return &advanced_search_maildir($_[0], [ [ $_[1], $_[2] ] ], 1); } # advanced_search_maildir(user|file, &fields, andmode, [&limit]) # Search for messages in a maildir directory, and return the results sub advanced_search_maildir { local @rv; local ($min, $max); if ($_[3] && $_[3]->{'latest'}) { $min = -1; $max = -$_[3]->{'latest'}; } foreach $mail (&list_maildir($_[0], $min, $max)) { push(@rv, $mail) if ($mail && &mail_matches($_[1], $_[2], $mail)); } return @rv; } # delete_maildir(&mail, ...) # Delete messages from a maildir directory sub delete_maildir { local $m; # Find all maildirs being deleted from local %dirs; foreach $m (@_) { if ($m->{'file'} =~ /^(.*)\/(cur|new)\/([^\/]+)$/) { $dirs{$1}->{"$2/$3"} = 1; } } # Delete from caches foreach my $dir (keys %dirs) { local $cachefile = &get_maildir_cachefile($dir); next if (!$cachefile); local @cst = stat($cachefile); next if (!@cst); # Work out last modified time, and don't update cache if too new local $newest; foreach my $d ("$dir/cur", "$dir/new") { local @dst = stat($d); $newest = $dst[9] if ($dst[9] > $newest); } next if ($newest > $cst[9]); local $lref = &read_file_lines($cachefile); for(my $i=0; $i<@$lref; $i++) { if ($dirs{$dir}->{$lref->[$i]}) { # Found an entry to remove splice(@$lref, $i--, 1); } } &flush_file_lines($cachefile); } # Actually delete the files foreach $m (@_) { unlink($m->{'file'}); } } # modify_maildir(&oldmail, &newmail, textonly) # Replaces a message in a maildir directory sub modify_maildir { unlink($_[0]->{'file'}); &send_mail($_[1], $_[0]->{'file'}, $_[2], 1); } # write_maildir(&mail, directory, textonly) # Adds some message in maildir format to a directory sub write_maildir { # Work out last modified time, and don't update cache if too new local $cachefile = &get_maildir_cachefile($_[1]); local $up2date = 0; if ($cachefile) { local @cst = stat($cachefile); if (@cst) { local $newest; foreach my $d ("$dir/cur", "$dir/new") { local @dst = stat($d); $newest = $dst[9] if ($dst[9] > $newest); } $up2date = 1 if ($newest <= $cst[9]); } } # Select a unique filename and write to it local $now = time(); local $hn = &get_system_hostname(); local $mf; mkdir($_[1], 0755); mkdir("$_[1]/cur", 0755); do { $mf = "$_[1]/cur/$now.$$.$hn"; $now++; } while(-r $mf); &send_mail($_[0], $mf, $_[2], 1); if ($up2date && $cachefile) { # Bring cache up to date $now--; local $lref = &read_file_lines($cachefile); push(@$lref, "cur/$now.$$.$hn"); &flush_file_lines($cachefile); } } # empty_maildir(file) # Delete all messages in an maildir directory sub empty_maildir { local $d; foreach $d ("$_[0]/cur", "$_[0]/new") { local $f; opendir(DIR, $d); while($f = readdir(DIR)) { unlink("$d/$f") if ($f ne '.' && $f ne '..'); } closedir(DIR); } local $cachefile = &get_maildir_cachefile($_[0]); unlink($cachefile) if ($cachefile); } # get_maildir_cachefile(dir) # Returns the cache file for a maildir directory sub get_maildir_cachefile { local ($dir) = @_; local $oldcache = -r "$dir/maildircache" ? "$dir/maildircache" : "$dir/.usermin-maildircache"; unlink($oldcache); local $cd = $user_module_config_directory || $module_config_directory; local $sd = "$cd/maildircache"; if (!-d $sd) { &make_dir($sd, 0755) || return undef; } $dir =~ s/\//_/g; return "$sd/$dir"; } # count_maildir(dir) # Returns the number of messages in a maildir directory sub count_maildir { local $d; local $count = 0; foreach $d ("$_[0]/cur", "$_[0]/new") { opendir(DIR, $d); local @files = grep { $_ !~ /^\./ } readdir(DIR); $count += scalar(@files); closedir(DIR); } return $count; } # list_mhdir(file, [start], [end]) # Returns a subset of mail from an MH format directory sub list_mhdir { local ($start, $end, $f, $i, @rv); opendir(DIR, $_[0]); local @files = map { "$_[0]/$_" } sort { $a <=> $b } grep { /^\d+$/ } readdir(DIR); closedir(DIR); if (!defined($_[1])) { $start = 0; $end = @files - 1; } elsif ($_[2] < 0) { $start = @files + $_[2] - 1; $end = @files + $_[1] - 1; $start = 0 if ($start < 0); } else { $start = $_[1]; $end = $_[2]; $end = @files-1 if ($end >= @files); } foreach $f (@files) { if ($i < $start || $i > $end) { # Skip files outside requested index range push(@rv, undef); $i++; next; } local $mail = &read_mail_file($f); $mail->{'idx'} = $i++; push(@rv, $mail); } return @rv; } # select_mhdir(file, &indexes, headersonly) # Returns a list of messages with the given indexes, from an mhdir directory sub select_mhdir { local @rv; opendir(DIR, $_[0]); local @files = map { "$_[0]/$_" } sort { $a <=> $b } grep { /^\d+$/ } readdir(DIR); closedir(DIR); foreach my $i (@{$_[1]}) { local $mail = &read_mail_file($files[$i], $_[2]); $mail->{'idx'} = $i; push(@rv, $mail); } return @rv; } # search_mhdir(file|user, field, what) # Search for messages in an MH directory, and return the results sub search_mhdir { return &advanced_search_mhdir($_[0], [ [ $_[1], $_[2] ] ], 1); } # advanced_search_mhdir(file|user, &fields, andmode, &limit) # Search for messages in an MH directory, and return the results sub advanced_search_mhdir { local @rv; local ($min, $max); if ($_[3] && $_[3]->{'latest'}) { $min = -1; $max = -$_[3]->{'latest'}; } foreach $mail (&list_mhdir($_[0], $min, $max)) { push(@rv, $mail) if ($mail && &mail_matches($_[1], $_[2], $mail)); } return @rv; } # delete_mhdir(&mail, ...) # Delete messages from an MH directory sub delete_mhdir { local $m; foreach $m (@_) { unlink($m->{'file'}); } } # modify_mhdir(&oldmail, &newmail, textonly) # Replaces a message in a maildir directory sub modify_mhdir { unlink($_[0]->{'file'}); &send_mail($_[1], $_[0]->{'file'}, $_[2], 1); } # max_mhdir(dir) # Returns the maximum message ID in the directory sub max_mhdir { local $max = 1; opendir(DIR, $_[0]); foreach $f (readdir(DIR)) { $max = $f if ($f =~ /^\d+$/ && $f > $max); } closedir(DIR); return $max; } # empty_mhdir(file) # Delete all messages in an MH format directory sub empty_mhdir { local $f; opendir(DIR, $_[0]); foreach $f (readdir(DIR)) { unlink("$_[0]/$f") if ($f =~ /^\d+$/); } closedir(DIR); } # count_mhdir(file) # Returns the number of messages in an MH directory sub count_mhdir { opendir(DIR, $_[0]); local @files = grep { /^\d+$/ } readdir(DIR); closedir(DIR); return scalar(@files); } # read_mail_file(file, [headersonly]) # Read a single message from a file sub read_mail_file { local (@headers, $mail); # Open and read the mail file open(MAIL, $_[0]) || return undef; $mail = &read_mail_fh(MAIL, 0, $_[1]); $mail->{'file'} = $_[0]; close(MAIL); local @st = stat($_[0]); $mail->{'size'} = $st[7]; return $mail; } # read_mail_fh(handle, [end-mode], [headersonly]) # Reads an email message from the given file handle, either up to end of # the file, or a From line. End mode 0 = EOF, 1 = From without -, # 2 = From possibly with - sub read_mail_fh { local ($fh, $endmode, $headeronly) = @_; local (@headers, $mail); # Read the headers local $lnum = 0; while(1) { $lnum++; local $line = <$fh>; $mail->{'size'} += length($line); $line =~ s/\r|\n//g; last if ($line eq ''); if ($line =~ /^(\S+):\s*(.*)/) { push(@headers, [ $1, $2 ]); $mail->{'rawheaders'} .= $line."\n"; } elsif ($line =~ /^\s+(.*)/) { $headers[$#headers]->[1] .= $1 unless($#headers < 0); $mail->{'rawheaders'} .= $line."\n"; } elsif ($line =~ /^From\s+(\S+).*\d+/ && ($1 ne '-' || $endmode == 2)) { $mail->{'fromline'} = $line; } } $mail->{'headers'} = \@headers; foreach $h (@headers) { $mail->{'header'}->{lc($h->[0])} = $h->[1]; } if (!$headersonly) { # Read the mail body if ($endmode == 0) { # Till EOF while(read($fh, $buf, 1024) > 0) { $mail->{'size'} += length($buf); $mail->{'body'} .= $buf; } close(MAIL); } else { # Tell next From line while(1) { $line = <$fh>; last if (!$line || $line =~ /^From\s+(\S+).*\d+\r?\n/ && ($1 ne '-' || $endmode == 2)); $lnum++; $mail->{'size'} += length($line); $mail->{'body'} .= $line; } $mail->{'lines'} = $lnum; } } elsif ($endmode) { # Not reading the body, but we still need to search till the next # From: line in order to get the size while(1) { $line = <$fh>; last if (!$line || $line =~ /^From\s+(\S+).*\d+\r?\n/ && ($1 ne '-' || $endmode == 2)); $mail->{'size'} += length($line); } } return $mail; } # dash_mode(user|file) # Returns 1 if the messages in this folder are separated by lines like # From - instead of the usual From foo@bar.com sub dash_mode { open(DASH, &user_mail_file($_[0])) || return 0; # assume no local $line = ; close(DASH); return $line =~ /^From\s+(\S+).*\d/ && $1 eq '-'; } # mail_matches(&fields, andmode, &mail) # Returns 1 if some message matches a search sub mail_matches { local $count = 0; local $f; foreach $f (@{$_[0]}) { local $field = $f->[0]; local $what = $f->[1]; local $neg = ($field =~ s/^\!//); if ($field eq 'body') { $count++ if (!$neg && $_[2]->{'body'} =~ /\Q$what\E/i || $neg && $_[2]->{'body'} !~ /\Q$what\E/i); } elsif ($field eq 'size') { $count++ if (!$neg && $_[2]->{'size'} > $what || $neg && $_[2]->{'size'} < $what); } elsif ($field eq 'headers') { local $headers = $_[2]->{'rawheaders'} || join("", map { $_->[0].": ".$_->[1]."\n" } @{$_[2]->{'headers'}}); $count++ if (!$neg && $headers =~ /\Q$what\E/i || $neg && $headers !~ /\Q$what\E/i); } elsif ($field eq "status") { $count++ if (!$neg && $_[2]->{$field} =~ /\Q$what\E/i|| $neg && $_[2]->{$field} !~ /\Q$what\E/i); } else { $count++ if (!$neg && $_[2]->{'header'}->{$field} =~ /\Q$what\E/i|| $neg && $_[2]->{'header'}->{$field} !~ /\Q$what\E/i); } return 1 if ($count && !$_[1]); } return $count == @{$_[0]}; } # search_fields(&fields) # Returns an array of headers/fields from a search sub search_fields { local @rv; foreach $f (@{$_[0]}) { $f->[0] =~ /^\!?(.*)$/; push(@rv, $1); } return &unique(@rv); } # parse_delivery_status(text) # Returns the fields from a message/delivery-status attachment sub parse_delivery_status { local @lines = split(/[\r\n]+/, $_[0]); local (%rv, $l); foreach $l (@lines) { if ($l =~ /^(\S+):\s*(.*)/) { $rv{lc($1)} = $2; } } return \%rv; } # parse_mail_date(string) # Converts a mail Date: header into a unix time sub parse_mail_date { open(OLDSTDERR, ">&STDERR"); # suppress STDERR from Time::Local close(STDERR); my $rv = eval { if ($_[0] =~ /^\s*(\S+),\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+):\s?(\d+):\s?(\d+)\s+(\S+)/) { # Format like Mon, 13 Dec 2004 14:40:41 +0100 # or Mon, 13 Dec 2004 14:18:16 GMT # or Tue, 14 Sep 04 02:45:09 GMT local $tm = timegm($7, $6, $5, $2, &month_to_number($3), $4 < 50 ? $4+100 : $4 < 1000 ? $4 : $4-1900); local $tz = $8; if ($tz =~ /^(\-|\+)?\d+$/) { local $tz = int($tz); $tz = $tz/100 if ($tz >= 50 || $tz <= -50); $tm -= $tz*60*60; } return $tm; } elsif ($_[0] =~ /^\s*(\S+),\s+(\d+)\s+(\S+)\s+(\d+)\s+(\d+):\s?(\d+):\s?(\d+)/) { # Format like Mon, 13 Dec 2004 14:40:41 # No timezone, so assume local local $tm = timegm($7, $6, $5, $2, &month_to_number($3), $4 < 50 ? $4+100 : $4 < 1000 ? $4 : $4-1900); return $tm; } elsif ($_[0] =~ /^\s*(\S+)\s+(\S+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(\d+)/) { # Format like Tue Dec 7 12:58:52 2004 local $tm = timelocal($6, $5, $4, $3, &month_to_number($2), $7 < 50 ? $7+100 : $7 < 1000 ? $7 : $7-1900); return $tm; } elsif ($_[0] =~ /^(\d{4})\-(\d+)\-(\d+)\s+(\d+):(\d+)/) { # Format like 2004-12-07 12:53 local $tm = timelocal(0, $4, $4, $3, $2-1, $1 < 50 ? $1+100 : $1 < 1000 ? $1 : $1-1900); } elsif ($_[0] =~ /^(\d+)\s+(\S+)\s+(\d+)\s+(\d+):(\d+):(\d+)\s+(\S+)/) { # Format like 30 Jun 2005 21:01:01 -0000 local $tm = timegm($6, $5, $4, $1, &month_to_number($2), $3 < 50 ? $3+100 : $3 < 1000 ? $3 : $3-1900); local $tz = $7; if ($tz =~ /^(\-|\+)?\d+$/) { $tz = int($tz); $tz = $tz/100 if ($tz >= 50 || $tz <= -50); $tm -= $tz*60*60; } return $tm; } else { return undef; } }; open(STDERR, ">&OLDSTDERR"); close(OLDSTDERR); if ($@) { return undef; } return $rv; } # send_text_mail(from, to, cc, subject, body, [smtp-server]) # A convenience function for sending a email with just a text body sub send_text_mail { local ($from, $to, $cc, $subject, $body, $smtp) = @_; local $cs = &get_charset(); local $attach = $body =~ /[\177-\377]/ ? { 'headers' => [ [ 'Content-Type', 'text/plain; charset='.$cs ], [ 'Content-Transfer-Encoding', 'quoted-printable' ] ], 'data' => "ed_encode($body) } : { 'headers' => [ [ 'Content-type', 'text/plain' ] ], 'data' => &entities_to_ascii($body) }; local $mail = { 'headers' => [ [ 'From', $from ], [ 'To', $to ], [ 'Cc', $cc ], [ 'Subject', $subject ] ], 'attach' => [ $attach ] }; return &send_mail($mail, undef, 1, 0, $smtp); } 1; mailbox/folders-lib.pl0100664000567100000120000017613210570670313014747 0ustar jcameronwheel# folders-lib.pl # Functions for dealing with mail folders in various formats # 2007/02/19 kabe: # also skip Maildir/courierpop3dsizelist file from recurse list $pop3_port = 110; $imap_port = 143; $cache_directory = $user_module_config_directory || $module_config_directory; # mailbox_list_mails(start, end, &folder, [headersonly], [&error]) # Returns an array whose size is that of the entire folder, with messages # in the specified range filled in. sub mailbox_list_mails { if ($_[2]->{'type'} == 0) { # List a single mbox formatted file return &list_mails($_[2]->{'file'}, $_[0], $_[1]); } elsif ($_[2]->{'type'} == 1) { # List a qmail maildir local $md = $_[2]->{'file'}; return &list_maildir($md, $_[0], $_[1]); } elsif ($_[2]->{'type'} == 2) { # Get mail headers/body from a remote POP3 server # Login first local @rv = &pop3_login($_[2]); if ($rv[0] != 1) { # Failed to connect or login if ($_[4]) { @{$_[4]} = @rv; return (); } elsif ($rv[0] == 0) { &error($rv[1]); } else { &error(&text('save_elogin', $rv[1])); } } local $h = $rv[1]; local @uidl = &pop3_uidl($h); local %onserver = map { &safe_uidl($_), 1 } @uidl; # Work out what range we want local ($start, $end) = &compute_start_end($_[0], $_[1], scalar(@uidl)); local @rv = map { undef } @uidl; # For each message in the range, get the headers or body local ($i, $f, %cached, %sizeneed); local $cd = "$cache_directory/$_[2]->{'id'}.cache"; if (opendir(CACHE, $cd)) { while($f = readdir(CACHE)) { if ($f =~ /^(\S+)\.body$/) { $cached{$1} = 2; } elsif ($f =~ /^(\S+)\.headers$/) { $cached{$1} = 1; } } closedir(CACHE); } else { mkdir($cd, 0700); } for($i=$start; $i<=$end; $i++) { local $u = &safe_uidl($uidl[$i]); if ($cached{$u} == 2 || $cached{$u} == 1 && $_[3]) { # We already have everything that we need } elsif ($cached{$u} == 1 || !$_[3]) { # We need to get the entire mail &pop3_command($h, "retr ".($i+1)); open(CACHE, ">$cd/$u.body"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); print CACHE $_; } close(CACHE); unlink("$cd/$u.headers"); $cached{$u} = 2; } else { # We just need the headers &pop3_command($h, "top ".($i+1)." 0"); open(CACHE, ">$cd/$u.headers"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); print CACHE $_; } close(CACHE); $cached{$u} = 1; } local $mail = &read_mail_file($cached{$u} == 2 ? "$cd/$u.body" : "$cd/$u.headers"); if ($cached{$u} == 1) { if ($mail->{'body'} ne "") { $mail->{'size'} = int($mail->{'body'}); } else { $sizeneed{$i} = 1; } } $mail->{'uidl'} = $uidl[$i]; $mail->{'idx'} = $i; $rv[$i] = $mail; } # Get sizes for mails if needed if (%sizeneed) { &pop3_command($h, "list"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); if (/^(\d+)\s+(\d+)/ && $sizeneed{$1-1}) { # Add size to the mail cache $rv[$1-1]->{'size'} = $2; local $u = &safe_uidl($uidl[$1-1]); open(CACHE, ">>$cd/$u.headers"); print CACHE $2,"\n"; close(CACHE); } } } # Clean up any cached mails that no longer exist on the server foreach $f (keys %cached) { if (!$onserver{$f}) { unlink($cached{$f} == 1 ? "$cd/$f.headers" : "$cd/$f.body"); } } return @rv; } elsif ($_[2]->{'type'} == 3) { # List an MH directory local $md = $_[2]->{'file'}; return &list_mhdir($md, $_[0], $_[1]); } elsif ($_[2]->{'type'} == 4) { # Get headers and possibly bodies from an IMAP server # Login and select the specified mailbox local @rv = &imap_login($_[2]); if ($rv[0] != 1) { # Something went wrong if ($_[4]) { @{$_[4]} = @rv; return (); } elsif ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } } local $h = $rv[1]; local $count = $rv[2]; return () if (!$count); # Work out what range we want local ($start, $end) = &compute_start_end($_[0], $_[1], $count); local @mail = map { undef } (0 .. $count-1); # Get the headers or body of messages in the specified range local @rv; if ($_[3]) { # Just the headers @rv = &imap_command($h, sprintf "FETCH %d:%d (RFC822.SIZE RFC822.HEADER)", $start+1, $end+1); } else { # Whole messages @rv = &imap_command($h, sprintf "FETCH %d:%d RFC822", $start+1, $end+1); } # Parse the headers or whole messages that came back local $i; for($i=0; $i<@{$rv[1]}; $i++) { # Extract the actual mail part local $mail = &parse_imap_mail($rv[1]->[$i]); if ($mail) { $mail->{'idx'} = $start+$i; $mail[$start+$i] = $mail; } } return @mail; } elsif ($_[2]->{'type'} == 5) { # Just all of the constituent folders local @mail; # Work out exactly how big the total is local ($sf, %len, $count); foreach $sf (@{$_[2]->{'subfolders'}}) { $len{$sf} = &mailbox_folder_size($sf); $count += $len{$sf}; } # Work out what range we need local ($start, $end) = &compute_start_end($_[0], $_[1], $count); # Fetch the needed part of each sub-folder local $pos = 0; foreach $sf (@{$_[2]->{'subfolders'}}) { local ($sfstart, $sfend); $sfstart = $start - $pos; $sfend = $end - $pos; $sfstart = $sfstart < 0 ? 0 : $sfstart >= $len{$sf} ? $len{$sf}-1 : $sfstart; $sfend = $sfend < 0 ? 0 : $sfend >= $len{$sf} ? $len{$sf}-1 : $sfend; local @submail = &mailbox_list_mails($sfstart, $sfend, $sf, $_[3]); local $sm; foreach $sm (@submail) { if ($sm) { &push_index($sm, $sf, $sm->{'idx'}+$pos); } } push(@mail, @submail); $pos += $len{$sf}; } return @mail; } elsif ($_[2]->{'type'} == 6) { # A virtual folder, which just contains indexes into other folders local $mems = $folder->{'members'}; local ($start, $end) = &compute_start_end($_[0], $_[1], scalar(@$mems)); # Work out which folders we need, and how much local (%frange, %namemap); local $i; for($i=$start; $i<=$end; $i++) { local $sf = $mems->[$i]->[0]; local $sfn = &folder_name($sf); local $idx = $mems->[$i]->[1]; if ($frange{$sfn}) { $frange{$sfn}->[0] = $idx if ($idx < $frange{$sfn}->[0]); $frange{$sfn}->[1] = $idx if ($idx > $frange{$sfn}->[1]); } else { $frange{$sfn} = [ $idx, $idx ]; } $namemap{$sfn} = $sf; } # Get all the needed folders local %sfs; local $sfn; foreach $sfn (keys %frange) { local $sf = $namemap{$sfn}; local @submail = &mailbox_list_mails($frange{$sfn}->[0], $frange{$sfn}->[1], $sf, $_[3]); $sfs{$sfn} = \@submail; } # Construct the results local @mail = map { undef } (0 .. @$mems-1); local $need_save = 0; local @newmems = @$mems; for($i=$start; $i<=$end && $i<=@$mems; $i++) { local $sf = $mems->[$i]->[0]; local $sfn = &folder_name($sf); local $idx = $mems->[$i]->[1]; $mail[$i] = $sfs{$sfn}->[$idx]; if ($mems->[$i]->[2] && $mail[$i]->{'header'}->{'message-id'} ne $mems->[$i]->[2]) { # Argh .. index is wrong! Find message by ID local $real = &find_by_message_id($sf,$mems->[$i]->[2]); if ($real) { $mems->[$i]->[1] = $real->{'idx'}; $mail[$i] = $real; $need_save++; } else { # Doesn't exist! Lose from index.. @newmems = grep { $_ ne $mems->[$i] } @newmems; $need_save++; next; } } &push_index($mail[$i], $sf, $i); } if ($need_save) { $_[2]->{'members'} = \@newmems; &save_folder($_[2]); } return @mail; } } # mailbox_select_mails(&folder, &indexes, headersonly) # Returns only messages from a folder with indexes in the given array sub mailbox_select_mails { local ($folder, $indexes, $headersonly) = @_; if ($folder->{'type'} == 0) { # mbox folder return &select_mails($folder->{'file'}, $indexes, $headersonly); } elsif ($folder->{'type'} == 1) { # Maildir folder return &select_maildir($folder->{'file'}, $indexes, $headersonly); } elsif ($folder->{'type'} == 3) { # MH folder return &select_mhdir($folder->{'file'}, $indexes, $headersonly); } elsif ($folder->{'type'} == 2) { # POP folder # Login first local @rv = &pop3_login($folder); if ($rv[0] != 1) { # Failed to connect or login if ($_[4]) { @{$_[4]} = @rv; return (); } elsif ($rv[0] == 0) { &error($rv[1]); } else { &error(&text('save_elogin', $rv[1])); } } local $h = $rv[1]; local @uidl = &pop3_uidl($h); # Work out what we have cached local ($i, $f, %cached, %sizeneed); local @rv; local $cd = "$cache_directory/$_[2]->{'id'}.cache"; if (opendir(CACHE, $cd)) { while($f = readdir(CACHE)) { if ($f =~ /^(\S+)\.body$/) { $cached{$1} = 2; } elsif ($f =~ /^(\S+)\.headers$/) { $cached{$1} = 1; } } closedir(CACHE); } else { mkdir($cd, 0700); } # For each requested index, get the headers or body foreach my $i (@$indexes) { local $u = &safe_uidl($uidl[$i]); if ($cached{$u} == 2 || $cached{$u} == 1 && $headersonly) { # We already have everything that we need } elsif ($cached{$u} == 1 || !$headersonly) { # We need to get the entire mail &pop3_command($h, "retr ".($i+1)); open(CACHE, ">$cd/$u.body"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); print CACHE $_; } close(CACHE); unlink("$cd/$u.headers"); $cached{$u} = 2; } else { # We just need the headers &pop3_command($h, "top ".($i+1)." 0"); open(CACHE, ">$cd/$u.headers"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); print CACHE $_; } close(CACHE); $cached{$u} = 1; } local $mail = &read_mail_file($cached{$u} == 2 ? "$cd/$u.body" : "$cd/$u.headers"); if ($cached{$u} == 1) { if ($mail->{'body'} ne "") { $mail->{'size'} = int($mail->{'body'}); } else { $sizeneed{$i} = 1; } } $mail->{'uidl'} = $uidl[$i]; $mail->{'idx'} = $i; push(@rv, $mail); } # Get sizes for mails if needed if (%sizeneed) { &pop3_command($h, "list"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); if (/^(\d+)\s+(\d+)/ && $sizeneed{$1-1}) { # Find mail in results, and set its size local ($ns) = grep { $_->{'idx'} == $1-1 } @rv; next if (!$ns); $ns->{'size'} = $2; local $u = &safe_uidl($uidl[$1-1]); open(CACHE, ">>$cd/$u.headers"); print CACHE $2,"\n"; close(CACHE); } } } return @rv; } elsif ($folder->{'type'} == 4) { # IMAP folder # Login and select the specified mailbox local @irv = &imap_login($folder); if ($irv[0] != 1) { # Something went wrong if ($_[4]) { @{$_[4]} = @irv; return (); } elsif ($irv[0] == 0) { &error($irv[1]); } elsif ($irv[0] == 3) { &error(&text('save_emailbox', $irv[1])); } elsif ($irv[0] == 2) { &error(&text('save_elogin2', $irv[1])); } } local $h = $irv[1]; local $count = $irv[2]; return () if (!$count); # Fetch each mail by index local @rv; local $wanted = $headersonly ? "(RFC822.SIZE RFC822.HEADER)" : "RFC822"; local @idxrv = &imap_command($h, "FETCH ".join(",", map { $_+1 } @$indexes)." $wanted"); local $i = 0; foreach my $idxrv (@{idxrv->[1]}) { local $mail = &parse_imap_mail($idxrv); if ($mail) { $mail->{'idx'} = $indexes->[$i++]; push(@rv, $mail); } } return @rv; } elsif ($folder->{'type'} == 5) { # Composite folder .. need to convert each index to a position # in a sub-folder # XXX could be faster my $pos = 0; my @ranges; foreach my $sf (@{$folder->{'subfolders'}}) { my $len = &mailbox_folder_size($sf); push(@ranges, [ $pos, $pos+$len, $sf ]); $pos += $len; } local @rv; foreach my $i (@$indexes) { # Find out which sub-folder this index is in foreach my $r (@ranges) { if ($i >= $r->[0] && $i < $r->[1]) { # Found it! local ($mail) = &mailbox_select_mails( $r->[2], [ $i - $r->[0] ], $headersonly); &push_index($mail, $r->[2], $i); push(@rv, $mail); last; } } } return @rv; } elsif ($folder->{'type'} == 6) { # Virtual folder .. translate each index to sub-folder index # XXX could be faster local $mems = $folder->{'members'}; local @rv; local $need_save = 0; local @newmems = @$mems; # Work out how many different sub-folders we have local $sf; foreach my $i (@$indexes) { $sf = $mems->[$i]->[0]; $sfcount{&folder_name($sf)} = 1; } if ((keys %sfcount) == 1) { # Just one, so we can do one big select local (@sfindexes, @sfmems); foreach my $i (@$indexes) { push(@sfindexes, $mems->[$i]->[1]); push(@sfmems, $i); } local $i = 0; foreach my $mail (&mailbox_select_mails($sf, \@sfindexes, $headersonly)) { $mail->{'mem'} = $mems->[$sfmems[$i]]; &push_index($mail, $sf, $sfmems[$i]); push(@rv, $mail); $i++; } } elsif ((keys %sfcount) > 0) { # Several sub-folders, so we need to select from each foreach my $i (@$indexes) { local $sf = $mems->[$i]->[0]; local $idx = $mems->[$i]->[1]; local ($mail) = &mailbox_select_mails($sf, [ $idx ], $headersonly); $mail->{'mem'} = $mems->[$i]; &push_index($mail, $sf, $i); push(@rv, $mail); } } # Fix up any mistmatches between indexes and message IDs foreach $mail (@rv) { local $mem = $mail->{'mem'}; if ($mem->[2] && $mail->{'header'}->{'message-id'} ne $mem->[2]) { # Message ID mismatch! Fix it.. local $real = &find_by_message_id( $mail->{'subfolder'}, $mem->[2]); if ($real) { $mem->[1] = $real->{'idx'}; $mail = $real; $need_save++; } else { # Doesn't exist! Lose from index.. @newmems = grep { $_ ne $mem } @newmems; $need_save++; } } } if ($need_save) { $folder->{'members'} = \@newmems; &save_folder($folder); } return @rv; } } # compute_start_end(start, end, count) # Given start and end indexes (which may be negative or undef), returns the # real mail file indexes. sub compute_start_end { local ($start, $end, $count) = @_; if (!defined($start)) { return (0, $count-1); } elsif ($end < 0) { local $rstart = $count+$_[1]-1; local $rend = $count+$_[0]-1; $rstart = $rstart < 0 ? 0 : $rstart; return ($rstart, $rend); } else { local $rend = $_[1]; $rend = $count - 1 if ($rend >= $count); return ($start, $rend); } } # mailbox_list_mails_sorted(start, end, &folder, [headeronly], [&error], # [sort-field, sort-dir]) # Returns messages in a folder within the given range, but sorted by the # given field and condition. sub mailbox_list_mails_sorted { local ($start, $end, $folder, $headers, $error, $field, $dir) = @_; if (!$field) { # Default to current ordering ($field, $dir) = &get_sort_field($folder); } if (!$field || !$folder->{'sortable'}) { # No sorting .. just return newest first local @rv = reverse(&mailbox_list_mails( -$start, -$end-1, $folder, $headers, $error)); local $i = 0; foreach my $m (@rv) { $m->{'sortidx'} = $i++; } return @rv; } # Build the appropriate sort index, if missing local %index; &build_sort_index($folder, $field, \%index); # Get message indexes, sorted by the field my @sorter; while(my ($k, $v) = each %index) { if ($k =~ /^(\d+)_\Q$field\E$/) { push(@sorter, [ $1, lc($v) ]); } } if ($field eq "size" || $field eq "date" || $field eq "x-spam-status") { # Numeric sort @sorter = sort { my $s = $a->[1] <=> $b->[1]; $dir ? $s : -$s } @sorter; } else { # Alpha sort @sorter = sort { my $s = $a->[1] cmp $b->[1]; $dir ? $s : -$s } @sorter; } # Find those mails within the requested range ($start, $end) = &compute_start_end($start, $end, scalar(@sorter)); local @rv = map { undef } (0 .. scalar(@sorter)-1); local @wantindexes = map { $sorter[$_]->[0] } ($start .. $end); local @mails = &mailbox_select_mails($folder, \@wantindexes, $headers); for(my $i=0; $i<@mails; $i++) { $rv[$start+$i] = $mails[$i]; $mails[$i]->{'sortidx'} = $start+$i; } return @rv; } # set_sort_indexes(&folder, &mails, [sort-field, sort-dir]) # Given a list of messages, sets the sortidx field based on their indexes # that would be used if the folder was sorted sub set_sort_indexes { local ($folder, $mails, $field, $dir) = @_; if (!$field) { # Default to current ordering ($field, $dir) = &get_sort_field($folder); } if (!$field || !$folder->{'sortable'}) { # Sort index is the same as the normal index reversed my $count = &mailbox_folder_size($folder); foreach my $m (@$mails) { $m->{'sortidx'} = $count-$m->{'idx'}-1; } return; } # Build the appropriate sort index, if missing local %index; &build_sort_index($folder, $field, \%index); # Get message indexes, sorted by the field my @sorter; while(my ($k, $v) = each %index) { if ($k =~ /^(\d+)_\Q$field\E$/) { push(@sorter, [ $1, lc($v) ]); } } if ($field eq "size" || $field eq "date") { # Numeric sort @sorter = sort { my $s = $a->[1] <=> $b->[1]; $dir ? $s : -$s } @sorter; } else { # Alpha sort @sorter = sort { my $s = $a->[1] cmp $b->[1]; $dir ? $s : -$s } @sorter; } # Update sort indexes for mails in list my $i = 0; my %idxmap = map { $_->{'idx'}, $_ } @$mails; foreach my $s (@sorter) { my $m = $idxmap{$s->[0]}; if ($m) { $m->{'sortidx'} = $i; } $i++; } } # build_sort_index(&folder, field, &index) # Builds and/or loads the index for sorting a folder on some field. The # index uses the mail number as the key, and the field value as the value. sub build_sort_index { local ($folder, $field, $index) = @_; return 0 if (!$folder->{'sortable'}); local $ifile = &folder_sort_index_file($folder); &open_dbm_db($index, $ifile, 0600); if ($index->{'lastchange'} < $folder->{'lastchange'} || !$folder->{'lastchange'}) { # The mail file is newer than the index .. add messages not in the index # to it. local $realcount = $folder->{'type'} == 6 ? scalar(@{$folder->{'members'}}) : &mailbox_folder_size($folder); local $indexcount = int($index->{'mailcount'}); if ($realcount < $indexcount) { # Mail size has decreased! Need total rebuild $indexcount = 0; %$index = ( ); } local @mails = $realcount ? &mailbox_select_mails($folder, [ $indexcount .. $realcount-1 ], 1) : ( ); my @index_fields = ( "subject", "from", "to", "date", "size", "x-spam-status", "message-id" ); foreach my $mail (@mails) { foreach my $f (@index_fields) { if ($f eq "date") { # Convert date to Unix time $index->{$mail->{'idx'}."_date"} = &parse_mail_date($mail->{'header'}->{'date'}); } elsif ($f eq "size") { # Get mail size $index->{$mail->{'idx'}."_size"} = $mail->{'size'}; } elsif ($f eq "from" || $f eq "to") { # From: header .. convert to display version $index->{$mail->{'idx'}."_".$f} = &simplify_from($mail->{'header'}->{$f}); } elsif ($f eq "subject") { # Convert subject to display version $index->{$mail->{'idx'}."_".$f} = &simplify_subject($mail->{'header'}->{$f}); } elsif ($f eq "x-spam-status") { # Extract spam score $index->{$mail->{'idx'}."_".$f} = $mail->{'header'}->{$f} =~ /(hits|score)=([0-9\.]+)/ ? $2 : undef; } else { # Just a header $index->{$mail->{'idx'}."_".$f} = $mail->{'header'}->{$f}; } } } $index->{'lastchange'} = time(); $index->{'mailcount'} = $realcount; } return 1; } # delete_sort_index(&folder) # Trashes the sort index for a folder, to force a rebuild sub delete_sort_index { local ($folder) = @_; local $ifile = &folder_sort_index_file($folder); my %index; &open_dbm_db(\%index, $ifile, 0600); %index = ( ); } # folder_sort_index_file(&folder) # Returns the index file to use for some folder sub folder_sort_index_file { local ($folder) = @_; return &user_index_file(($folder->{'file'} || $folder->{'id'}).".sort"); } # find_by_message_id(&folder, id) # Finds a message by ID, and returns the mail object sub find_by_message_id { local ($folder, $mid) = @_; local %index; if (&build_sort_index($folder, undef, \%index)) { while(my ($k, $v) = each %index) { if ($k =~ /^(\d+)_message-id$/ && $v eq $mid) { # Got it! local ($rv) = &mailbox_select_mails($folder, [ $1 ]); &set_sort_indexes($folder, [ $rv ]); return $rv; } } } return undef; } # find_message_by_index(&mails, &folder, index, mid) # Finds a message by index (in a sorted folder) or message ID sub find_message_by_index { local ($mails, $folder, $idx, $mid) = @_; local $mail = $mails->[$idx]; if ($mid && (!$mail || $mail->{'header'}->{'message-id'} ne $mid)) { $mail = &find_by_message_id($folder, $mid); } return $mail; } # mailbox_search_mail(&fields, andmode, &folder, [&limit]) # Search a mailbox for multiple matching fields sub mailbox_search_mail { # For folders other than mbox and IMAP, build a sort index and use that for # the search, if it is simple enough (Subject, From and To only) local @idxfields = grep { $_->[0] eq 'from' || $_->[0] eq 'to' || $_->[0] eq 'subject' } @{$_[0]}; if ($_[2]->{'type'} != 0 && $_[2]->{'type'} != 4 && $_[2]->{'type'} != 5 && scalar(@idxfields) == scalar(@{$_[0]}) && @idxfields && &get_product_name() eq 'usermin') { local %index; &build_sort_index($_[2], undef, \%index); local @rv; # Work out which mail indexes match the requested headers local %idxmatches = map { ("$_->[0]/$_->[1]", [ ]) } @idxfields; while(my ($k, $v) = each %index) { local ($ki, $kf) = split(/_/, $k, 2); next if (!$kf || $ki eq ''); # Check all of the fields to see which ones match foreach my $if (@idxfields) { local $iff = $if->[0]; local ($neg) = ($iff =~ s/^\!//); next if ($kf ne $iff); if (!$neg && $v =~ /\Q$if->[1]\E/i || $neg && $v !~ /\Q$if->[1]\E/i) { push(@{$idxmatches{"$if->[0]/$if->[1]"}}, $ki); } } } local @matches; if ($_[1]) { # Find indexes in all arrays local %icount; foreach my $if (keys %idxmatches) { foreach my $i (@{$idxmatches{$if}}) { $icount{$i}++; } } foreach my $i (keys %icount) { } local $fif = $idxfields[0]; @matches = grep { $icount{$_} == scalar(@idxfields) } @{$idxmatches{"$fif->[0]/$fif->[1]"}}; } else { # Find indexes in any array foreach my $if (keys %idxmatches) { push(@matches, @{$idxmatches{$if}}); } @matches = &unique(@matches); } @matches = sort { $a <=> $b } @matches; # Select the actual mails return &mailbox_select_mails($_[2], \@matches, 0); } if ($_[2]->{'type'} == 0) { # Just search an mbox format file (which will use its own special # field-level index) return &advanced_search_mail($_[2]->{'file'}, $_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 1) { # Search a maildir directory local $md = $_[2]->{'file'}; return &advanced_search_maildir($md, $_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 2) { # Get all of the mail from the POP3 server and search it local ($min, $max); if ($_[3] && $_[3]->{'latest'}) { $min = -1; $max = -$_[3]->{'latest'}; } local @mails = &mailbox_list_mails($min, $max, $_[2], &indexof('body', &search_fields($_[0])) >= 0 ? 0 : 1); local @rv = grep { $_ && &mail_matches($_[0], $_[1], $_) } @mails; } elsif ($_[2]->{'type'} == 3) { # Search an MH directory local $md = $_[2]->{'file'}; return &advanced_search_mhdir($md, $_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 4) { # Use IMAP's remote search feature # XXX broken! local @rv = &imap_login($_[2]); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } local $h = $rv[1]; # Do the search to get back a list of matching numbers local @search; foreach $f (@{$_[0]}) { local $field = $f->[0]; local $neg = ($field =~ s/^\!//); local $what = $f->[1]; $what = "\"$what\"" if ($field ne "size"); $field = "LARGER" if ($field eq "size"); local $search = uc($field)." ".$what.""; $search = "NOT $search" if ($neg); push(@searches, $search); } local $searches; if (@searches == 1) { $searches = $searches[0]; } elsif ($_[1]) { $searches = join(" ", @searches); } else { $searches = $searches[$#searches]; for($i=$#searches-1; $i>=0; $i--) { $searches = "or $searches[$i] ($searches)"; } } @rv = &imap_command($h, "SEARCH $searches"); &error(&text('save_esearch', $rv[3])) if (!$rv[0]); # Get and parse those specific messages local ($srch) = grep { $_ =~ /^\*\s+SEARCH/i } @{$rv[1]}; local @ids = split(/\s+/, $srch); shift(@ids); shift(@ids); # lose * SEARCH local (@mail, $idx); foreach $idx (@ids) { local $realidx = $idx-1; if ($_[3] && $_[3]->{'latest'}) { # Don't get message if outside search range next if ($realidx < $rv[3]-$_[3]->{'latest'}); } local @rv = &imap_command($h, "FETCH $idx (RFC822.SIZE RFC822.HEADER)"); &error(&text('save_esearch', $rv[3])) if (!$rv[0]); local $mail = &parse_imap_mail($rv[1]->[0]); if ($mail) { $mail->{'idx'} = $realidx; push(@mail, $mail); } } return reverse(@mail); } elsif ($_[2]->{'type'} == 5) { # Search each sub-folder and combine the results - taking any count # limits into effect local $sf; local $pos = 0; local @mail; local (%start, %len); foreach $sf (@{$_[2]->{'subfolders'}}) { $len{$sf} = &mailbox_folder_size($sf); $start{$sf} = $pos; $pos += $len{$sf}; } local $limit = $_[3] ? { %{$_[3]} } : undef; foreach $sf (reverse(@{$_[2]->{'subfolders'}})) { local @submail = &mailbox_search_mail($_[0], $_[1], $sf, $limit); foreach $sm (@submail) { &push_index($sm, $sf, $sm->{'idx'}+$start{$sf}); } push(@mail, reverse(@submail)); if ($limit && $limit->{'latest'}) { # Adjust latest down by size of this folder $limit->{'latest'} -= $len{$sf}; last if ($limit->{'latest'} <= 0); } } return reverse(@mail); } elsif ($_[2]->{'type'} == 6) { # Just run a search on the sub-mails local @rv; local ($min, $max); if ($_[3] && $_[3]->{'latest'}) { $min = -1; $max = -$_[3]->{'latest'}; } local $mail; foreach $mail (&mailbox_list_mails($min, $max, $_[2])) { push(@rv, $mail) if ($mail && &mail_matches($_[0],$_[1],$mail)); } return @rv; } } # mailbox_delete_mail(&folder, mail, ...) # Delete multiple messages from some folder sub mailbox_delete_mail { return undef if (&is_readonly_mode()); local $f = shift(@_); if ($userconfig{'delete_mode'} == 1 && !$f->{'trash'} && !$f->{'spam'}) { # Copy to trash folder first local ($trash) = grep { $_->{'trash'} } &list_folders(); local $m; foreach $m (@_) { &write_mail_folder($m, $trash); } } if ($f->{'type'} == 0) { # Delete from mbox &delete_mail($f->{'file'}, @_); } elsif ($f->{'type'} == 1) { # Delete from Maildir &delete_maildir(@_); } elsif ($f->{'type'} == 2) { # Login and delete from the POP3 server local @rv = &pop3_login($f); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 2) { &error(&text('save_elogin', $rv[1])); } local $h = $rv[1]; local @uidl = &pop3_uidl($h); local $m; local $cd = "$cache_directory/$f->{'id'}.cache"; foreach $m (@_) { local $idx = &indexof($m->{'uidl'}, @uidl); if ($idx >= 0) { &pop3_command($h, "dele ".($idx+1)); local $u = &safe_uidl($m->{'uidl'}); unlink("$cd/$u.headers", "$cd/$u.body"); } } } elsif ($f->{'type'} == 3) { # Delete from MH dir &delete_mhdir(@_); } elsif ($f->{'type'} == 4) { # Delete from the IMAP server local @rv = &imap_login($f); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } local $h = $rv[1]; local $m; foreach $m (@_) { @rv = &imap_command($h, "STORE ".($m->{'idx'}+1). " +FLAGS (\\Deleted)"); &error(&text('save_edelete', $rv[3])) if (!$rv[0]); } @rv = &imap_command($h, "EXPUNGE"); &error(&text('save_edelete', $rv[3])) if (!$rv[0]); } elsif ($f->{'type'} == 5) { # Delete from underlying folder(s) local $sm; foreach $sm (@_) { local ($subfolder, $idx) = &pop_index($sm); &mailbox_delete_mail($subfolder, $sm); &push_index($sm, $subfolder, $idx); } } elsif ($f->{'type'} == 6) { # Delete from virtual folder local $sm; if ($f->{'delete'}) { # Delete the underlying messages, and remove from index local %folderdel; foreach $sm (sort { $b->{'subs'}->[0]->[1] <=> $a->{'subs'}->[0]->[1] } @_) { local ($subfolder, $idx) = &pop_index($sm); &mailbox_delete_mail($subfolder, $sm); &push_index($sm, $subfolder, $idx); # Adjust indexes in virtual list that refer to same # sub-folder, and have higher numbers for(my $i=0; $i<@{$f->{'members'}}; $i++) { my $m = $f->{'members'}->[$i]; my $subidx = $sm->{'subs'}->[0]->[1]; if ($m->[0] eq $sm->{'subfolder'}) { if ($m->[1] == $subidx) { splice(@{$f->{'members'}}, $i--, 1); } elsif ($m->[1] > $subidx) { $m->[1]--; } } } } } else { # Just take out of the virtual index foreach $sm (sort { $b->{'idx'} <=> $a->{'idx'} } @_) { splice(@{$f->{'members'}}, $sm->{'idx'}, 1); } } &save_folder($f, $f); } # Update folder index to remove indexes for deleted messages if ($f->{'sortable'}) { local %index; &build_sort_index($f, undef, \%index); # For each mail in the index, local @sorted = sort { $b->{'idx'} <=> $a->{'idx'} } @_; foreach my $k (sort { $a <=> $b } (keys %index)) { local ($ki, $kf) = split(/_/, $k, 2); # Skip indexes lower than the first being deleted next if ($ki < $sorted[$#sorted]->{'idx'}); foreach my $m (@sorted) { if ($ki == $m->{'idx'}) { # This is an index entry for a deleted email delete($index{$k}); last; } elsif ($ki > $m->{'idx'}) { # Mail is after one being deleted .. shift down $index{($ki-1)."_".$kf} = $index{$k}; delete($index{$k}); } } } $index{'mailcount'} -= scalar(@_); $index{'lastchange'} = time(); dbmclose(%index); } } # mailbox_empty_folder(&folder) # Remove the entire contents of a mail folder sub mailbox_empty_folder { return undef if (&is_readonly_mode()); local $f = $_[0]; if ($f->{'type'} == 0) { # mbox format mail file &empty_mail($f->{'file'}); } elsif ($f->{'type'} == 1) { # qmail format maildir &empty_maildir($f->{'file'}); } elsif ($f->{'type'} == 2) { # POP3 server .. delete all messages local @rv = &pop3_login($f); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 2) { &error(&text('save_elogin', $rv[1])); } local $h = $rv[1]; @rv = &pop3_command($h, "stat"); $rv[1] =~ /^(\d+)/ || return; local $count = $1; local $i; for($i=1; $i<=$count; $i++) { &pop3_command($h, "dele ".$i); } } elsif ($f->{'type'} == 3) { # mh format maildir &empty_mhdir($f->{'file'}); } elsif ($f->{'type'} == 4) { # IMAP server .. delete all messages local @rv = &imap_login($f); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } local $h = $rv[1]; local $count = $rv[2]; local $i; for($i=1; $i<=$count; $i++) { @rv = &imap_command($h, "STORE ".$i. " +FLAGS (\\Deleted)"); &error(&text('save_edelete', $rv[3])) if (!$rv[0]); } @rv = &imap_command($h, "EXPUNGE"); &error(&text('save_edelete', $rv[3])) if (!$rv[0]); } elsif ($f->{'type'} == 5) { # Empty each sub-folder local $sf; foreach $sf (@{$f->{'subfolders'}}) { &mailbox_empty_folder($sf); } } elsif ($f->{'type'} == 6) { # Just clear the virtual index $f->{'members'} = [ ]; &save_folder($f); } # Trash the folder index if ($folder->{'sortable'}) { &delete_sort_index($folder); } } # mailbox_copy_folder(&source, &dest) # Copy all messages from one folder to another. This is done in an optimized # way if possible. sub mailbox_copy_folder { local ($src, $dest) = @_; if ($src->{'type'} == 0 && $dest->{'type'} == 0) { # mbox to mbox .. just read and write the files &open_readfile(SOURCE, $src->{'file'}); &open_tempfile(DEST, ">>$dest->{'file'}"); while(read(SOURCE, $buf, 1024) > 0) { &print_tempfile(DEST, $buf); } &close_tempfile(DEST); close(SOURCE); } elsif ($src->{'type'} == 1 && $dest->{'type'} == 1) { # maildir to maildir .. just copy the files local @files = &get_maildir_files($src->{'file'}); foreach my $f (@files) { local $fn = $f; $fn =~ s/^.*\///; ©_source_dest($f, "$dest->{'file'}/$fn"); } } elsif ($src->{'type'} == 1 && $dest->{'type'} == 0) { # maildir to mbox .. append all the files local @files = &get_maildir_files($src->{'file'}); &open_tempfile(DEST, ">>$dest->{'file'}"); foreach my $f (@files) { &open_readfile(SOURCE, $f); while(read(SOURCE, $buf, 1024) > 0) { &print_tempfile(DEST, $buf); } close(SOURCE); } &close_tempfile(DEST); } else { # read in all mail and write out, in 100 message blocks local $max = &mailbox_folder_size($src); for(my $s=0; $s<$max; $s+=100) { local $e = $s+99; $e = $max-1 if ($e >= $max); local @mail = &mailbox_list_mails($s, $e, $src); local @want = @mail[$s..$e]; &mailbox_copy_mail($src, $dest, @want); } } } # mailbox_move_mail(&source, &dest, mail, ...) # Move mail from one folder to another sub mailbox_move_mail { return undef if (&is_readonly_mode()); local $src = shift(@_); local $dst = shift(@_); local $now = time(); local $hn = &get_system_hostname(); &create_folder_maildir($dst); if (($src->{'type'} == 1 || $src->{'type'} == 3) && $dst->{'type'} == 1) { # Can just move mail files local $dd = $dst->{'file'}; &create_folder_maildir($dst); foreach $m (@_) { rename($m->{'file'}, "$dd/cur/$now.$$.$hn"); $now++; } } elsif (($src->{'type'} == 1 || $src->{'type'} == 3) && $dst->{'type'} == 3) { # Can move and rename to MH numbering local $dd = $dst->{'file'}; local $num = &max_mhdir($dst->{'file'}) + 1; foreach $m (@_) { rename($m->{'file'}, "$dd/$num"); $num++; } } else { # Append to new folder file, or create in folder directory local $m; foreach $m (@_) { &write_mail_folder($m, $dst); } &mailbox_delete_mail($src, @_); } # Force re-generation of source folder index if ($src->{'sortable'}) { &delete_sort_index($src); # XXX could be faster } } # mailbox_move_folder(&source, &dest) # Moves all mail from one folder to another, possibly converting the type sub mailbox_move_folder { return undef if (&is_readonly_mode()); local ($src, $dst) = @_; if ($src->{'type'} == $dst->{'type'}) { # Can just move the file or dir system("rm -rf ".quotemeta($dst->{'file'})); system("mv ".quotemeta($src->{'file'})." ".quotemeta($dst->{'file'})); } else { # Need to copy one by one :( local @mails = &mailbox_list_mails(undef, undef, $src); &mailbox_move_mail($src, $dst, @mails); } # Delete source folder index if ($src->{'sortable'}) { &delete_sort_index($src); } } # mailbox_copy_mail(&source, &dest, mail, ...) # Copy mail from one folder to another sub mailbox_copy_mail { return undef if (&is_readonly_mode()); local $src = shift(@_); local $dst = shift(@_); local $now = time(); &create_folder_maildir($dst); local $m; if ($src->{'type'} == 6 && $dst->{'type'} == 6) { # Copying from one virtual folder to another, so just copy the # reference foreach $m (@_) { push(@{$dst->{'members'}}, [ $m->{'subfolder'}, $m->{'subid'}, $m->{'header'}->{'message-id'} ]); } } elsif ($dst->{'type'} == 6) { # Add this mail to the index of the virtual folder foreach $m (@_) { push(@{$dst->{'members'}}, [ $src, $m->{'idx'}, $m->{'header'}->{'message-id'} ]); } &save_folder($dst); } else { # Just write to destination folder foreach $m (@_) { &write_mail_folder($m, $dst); } } } # folder_type(file_or_dir) sub folder_type { return -d "$_[0]/cur" ? 1 : -d $_[0] ? 3 : 0; } # create_folder_maildir(&folder) # Ensure that a maildir folder has the needed new, cur and tmp directories sub create_folder_maildir { mkdir($folders_dir, 0700); if ($_[0]->{'type'} == 1) { local $id = $_[0]->{'file'}; mkdir("$id/cur", 0700); mkdir("$id/new", 0700); mkdir("$id/tmp", 0700); } } # write_mail_folder(&mail, &folder, textonly) # Writes some mail message to a folder sub write_mail_folder { return undef if (&is_readonly_mode()); &create_folder_maildir($_[1]); if ($_[1]->{'type'} == 1) { # Add to a maildir directory local $md = $_[1]->{'file'}; &write_maildir($_[0], $md, $_[2]); } elsif ($_[1]->{'type'} == 3) { # Create a new MH file local $num = &max_mhdir($_[1]->{'file'}) + 1; local $md = $_[1]->{'file'}; &send_mail($_[0], "$md/$num", $_[2], 1); } elsif ($_[1]->{'type'} == 0) { # Just append to the folder file &send_mail($_[0], $_[1]->{'file'}, $_[2], 1); } elsif ($_[1]->{'type'} == 4) { # Upload to the IMAP server local @rv = &imap_login($_[1]); if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } local $h = $rv[1]; # Create a temp file and use it to create the IMAP command local $temp = &transname(); &send_mail($_[0], $temp, $_[2], 1); open(TEMP, $temp); local $text; while() { $text .= $_; } close(TEMP); unlink($temp); @rv = &imap_command($h, sprintf "APPEND %s {%d}\r\n%s", $_[1]->{'mailbox'} || "INBOX", length($text), $text); &error(&text('save_eappend', $rv[3])) if (!$rv[0]); } elsif ($_[1]->{'type'} == 5) { # Just append to the last subfolder local @sf = @{$_[1]->{'subfolders'}}; &write_mail_folder($_[0], $sf[$#sf], $_[2]); } elsif ($_[1]->{'type'} == 6) { # Add mail to first sub-folder, and to virtual index &error("Cannot add mail to virtual folders"); } } # mailbox_modify_mail(&oldmail, &newmail, &folder, textonly) # Replaces some mail message with a new one sub mailbox_modify_mail { return undef if (&is_readonly_mode()); if ($_[2]->{'type'} == 1) { # Just replace the existing file &modify_maildir($_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 3) { # Just replace the existing file &modify_mhdir($_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 0) { # Modify the mail file &modify_mail($_[2]->{'file'}, $_[0], $_[1], $_[3]); } elsif ($_[2]->{'type'} == 5 || $_[2]->{'type'} == 6) { # Modify in the appropriate folder local ($oldsubfolder, $oldidx) = &pop_index($_[0]); local ($newsubfolder, $newidx) = &pop_index($_[1]); &mailbox_modify_mail($_[0], $_[1], $oldsubfolder, $_[3]); &push_index($_[0], $oldsubfolder, $oldidx); &push_index($_[1], $newsubfolder, $newidx); } else { &error("Cannot modify mail in this type of folder!"); } # Force re-generation of folder index if ($_[2]->{'sortable'}) { &delete_sort_index($_[2]); # XXX could be faster } } # mailbox_folder_size(&folder, [estimate]) # Returns the number of messages in some folder sub mailbox_folder_size { if ($_[0]->{'type'} == 0) { # A mbox formatted file return &count_mail($_[0]->{'file'}); } elsif ($_[0]->{'type'} == 1) { # A qmail maildir return &count_maildir($_[0]->{'file'}); } elsif ($_[0]->{'type'} == 2) { # A POP3 server local @rv = &pop3_login($_[0]); if ($rv[0] != 1) { if ($rv[0] == 0) { &error($rv[1]); } else { &error(&text('save_elogin', $rv[1])); } } local @st = &pop3_command($rv[1], "stat"); if ($st[0] == 1) { local ($count, $size) = split(/\s+/, $st[1]); return $count; } else { &error($st[1]); } } elsif ($_[0]->{'type'} == 3) { # An MH directory return &count_mhdir($_[0]->{'file'}); } elsif ($_[0]->{'type'} == 4) { # An IMAP server local @rv = &imap_login($_[0]); if ($rv[0] != 1) { if ($rv[0] == 0) { &error($rv[1]); } elsif ($rv[0] == 3) { &error(&text('save_emailbox', $rv[1])); } elsif ($rv[0] == 2) { &error(&text('save_elogin2', $rv[1])); } } return $rv[2]; } elsif ($_[0]->{'type'} == 5) { # A composite folder - the size is just that of the sub-folders my $rv = 0; foreach my $sf (@{$_[0]->{'subfolders'}}) { $rv += &mailbox_folder_size($sf); } return $rv; } elsif ($_[0]->{'type'} == 6 && !$_[1]) { # A virtual folder .. we need to exclude messages that no longer # exist in the parent folders my $rv = 0; foreach my $msg (@{$_[0]->{'members'}}) { if (!$msg->[2] || &find_by_message_id($msg->[0], $msg->[2])) { $rv++; } } return $rv; } elsif ($_[0]->{'type'} == 6 && $_[1]) { # A virtual folder .. but we can just use the last member count return scalar(@{$_[0]->{'members'}}); } } # pop3_login(&folder) # Logs into a POP3 server and returns a status (1=ok, 0=connect failed, # 2=login failed) and handle or error message sub pop3_login { local $h = $pop3_login_handle{$_[0]->{'id'}}; return (1, $h) if ($h); $h = time().++$pop3_login_count; local $error; &open_socket($_[0]->{'server'}, $_[0]->{'port'} || 110, $h, \$error); return (0, $error) if ($error); local $os = select($h); $| = 1; select($os); local @rv = &pop3_command($h); return (0, $rv[1]) if (!$rv[0]); @rv = &pop3_command($h, "user $_[0]->{'user'}"); return (2, $rv[1]) if (!$rv[0]); @rv = &pop3_command($h, "pass $_[0]->{'pass'}"); return (2, $rv[1]) if (!$rv[0]); return (1, $pop3_login_handle{$_[0]->{'id'}} = $h); } # pop3_command(handle, command) # Executes a command and returns the status (1 or 0 for OK or ERR) and message sub pop3_command { local ($h, $c) = @_; print $h "$c\r\n" if ($c); local $rv = <$h>; $rv =~ s/\r|\n//g; return !$rv ? ( 0, "Connection closed" ) : $rv =~ /^\+OK\s*(.*)/ ? ( 1, $1 ) : $rv =~ /^\-ERR\s*(.*)/ ? ( 0, $1 ) : ( 0, $rv ); } # pop3_logout(handle, doquit) sub pop3_logout { local @rv = $_[1] ? &pop3_command($_[0], "quit") : (1, undef); local $f; foreach $f (keys %pop3_login_handle) { delete($pop3_login_handle{$f}) if ($pop3_login_handle{$f} eq $_[0]); } close($_[0]); return @rv; } # pop3_uidl(handle) # Returns the uidl list sub pop3_uidl { local @rv; local $h = $_[0]; local @urv = &pop3_command($h, "uidl"); if (!$urv[0] && $urv[1] =~ /not\s+implemented/i) { # UIDL is not available?! Use numeric list instead &pop3_command($h, "list"); while(<$h>) { s/\r//g; last if ($_ eq ".\n"); if (/^(\d+)\s+(\d+)/) { push(@rv, "size$2"); } } } elsif (!$urv[0]) { &error("uidl failed! $urv[1]") if (!$urv[0]); } else { # Can get normal UIDL list while(<$h>) { s/\r//g; last if ($_ eq ".\n"); if (/^(\d+)\s+(\S+)/) { push(@rv, $2); } } } return @rv; } # pop3_logout_all() # Properly closes all open POP3 and IMAP sessions sub pop3_logout_all { local $f; foreach $f (keys %pop3_login_handle) { &pop3_logout($pop3_login_handle{$f}, 1); } foreach $f (keys %imap_login_handle) { &imap_logout($imap_login_handle{$f}, 1); } } # imap_login(&folder) # Logs into a POP3 server, selects a mailbox and returns a status # (1=ok, 0=connect failed, 2=login failed, 3=mailbox error), a handle or error # message, and the number of messages in the mailbox. sub imap_login { local $h = $imap_login_handle{$_[0]->{'id'}}; local @rv; if (!$h) { # Need to open socket $h = time().++$imap_login_count; local $error; &open_socket($_[0]->{'server'}, $_[0]->{'port'} || $imap_port, $h, \$error); return (0, $error) if ($error); local $os = select($h); $| = 1; select($os); # Login normally @rv = &imap_command($h); return (0, $rv[3]) if (!$rv[0]); @rv = &imap_command($h,"login \"$_[0]->{'user'}\" \"$_[0]->{'pass'}\""); return (2, $rv[3]) if (!$rv[0]); $imap_login_handle{$_[0]->{'id'}} = $h; } # Select the right folder (if one was given) @rv = &imap_command($h, "select ".($_[0]->{'mailbox'} || "INBOX")); return (3, $rv[3]) if (!$rv[0]); local $count = $rv[2] =~ /\*\s+(\d+)\s+EXISTS/i ? $1 : undef; return (1, $h, $count); } # imap_command(handle, command) # Executes an IMAP command and returns 1 for success or 0 for failure, and # a reference to an array of results (some of which may be multiline), and # all of the results joined together, and the stuff after OK/BAD sub imap_command { local ($h, $c) = @_; local @rv; # Send the command, and read lines until a non-* one is found local $id = $$."-".$imap_command_count++; if ($c) { print $h "$id $c\r\n"; } while(1) { local $l = <$h>; last if (!$l); if ($l =~ /^(\*|\+)/) { # Another response, and possibly the only one if no command # was sent. push(@rv, $l); last if (!$c); if ($l =~ /\{(\d+)\}\s*$/) { # Start of multi-line text .. read the specified size local $size = $1; local $got; local $err = "Error reading email"; while($got < $size) { local $buf; local $r = read($h, $buf, $size-$got); return (0, [ $err ], $err, $err) if ($r < 0); $rv[$#rv] .= $buf; $got += $r; } } } elsif ($l =~ /^(\S+)\s+/ && $1 eq $id) { # End of responses push(@rv, $l); last; } else { # Part of last response if (!@rv) { local $err = "Got unknown line $l"; return (0, [ $err ], $err, $err); } $rv[$#rv] .= $l; } } local $j = join("", @rv); local $lline = $rv[$#rv]; if ($lline =~ /^(\S+)\s+OK\s*(.*)/) { # Looks like the command worked return (1, \@rv, $j, $2); } else { # Command failed! return (0, \@rv, $j, $lline =~ /^(\S+)\s+(\S+)\s*(.*)/ ? $3 : undef); } } # imap_logout(handle, doquit) sub imap_logout { local @rv = $_[1] ? &imap_command($_[0], "close") : (1, undef); local $f; foreach $f (keys %imap_login_handle) { delete($imap_login_handle{$f}) if ($imap_login_handle{$f} eq $_[0]); } close($_[0]); return @rv; } # lock_folder(&folder) sub lock_folder { return if ($_[0]->{'remote'} || $_[0]->{'type'} == 5 || $_[0]->{'type'} == 6); local $f = $_[0]->{'file'} ? $_[0]->{'file'} : $_[0]->{'type'} == 0 ? &user_mail_file($remote_user) : $qmail_maildir; if (&lock_file($f)) { $_[0]->{'lock'} = $f; } else { # Cannot lock if in /var/mail local $ff = $f; $ff =~ s/\//_/g; $ff = "/tmp/$ff"; $_[0]->{'lock'} = $ff; &lock_file($ff); } # Also, check for a .filename.pop3 file if ($config{'pop_locks'} && $f =~ /^(\S+)\/([^\/]+)$/) { local $poplf = "$1/.$2.pop"; local $count = 0; while(-r $poplf) { sleep(1); if ($count++ > 5*60) { # Give up after 5 minutes &error(&text('epop3lock_tries', "$f", 5)); } } } } # unlock_folder(&folder) sub unlock_folder { return if ($_[0]->{'remote'}); &unlock_file($_[0]->{'lock'}); } # folder_file(&folder) # Returns the full path to the file or directory containing the folder's mail, # or undef if not appropriate (such as for POP3) sub folder_file { return $_[0]->{'remote'} ? undef : $_[0]->{'file'}; } # parse_imap_mail(response) # Parses a response from the IMAP server into a standard mail structure sub parse_imap_mail { # Extract the actual mail part local $mail = { }; local $realsize; local $imap = $_[0]; if ($imap =~ /RFC822.SIZE\s+(\d+)/) { $realsize = $1; } $imap =~ s/^\*\s+\d+\s+FETCH.*\{(\d+)\}\r?\n// || return undef; local $size = $1; local @lines = split(/\n/, substr($imap, 0, $size)); # Parse the headers local $lnum = 0; local @headers; while(1) { local $line = $lines[$lnum++]; $mail->{'size'} += length($line); $line =~ s/\r//g; last if ($line eq ''); if ($line =~ /^(\S+):\s*(.*)/) { push(@headers, [ $1, $2 ]); } elsif ($line =~ /^(\s+.*)/) { $headers[$#headers]->[1] .= $1 unless($#headers < 0); } } $mail->{'headers'} = \@headers; foreach $h (@headers) { $mail->{'header'}->{lc($h->[0])} = $h->[1]; } # Parse the body while($lnum < @lines) { $mail->{'size'} += length($lines[$lnum]+1); $mail->{'body'} .= $lines[$lnum]."\n"; $lnum++; } $mail->{'size'} = $realsize if ($realsize); return $mail; } # find_body(&mail, mode) # Returns the plain text body, html body and the one to use sub find_body { local ($a, $body, $textbody, $htmlbody); foreach $a (@{$_[0]->{'attach'}}) { if ($a->{'type'} =~ /^text\/plain/i || $a->{'type'} eq 'text') { $textbody = $a if (!$textbody && $a->{'data'} =~ /\S/); } elsif ($a->{'type'} =~ /^text\/html/i) { $htmlbody = $a if (!$htmlbody && $a->{'data'} =~ /\S/); } } if ($_[1] == 0) { $body = $textbody; } elsif ($_[1] == 1) { $body = $textbody || $htmlbody; } elsif ($_[1] == 2) { $body = $htmlbody || $textbody; } elsif ($_[1] == 3) { # Convert HTML to text if needed if ($textbody) { $body = $textbody; } else { local $text = &html_to_text($htmlbody->{'data'}); $body = $textbody = { 'data' => $text }; } } return ($textbody, $htmlbody, $body); } # safe_html(html) # Converts HTML to a form safe for inclusion in a page sub safe_html { local $html = $_[0]; local $bodystuff; if ($html =~ s/^[\000-\377]*]*)>//i) { $bodystuff = $1; } $html =~ s/<\/BODY>[\000-\377]*$//i; $html =~ s/]*>//i; $html = &filter_javascript($html); $html = &safe_urls($html); $bodystuff = &safe_html($bodystuff) if ($bodystuff); return wantarray ? ($html, $bodystuff) : $html; } # head_html(html) # Returns HTML in the section of a document sub head_html { local $html = $_[0]; return undef if ($html !~ /]*>/i || $html !~ /<\/HEAD[^>]*>/i); $html =~ s/^[\000-\377]*]*>//gi || &error("Failed to filter
".&html_escape($html)."
"); $html =~ s/<\/HEAD[^>]*>[\000-\377]*//gi || &error("Failed to filter
".&html_escape($html)."
"); $html =~ s/]*>//i; return &filter_javascript($html); } # safe_urls(html) # Replaces dangerous-looking URLs in HTML sub safe_urls { local $html = $_[0]; $html =~ s/((src|href|background)\s*=\s*)([^ '">]+)()/&safe_url($1, $3, $4)/gei; $html =~ s/((src|href|background)\s*=\s*')([^']+)(')/&safe_url($1, $3, $4)/gei; $html =~ s/((src|href|background)\s*=\s*")([^"]+)(")/&safe_url($1, $3, $4)/gei; return $html; } # safe_url(before, url, after) sub safe_url { local ($before, $url, $after) = @_; if ($url =~ /^#/) { # Relative link - harmless return $before.$url.$after; } elsif ($url =~ /^cid:/i) { # Definately safe (CIDs are harmless) return $before.$url.$after; } elsif ($url =~ /^(http:|https:)/) { # Possibly safe, unless refers to local local ($host, $port, $page, $ssl) = &parse_http_url($url); local ($hhost, $hport) = split(/:/, $ENV{'HTTP_HOST'}); $hport ||= $ENV{'SERVER_PORT'}; if ($host ne $hhost || $port != $hport || $ssl != (uc($ENV{'HTTPS'}) eq 'ON' ? 1 : 0)) { return $before.$url.$after; } else { return $before."_unsafe_link_".$after; } } elsif ($url =~ /^mailto:([a-z0-9\.\-\_\@]+)/i) { # A mailto link, which we can convert return $before."reply_mail.cgi?new=1&to=".&urlize($1).$after; } else { # Relative URL like foo.cgi or /foo.cgi or ../foo.cgi - unsafe! return $before."_unsafe_link_".$after; } } # safe_uidl(string) sub safe_uidl { local $rv = $_[0]; $rv =~ s/\/|\./_/g; return $rv; } # html_to_text(html) # Attempts to convert some HTML to text form sub html_to_text { local ($h2, $lynx); if (($h2 = &has_command("html2text")) || ($lynx = &has_command("lynx"))) { # Can use a commonly available external program local $temp = &transname().".html"; open(TEMP, ">$temp"); print TEMP $_[0]; close(TEMP); open(OUT, ($lynx ? "$lynx -dump $temp" : "$h2 $temp")." 2>/dev/null |"); while() { if ($lynx && $_ =~ /^\s*References\s*$/) { # Start of Lynx references output $gotrefs++; } elsif ($lynx && $gotrefs && $_ =~ /^\s*(\d+)\.\s+(http|https|ftp|mailto)/) { # Skip this URL reference line } else { $text .= $_; } } close(OUT); unlink($temp); return $text; } else { # Do conversion manually :( local $html = $_[0]; $html =~ s/\s+/ /g; $html =~ s/

/\n\n/gi; $html =~ s/
/\n/gi; $html =~ s/<[^>]+>//g; $html = &entities_to_ascii($html); return $html; } } # folder_select(&folders, selected-folder, name, [extra-options], [by-id]) # Returns HTML for selecting a folder sub folder_select { local $sel = "\n"; return $sel; } # folder_size(&folder, ...) # Sets the 'size' field of one or more folders, and returns the total sub folder_size { local ($f, $total); foreach $f (@_) { if ($f->{'type'} == 0) { # Single mail file - size is easy local @st = stat($f->{'file'}); $f->{'size'} = $st[7]; } elsif ($f->{'type'} == 1) { # Maildir folder size is that of all files in it $f->{'size'} = &recursive_disk_usage($f->{'file'}); } elsif ($f->{'type'} == 3) { # MH folder size is that of all mail files local $mf; $f->{'size'} = 0; opendir(MHDIR, $f->{'file'}); while($mf = readdir(MHDIR)) { next if ($mf eq "." || $mf eq ".."); local @st = stat("$f->{'file'}/$mf"); $f->{'size'} += $st[7]; } closedir(MHDIR); } elsif ($f->{'type'} == 4) { # Get size of IMAP folder local ($ok, $h, $count) = &imap_login($f); if ($ok) { $f->{'size'} = 0; local @rv = &imap_command($h, "FETCH 1:$count (RFC822.SIZE)"); foreach my $r (@{$rv[1]}) { if ($r =~ /RFC822.SIZE\s+(\d+)/) { $f->{'size'} += $1; } } } } elsif ($f->{'type'} == 5) { # Size of a combined folder is the size of all sub-folders return &folder_size(@{$f->{'subfolders'}}); } else { # Cannot get size of a POP3 folder $f->{'size'} = undef; } $total += $f->{'size'}; } return $total; } # parse_boolean(string) # Separates a string into a series of and/or separated values. Returns a # mode number (0=or, 1=and, 2=both) and a list of words sub parse_boolean { local @rv; local $str = $_[0]; local $mode = -1; local $lastandor = 0; while($str =~ /^\s*"([^"]*)"(.*)$/ || $str =~ /^\s*"([^"]*)"(.*)$/ || $str =~ /^\s*(\S+)(.*)$/) { local $word = $1; $str = $2; if (lc($word) eq "and") { if ($mode < 0) { $mode = 1; } elsif ($mode != 1) { $mode = 2; } $lastandor = 1; } elsif (lc($word) eq "or") { if ($mode < 0) { $mode = 0; } elsif ($mode != 0) { $mode = 2; } $lastandor = 1; } else { if (!$lastandor && @rv) { $rv[$#rv] .= " ".$word; } else { push(@rv, $word); } $lastandor = 0; } } $mode = 0 if ($mode < 0); return ($mode, \@rv); } # recursive_files(dir, treat-dirs-as-folders) sub recursive_files { local ($f, @rv); opendir(DIR, $_[0]); local @files = readdir(DIR); closedir(DIR); foreach $f (@files) { next if ($f eq "." || $f eq ".." || $f =~ /\.lock$/i || $f eq "cur" || $f eq "tmp" || $f eq "new" || $f =~ /^\.imap/i || $f eq ".customflags" || $f eq "dovecot-uidlist" || $f =~ /^courierimap/ || $f =~ /^courierpop3d/ || $f eq "maildirfolder" || $f eq "maildirsize" || $f eq "maildircache" || $f eq ".subscriptions" || $f eq ".usermin-maildircache" || $f =~ /^dovecot\.index/ || $f =~ /\.webmintmp(\.\d+)$/); local $p = "$_[0]/$f"; local $added = 0; if ($_[1] || !-d $p || -d "$p/cur") { push(@rv, $p); $added = 1; } # If this directory wasn't a folder (or it it in Maildir format), # search it too. if (-d "$p/cur" || !$added) { push(@rv, &recursive_files($p)); } } return @rv; } # editable_mail(&mail) # Returns 0 if some mail message should not be editable (ie. internal folder) sub editable_mail { return $_[0]->{'header'}->{'subject'} !~ /DON'T DELETE THIS MESSAGE.*FOLDER INTERNAL DATA/; } # fix_cids(html, &attachments, url-prefix, &cid-list) # Replaces HTML like img src=cid:XXX with img src=detach.cgi?whatever sub fix_cids { local $rv = $_[0]; $rv =~ s/(src="|href=")cid:([^"]+)(")/$1.&fix_cid($2,$_[1],$_[2],$_[3]).$3/gei; $rv =~ s/(src='|href=')cid:([^']+)(')/$1.&fix_cid($2,$_[1],$_[2],$_[3]).$3/gei; $rv =~ s/(src=|href=)cid:([^\s>]+)()/$1.&fix_cid($2,$_[1],$_[2],$_[3]).$3/gei; return $rv; } # fix_cid(cid, &attachments, url-prefix, &cid-list) sub fix_cid { local ($cont) = grep { $_->{'header'}->{'content-id'} eq $_[0] || $_->{'header'}->{'content-id'} eq "<$_[0]>" } @{$_[1]}; return "cid:$_[0]" if (!$cont); push(@{$_[3]}, $cont) if ($_[3]); return "$_[2]&attach=$cont->{'idx'}"; } # quoted_message(&mail, quote-mode, sig, 0=any,1=text,2=html) # Returns the quoted text, html-flag and body attachment sub quoted_message { local ($mail, $qu, $sig, $bodymode) = @_; local $mode = $bodymode == 1 ? 1 : $bodymode == 2 ? 2 : defined(%userconfig) ? $userconfig{'view_html'} : $config{'view_html'}; local ($plainbody, $htmlbody) = &find_body($mail, $mode); local ($quote, $html_edit, $body); local $cfg = defined(%userconfig) ? \%userconfig : \%config; local @writers = &split_addresses($mail->{'header'}->{'from'}); local $writer = &decode_mimewords($writers[0]->[1] || $writers[0]->[0]). " wrote .."; local $tm; if ($cfg->{'reply_date'} && ($tm = &parse_mail_date($_[0]->{'header'}->{'date'}))) { local $tmstr = &make_date($tm); $writer = "On $tmstr $writer"; } local $qm = defined(%userconfig) ? $userconfig{'html_quote'} : $config{'html_quote'}; if (($cfg->{'html_edit'} == 2 || $cfg->{'html_edit'} == 1 && $htmlbody) && $bodymode != 1) { # Create quoted body HTML if ($htmlbody) { $body = $htmlbody; $sig =~ s/\n/
\n/g; if ($qu && $qm == 0) { # Quoted HTML as cite $quote = "$writer\n". "

\n". &safe_html($htmlbody->{'data'}). "
".$sig."
\n"; } elsif ($qu && $qm == 1) { # Quoted HTML below line $quote = "
$sig
". "$writer
\n". &safe_html($htmlbody->{'data'}); } else { # Un-quoted HTML $quote = &safe_html($htmlbody->{'data'}). $sig."
\n"; } } elsif ($plainbody) { $body = $plainbody; local $pd = $plainbody->{'data'}; $pd =~ s/^\s+//g; $pd =~ s/\s+$//g; if ($qu && $qm == 0) { # Quoted plain text as HTML as cite $quote = "$writer\n". "
\n". "
$pd
". "
".$sig."
\n"; } elsif ($qu && $qm == 1) { # Quoted plain text as HTML below line $quote = "
$sig
". "$writer
\n". "
$pd

\n"; } else { # Un-quoted plain text as HTML $quote = "
$pd
". $sig."
\n"; } } $html_edit = 1; } else { # Create quoted body text if ($plainbody) { $body = $plainbody; $quote = $plainbody->{'data'}; } elsif ($htmlbody) { $body = $htmlbody; $quote = &html_to_text($htmlbody->{'data'}); } if ($quote && $qu) { $quote = join("", map { "> $_\n" } &wrap_lines($quote, 70)); } $quote = $writer."\n".$quote if ($quote && $qu); $quote .= "$sig\n" if ($sig); } return ($quote, $html_edit, $body); } # modification_time(&folder) # Returns the unix time on which this folder was last modified, or 0 if unknown sub modification_time { if ($_[0]->{'type'} == 0) { # Modification time of file local @st = stat($_[0]->{'file'}); return $st[9]; } elsif ($_[0]->{'type'} == 1) { # Greatest modification time of cur/new directory local @stcur = stat("$_[0]->{'file'}/cur"); local @stnew = stat("$_[0]->{'file'}/new"); return $stcur[9] > $stnew[9] ? $stcur[9] : $stnew[9]; } elsif ($_[0]->{'type'} == 2 || $_[0]->{'type'} == 4) { # Cannot know for POP3 or IMAP folders return 0; } elsif ($_[0]->{'type'} == 3) { # Modification time of MH folder local @st = stat($_[0]->{'file'}); return $st[9]; } else { # Huh? return 0; } } # requires_delivery_notification(&mail) sub requires_delivery_notification { return $_[0]->{'header'}->{'disposition-notification-to'} || $_[0]->{'header'}->{'read-reciept-to'}; } # send_delivery_notification(&mail, [from-addr], manual) # Send an email containing delivery status information sub send_delivery_notification { local ($mail, $from) = @_; $from ||= $mail->{'header'}->{'to'}; local $host = &get_display_hostname(); local $to = &requires_delivery_notification($mail); local $product = &get_product_name(); $product = ucfirst($product); local $version = &get_webmin_version(); local ($taddr) = &split_addresses($mail->{'header'}->{'to'}); local $disp = $manual ? "manual-action/MDN-sent-manually" : "automatic-action/MDN-sent-automatically"; local $dsn = <[0] Final-Recipient: rfc822;$taddr->[0] Original-Message-ID: $mail->{'header'}->{'message-id'} Disposition: $disp; displayed EOF local $dmail = { 'headers' => [ [ 'From' => $from ], [ 'To' => $to ], [ 'Subject' => 'Delivery notification' ], [ 'Content-type' => 'multipart/report; report-type=disposition-notification' ], [ 'Content-Transfer-Encoding' => '7bit' ] ], 'attach' => [ { 'headers' => [ [ 'Content-type' => 'text/plain' ] ], 'data' => "This is a delivery status notification for the email sent to:\n$mail->{'header'}->{'to'}\non the date:\n$mail->{'header'}->{'date'}\nwith the subject:\n$mail->{'header'}->{'subject'}\n" }, { 'headers' => [ [ 'Content-type' => 'message/disposition-notification' ], [ 'Content-Transfer-Encoding' => '7bit' ] ], 'data' => $dsn } ] }; eval { local $main::errors_must_die = 1; &send_mail($dmail); }; return $to; } # find_named_folder(name, &folders, [&cache]) # Finds a folder by ID, filename, server name or displayed name sub find_named_folder { local $rv; if ($_[2] && exists($_[2]->{$_[0]})) { # In cache $rv = $_[2]->{$_[0]}; } else { # Need to lookup ($rv) = grep { $_->{'id'} eq $_[0] } @{$_[1]} if (!$rv); ($rv) = grep { my $escfile = $_->{'file'}; $escfile =~ s/\s/_/g; $escfile eq $_[0] || $_->{'file'} eq $_[0] || $_->{'server'} eq $_[0] } @{$_[1]} if (!$rv); ($rv) = grep { my $escname = $_->{'name'}; $escname =~ s/\s/_/g; $escname eq $_[0] || $_->{'name'} eq $_[0] } @{$_[1]} if (!$rv); $_[2]->{$_[0]} = $rv if ($_[2]); } return $rv; } # folder_name(&folder) # Returns a unique identifier for a folder, based on it's filename or ID sub folder_name { my $rv = $_[0]->{'id'} || $_[0]->{'file'} || $_[0]->{'server'} || $_[0]->{'name'}; $rv =~ s/\s/_/g; return $rv; } # set_folder_lastmodified(&folders) # Sets the last-modified time and sortable flag on all given folders sub set_folder_lastmodified { local ($folders) = @_; foreach my $folder (@$folders) { if ($folder->{'type'} == 0 || $folder->{'type'} == 3) { # For an mbox or MH folder, the last modified date is just that # of the file or directory itself local @st = stat($folder->{'file'}); $folder->{'lastchange'} = $st[9]; $folder->{'sortable'} = 1; } elsif ($folder->{'type'} == 1) { # For a Maildir folder, the date is that of the newest # sub-directory (cur, tmp or new) $folder->{'lastchange'} = 0; foreach my $sf ("cur", "tmp", "new") { local @st = stat("$folder->{'file'}/$sf"); $folder->{'lastchange'} = $st[9] if ($st[9] > $folder->{'lastchange'}); } $folder->{'sortable'} = 1; } elsif ($folder->{'type'} == 6) { # For a virtual folder, the date is that of the newest # sub-folder, OR the folder file itself local @st = stat($folder->{'folderfile'}); $folder->{'lastchange'} = $st[9]; my %done; foreach my $m (@{$folder->{'members'}}) { if (!$done{$m->[0]}++) { &set_folder_lastmodified([ $m->[0] ]); $folder->{'lastchange'} = $m->[0]->{'lastchange'} if ($m->[0]->{'lastchange'} > $folder->{'lastchange'}); } } $folder->{'sortable'} = 1; } else { # For POP3 and IMAP folders, we don't know the last change $folder->{'lastchange'} = undef; $folder->{'sortable'} = 1; } } } # push_index(&mail, &folder, new-index) # Adjusts the index of some email to the new one, and stores the old # index and folder sub push_index { local ($mail, $folder, $newidx) = @_; unshift(@{$mail->{'subs'}}, [ $mail->{'subfolder'}, $mail->{'idx'} ]); $mail->{'subidx'} = $mail->{'subs'}->[0]->[1]; $mail->{'subfolder'} = $folder; $mail->{'idx'} = $newidx; } # pop_index(&mail) # Removes the stored sub-folder and index, and restores the original index. # Returns the original sub-folder and index. sub pop_index { local ($mail) = @_; local $old = shift(@{$mail->{'subs'}}); $mail->{'subidx'} = $mail->{'subs'}->[0]->[1]; local @rv = ( $mail->{'subfolder'}, $mail->{'idx'} ); $mail->{'subfolder'} = $old->[0]; $mail->{'idx'} = $old->[1]; return @rv; } # mail_preview(&mail) # Returns a short text preview of a message body sub mail_preview { local ($textbody, $htmlbody, $body) = &find_body($_[0], 0); local $data = $body->{'data'}; $data =~ s/\r?\n/ /g; $data = substr($data, 0, 100); if ($data =~ /\S/) { return $data; } return undef; } # open_dbm_db(&hash, file, mode) # Attempts to open a DBM, first using SDBM_File, and then NDBM_File sub open_dbm_db { local ($hash, $file, $mode) = @_; eval "use SDBM_File"; dbmopen(%$hash, $file, $mode); eval { $hash->{'1111111111'} = 'foo bar'; delete($hash->{'1111111111'}); }; if ($@) { dbmclose(%$hash); eval "use NDBM_File"; dbmopen(%$hash, $file, $mode); } } 1; mailbox/xinha/0040775000567100000120000000000010572116127013310 5ustar jcameronwheelmailbox/xinha/plugins/0040775000567100000120000000000010572115224014766 5ustar jcameronwheelmailbox/xinha/plugins/FormOperations/0040775000567100000120000000000010567167542017753 5ustar jcameronwheelmailbox/xinha/plugins/FormOperations/panel.html0100664000567100000120000001434110565363044021731 0ustar jcameronwheel

Form Editor

Form
Text Field
Name:    
Type: Initial Value:
Width: Max Length:
Check Box/Radio Button
Name: Value:
Type: Selected by default:

Tip: Check boxes (select many) and radio buttons (select one only) that are choices for a single question should have the same Name to work correctly.

Button
Name: Label:
Type:    
Multi-line Field
Name: Initial Value
Width:
Height:
Drop-Down/List Field
Name: Options
May Choose Multiple:


Width:
Height:
mailbox/xinha/plugins/FormOperations/img/0040775000567100000120000000000010567167542020527 5ustar jcameronwheelmailbox/xinha/plugins/FormOperations/img/buttons.gif0100664000567100000120000000363310565364774022722 0ustar jcameronwheelGIF89a6{{{333MMMfff! ,` dihlp,4*/ͷϷ ÞDFe N{$*κ*0dg#>k_j|kGt["}w4v|^zuX_aM5e1SKya9Us2~}Dm¿ijiɼLHLǻ֟،ƷOʥȜҹZЗѤ[PGÇ#JHŋ3jqŽ CIdɏ&S\ɲeD.F@Mɳ恘@> (]tH OI ~ H@mv`` | {#kT 3 `UY6]mXa mR%$؜@g gn >a5b]tg&` @c $@r~MszXfΞ?CMX M my߆M 0k6[-!B \Ce \Eэ`0a7ybv ^yy6"`,8_} @po,:0@+64" ZԠ:p`aPfjF%~Ue_ Un#}1 0p_G?4ЧYGHPyJdgOBiyWzA٥nvnXU j} PPT4Pt6 Bbyik4BtdJ&4h("x!5^}ަ󩹦Xgt>;[`Kl]~)>0^աg->@@Î*U:6$`pAE DᗔTa VM L(Vo!'  gX`@ D@17z'yUl@xD)NSFekoX@A]4y>4le|6(.?B^wnP *duh$ li8\zɥi0yWEs^V ًZlU\*DU$4OPQH$H=MS?=LoF䟯/YWBo _~\F H@x poLs :p2h'"Td aH@(j&L! r ga s!!;h. zsE%2PJt"!EU `j l"8q"'9үvȾ=Q}~B':A1!H%"$HN򎒼dI=2}$(ًD,4)QUR<_ cIY6d˼A L̐QU"-T/Mi\`)Ztf&)bS49bu]+)/i,"<$1 id=\""+id+"\""); _1.insertHTML(_3); var el=_1._doc.getElementById(id); el.setAttribute("id",""); _1.selectNodeContents(el); _1.updateToolbar(); return el; } var _6=_1.imgURL("buttons.gif","FormOperations"); FormOperations.prototype._lc=function(_7){ return Xinha._lc(_7,"FormOperations"); }; this.editor.config.btnList.insert_form=[this._lc("Insert a Form."),[_6,0,0],false,function(){ var _8=null; if(_1.config.FormOperations.default_form_html){ _8=pasteAndSelect(_1.config.FormOperations.default_form_html); }else{ _8=pasteAndSelect("
 
"); } if(_1.config.FormOperations.default_form_action&&!_8.action){ _8.action=_1.config.FormOperations.default_form_action; } }]; this.editor.config.btnList.insert_text_field=[this._lc("Insert a text, password or hidden field."),[_6,1,0],false,function(){ pasteAndSelect(""); },"form"]; this.editor.config.btnList.insert_textarea_field=[this._lc("Insert a multi-line text field."),[_6,2,0],false,function(){ pasteAndSelect(""); },"form"]; this.editor.config.btnList.insert_select_field=[this._lc("Insert a select field."),[_6,3,0],false,function(){ pasteAndSelect(""); },"form"]; this.editor.config.btnList.insert_cb_field=[this._lc("Insert a check box."),[_6,4,0],false,function(){ pasteAndSelect(""); },"form"]; this.editor.config.btnList.insert_rb_field=[this._lc("Insert a radio button."),[_6,5,0],false,function(){ pasteAndSelect(""); },"form"]; this.editor.config.btnList.insert_button=[this._lc("Insert a submit/reset button."),[_6,6,0],false,function(){ pasteAndSelect(""); },"form"]; } FormOperations.prototype.onGenerate=function(){ if(Xinha.is_gecko){ var _9=this.editor; var _a=this.editor._doc; Xinha._addEvents(_a,["mousemove"],function(_b){ return _9._editorEvent(_b); }); } }; FormOperations.prototype._preparePanel=function(){ var fo=this; if(this.html==false){ Xinha._getback(_editor_url+"plugins/FormOperations/panel.html",function(_d){ fo.html=_d; fo._preparePanel(); }); return false; } if(typeof Xinha.Dialog=="undefined"){ Xinha._loadback(_editor_url+"modules/Dialogs/inline-dialog.js",function(){ fo._preparePanel(); }); return false; } if(typeof Xinha.PanelDialog=="undefined"){ Xinha._loadback(_editor_url+"modules/Dialogs/panel-dialog.js",function(){ fo._preparePanel(); }); return false; } this.panel=new Xinha.PanelDialog(this.editor,"bottom",this.html,"FormOperations"); this.panel.hide(); this.ready=true; }; FormOperations.prototype.onUpdateToolbar=function(){ if(!this.ready){ return true; } var _e=this.editor._activeElement(this.editor._getSelection()); if(_e!=null){ if(_e==this.activeElement){ return true; } var _f=_e.tagName.toLowerCase(); this.hideAll(); if(_f==="form"){ if(this.editor.config.FormOperations.allow_edit_form){ this.showForm(_e); }else{ this.panel.hide(); this.activeElement=null; this.panel.hide(); return true; } }else{ if(this.editor.config.FormOperations.allow_edit_form&&typeof _e.form!="undefined"&&_e.form){ this.showForm(_e.form); } switch(_f){ case "form": this.showForm(_e); break; case "input": switch(_e.getAttribute("type").toLowerCase()){ case "text": case "password": case "hidden": this.showText(_e); break; case "radio": case "checkbox": this.showCbRd(_e); break; case "submit": case "reset": case "button": this.showButton(_e); break; } break; case "textarea": this.showTextarea(_e); break; case "select": this.showSelect(_e); break; default: this.activeElement=null; this.panel.hide(); return true; } } this.panel.show(); this.activeElement=_e; return true; }else{ this.activeElement=null; this.panel.hide(); return true; } }; FormOperations.prototype.hideAll=function(){ this.panel.getElementById("fs_form").style.display="none"; this.panel.getElementById("fs_text").style.display="none"; this.panel.getElementById("fs_textarea").style.display="none"; this.panel.getElementById("fs_select").style.display="none"; this.panel.getElementById("fs_cbrd").style.display="none"; this.panel.getElementById("fs_button").style.display="none"; }; FormOperations.prototype.showForm=function(_10){ this.panel.getElementById("fs_form").style.display=""; var _11={"action":_10.action,"method":_10.method.toUpperCase()}; this.panel.setValues(_11); var f=_10; this.panel.getElementById("action").onkeyup=function(){ f.action=this.value; }; this.panel.getElementById("method").onchange=function(){ f.method=this.options[this.selectedIndex].value; }; }; FormOperations.prototype.showText=function(_13){ this.panel.getElementById("fs_text").style.display=""; var _14={"text_name":this.deformatName(_13,_13.name),"text_value":_13.value,"text_type":_13.type.toLowerCase(),"text_width":_13.style.width?parseFloat(_13.style.width.replace(/[^0-9.]/,"")):"","text_width_units":_13.style.width?_13.style.width.replace(/[0-9.]/,"").toLowerCase():"ex","text_maxlength":_13.maxlength?_13.maxlength:""}; this.panel.setValues(_14); var i=_13; var fo=this; this.panel.getElementById("text_name").onkeyup=function(){ i.name=fo.formatName(i,this.value); }; this.panel.getElementById("text_value").onkeyup=function(){ i.value=this.value; }; this.panel.getElementById("text_type").onchange=function(){ if(!Xinha.is_ie){ i.type=this.options[this.selectedIndex].value; }else{ var _17=fo.editor._doc.createElement("div"); if(!/type=/.test(i.outerHTML)){ _17.innerHTML=i.outerHTML.replace(/0?_2f.size:1),"select_height_units":_2f.style.height?_2f.style.height.replace(/[0-9.]/,"").toLowerCase():"items"}; this.panel.setValues(_30); var i=_2f; var fo=this; this.panel.getElementById("select_name").onkeyup=function(){ i.name=fo.formatName(i,this.value); }; this.panel.getElementById("select_multiple").onclick=function(){ i.multiple=this.checked; }; var w=this.panel.getElementById("select_width"); var wu=this.panel.getElementById("select_width_units"); this.panel.getElementById("select_width").onkeyup=this.panel.getElementById("select_width_units").onchange=function(){ if(!w.value||isNaN(parseFloat(w.value))){ i.style.width=""; } i.style.width=parseFloat(w.value)+wu.options[wu.selectedIndex].value; }; var h=this.panel.getElementById("select_height"); var hu=this.panel.getElementById("select_height_units"); this.panel.getElementById("select_height").onkeyup=this.panel.getElementById("select_height_units").onchange=function(){ if(!h.value||isNaN(parseFloat(h.value))){ i.style.height=""; return; } if(hu.selectedIndex==0){ i.style.height=""; i.size=parseInt(h.value); }else{ i.style.height=parseFloat(h.value)+hu.options[hu.selectedIndex].value; } }; var _37=this.panel.getElementById("select_options"); this.arrayToOpts(this.optsToArray(_2f.options),_37.options); this.panel.getElementById("add_option").onclick=function(){ var txt=prompt(Xinha._lc("Enter the name for new option.","FormOperations")); if(txt==null){ return; } var _39=new Option(txt); var _3a=fo.optsToArray(_37.options); if(_37.selectedIndex>=0){ _3a.splice(_37.selectedIndex,0,_39); }else{ _3a.push(_39); } fo.arrayToOpts(_3a,_2f.options); fo.arrayToOpts(_3a,_37.options); }; this.panel.getElementById("del_option").onclick=function(){ var _3b=fo.optsToArray(_37.options); var _3c=[]; for(var i=0;i<_3b.length;i++){ if(_3b[i].selected){ continue; } _3c.push(_3b[i]); } fo.arrayToOpts(_3c,_2f.options); fo.arrayToOpts(_3c,_37.options); }; this.panel.getElementById("up_option").onclick=function(){ if(!(_37.selectedIndex>0)){ return; } var _3e=fo.optsToArray(_37.options); var _3f=_3e.splice(_37.selectedIndex,1).pop(); _3e.splice(_37.selectedIndex-1,0,_3f); fo.arrayToOpts(_3e,_2f.options); fo.arrayToOpts(_3e,_37.options); }; this.panel.getElementById("down_option").onclick=function(){ if(_37.selectedIndex==_37.options.length-1){ return; } var _40=fo.optsToArray(_37.options); var _41=_40.splice(_37.selectedIndex,1).pop(); _40.splice(_37.selectedIndex+1,0,_41); fo.arrayToOpts(_40,_2f.options); fo.arrayToOpts(_40,_37.options); }; this.panel.getElementById("select_options").onchange=function(){ fo.arrayToOpts(fo.optsToArray(_37.options),_2f.options); }; }; FormOperations.prototype.optsToArray=function(o){ var a=[]; for(var i=0;i=0;i--){ o[i]=null; } for(var i=0;i'; $emailfield = NULL; $subjectfield = NULL; $namefield = NULL; $when_done_goto = isset($_REQUEST['when_done_goto']) ? $_REQUEST['when_done_goto'] : NULL; if($_POST) { unset($_POST['when_done_goto']); $message = ''; $longestKey = 0; foreach(array_keys($_POST) as $key) { $longestKey = max(strlen($key), $longestKey); } $longestKey = max($longestKey, 15); foreach($_POST as $Var => $Val) { if(!$emailfield) { if(preg_match('/(^|\s)e-?mail(\s|$)/i', $Var)) { $emailfield = $Var; } } if(!$subjectfield) { if(preg_match('/(^|\s)subject(\s|$)/i', $Var)) { $subjectfield = $Var; } } if(!$namefield) { if(preg_match('/(^|\s)from(\s|$)/i', $Var) || preg_match('/(^|\s)name(\s|$)/i', $Var)) { $namefield = $Var; } } if(is_array($Val)) { $Val = implode(', ', $Val); } $message .= $Var; if(strlen($Var) < $longestKey) { $message .= str_repeat('.', $longestKey - strlen($Var)); } $message .= ':'; if((64 - max(strlen($Var), $longestKey) < strlen($Val)) || preg_match('/\r?\n/', $Val)) { $message .= "\r\n "; $message .= preg_replace('/\r?\n/', "\r\n ", wordwrap($Val, 62)); } else { $message .= ' ' . $Val . "\r\n"; } } $subject = $subjectfield ? $_POST[$subjectfield] : 'Enquiry'; $email = $emailfield ? $_POST[$emailfield] : $send_to; if($namefield) { $from = $_POST[$namefield] . ' <' . $email . '>'; } else { $from = 'Website Visitor' . ' <' . $email . '>'; } mail($send_to, $subject, $message, "From: $from"); if(!$when_done_goto) { ?> Message Sent

Message Sent

mailbox/xinha/plugins/FormOperations/default_form.html0100664000567100000120000000202310565363044023273 0ustar jcameronwheel
Contact Us
Your name:
Your email:
Message Subject:
What are your hobbies? Marbles
Conkers
Jacks
Message Body:
  
mailbox/xinha/plugins/FormOperations/lang/0040775000567100000120000000000010567167542020674 5ustar jcameronwheelmailbox/xinha/plugins/FormOperations/lang/ja.js0100664000567100000120000000442310565363044021615 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Insert a Form.": "フォームを挿入", "Insert a text, password or hidden field.": "テキスト/パスワード/非表示フィールドを挿入", "Insert a multi-line text field.": "複数行テキストフィールドを挿入", "Insert a select field.": "選択リストを挿入", "Insert a check box.": "チェックボックスを挿入", "Insert a radio button.": "ラジオボタンを挿入", "Insert a submit/reset button.": "送信/リセットボタンを挿入", "Form Editor": "フォームエディタ", "Form": "フォーム", "Text Field": "テキストフィールド", "Check Box/Radio Button": "チェックボックス/ラジオボタン", "Button": "ボタン", "Multi-line Field": "複数行フィールド", "Drop-Down/List Field": "ドロップダウン/リスト", "Action:": "アクション:", "Method:": "メソッド:", "Name:": "名前:", "Type:": "タイプ:", "Label:": "ラベル:", "Value:": "値:", "Width:": "幅:", "Height:": "高さ:", "Initial Value:": "初期値:", "Initial Value": "初期値", "Max Length:": "最大長:", "Selected by default:": "デフォルト選択:", "May Choose Multiple:": "複数選択可能:", "Options": "選択肢", "POST": "POST", "GET": "GET", 'Check Box ("Select Many")': "チェックボックス(複数選択)", 'Radio Button ("Select One")': "ラジオボタン(単一選択)", "normal text field": "標準テキストフィールド", "password": "パスワード", "hidden field": "非表示フィールド", "Submit": "送信", "Reset": "リセット", "chars": "文字", "px": "ピクセル", "%": "%", "items": "項目", "Add": "追加", "Delete": "削除", "Move Up": "上へ", "Move Down": "下へ", "Tip: Check boxes (select many) and radio buttons (select one only) that are choices for a single question should have the same Name to work correctly.": "ヒント:ひとつの質問について、複数のチェックボックス(複数選択)、または複数のラジオボタン(単一選択)がある場合、すべてに同じ名前を付けなければ正しく機能しません。", "Enter the name for new option.": "新しい選択肢に名前をつけてください。" }; mailbox/xinha/plugins/FormOperations/lang/de.js0100664000567100000120000000111710565363044021610 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Insert a Form.": "Email Form einfügen.", "Insert a text, password or hidden field.": "Passwort oder unsichtbares Feld einfügen.", "Insert a multi-line text field.": "Mehrzeiliges Textfeld einfügen.", "Insert a select field.": "Auswahlfeld einfügen.", "Insert a check box.": "Häkchenfeld einfügen", "Insert a radio button.": "Optionsfeld einfügen", "Insert a submit/reset button.": "Senden/zurücksetzen Schaltfläche" }; mailbox/xinha/plugins/FormOperations/lang/nb.js0100664000567100000120000000104110565363044021613 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert a Form.": "Sett inn skjema", "Insert a text, password or hidden field.": "Sett inn formfelt", "Insert a multi-line text field.": "Sett inn tekstfelt med flere linjer", "Insert a select field.": "Sett inn valgboks/ netrekksboks", "Insert a check box.": "Hakeboks", "Insert a radio button.": "Sett inn en radioknapp", "Insert a submit/reset button.": "Sett inn send-/nullstill knapp for skjemaet" };mailbox/xinha/plugins/FormOperations/lang/fr.js0100664000567100000120000000104210565363044021624 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Insert a Form.": "Insérer un formulaire", "Insert a text, password or hidden field.": "Insérer un texte, un mot de passe ou un champ invisible", "Insert a multi-line text field.": "Insérer un champ texte à lignes multiples", "Insert a select field.": "Insérer une boite de sélection", "Insert a check box.": "Insérer une case à cocher", "Insert a radio button.": "Insérer un bouton radio", "Insert a submit/reset button.": "Insérer un bouton de soumission/annulation" };mailbox/xinha/plugins/FormOperations/README0100664000567100000120000000271710565363044020630 0ustar jcameronwheelForm Operations Plugin ---------------------- Usage: 1. Follow the standard procedure for loading a plugin. 2. You may configure the plugin by setting the following configuration variables, or leave them as the defaults. xinha_config.FormOperations.multiple_field_format = 'php' this will cause checkbox and "multiple" select fields to have [] appended to thier field names silently = 'unmodified' field names will not be silently modified xinha_config.FormOperations.allow_edit_form = true the user will be able to edit the action, and method of forms = false neither action, nor method is editable xinha_config.FormOperations.default_form_action = 'whatever you want' the default form action to set when inserting a form. The standard one is a php file in the Form Operations directory which will email the form post to enquiries@ xinha_config.FormOperations.default_form_html = '
whatever you want here
' the default html to insert when inserting a form. The standard one is a basic contact form. If you would like to specify an external file which contains the HTML for the form, you may do so via = HTMLArea._geturlcontent('http://absolute/url/to/file.html') see default_form.html for a suitable example, pay attention to the form tag. mailbox/xinha/plugins/InsertPagebreak/0040775000567100000120000000000010567167543020053 5ustar jcameronwheelmailbox/xinha/plugins/InsertPagebreak/img/0040775000567100000120000000000010567167543020627 5ustar jcameronwheelmailbox/xinha/plugins/InsertPagebreak/img/pagebreak.gif0100664000567100000120000000015110565364776023236 0ustar jcameronwheelGIF89a!,@.(+ 9B;@T"Gx[2Ym '); };mailbox/xinha/plugins/PasteText/0040775000567100000120000000000010567167545016730 5ustar jcameronwheelmailbox/xinha/plugins/PasteText/popups/0040775000567100000120000000000010567167545020256 5ustar jcameronwheelmailbox/xinha/plugins/PasteText/popups/paste_text.html0100664000567100000120000000331710565362762023321 0ustar jcameronwheel Paste Text
Paste as Plain Text
mailbox/xinha/plugins/PasteText/img/0040775000567100000120000000000010567167545017504 5ustar jcameronwheelmailbox/xinha/plugins/PasteText/img/ed_paste_text.gif0100664000567100000120000000057510565364774023030 0ustar jcameronwheelGIF89a@0 ̙pp`P0`P@pPhbqИmדp`ph@k)f@P`p̙0@@P̠ !,@P &,La" d ( a"墨c2p58"zBPiCi` %$!  IBͣA;mailbox/xinha/plugins/PasteText/lang/0040775000567100000120000000000010567167545017651 5ustar jcameronwheelmailbox/xinha/plugins/PasteText/lang/ja.js0100664000567100000120000000017610565362762020576 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Paste as Plain Text": "プレーンテキストとして貼り付け" };mailbox/xinha/plugins/PasteText/lang/de.js0100664000567100000120000000016410565362762020571 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 { "Paste as Plain Text": "unformatierten Text einfügen" }; mailbox/xinha/plugins/PasteText/lang/pl.js0100664000567100000120000000031410565362762020611 0ustar jcameronwheel// I18N constants // LANG: "pl", ENCODING: UTF-8 // translated: Krzysztof Kotowicz, http://www.eskot.krakow.pl/portfolio/, koto@webworkers.pl { "Paste as Plain Text": "Wklej jako czysty tekst" }; mailbox/xinha/plugins/PasteText/lang/nb.js0100664000567100000120000000026210565362762020577 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Paste as Plain Text": "Lim inn som ren tekst" }; mailbox/xinha/plugins/PasteText/lang/fr.js0100664000567100000120000000014710565362762020611 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Paste as Plain Text": "Copier comme texte pur" };mailbox/xinha/plugins/PasteText/paste-text.js0100664000567100000120000000404310565362762021356 0ustar jcameronwheel// Paste Plain Text plugin for Xinha // Distributed under the same terms as Xinha itself. // This notice MUST stay intact for use (see license.txt). function PasteText(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton({ id : "pastetext", tooltip : this._lc("Paste as Plain Text"), image : editor.imgURL("ed_paste_text.gif", "PasteText"), textMode : false, action : function(editor) { self.buttonPress(editor); } }); cfg.addToolbarElement("pastetext", ["paste", "killword"], 1); } PasteText._pluginInfo = { name : "PasteText", version : "1.2", developer : "Michael Harris", developer_url : "http://www.jonesadvisorygroup.com", c_owner : "Jones Advisory Group", sponsor : "Jones International University", sponsor_url : "http://www.jonesinternational.edu", license : "htmlArea" }; PasteText.prototype._lc = function(string) { return Xinha._lc(string, 'PasteText'); }; Xinha.Config.prototype.PasteText = { showParagraphOption : true, newParagraphDefault :true } PasteText.prototype.buttonPress = function(editor) { var editor = this.editor; var outparam = editor.config.PasteText; var action = function( ret ) { var html = ret.text; var insertParagraphs = ret.insertParagraphs; html = html.replace(//g, ">"); if ( ret.insertParagraphs) { html = html.replace(/\t/g,"    "); html = html.replace(/\n/g,"

"); html="

" + html + "

"; if (Xinha.is_ie) { editor.insertHTML(html); } else { editor.execCommand("inserthtml",false,html); } } else { html = html.replace(/\n/g,"
"); editor.insertHTML(html); } } Dialog( _editor_url+ "plugins/PasteText/popups/paste_text.html", action, outparam); };mailbox/xinha/plugins/SetId/0040775000567100000120000000000010567167545016017 5ustar jcameronwheelmailbox/xinha/plugins/SetId/popups/0040775000567100000120000000000010567167545017345 5ustar jcameronwheelmailbox/xinha/plugins/SetId/popups/set_id.html0100664000567100000120000000263410565363020021464 0ustar jcameronwheel Set Id/Name
Set ID/Name
ID/Name:
mailbox/xinha/plugins/SetId/img/0040775000567100000120000000000010567167545016573 5ustar jcameronwheelmailbox/xinha/plugins/SetId/img/set-id.gif0100664000567100000120000000056210565364776020452 0ustar jcameronwheelGIF89av .IEV5$#@"; } }else{ className="none"; if(tagName=="all"){ cssName=HTMLArea._lc("Default","DynamicCSS"); }else{ cssName="<"+HTMLArea._lc("Default","DynamicCSS")+">"; } } _c[tagName][className]=cssName; DynamicCSS.cssLength++; } } }else{ if(_b[rule].styleSheet){ _c=DynamicCSS.applyCSSRule(_b[rule].styleSheet.cssRules,_c); } } } return _c; }; DynamicCSS._pluginInfo={name:"DynamicCSS",version:"1.5.2",developer:"Holger Hees",developer_url:"http://www.systemconcept.de/",c_owner:"Holger Hees",sponsor:"System Concept GmbH",sponsor_url:"http://www.systemconcept.de/",license:"htmlArea"}; DynamicCSS.prototype._lc=function(_d){ return HTMLArea._lc(_d,"DynamicCSS"); }; DynamicCSS.prototype.onSelect=function(_e,_f){ var _10=_e._toolbarObjects[_f.id]; var _11=_10.element.selectedIndex; var _12=_10.element.value; var _13=_e.getParentElement(); if(_12!="none"){ _13.className=_12; DynamicCSS.lastClass=_12; }else{ if(HTMLArea.is_gecko){ _13.removeAttribute("class"); }else{ _13.removeAttribute("className"); } } _e.updateToolbar(); }; DynamicCSS.prototype.reparseTimer=function(_14,obj,_16){ if(DynamicCSS.parseCount<9){ setTimeout(function(){ DynamicCSS.cssLength=0; DynamicCSS.parseStyleSheet(_14); if(DynamicCSS.cssOldLength!=DynamicCSS.cssLength){ DynamicCSS.cssOldLength=DynamicCSS.cssLength; DynamicCSS.lastClass=null; _16.updateValue(_14,obj); } _16.reparseTimer(_14,obj,_16); },DynamicCSS.parseCount*1000); DynamicCSS.parseCount=DynamicCSS.parseCount*2; } }; DynamicCSS.prototype.updateValue=function(_17,obj){ cssArray=DynamicCSS.cssArray; if(!cssArray){ DynamicCSS.cssLength=0; DynamicCSS.parseStyleSheet(_17); cssArray=DynamicCSS.cssArray; DynamicCSS.cssOldLength=DynamicCSS.cssLength; DynamicCSS.parseCount=1; this.reparseTimer(_17,obj,this); } var _19=_17.getParentElement(); var _1a=_19.tagName.toLowerCase(); var _1b=_19.className; if(this.lastTag!=_1a||this.lastClass!=_1b){ this.lastTag=_1a; this.lastClass=_1b; var _1c=_17._toolbarObjects[obj.id].element; while(_1c.length>0){ _1c.options[_1c.length-1]=null; } _1c.options[0]=new Option(this._lc("Default"),"none"); if(cssArray){ if(_1a!="body"||_17.config.fullPage){ if(cssArray[_1a]){ for(cssClass in cssArray[_1a]){ if(typeof cssArray[_1a][cssClass]!="string"){ continue; } if(cssClass=="none"){ _1c.options[0]=new Option(cssArray[_1a][cssClass],cssClass); }else{ _1c.options[_1c.length]=new Option(cssArray[_1a][cssClass],cssClass); } } } if(cssArray["all"]){ for(cssClass in cssArray["all"]){ if(typeof cssArray["all"][cssClass]!="string"){ continue; } _1c.options[_1c.length]=new Option(cssArray["all"][cssClass],cssClass); } } }else{ if(cssArray[_1a]&&cssArray[_1a]["none"]){ _1c.options[0]=new Option(cssArray[_1a]["none"],"none"); } } } _1c.selectedIndex=0; if(typeof _1b!="undefined"&&/\S/.test(_1b)){ var _1d=_1c.options; for(var i=_1d.length;--i>=0;){ var _1f=_1d[i]; if(_1b==_1f.value){ _1c.selectedIndex=i; break; } } if(_1c.selectedIndex==0){ _1c.options[_1c.length]=new Option(this._lc("Undefined"),_1b); _1c.selectedIndex=_1c.length-1; } } if(_1c.length>1){ _1c.disabled=false; }else{ _1c.disabled=true; } } }; mailbox/xinha/plugins/DynamicCSS/lang/0040775000567100000120000000000010567167541017661 5ustar jcameronwheelmailbox/xinha/plugins/DynamicCSS/lang/ja.js0100664000567100000120000000024010565363014020571 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Default": "なし", "Undefined": "未定義", "Choose stylesheet": "スタイルシートの選択" };mailbox/xinha/plugins/DynamicCSS/lang/nl.js0100664000567100000120000000060510565363014020615 0ustar jcameronwheel// I18N constants // LANG: "nl", ENCODING: UTF-8 // Sponsored by http://www.systemconcept.de // Author: Holger Hees, // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Default": "Default", "Undefined": "Ungedefinieerd", "Choose stylesheet": "Kies stylesheet" }; mailbox/xinha/plugins/DynamicCSS/lang/de.js0100664000567100000120000000064410565363014020577 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Sponsored by http://www.systemconcept.de // Author: Holger Hees, // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Default": "Standard", "Undefined": "Nicht definiert", "Choose stylesheet": "Wählen Sie einen StyleSheet aus" }; mailbox/xinha/plugins/DynamicCSS/lang/nb.js0100664000567100000120000000033410565363014020602 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Default": "Standard", "Undefined": "Udefinert", "Choose stylesheet": "Velg stilsett" };mailbox/xinha/plugins/DynamicCSS/lang/fr.js0100664000567100000120000000024310565363014020611 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Default": "Défaut", "Undefined": "Non défini", "Choose stylesheet": "Choisir feuille de style" };mailbox/xinha/plugins/Filter/0040775000567100000120000000000010567167542016231 5ustar jcameronwheelmailbox/xinha/plugins/Filter/filters/0040775000567100000120000000000010567167542017701 5ustar jcameronwheelmailbox/xinha/plugins/Filter/filters/paragraph.js0100664000567100000120000000023410565362766022203 0ustar jcameronwheelParagraph = function(html) { html = html.replace(/<\s*p[^>]*>/gi, ''); html = html.replace(/<\/\s*p\s*>/gi, ''); html = html.trim(); return html; };mailbox/xinha/plugins/Filter/filters/word.js0100664000567100000120000000406610565362766021220 0ustar jcameronwheelWord = function(html) { // Remove HTML comments html = html.replace(//gi, "" ); html = html.replace(//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: html = html.replace(/<\/?\w+:[^>]*>/gi, "") ; // Replace the   html = html.replace(/ /, " " ); // Transform


to
//html = html.replace(/<\s*p[^>]*>\s*<\s*br\s*\/>\s*<\/\s*p[^>]*>/gi, "
"); html = html.replace(/<\s*p[^>]*><\s*br\s*\/?>\s*<\/\s*p[^>]*>/gi, "
"); // Remove

html = html.replace(/<\s*p[^>]*>/gi, ""); // Replace

with
html = html.replace(/<\/\s*p[^>]*>/gi, "
"); // Remove any
at the end html = html.replace(/(\s*
\s*)*$/, ""); html = html.trim(); return html; };mailbox/xinha/plugins/Filter/img/0040775000567100000120000000000010567167542017005 5ustar jcameronwheelmailbox/xinha/plugins/Filter/img/ed_filter.gif0100664000567100000120000000051610565364774021434 0ustar jcameronwheelGIF89aƄX29/ξܸVΔ[̙9Aԡ;kۙ5*1κDS0ϸ&3zJ'+[[fǸ'Ǜrϡd o$'s?ݸN[RyK?!,@k@pH$DD"H /A hҰ{nBZm #<XN:| eR";$R / QC(#[ +D'%836a.9RA;mailbox/xinha/plugins/Filter/lang/0040775000567100000120000000000010567167542017152 5ustar jcameronwheelmailbox/xinha/plugins/Filter/lang/ja.js0100664000567100000120000000012410565362764020075 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Filter": "フィルター" }; mailbox/xinha/plugins/Filter/filter.js0100664000567100000120000000425310565362766020060 0ustar jcameronwheel// Filter plugin for HTMLArea // Implementation by Udo Schmal & Schaffrath NeueMedien // Original Author - Udo Schmal // // (c) Udo Schmal & Schaffrath NeueMedien 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function Filter(editor) { this.editor = editor; var cfg = editor.config; var self = this; // register the toolbar buttons provided by this plugin cfg.registerButton({ id: "filter", tooltip : this._lc("Filter"), image : editor.imgURL("ed_filter.gif", "Filter"), textMode : false, action : function(editor) { self.buttonPress(editor); } }); if (!cfg.Filters) cfg.Filters = ["Paragraph","Word"]; for (var i = 0; i < editor.config.Filters.length; i++) { self.add(editor.config.Filters[i]); } cfg.addToolbarElement("filter", "removeformat", 1); } Filter._pluginInfo = { name : "Filter", version : "1.0", developer : "Udo Schmal (gocher)", developer_url : "", sponsor : "L.N.Schaffrath NeueMedien", sponsor_url : "http://www.schaffrath-neuemedien.de/", c_owner : "Udo Schmal & Schaffrath-NeueMedien", license : "htmlArea" }; Filter.prototype.add = function(filterName) { if(eval('typeof ' + filterName) == 'undefined') { var filter = _editor_url + "plugins/filter/filters/" + filterName + ".js"; var head = document.getElementsByTagName("head")[0]; var evt = HTMLArea.is_ie ? "onreadystatechange" : "onload"; var script = document.createElement("script"); script.type = "text/javascript"; script.src = filter; script[evt] = function() { if(HTMLArea.is_ie && !/loaded|complete/.test(window.event.srcElement.readyState)) return; } head.appendChild(script); //document.write(""); } }; Filter.prototype._lc = function(string) { return HTMLArea._lc(string, 'Filter'); }; Filter.prototype.buttonPress = function(editor) { var html = editor.getInnerHTML(); for (var i = 0; i < editor.config.Filters.length; i++) { html = eval(editor.config.Filters[i])(html); } editor.setHTML(html); };mailbox/xinha/plugins/InsertPicture/0040775000567100000120000000000010567167543017605 5ustar jcameronwheelmailbox/xinha/plugins/InsertPicture/viewpicture.html0100664000567100000120000000246310565363014023030 0ustar jcameronwheel Preview mailbox/xinha/plugins/InsertPicture/demo_pictures/0040775000567100000120000000000010567167543022447 5ustar jcameronwheelmailbox/xinha/plugins/InsertPicture/demo_pictures/bikerpeep.jpg0100664000567100000120000006604410565363014025113 0ustar jcameronwheelJFIF``Photoshop 3.08BIM``8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM (pTPn@ JFIFHHAdobed            Tp"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?|iq׀PH[1Ę!h[:o8{MAҍyB$R }/hڂC[wC{be ?>ktBu`?/_ۉ@nnB\ ӐG*DFDXQ#IHKT |K{IMw0'V9$ڢU`h{PoV 8L g8;$1_6{׍ʃËd\w{bfA: Ol6<5֍\u:9}BVޅN/Uߢރ]sA $U\j:+\CqlKo!Ⱥ?Sc?=7w2sZزYmml-j9UkpK]Y*"W5G~f{-^ָuϩmg֨rcmp'n$zs1 dqQޭ",_f I9*LX o'hk`}';_o+smx`dcϴ}G:Ouv?socXvU[I"#+[! }]1 H{|x?0+x%Yhyeb9q!ܨpL,|< [x Zgg']g4źn0gKM !}%G۲ m'kNg*>Zcʥ\g|xqu \!E%9qN|ӑu'W-)Mm-nX/D\/Ŵmդ~swUKC.cArogҫkIWt3ttKqyTO*wdo~funͪܖ_k=';oͮʱs+_VV\NlvKD0kS>zߤ\SΡ{v㸳ЇꩊgAr/ضS$|][a xuvM8?{CѰ][}nDbeGOia0Vyh3ȫv7cu𞚛zk]V8P޶F״zw˽e?G$9Ж ?|D"d%!z{1zf5#&pߥ2c,O>9>ꍩs d͗}&9ޗGk̘n8B эel{6{?~ln7 &lw2ezc1:Fﮟ73cVd9ᦇ!A+sQ6swf1Od1?',ŮkG ML~I c'GƯ/_cc޻[ǭٸm}mE]Q-O"2܉&,(}_? kb\cIuVc߸cÛU,[%^_}ҹl>_8>jaf\gE?,Xw :WO/;hqf9{L܏_Z^>Skqhr ^ 55co/萑ؠQv[F-U<[v2zoud_~E+v[ mZ}u1c=?Oԫ,s32ٟV0k"};ɻ;87l=̓n,}=W8l\~I@Eu[m B{l[cXz}Nݍ'%x,']=Vu[v9c}G@4};!2sA}&tmYWO鏥/ߜo1XoEݾ3*_c/nXXWuPCkgdSrS3=vsgXT3!O_̐<^ίi9lۯ-#cl&72GnN~CAs ooc}`MinUnwf5GnMQ3zq?8 8"bc.]5c*71.;l&td{x/?nNw֬cӎ5ʹQ@h>u qXO}R2KDTD6كΜUhWuV% kMypź^_ѻ}=]o,s/6X~MJJvQ8K`9L'cIzkCZ6cFV6ƣ}?y]3kǚ`1S8;So;.GF9l юj`x&4bi=$GWW.mݕ;k#]qNH:`#ཉ,SuN\G)iK -o8ChuyP:$kgm߆檕}P tNn^}fU;?R(醿vU瓤g[?4{>H~^ O߉<;c/ I5/:"AV*}ގ?oj 8BIM XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@q     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?؈a)U@@PP,n1:XYֺn0T̒YFYVk??zuY$2!.WQJb~}Dǯ}6MF]ZkYٮ|jyu}9RL$(j $}#Y6( I_|LӴY2ItG邮ttQBm<v :LӐ[5R-asc}ֺd4yޑÒ\9%(\du_F=.$-iQU/-YFPC׽16:ښhZffE,4 DDrk=@&H_?@oI'bcAIhhꢺP"ʑU@ ,n>_UE [5yt\9jU+qQ<{AxLQZq@ptnZK@[+48ɯFo; N8zY; 9vr]~242=)n*LCADZHU$@hd͹\Z ȸ 0*\ՌSSkCP+Q Z)Y,4,2)  #qb*,T skqQVud19gQPs wEs1=t )GXF+Y˦X{'NNgDWB!-%X egsk1:uͬKn8~5T#&FYơ^- KiAkx>5I2I&z IQ*VYq04FIEZJuG:lX<pڞ9]" Z _pzRWSx^:N2$G45b1-\{xo%UL (A0 &H?MՑ+(CnÅ:ߟt4Ok`Pe%t7G`').Ho@, z>Qt<©CSGU&rHX;rmUK*xbbSGw;s6y wnc@v騥sҴ6?I2}vQƟħ_Jcu`;K?S!oenm `h+A@1ׯ>c!$kihicgk:EW nI\XGhNEWNdeTzgB)+{~>Hj>@bmXqKP7*VZzHb$C <q4U=;ImR=H/+ RjzEQ8OX**6[^ڮʷ Hq94kO DR҉m 30j# pӧU]28Pi@($9V]]tQE"ફd*訡#3-<:E H#@[p],1ЂzW#s%E)Oz+C6GhV7~3fvmܤ%̧y.饪mnj9 @Y2%i֯v|+Y!3zMn,B8*djx(+ktcJtoAo$S) 0 Rd(ԅ[_@asM^t4706K1H.TboqڒXti׫WGT.״dSb4PFLpM+FURM h*7E@"[[=4-;SG3M82˜#ibJ[y,A$W@#HU\ 'R_s0,Į)v,jao=h+TW?ZUa?_P \cv<i'(e8tT/@eRaQJ Z7T@ :#5}-s7sq,ߥBj'9@3[K6-!]Õݵ؝xZݯKOG$kb('AQu_<S^i\8}d>Db*wۀNO?D}+:ϰ6 Fwe`zvHW 5*g嫗_ÒG>. SEI,v.oYej"s 57R@EZ'4g[cm*h7G=U S/W9V:P'Z f?r)B s1~ayD+N jE+s:1]IR$:3:>"67e[{k૶v|]!KYI ,n;'apHki;ւMq55 ¼I.K(94PS(%( mŅi<Ϡcjxt+vDf3$i8t?rwnܶN|ug6ĕk_uMMN7n9$/PuvFu%ysk RgTd yu(@VКG0ZNURjxS65Ie%-M68 Ԉ)ڨ h¤a.|@"ȋV6!kP>!SE$~mJؠxLXeRVx4҈α3S2FJ3k k\sãTfY&HFe$CQ֙z8SrEzxj)i&ds*HZz6:=SqHfZ2ۉwCf&d yܘ֊ɰYY(57ϧ(A54Pҹi$U`ۛW2%h>W>S]ٻ沦g ۋ?Qz@Ԕ42L}=4vTiUQ t(5:kOO1#`O$kV7w܉I{ ltgvI vn Sc11IM$Xע/ A.jBMeo1tXҭ:2Ej)G#7n-q{3amZ [b[ UWVN %*OYYQ4p!kdX!L抵5F51:!V,QOΙQY;*>[G,div][QU*+;y&*8UW_ GǣGW\ח^ICA6$--Qb'qfgsbVťb5Vf:O)N+O=o> 3=q1 ;NZE-/zj]7G}ükJM.BVT!9F 2*5vɲ0儖{ ]42EX09G|^X>;vII7뚓絶&­SCnm[Fx H:0 OF/{Gj.6Тm`gЗ#CNyjSW,QFĤ/smsor4$Z.D`&z7x"V> MG4W4@C>BBS:%UZy:JWi*24QEـ iRT!Y$lR k2:%V`j'VPDmWM+TQ=V"Xi1Pc!iM]U9iI(V~9Y_}I“{>XVfqq00 P y31Ռ?!fA᎖V<&ZA^}z.Uӫ_FiOʔ^*AXhT+Z'%q,]-U.> PYIg*+bF^ᘅIf*cʸ'֋u[͟kvTwXuܝs=[j+;^]ܕwǽUDPckbA5B4:PIu /\tnT9TϧADjO;s8~sm,v&c۽-OG"u)+SOF!p*bobHz.E*(rČzyB[PÚxe겵)Y$xGzv/,k,֑(Ҷ~l=dk_V˧ĉzիn(]pnXw]^ n،f ''_oݔ*6Wn$/YN.^[F. JA cfRA% ^ hd :r>F:헷dV?m}UԵbkwj^<3GuEQQ2EN\ܙks~&i@Wj5k[4- Z<1_:q ]ܻdu;RoG#r1ْ Ϻs]aڛr.ڴ9+r8U+jN nB t3ˤ(UGjj4Kesn4 YE$zZR|z+/ܟvQf6s{۰z?gbsr}hWS4{ޢ7Uj7%Fee0*Xq ϟntP,P޽~"DRH5wmJʰkF: 9{n;vCB{1>Oq3ݝ״p}[9a|Hڵ=b<խݻ;);o!Y,-ȫPˎ0EF;>MwWҾM$d"$,vV f7 VbzuLiZF$TfZ ٿwogdwluU'Nfۥv?\N˘E>; ώEǾ?-GG0Tq?alǕ9Zdd9o aIUW EIܝ%͛\]q%)Hyuf?w]#3RCMwDV=gIȴr2Cs>"~KPsY !!hH8,>b}y1.yZz3C!M]xR4XItsQ2X 1Db}-vMeXj"EԪp(zs{~ջja-WzÁ*j8BsӶkUvdi&{4J'39]]@9"AUV*d`T>}Eo%(8tZ{[2_7yL-&͎$J섓2a4d (D\Ejn ?U]4e{ظ]@&Zre.Ԫ8 |B?ƾuVȭk{Rgz.6*1uQ6ۆik4YEuT!M'?Qeլ[O>'#y-Ht:me.m.?Q>ntAb|Wa夦G$Pra[TjГʲY.YSMd/]X(}lUa7N+cew\EWE%0Rj#}*a\+9ot_3tTAkj"x6=DutIvjeC7x'. l$P_#O1>!S:{)MUM͛d鱻ko$Y %\5EV̑:Խ•%VV]6ಝP,"]D灓\u]V#v]V{";}_I27yo2bC>h/.$n@;n mE 1%E2ޥ^Q_p|Cj50SʦJ'`P˥t`w.yAydfp9,,ib*}»͝w-٣ UF硴P+mFՂ!h*@MHvdjivkveUxӗO hoÚ dQ*!6ohf]Ďҡ UP0j4} F]&¦h=:O!ոY,n7 NCn.oQH54*O+Jn]H $SUZmU1 dKhtSˇ ӣ6`&rUj\T=7C$i(d`wfQIS5 Ա* g|qw%hd--t58R۶X"S@*B$ji4+UD4fji Ӯ`>ª@'Ѕ d[FUT%fr +WcRO:iJؾ [ۍ K ;[QfUzf41ƥS.U4r<,KN)'Y$$iK!eiBI˒PrpP%O45z"ۋl܋Y 5B(3u8g3f3XI -}ެEqna`SY_ZE1ЫnLW& ECwcA:~ܝaGN6ncslR,6cUE&#J(5 O#*\ܝ˼Ϩ-%!~9d䨩:ZhݸQ_.uunWh TR 䑪t.WIx&bŤ[p 6obٞ2f@DE@eRl䛟M/~(O'S 20hÇ*\ar,yM&IIКA2 XP2Z$$oAM U!=ݵdum}֝3vQK8b&)[ֲScqOUC$Xʯ,GQ_,z*D-Uϧ??_g;@l*9YwF[&y#쭵X|]d jSK#9(6H)~|z9s(CJ~yUݾfaLnMn\>\ C-c2[+wT'#u|e=-YEQQn(T$7+f%_`BT2F j1\+q!/~-.>>߽GΊv궗cluEoÍUSA!Y!cAC-.$B OPpj1iK|M"z<Cjmn.rm,.-N3uoX*q6hwˡXF b)22ԑW$XjW @A/8t'鯨Ǘ*!C|آhR*7㫳jn 5\9,uPF,T4ҴD"zH}z߹>gksD#d{1SA䯞dwsSybg1 bʕfvҜj|CgǶGW it|ٽ5НEw~{n-{|Tga޽Η05-]#Ju18$dBq48|C<*&xsqMӟliUo}>c)c6oWmw>ufw%Kq3RUѽT=3 3{mGquc\C'&@3QI*e*ih%X& o~i}k[[8cW%!Qk1$rfјҚjkJ׭nף{/iluL7nUqᎱiMSZxi㯬YfӬ.5\_.^9Vիn52hw,I9[廜[}?%N+^H9<].H{Lٖa:㌢އHbUAj$!tVjW˭?o,;򪗤>$Ak֓y֟4<ƣ%*K7vFbӦs~b_ eqKSU%ZJ@sspGRrI?Y HΜ։D m:R=()Pk:Nvafu3y7la;l4{ӵAWc.UE U<<?/n8 ^׎Iރ'.ثh<K Ae̻nm̑ݼ֍,mHXYu=5:~h6'!*QI$PSm_MTvtV>oSdv~Jf44"R9KKW#1Ȝ aӘe7 x7+{A)cruQkdkRԐ[ٷ5mRX@|p4BqλW+d%OWB+ӡx9Z%d0 [r@⍂|3@h28`xt*݊+tK)~S瞲Vl~ 8|ulð%cTZ:x<C}MBy+% U`-[WFe:@LRYZ$ns,T )MUaz lS<̓4%^\LrRc 8KIu!{{r;<pUN,⏩ BN.QJJu*5 xfJ=+q׭*Tfj֙eH3Z))mSO$h|9`t[ެA(^QiS@s=Q>.׻Lde uIHȢ\oeq^n9)rhV0C,A#K:9M|ÏZt(zpAKJf"2AfM… I$GKBRo3_%!M~|TRA6+o Y#Jt]HbbBmĠy$ AWE@ SJ&E]}7/[b;+]`a0.ۛufsf3`ō6΃kB)I. I$4Fwr[ X#ʪ҅s:;T~f)eV8T=ɧv>X 7fl_ [Ulde|rop2|f:$U2GI^%łη)S,DjZ@jUrP=1b RF=T5{h|i/voŕt;hݱw>r|KCV819O70I[N %EdpT;mz;(  Bt;Jqr=>eP4*GV9.OFNlݣqIKGaI K?34k4]vKm3OäAEEKI^Ҟ}1HeRFv!4[$pAdq>}.J??K nKSWVSVd) ᚎzFS$RX1/4]kEI|3i_R>=U5G@vn4؝G>{R6y*:ITU&#XnhZd +j}rHi}̻mW1'3Lqj#9M&SIIE~^]vC4L6")`RL;*Ž6,7ZyS׏NfS,] W>cC1ݽהK)& MGHtZʲB~mb~P$9RY(oN_#D(&ʵۛvll{=[4kof+9K:YB"*TZAQu"fynm6]kn0\ēF ֞"N8C=  })ՀLN&̧hّ;9H =0MScy`]"o[-hɻ^OeLa*}UQ0r?T P7o-w`|Nz42+E6ME 6J#|dwV;A#!Y\m]~CM__URii+Ij aX_%+ܽ{yMJKr R#+#S 検 L_LxiYyy[GZKߖi7 .hD}ݺqYJ:(pjIUjcҥ39d{y֛աܤte~Wzkx8b *=*1Qpȩo5uusA%GY%c+tA+EE'>4y?FC~ljz8Fl~jBG%^NoUEDayu-ēR@jˣ}JyyWta6GE(멫64s**{myiB|_.{Rj ?gJ̽dX˭*1>Uuʈvْl2(7r/88h>OǺztqKEQSJ70 ja@ $1ƾgkCuzp펫efD;ٰ=[22Ӏ;k <y5j)ɉIt, Eշ3-RkYQ0 IqrF8ӈS(2iU5P# %+\ݾ $Kk1<-Sg:W=VE+Adž+D̟Cť^(("pXj-t$jz$m Ċi.t/4_F i3BIT %~坬N4ꪠw|y>Z %f1-9Eٍ3p|Ÿ~~TPF ds_ }z] UޜvhBK6%s)Ӈ82 ?]+* Ē1:)whα#} ³+׉$m:C_O隻 A;bO]zS+Ʈ ɾCR4^V#_t}U˦@LQW}dcLV8̡Ԅ`J?e#:ό`@H1JP|yQW?̏-`fGuIQW2pdwֵ 3<9(0l"GSٞfu_Y3cQV)ǸI-o"Q̥e)t! ް2\ZIV~ek_.=maTW[av22}w+ՀzjήJ.=!>9_~٨kACȐzu`j跑k~:~Ua궆!F/+Lriw:58`O-mIп(t70#ZVKvk3GBGWյU`[[kk)1;zOZby2YZeK%*"|` H҆-Yll44Td*|x|!)w1+@ӨK4JKON=/t_w/ǸͦDpv>Cxt5z_;oZ$$U2y,QHIu"4'ܓ7NpY"aTZ\:ƞLL>d_*'#8fQFKVмۂeHꮥN4xQt*#BXC=L]1+se>驩~cz׏Ŋ\PyW%▢%Hf:h|4V*P*cm$ moiӐqLpOZ:w1 `䏝@^d/$+"+XmR!J$l# Q<~GӀBH5=1ÇV%*uG(PdptȞ:ya&B[,M|KG^DZ9jA#W NZD5o .2f$7 W3- ʧ5p<֣Rk:MUDFKm*J{NlT4"_25#4KXqcI0 ElxӍO&u>A>]?zA{8p꽗M5or'#)?EO7.@:A=O8>7Y)[!unQ:LYIOm'[)2??m.Ob{]zq=`1u?^gGJ}Bn:'3%jiJ-[KZE_G^w:_ӑ?gHlLcW^{5/i?MOI? O]5?_zu?mailbox/xinha/plugins/InsertPicture/demo_pictures/wesnoth078.jpg0100664000567100000120000002041410565363014025062 0ustar jcameronwheelJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222229 !1A"Qaq2#$BR3%b1!1AQ"2aBqC#3 ?Vu"av|XDIZ6h %2I*3m*#SRfUoMDy"'))1U"Iyd/ إcV4=MST,2M+ 9"V K&hٷ( jWߟ UI.y"|6ַ?\?bxRΌyB2:AA:O`>11+. ;7Ȍ]rAZ(Zq+Luғ$z܅xOƌ|]0 }_ā)F +p$q-E:f=}~tMf-Í݌RQ5QM.?ƒe ׸5?JIՌtM=<9c>bPiEO'튄fV84}5~"ɪQIjk]L" il2 vQ(4 ] |3sh3q V+`DVՈ\0t9XH+'K-iU6dZA\Ց6JA Mnr쉣ϵd.-3+qm1?9n)?r>%*( Txy$ :}FǫFs2&PizM we^K0.@77a߆f=y| ţތȽYM)vDSB20<)ʒm#qھI3M'sc((i_z"MX IE[ upMd䆾2G_sf@&xtMJ*ٴuT"$l#?/01!*JyqR-ip!.YUo O*;(&\ɨeGIqTb09ũ6X\PUYX<uyX9TZbf|eH2Ty@>Pm䵭QWYM!Bl f0.̩7&Փȓsiz_rOSp65;+w,-5;[h2QE@F=S_a~ek@^A[;*5| ѾK-rՔ8HIc cZjLȰϒ":؀FLSj(ń!Y %=y91p`IN,=FTys0n-X}4(x3EY#8򳌲<3#j1@ԟ[*V\vs٣#Y `*0龃3T<7ƨtr:=;饘iuA=4S$^-4y$+`-ץNL.yX>AO$~IÐəN5Ab#&xf?=۾'Y!%djt4rWqg)"^&)m* o1E887%=JMƇp6=4*6ƾc Ca`G懊I)IDgM:h1㊱\:2tuyjHEُ4،q_zjM\"57&ĴlxϞ]D)>ao.rFߟ#<@qɢ}W퐢4֐}7ӥB6-,Ճ,`҆nH;EG rb@9' qLئ˦1<ow cC-E$#]J@G t'G#xQM/$Yv+Ge˪KQe`P *)2M-D#|{cn\Q)hԍj2 2z||d"rGJ`nfͿY Eng>r*r٫5Ұ:A W$(Ytd1Q'pI=8kl9%@8Gsrm7@kqi/y]$u#d9cHTq_CVD*Btq -l󎍵y!O@rH Owf=0enÁC,]# JTCu&yNT~I75`!2 Vʞ1,zY*a.Mtf+9,qmm+ifąUCDpe.;2JS;;p?gr:(}JF)5vSHH*K|'#j=K!G%"bAܒj{8)EŃK<ڴpgptcS#W/5b_mN%焺jA&,d$X-R6o6h%FPCBnSWSIF[libQ*LxxO!Kfl2/@(ȍ?3K?yP L5!#JP*31I8ǡY<+'BQ]f!C~qg}dY䍯9ƃ-0{"}-Ѿ X╣* BtÆ)ϤB=5;]CmfX˵[ؿi}J|8&6X&Byۛ/emR6&p{鋊W<6;I$ { MxiÅ>@VYtR[$UW(v$3M2"u#h[8ťn~b qL5]Ǒv=8pRRum,;HhS7"UfȢsI8%s|/c,GVeQОb4o,F*kOsٯOaj2Jz |XC%hSyO,zr׹G'ʒ'H[7phJkpzwC+w9bpu"52b8шI[[a7٣9:l&htJ3O*h \$iDuQu1r3C =k鄥^ƴf.dQ.V Ok}Eu_,st9"vU f`TC/Ӯ[7xe.%͒э%Afm j\nu@}a#FG(r 25G_[PdCҢ,. fj't8K5(E> w0L>RɴyjJO%qo>g=FRDI=~%?sܖeE׌~!Rk֍!% sY49AV& Lဎ;`@@⢟4-p)ڽu 7 ҁKrII<ٳhJ] T|óm "_Eק}V_IH4X|j_\(/E_eӨ午0-7&#iv/}JԯAʭP }[VkyKi&,WC#M%FHQGdkc`VWl&~vBy nMy{Ɨb?B1%ʷ5}**.Y[Жµ أcqzԴzIrs"R_GUp8=;|_e{\ EY _!QN$Њdp8{d p?&'6X;-AYH<5(c;N"uOM6% ˵b`7&43r~c;϶6AM*L^\FU.U-u?& sL(bѨp$8r7f* h:ԬaY GՅ7!Ihkm IY##K=;Wkj[x~M4EgJr|N?0B+ #nqTpoA*ksCzs9!rWr.@UƊ8UQa mt5&Y(ol_˗aG5fUFa7tQT'%]+I=Z|Ի ;V)P㏮#th(M13|^d~;o: 67*9tyr4Rv&B6M;BO12 QJGxj./e\jv=OO3Ƌ&(b[\7ǾMQJZǠcՆ (;!10'P#טqV V2tzM6w)&e; Mλu3HsOiRk@&$K8 "6 vf'נeIaluۮRv9^jŃ{"UD/~= AhnZ7!7nrA4He@GŔܱLK*PAAKE8g%lā6]48B> w_pf"F]GP>ՙ?{_;AN=m΃6.-a֤j䨣\/?LҒk_iS|Uep?#RQyi/ im*=&H7FnϵH|Str` 9` }V~K- =$H'畚n*OoѦ(.jnS< =d2)b\8fbz|t Mۑ m( ϶Gvtb qDIh8a{~xUFRj>i$#m/\M{*rU/<8 Y ,̥D@'p=w(CYU\h$@+9 ^BQaG<_囼O'&BXZ;'XFNN%L42A;z@fuEv_4bZ tkQvB<6O2 ޔY'rh`TRWk|e )U HYmX~KQj#ߵ9pf|F«oBqfaBTXYkRQRM\&tV+T'#WI`źCeI=ɸ5%t@NWLك o'G9h}l v+$8OnCz795NKZd f/J#,{9cw/+_OzbT7%oٝbj@bgTDNk8Pw'&O9 Gy2)J~:=o0^ʊCTx/B5 "\?+F[(mYw c!y$M'm arI}Uێ|Ì]Nd ^(ʅeX 7btZ6QזZ*}c8;Dk3UQٺRϒ*dvDڈA,:mj@J/hwr W;FWWϒVj(!YXԂ(SI#V}$7ƕ2ԭj:I=ajƔQL72y:ݛaMFg,]8'8tD}82+CD9&\4TSnK(=EWM%dp٧gFl7CA(mailbox/xinha/plugins/InsertPicture/insert-picture.js0100664000567100000120000000170210565363014023102 0ustar jcameronwheel// Insert Image plugin for Xinha // Original Author - Udo Schmal // // (c) www.Schaffrath-NeueMedien.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function InsertPicture(editor) { if ( typeof _editor_picturePath !== "string" ) _editor_picturePath = _editor_url + "plugins/InsertPicture/demo_pictures/"; InsertPicture.Scripting = "php"; //else "asp" editor.config.URIs.insert_image = '../plugins/InsertPicture/InsertPicture.' + InsertPicture.Scripting + '?picturepath=' + _editor_picturePath; } InsertPicture._pluginInfo = { name : "InsertPicture", version : "1.0.2", developer : "Udo Schmal", developer_url : "http://www.Schaffrath-NeueMedien.de/", sponsor : "L.N.Schaffrath NeueMedien", sponsor_url : "http://www.schaffrath-neuemedien.de/", c_owner : "Udo Schmal", license : "htmlArea" }; mailbox/xinha/plugins/InsertPicture/img/0040775000567100000120000000000010567167543020361 5ustar jcameronwheelmailbox/xinha/plugins/InsertPicture/img/btn_open.gif0100664000567100000120000000025510565364774022656 0ustar jcameronwheelGIF89aUUUBBB333wwwݲ!, Z@(X*%6 t(X#yv@@0iюfU|PPX,L(0M;oxVP$JQy~E;mailbox/xinha/plugins/InsertPicture/img/nopic.gif0100664000567100000120000000300110565364776022154 0ustar jcameronwheelGIF87axdxxx۷hCYC̷awͷc}dһOjO~HbH>νWw ++묪҃V FSd*\ƼrpE!n24=9I1Lh˗0][@ 78Qg\ #ї3i.3XP=K¹YL;*h 4hhP,GsI8ӏ?{j֭][lZl@[q +Ӊ1n؀EJ1TKǑ+L|y͜#.,XtE &1o!4,mܻ{N\et[޿O(~xvq:=~:ȕ]>*<;k] bAEmWw!04H"ւզ_ -G#(r 7ToؘP>#xb+h &6UQ Ơ%]DVe\iӌ݈#A`qؓUD9<]Yu嗞UgQ<o: $c[M)xc{BYJ٠zaf9`m34:o*vz|W7|+.;÷93{ϣo }8v#]Ђ# 702a C-@D^)@PHU` &1"'Tb(ߙ8B~^;P9&b8AmzZ 3HBWF:H;mailbox/xinha/plugins/InsertPicture/InsertPicture.php0100664000567100000120000002463610565363014023113 0ustar jcameronwheel= 1024 && $size < 1024*1024) return sprintf('%01.2f',$size/1024.0).' Kb'; else return sprintf('%01.2f',$size/(1024.0*1024)).' Mb'; } $DestFileName = ""; if (isset($_FILES['file'])) { $file = $_FILES['file']; $ext = strrchr($file['name'],'.'); if (!in_array($ext,$limitedext)) $message = "The file you are uploading doesn't have the correct extension."; else if (file_exists($LocalPicturePath.$file['name'])) $message = "The file you are uploading already exists."; else if ($file['size'] > $limitedsize) $message = "The file you are uploading is to big. The max Filesize is ".formatSize($limitedsize)."."; else copy($file['tmp_name'], $LocalPicturePath.$file['name']); $DestFileName = $file['name']; } ?> Insert Image
Insert Image
Images on the Server:


Image Preview:
Image URL:
Alternate text:

Layout
Alignment:

Border thickness:
Size
Width:

Height:
Spacing
Horizontal:

Vertical:

mailbox/xinha/plugins/InsertPicture/lang/0040775000567100000120000000000010567167543020526 5ustar jcameronwheelmailbox/xinha/plugins/InsertPicture/lang/ja.js0100664000567100000120000000223310565363014021440 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Insert Image": "画像の挿入", "Image Preview:": "画像プレビュー:", "Image URL:": "画像URL:", "Preview": "表示", "Alternate text:": "代替テキスト:", "Layout": "レイアウト", "Alignment:": "行揃え:", "Border thickness:": "境界線の幅:", "Spacing": "間隔", "Horizontal:": "水平:", "Vertical:": "垂直:", "The file you are uploading doesn't have the correct extension.": "アップロード対象ファイルに正しい拡張子がありません。", "The file you are uploading already exists.": "アップロード対象ファイルはすでに存在します。", "The file you are uploading is to big. The max Filesize is": "アップロード対象ファイルは大きすぎます。ファイルサイズの上限:", "Images on the Server:": "サーバ上の画像:", "Please select a file to upload.": "アップロードするファイルを選択してください。", "Upload file": "UPLOAD FILE", "Open file in new window": "新しいウィンドウでファイルを開く", "Size": "サイズ", "Width:": "幅:", "Height:": "高さ:" };mailbox/xinha/plugins/InsertPicture/lang/de.js0100664000567100000120000000151510565363014021440 0ustar jcameronwheel// LANG: "de", ENCODING: UTF-8 | ISO-8859-1 // Sponsored by http://www.schaffrath-neuemedien.de // Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "The file you are uploading doesn't have the correct extension.": "Die hochgeladene Datei ist im falschen Format.", "The file you are uploading already exists.": "Eine Datei mit diesem Namen existiert schon.", "The file you are uploading is to big. The max Filesize is": "Die hochgeladene Datei ist zu groß. Die maximakle Dateigröße beträgt", "Images on the Server:": "Bilder auf dem Server:", "Please select a file to upload.": "Wählen Sie eine Datei zum hochladen aus.", "Upload file": "Datei hochladen", "Open file in new window": "Datei in neuen Fenster anzeigen", "Size": "Größe", "Width:": "Breite", "Height:": "Höhe" };mailbox/xinha/plugins/InsertPicture/lang/sv.js0100664000567100000120000000310710565363014021477 0ustar jcameronwheel// I18N constants // LANG: "sv", ENCODING: UTF-8 // Swedish version for rev. 477 (Mar 2006) by Thomas Loo { "Insert Image": "Infoga bild", "Image Preview:": "Förhandsgranskning:", "Image URL:": "Bildens URL:", "Preview": "Förhandsgranska", "Alternate text:": "Alternativ text:", "Layout": "Layout", "Alignment:": "Placering:", "Border thickness:": "Ramtjocklek:", "Spacing": "Marginal", "Horizontal:": "Horisontell:", "Vertical:": "Vertikal:", "The file you are uploading doesn't have the correct extension.": "Uppladdat bild har en ogiltig filändelse, uppladdning avbruten", "The file you are uploading already exists.": "En fil med detta namn finns redan", "The file you are uploading is to big. The max Filesize is": "Filen är för stor, maximal filstorlek är", "Images on the Server:": "Bilder på servern:", "Please select a file to upload.": "Välj bild att ladda upp", "Upload file": "Ladda upp bild", "Size": "Storlek", "Width:": "Bredd:", "Height:": "Höjd:", // tooltips "Enter the image URL here":"Bildens sökväg (URL)", "Preview the image in a new window": "Öppna bild i nytt fönster", "For browsers that don't support images":"Beskrivande text för webläsare som inte stödjer inbäddade bilder", "Positioning of this image": "Bildens positionering", "Leave empty for no border": "Lämna tomt för att undvika ram", "Leave empty for not defined": "Lämna tomt för att låta webläsaren bestämma", "Horizontal padding": "Horizontellt indrag på bild", "Vertical padding": "Vertikalt indrag på bild" }; mailbox/xinha/plugins/InsertPicture/lang/nb.js0100664000567100000120000000207510565363014021451 0ustar jcameronwheel// LANG: "nb", ENCODING: UTF-8 | ISO-8859-1 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert Image": "Sett inn bilde", "Image Preview:": "Forhåndsvisning:", "Image URL:": "Bildets URL:", "Preview": "Forhåndsvisning", "Alternate text:": "Alternativ tekst", "Layout": "Oppsett", "Alignment:": "Plassering", "Border thickness:": "Rammetykkelse:", "Spacing": "Luft rundt bildet", "Horizontal:": "Horisontal:", "Vertical:": "Vertikal:", "The file you are uploading doesn't have the correct extension.": "Bildet du laster opp har et ugyldig format, opplastning avbrutt", "The file you are uploading already exists.": "Bildet du prøver å laste opp eksisterer allerede på serveren", "The file you are uploading is to big. The max Filesize is": "Bildet du laster opp er for stort, maks tillatt størrelse er", "Images on the Server:": "Bilder på serveren:", "Please select a file to upload.": "Velg bilde du skal laste opp", "Upload file": "Last opp bilde", "Open file in new window": "Åpne bilde i nytt vindu" };mailbox/xinha/plugins/InsertPicture/lang/fr.js0100664000567100000120000000201610565363014021454 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Insert Image": "Insérer une image", "Image Preview:": "Prévisualisation", "Image URL:": "URL", "Preview": "Prévisualisation", "Alternate text:": "Texte alternatif", "Layout": "Layout", "Alignment:": "Alignement", "Border thickness:": "Epaisseur bordure", "Spacing": "Espacement", "Horizontal:": "Horizontal", "Vertical:": "Vertical", "The file you are uploading doesn't have the correct extension.": "Le fichier que vous téléchargez ne possède pas la bonne extension.", "The file you are uploading already exists.": "Le fichier que vous téléchargez existe déjà.", "The file you are uploading is to big. The max Filesize is": "Le fichier que vous uploadez est trop gros. La taille maximum est", "Images on the Server:": "Images sur le serveur", "Please select a file to upload.": "Veuillez sélectionner un fichier a télécharger", "Upload file": "Télécharger", "Open file in new window": "Ouvrir le fichier dans une nouvelle fenêtre" };mailbox/xinha/plugins/CharacterMap/0040775000567100000120000000000010567167541017335 5ustar jcameronwheelmailbox/xinha/plugins/CharacterMap/popups/0040775000567100000120000000000010567167541020663 5ustar jcameronwheelmailbox/xinha/plugins/CharacterMap/popups/select_character.html0100664000567100000120000003342010565363030025030 0ustar jcameronwheel Insert special character
Ÿ š @ " ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬
¯ ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾
¿ × Ø ÷ ø ƒ ˆ ˜
À Á Â Ã Ä Å Æ
Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö
® × Ù Ú Û Ü Ý Þ ß à á â ã ä å æ
ç è é ê ë ì í î ï ð ñ ò ó ô õ ö
÷ ø ù ú û ü ý þ ÿ Œ œ Š  

mailbox/xinha/plugins/CharacterMap/CharacterMap.css0100664000567100000120000000135210565363030022364 0ustar jcameronwheel.CharacterMap { } .CharacterMap a.entity { font-size:12px; width:18px; display:block; float:left; padding:2px; text-decoration:none; color:#000; text-align:center; } .CharacterMap a.light { background-color:#ffffff; } .CharacterMap a.dark { background-color:#f7f8fd; } .CharacterMap a.entity:hover { background-color:#ffd760; color:#000; } .popup td.character { font-family:Verdana,Arial,Helvetica,sans-serif; font-size:14px; font-weight:bold; text-align:center; background:#fff; padding:4px; } .popup td.character-hilite { background:#ffd760; } .popup form { text-align:center; } .popup table { cursor:pointer; background-color:#ADAD9C; border:1px inset; }mailbox/xinha/plugins/CharacterMap/img/0040775000567100000120000000000010567167541020111 5ustar jcameronwheelmailbox/xinha/plugins/CharacterMap/img/ed_charmap.gif0100664000567100000120000000020610565364774022663 0ustar jcameronwheelGIF89a!,KP9A_XfI GRЭmɺE!mp8B@s~56:Z`ȵ/;mailbox/xinha/plugins/CharacterMap/character-map.js0100664000567100000120000000602610565363432022376 0ustar jcameronwheelHTMLArea.loadStyle("CharacterMap.css","CharacterMap"); function CharacterMap(_1){ this.editor=_1; var _2=_1.config; var _3=this; _2.registerButton({id:"insertcharacter",tooltip:HTMLArea._lc("Insert special character","CharacterMap"),image:_1.imgURL("ed_charmap.gif","CharacterMap"),textMode:false,action:function(_4){ _3.buttonPress(_4); }}); _2.addToolbarElement("insertcharacter","createlink",-1); if(_2.CharacterMap.mode=="panel"){ _1._CharacterMap=_1.addPanel("right"); HTMLArea._addClass(_1._CharacterMap,"CharacterMap"); _1.notifyOn("modechange",function(e,_6){ if(_6.mode=="text"){ _1.hidePanel(_1._CharacterMap); } }); var _7=["Ÿ","š","@",""","¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","Ø","÷","ø","ƒ","ˆ","˜","–","—","‘","’","‚","“","”","„","†","‡","•","…","‰","‹","›","€","™","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","®","×","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","÷","ø","ù","ú","û","ü","ý","þ","ÿ","Œ","œ","Š"]; for(var i=0;i<_7.length;i++){ this.addEntity(_7[i],i); } _1.hidePanel(_1._CharacterMap); } } HTMLArea.Config.prototype.CharacterMap={"mode":"popup"}; CharacterMap._pluginInfo={name:"CharacterMap",version:"2.0",developer:"Laurent Vilday",developer_url:"http://www.mokhet.com/",c_owner:"Xinha community",sponsor:"",sponsor_url:"",license:"Creative Commons Attribution-ShareAlike License"}; CharacterMap._isActive=false; CharacterMap.prototype.buttonPress=function(_9){ var _a=_9.config; if(_a.CharacterMap.mode=="panel"){ if(this._isActive){ this._isActive=false; _9.hidePanel(_9._CharacterMap); }else{ this._isActive=true; _9.showPanel(_9._CharacterMap); } }else{ _9._popupDialog("plugin://CharacterMap/select_character",function(_b){ if(!_b){ return false; } if(HTMLArea.is_ie){ _9.focusEditor(); } _9.insertHTML(_b); },null); } }; CharacterMap.prototype.addEntity=function(_c,_d){ var _e=this.editor; var _f=this; var a=document.createElement("a"); HTMLArea._addClass(a,"entity"); a.innerHTML=_c; a.href="javascript:void(0)"; HTMLArea._addClass(a,(_d%2)?"light":"dark"); a.onclick=function(){ if(HTMLArea.is_ie){ _e.focusEditor(); } _e.insertHTML(_c); return false; }; _e._CharacterMap.appendChild(a); }; mailbox/xinha/plugins/CharacterMap/lang/0040775000567100000120000000000010567167541020256 5ustar jcameronwheelmailbox/xinha/plugins/CharacterMap/lang/ja.js0100664000567100000120000000020110565363030021161 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Insert special character": "特殊文字を挿入", "Cancel": "中止" };mailbox/xinha/plugins/CharacterMap/lang/nl.js0100664000567100000120000000056710565363030021217 0ustar jcameronwheel// I18N constants // LANG: "nl", ENCODING: UTF-8 // Sponsored by http://www.systemconcept.de // Author: Holger Hees, // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Insert special character": "Speciaal character invoegen", "Cancel": "Annuleer" }; mailbox/xinha/plugins/CharacterMap/lang/de.js0100664000567100000120000000057610565363030021176 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Sponsored by http://www.systemconcept.de // Author: Holger Hees, // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Insert special character": "Sonderzeichen einfügen", "Cancel": "Abbrechen" } mailbox/xinha/plugins/CharacterMap/lang/it.js0100664000567100000120000000022210565363030021206 0ustar jcameronwheel// I18N constants // LANG: "it", ENCODING: UTF-8 { "Insert special character": "Inserisca il carattere speciale", "Cancel": "Annullamento" }; mailbox/xinha/plugins/CharacterMap/lang/sv.js0100664000567100000120000000025610565363030021231 0ustar jcameronwheel// I18N constants // LANG: "sv" (Swedish), ENCODING: UTF-8 // translated: Erik Dalén { "Insert special character": "Infoga tecken", "Cancel": "Avbryt" }; mailbox/xinha/plugins/CharacterMap/lang/ru.js0100664000567100000120000000033410565363030021224 0ustar jcameronwheel// I18N constants // LANG: "ru", ENCODING: UTF-8 // Author: Andrei Blagorazumov, a@fnr.ru { "Insert special character": "Вставить специальный символ", "Cancel": "Отменить" };mailbox/xinha/plugins/CharacterMap/lang/nb.js0100664000567100000120000000030410565363030021172 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert special character": "Sett inn tegn", "Cancel": "Avbryt" };mailbox/xinha/plugins/CharacterMap/lang/fr.js0100664000567100000120000000021110565363030021177 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Insert special character": "Insérer caractère spécial", "Cancel": "Annuler" };mailbox/xinha/plugins/LangMarks/0040775000567100000120000000000010567167545016666 5ustar jcameronwheelmailbox/xinha/plugins/LangMarks/lang-marks.js0100664000567100000120000000736010565362760021255 0ustar jcameronwheel// Mask Language plugin for HTMLArea // Implementation by Udo Schmal // // (c) Udo Schmal & Schaffrath NeueMedien 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function LangMarks(editor, args) { this.editor = editor; var cfg = editor.config; var self = this; var options = {}; options[this._lc("— language —")] = ""; options[this._lc("Greek")] = "el"; options[this._lc("English")] = "en"; options[this._lc("French")] = "fr"; options[this._lc("Latin")] = "la"; cfg.registerDropdown({ id : "langmarks", tooltip : this._lc("language select"), options : options, action : function(editor) { self.onSelect(editor, this); }, refresh : function(editor) { self.updateValue(editor, this); } }); cfg.addToolbarElement("langmarks", "inserthorizontalrule", 1); } LangMarks._pluginInfo = { name : "LangMarks", version : "1.0", developer : "Udo Schmal", developer_url : "", sponsor : "L.N.Schaffrath NeueMedien", sponsor_url : "http://www.schaffrath-neuemedien.de/", c_owner : "Udo Schmal & Schaffrath NeueMedien", license : "htmlArea" }; LangMarks.prototype._lc = function(string) { return HTMLArea._lc(string, 'LangMarks'); }; LangMarks.prototype.onGenerate = function() { var style_id = "LM-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/LangMarks/lang-marks.css'; this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(style); } }; LangMarks.prototype.onSelect = function(editor, obj, context, updatecontextclass) { var tbobj = editor._toolbarObjects[obj.id]; var index = tbobj.element.selectedIndex; var className = tbobj.element.value; // retrieve parent element of the selection var parent = editor.getParentElement(); var surround = true; var is_span = (parent && parent.tagName.toLowerCase() == "span"); var update_parent = (context && updatecontextclass && parent && parent.tagName.toLowerCase() == context); if (update_parent) { parent.className = className; parent.lang = className; editor.updateToolbar(); return; } if (is_span && index == 0 && !/\S/.test(parent.style.cssText)) { while (parent.firstChild) { parent.parentNode.insertBefore(parent.firstChild, parent); } parent.parentNode.removeChild(parent); editor.updateToolbar(); return; } if (is_span) { // maybe we could simply change the class of the parent node? if (parent.childNodes.length == 1) { parent.className = className; parent.lang = className; surround = false; // in this case we should handle the toolbar updation // ourselves. editor.updateToolbar(); } } // Other possibilities could be checked but require a lot of code. We // can't afford to do that now. if (surround) { // shit happens ;-) most of the time. this method works, but // it's dangerous when selection spans multiple block-level // elements. editor.surroundHTML('', ''); } }; LangMarks.prototype.updateValue = function(editor, obj) { var select = editor._toolbarObjects[obj.id].element; var parent = editor.getParentElement(); if (typeof parent.className != "undefined" && /\S/.test(parent.className)) { var options = select.options; var value = parent.className; for (var i = options.length; --i >= 0;) { var option = options[i]; if (value == option.value) { select.selectedIndex = i; return; } } } select.selectedIndex = 0; };mailbox/xinha/plugins/LangMarks/img/0040775000567100000120000000000010567167545017442 5ustar jcameronwheelmailbox/xinha/plugins/LangMarks/img/el.gif0100664000567100000120000000011410565364776020525 0ustar jcameronwheelGIF89a!, -hh&K>A1aɶ[;mailbox/xinha/plugins/LangMarks/img/fr.gif0100664000567100000120000000011510565364776020535 0ustar jcameronwheelGIF89a!, -/ sW_Bq HZ 7;mailbox/xinha/plugins/LangMarks/img/la.gif0100664000567100000120000000011510565364776020522 0ustar jcameronwheelGIF89a!, -uyjV4nH' ;mailbox/xinha/plugins/LangMarks/img/en.gif0100664000567100000120000000012010565364776020524 0ustar jcameronwheelGIF89a!, !-8UU[֎AFZHL;mailbox/xinha/plugins/LangMarks/lang-marks.css0100664000567100000120000000071110565362760021422 0ustar jcameronwheelspan.el, span.en, span.fr, span.la { color: red; padding-right: 25px; background-repeat: no-repeat; background-position: right top; border-bottom: 1px solid red; white-space : nowrap; } span.el { /*Griechisch*/ background-image: url(img/el.gif); } span.en { /*Englisch*/ background-image: url(img/en.gif); } span.fr { /*Franzsisch*/ background-image: url(img/fr.gif); } span.la { /*Latein*/ background-image: url(img/la.gif); }mailbox/xinha/plugins/LangMarks/lang/0040775000567100000120000000000010567167545017607 5ustar jcameronwheelmailbox/xinha/plugins/LangMarks/lang/ja.js0100664000567100000120000000040310565362760020523 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "language select": "言語の選択", "— language —": "— 言語 —", "Greek": "ギリシャ語", "English": "英語", "French": "フランス語", "Latin": "ラテン語" };mailbox/xinha/plugins/LangMarks/lang/nl.js0100664000567100000120000000052710565362760020551 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 | ISO-8859-1 // Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "language select": "Taalkeuze", "— language —": "— taal —", "Greek": "Grieks", "English": "Engels", "French": "Frans", "Latin": "Latijns" };mailbox/xinha/plugins/LangMarks/lang/de.js0100664000567100000120000000055610565362760020532 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 | ISO-8859-1 // Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "language select": "Sprachauswahl", "— language —": "— Sprache —", "Greek": "griechisch", "English": "englisch", "French": "französisch", "Latin": "lateinisch" };mailbox/xinha/plugins/LangMarks/lang/nb.js0100664000567100000120000000046210565362760020535 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "language select": "Språkvalg", "— language —": "— Språk —", "Greek": "grekisk", "English": "engelsk", "French": "fransk", "Latin": "latin" };mailbox/xinha/plugins/LangMarks/lang/fr.js0100664000567100000120000000040010565362760020535 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "language select": "Sélection de la langue", "— language —": "— Langue —", "Greek": "grec", "English": "anglais", "French": "français", "Latin": "latin" };mailbox/xinha/plugins/SaveSubmit/0040775000567100000120000000000010567167545017071 5ustar jcameronwheelmailbox/xinha/plugins/SaveSubmit/img/0040775000567100000120000000000010567167545017645 5ustar jcameronwheelmailbox/xinha/plugins/SaveSubmit/img/ed_save_red.gif0100664000567100000120000000031710565364774022573 0ustar jcameronwheelGIF89aBKzJU koο,/6%EkpuX[9X!,|: k}`|D0HaB<]iP#aHKqZXf'hpzqmy.Xx o  U~;mailbox/xinha/plugins/SaveSubmit/img/ed_save_green.gif0100664000567100000120000000032010565364774023113 0ustar jcameronwheelGIF89aBKzJU꼿ko<,/6%Ekpu"WXr9p!,}* k]B[K`4Gz<F, C 2޺Bp5A <@H@2uX`Hz@fL Z\(`1`' o{/Zz q  uum;mailbox/xinha/plugins/SaveSubmit/README.txt0100664000567100000120000000122310565363026020550 0ustar jcameronwheelSaveSubmit 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. mailbox/xinha/plugins/SaveSubmit/lang/0040775000567100000120000000000010567167545020012 5ustar jcameronwheelmailbox/xinha/plugins/SaveSubmit/lang/ja.js0100664000567100000120000000023110565363026020721 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Save": "保存", "Saving...": "保存中...", "in progress": "処理中", "Ready": "レディ" };mailbox/xinha/plugins/SaveSubmit/lang/de.js0100664000567100000120000000024110565363026020720 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 { "Save": "Speichern", "Saving...": "Speichern...", "in progress": "in Arbeit", "Ready": "Fertig" };mailbox/xinha/plugins/SaveSubmit/lang/ru.js0100664000567100000120000000042410565363026020761 0ustar jcameronwheel// I18N constants // LANG: "ru", ENCODING: UTF-8 // Simple job done by Alexey Kirpichnikov { "Save": "Сохранить", "Saving...": "Сохранение...", "in progress": "пожалуйста, ждите", "Ready": "Готово" };mailbox/xinha/plugins/SaveSubmit/save-submit.js0100664000567100000120000000711010565363454021655 0ustar jcameronwheelfunction 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); }; mailbox/xinha/plugins/InsertSnippet/0040775000567100000120000000000010567167545017616 5ustar jcameronwheelmailbox/xinha/plugins/InsertSnippet/readme.html0100664000567100000120000000263410565363020021723 0ustar jcameronwheel InsertSnippet for Xinha

InsertSnippet for Xinha

Insert HTML fragments in your document.

Usage

In order to use your own snippets you have to al least one parameter to your xinha_config:

xinha_config.InsertSnippet.snippets = _editor_url+"plugins/InsertSnippet/snippets.php";

The path above indicates the use of the provided backend. This parses a file that contains the snippets and should have the following format:

<!--Snippet ID-->
Snippet content
<!--/Snippet ID-->
...and so on

You can use the snippets.html in the plugin folder or tell the backend where to find the file like this

with (xinha_config.InsertSnippet)
{
	<?php

	// define backend configuration for the plugin
	$backend_data['snippets_file'] = '/file/containing/snippets.html';
	require_once '../contrib/php-xinha.php';
	xinha_pass_to_php_backend($backend_data);
    
	?>
}

Raimund Meyer (xinha@raimundmeyer.de)

mailbox/xinha/plugins/InsertSnippet/popups/0040775000567100000120000000000010567167545021144 5ustar jcameronwheelmailbox/xinha/plugins/InsertSnippet/popups/insertsnippet.html0100664000567100000120000000754710565363020024733 0ustar jcameronwheel Insert Snippet
Insert Snippet
mailbox/xinha/plugins/InsertSnippet/insert-snippet.js0100664000567100000120000000554010565363020023121 0ustar jcameronwheel/*------------------------------------------*\ InsertSnippet for Xinha _______________________ Insert HTML fragments or template variables \*------------------------------------------*/ function InsertSnippet(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton({ id : "insertsnippet", tooltip : this._lc("Insert Snippet"), image : editor.imgURL("ed_snippet.gif", "InsertSnippet"), textMode : false, action : function(editor) { self.buttonPress(editor); } }); cfg.addToolbarElement("insertsnippet", "insertimage", -1); this.snippets = null; var backend = cfg.InsertSnippet.snippets + '?'; if(cfg.InsertSnippet.backend_data != null) { for ( var i in cfg.InsertSnippet.backend_data ) { backend += '&' + i + '=' + encodeURIComponent(cfg.InsertSnippet.backend_data[i]); } } Xinha._getback(backend,function (getback) {eval(getback); self.snippets = snippets;}); } InsertSnippet.prototype.onUpdateToolbar = function() { if (!this.snippets){ this.editor._toolbarObjects.insertsnippet.state("enabled", false); } else InsertSnippet.prototype.onUpdateToolbar = null; } InsertSnippet._pluginInfo = { name : "InsertSnippet", version : "1.2", developer : "Raimund Meyer", developer_url : "http://rheinauf.de", c_owner : "Raimund Meyer", sponsor : "", sponsor_url : "", license : "htmlArea" }; InsertSnippet.prototype._lc = function(string) { return Xinha._lc(string, 'InsertSnippet'); }; InsertSnippet.prototype.onGenerate = function() { var style_id = "IS-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/InsertSnippet/InsertSnippet.css'; this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(style); } }; Xinha.Config.prototype.InsertSnippet = { 'snippets' : _editor_url+"plugins/InsertSnippet/demosnippets.js", // purely demo purposes, you should change this 'css' : ['../InsertSnippet.css'], //deprecated, CSS is now pulled from xinha_config 'showInsertVariable': false, 'backend_data' : null }; InsertSnippet.prototype.buttonPress = function(editor) { var args = editor.config; args.snippets = this.snippets; var self = this; editor._popupDialog( "plugin://InsertSnippet/insertsnippet", function( param ) { if ( !param ) { return false; } editor.focusEditor(); if (param['how'] == 'variable') { editor.insertHTML('{'+self.snippets[param["snippetnum"]].id+'}'); } else { editor.insertHTML(self.snippets[param["snippetnum"]].HTML); } }, args); };mailbox/xinha/plugins/InsertSnippet/img/0040775000567100000120000000000010567167545020372 5ustar jcameronwheelmailbox/xinha/plugins/InsertSnippet/img/ed_snippet.gif0100664000567100000120000000113610565364776023214 0ustar jcameronwheelGIF89aϫ2չ@ˮDˮCˮGˮFˮEڗդӽέ՜hn]bhլճYad}}y|knqog`cwz6<]0 %+tˤeβhһfھEϳBԼOٻAUaf[IMQÜ%ѧƠ*Ùx{dظ=ţIʭGյ8Ǣ)˪5ҩ9!,UToz!PVFQS  [R\p $]x.#Zy3Wc72BXd&1E i84Hg69Gh-/0),5La('+*=<;@?>:dP @ :eĨYL I!D$QK9"@;mailbox/xinha/plugins/InsertSnippet/snippets.php0100664000567100000120000000077410565363020022161 0ustar jcameronwheel(.*?)/s',$snippets,$matches); $array=array(); for ($i=0;$i$id,'HTML'=>$html); } print "var snippets = " . xinha_to_js($array); ?>mailbox/xinha/plugins/InsertSnippet/snippets.html0100664000567100000120000000167110565363020022333 0ustar jcameronwheel
Visit the Xinha website
This is an information about something
mailbox/xinha/plugins/InsertSnippet/demosnippets.js0100664000567100000120000000211210565363020022637 0ustar jcameronwheelvar snippets = []; var i = 0; snippets[i] = {}; snippets[i]['id'] = 'Box 1'; snippets[i]['HTML'] = '
\n Visit the Xinha website
'; i++; snippets[i] = {}; snippets[i]['id'] = 'INFORMATION ABOUT SOMETHING'; snippets[i]['HTML'] = '
\n This is an information about something\n
'; i++; snippets[i] = {}; snippets[i]['id'] = 'Menu'; snippets[i]['HTML'] = '';mailbox/xinha/plugins/InsertSnippet/InsertSnippet.css0100664000567100000120000000224310565363020023115 0ustar jcameronwheel.navi_links { width: 177px; margin: 0; padding: 0px; list-style:none; border: none; } .navi_links li { margin:0 0 3px 0; } .navi_links li a { font-size: 13px; line-height: 16px; height: 16px; display:block; color:#000; text-decoration: none; font-weight: bold; background-color: #fff; cursor: pointer; border: 2px solid white; } .Link1 { background-color: #DF1D1F !important; } .Link2 { background-color: #F9A413 !important; } .Link3 { background-color: #167730 !important; } .Link4 { background-color: #233350 !important; } .Link5 { background-color: #70685B !important; } a.Link1:hover span{ background-color: #DF1D1F !important; } a.Link2:hover span { background-color: #F9A413 !important; } .Link3:hover span { background-color: #167730 !important; color:white; } .Link4:hover span { background-color: #233350 !important; color:white; } .Link5:hover span { background-color: #70685B !important; color:white; } .navi_links li a span { height: 16px; text-indent: 4px; display:block; margin-left: 15px; background-color: #FFF; } div.message_box { border: dotted 1px black; margin: 1em; padding:1em; } .red { color:red; } .green { color:green; }mailbox/xinha/plugins/InsertSnippet/lang/0040775000567100000120000000000010567167545020537 5ustar jcameronwheelmailbox/xinha/plugins/InsertSnippet/lang/ja.js0100664000567100000120000000041410565363020021443 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Insert Snippet": "スニペットの挿入", "Cancel": "中止", "Variable":"変数", "Insert as":"形式を選んで挿入", "Show preview":"プレビュー表示", "Hide preview":"プレビュー非表示" };mailbox/xinha/plugins/InsertSnippet/lang/de.js0100664000567100000120000000036410565363020021445 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 { "Insert Snippet": "Snippet einfügen", "Cancel": "Abbrechen", "Variable":"Variable", "Insert as":"Einfügen als", "Show preview":"Vorschau zeigen", "Hide preview":"Vorschau verbergen" };mailbox/xinha/plugins/InsertSnippet/lang/nb.js0100664000567100000120000000047310565363020021455 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert Snippet": "Sett inn snutt", "Cancel": "Avbryt", "Variable":"Variabel", "Insert as":"Sett inn som", "Show preview":"Vis forhåndsvisning", "Hide preview":"Skjul forhåndsvisning" };mailbox/xinha/plugins/Linker/0040775000567100000120000000000010567167545016233 5ustar jcameronwheelmailbox/xinha/plugins/Linker/linker.js0100664000567100000120000002351510565363452020051 0ustar jcameronwheelLinker._pluginInfo={name:"Linker",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/"}; Xinha.loadStyle("dTree/dtree.css","Linker"); Xinha.Config.prototype.Linker={"treeCaption":document.location.host,"backend":_editor_url+"plugins/Linker/scan.php","backend_data":null,"files":null}; function Linker(_1,_2){ this.editor=_1; this.lConfig=_1.config.Linker; var _3=this; if(_1.config.btnList.createlink){ _1.config.btnList.createlink[3]=function(e,_5,_6){ _3._createLink(_3._getSelectedAnchor()); }; }else{ _1.config.registerButton("createlink","Insert/Modify Hyperlink",[_editor_url+"images/ed_buttons_main.gif",6,1],false,function(e,_8,_9){ _3._createLink(_3._getSelectedAnchor()); }); } _1.config.addToolbarElement("createlink","createlink",0); } Linker.prototype._lc=function(_a){ return Xinha._lc(_a,"Linker"); }; Linker.prototype._createLink=function(a){ if(!a&&this.editor.selectionEmpty(this.editor.getSelection())){ alert(this._lc("You must select some text before making a new link.")); return false; } var _c={type:"url",href:"http://www.example.com/",target:"",p_width:"",p_height:"",p_options:["menubar=no","toolbar=yes","location=no","status=no","scrollbars=yes","resizeable=yes"],to:"alice@example.com",subject:"",body:"",anchor:""}; if(a&&a.tagName.toLowerCase()=="a"){ var _d=this.editor.fixRelativeLinks(a.getAttribute("href")); var m=_d.match(/^mailto:(.*@[^?&]*)(\?(.*))?$/); var _f=_d.match(/^#(.*)$/); if(m){ _c.type="mailto"; _c.to=m[1]; if(m[3]){ var _10=m[3].split("&"); for(var x=0;x<_10.length;x++){ var j=_10[x].match(/(subject|body)=(.*)/); if(j){ _c[j[1]]=decodeURIComponent(j[2]); } } } }else{ if(_f){ _c.type="anchor"; _c.anchor=_f[1]; }else{ if(a.getAttribute("onclick")){ var m=a.getAttribute("onclick").match(/window\.open\(\s*this\.href\s*,\s*'([a-z0-9_]*)'\s*,\s*'([a-z0-9_=,]*)'\s*\)/i); _c.href=_d?_d:""; _c.target="popup"; _c.p_name=m[1]; _c.p_options=[]; var _10=m[2].split(","); for(var x=0;x<_10.length;x++){ var i=_10[x].match(/(width|height)=([0-9]+)/); if(i){ _c["p_"+i[1]]=parseInt(i[2]); }else{ _c.p_options.push(_10[x]); } } }else{ _c.href=_d; _c.target=a.target; } } } } var _14=this; this.a=a; var _15=function(){ var a=_14.a; var _17=_14._dialog.hide(); var atr={href:"",target:"",title:"",onclick:""}; if(_17.type=="url"){ if(_17.href){ atr.href=_17.href; atr.target=_17.target; if(_17.target=="popup"){ if(_17.p_width){ _17.p_options.push("width="+_17.p_width); } if(_17.p_height){ _17.p_options.push("height="+_17.p_height); } atr.onclick="try{if(document.designMode && document.designMode == 'on') return false;}catch(e){} window.open(this.href, '"+(_17.p_name.replace(/[^a-z0-9_]/i,"_"))+"', '"+_17.p_options.join(",")+"');return false;"; } } }else{ if(_17.type=="anchor"){ if(_17.anchor){ atr.href=_17.anchor.value; } }else{ if(_17.to){ atr.href="mailto:"+_17.to; if(_17.subject){ atr.href+="?subject="+encodeURIComponent(_17.subject); } if(_17.body){ atr.href+=(_17.subject?"&":"?")+"body="+encodeURIComponent(_17.body); } } } } if(a&&a.tagName.toLowerCase()=="a"){ if(!atr.href){ if(confirm(_14._dialog._lc("Are you sure you wish to remove this link?"))){ var p=a.parentNode; while(a.hasChildNodes()){ p.insertBefore(a.removeChild(a.childNodes[0]),a); } p.removeChild(a); _14.editor.updateToolbar(); return; } }else{ for(var i in atr){ a.setAttribute(i,atr[i]); } if(Xinha.is_ie){ if(/mailto:([^?<>]*)(\?[^<]*)?$/i.test(a.innerHTML)){ a.innerHTML=RegExp.$1; } } } }else{ if(!atr.href){ return true; } var tmp=Xinha.uniq("http://www.example.com/Link"); _14.editor._doc.execCommand("createlink",false,tmp); var _1c=_14.editor._doc.getElementsByTagName("a"); for(var i=0;i<_1c.length;i++){ var _1d=_1c[i]; if(_1d.href==tmp){ if(!a){ a=_1d; } for(var j in atr){ _1d.setAttribute(j,atr[j]); } } } } _14.editor.selectNodeContents(a); _14.editor.updateToolbar(); }; this._dialog.show(_c,_15); }; Linker.prototype._getSelectedAnchor=function(){ var sel=this.editor.getSelection(); var rng=this.editor.createRange(sel); var a=this.editor.activeElement(sel); if(a!=null&&a.tagName.toLowerCase()=="a"){ return a; }else{ a=this.editor._getFirstAncestor(sel,"a"); if(a!=null){ return a; } } return null; }; Linker.prototype.onGenerateOnce=function(){ this._dialog=new Linker.Dialog(this); }; Linker.Dialog_dTrees=[]; Linker.Dialog=function(_22){ var _23=this; this.Dialog_nxtid=0; this.linker=_22; this.id={}; this.ready=false; this.files=false; this.html=false; this.dialog=false; this._prepareDialog(); }; Linker.Dialog.prototype._prepareDialog=function(){ var _24=this; var _25=this.linker; if(typeof dTree=="undefined"){ Xinha._loadback(_editor_url+"plugins/Linker/dTree/dtree.js",function(){ _24._prepareDialog(); }); return; } if(this.files==false){ if(_25.lConfig.backend){ Xinha._postback(_25.lConfig.backend,_25.lConfig.backend_data,function(txt){ try{ _24.files=eval(txt); } catch(Error){ _24.files=[{url:"",title:Error.toString()}]; } _24._prepareDialog(); }); }else{ if(_25.lConfig.files!=null){ _24.files=_25.lConfig.files; _24._prepareDialog(); } } return; } var _27=this.files; if(this.html==false){ Xinha._getback(_editor_url+"plugins/Linker/dialog.html",function(txt){ _24.html=txt; _24._prepareDialog(); }); return; } var _29=this.html; var _2a=this.dialog=new Xinha.Dialog(_25.editor,this.html,"Linker"); var _2b=Xinha.uniq("dTree_"); this.dTree=new dTree(_2b,_editor_url+"plugins/Linker/dTree/"); eval(_2b+" = this.dTree"); this.dTree.add(this.Dialog_nxtid++,-1,_25.lConfig.treeCaption,null,_25.lConfig.treeCaption); this.makeNodes(_27,0); var _2c=this.dialog.getElementById("dTree"); _2c.innerHTML=""; _2c.style.position="absolute"; _2c.style.left=1+"px"; _2c.style.top=0+"px"; _2c.style.overflow="auto"; _2c.style.backgroundColor="white"; this.ddTree=_2c; this.dTree._linker_premade=this.dTree.toString(); var _2d=this.dialog.getElementById("options"); _2d.style.position="absolute"; _2d.style.top=0+"px"; _2d.style.right=0+"px"; _2d.style.width=320+"px"; _2d.style.overflow="auto"; this.dialog.onresize=function(){ var h=parseInt(_2a.height)-_2a.getElementById("h1").offsetHeight; var w=parseInt(_2a.width)-322; if(w<0){ w=0; } if(h<0){ h=0; } _2d.style.height=_2c.style.height=h+"px"; _2c.style.width=w+"px"; }; this.ready=true; }; Linker.Dialog.prototype.makeNodes=function(_30,_31){ for(var i=0;i<_30.length;i++){ if(typeof _30[i]=="string"){ this.dTree.add(Linker.nxtid++,_31,_30[i].replace(/^.*\//,""),"javascript:document.getElementsByName('"+this.dialog.id.href+"')[0].value=decodeURIComponent('"+encodeURIComponent(_30[i])+"');document.getElementsByName('"+this.dialog.id.type+"')[0].click();document.getElementsByName('"+this.dialog.id.href+"')[0].focus();void(0);",_30[i]); }else{ if(_30[i].length){ var id=this.Dialog_nxtid++; this.dTree.add(id,_31,_30[i][0].replace(/^.*\//,""),null,_30[i][0]); this.makeNodes(_30[i][1],id); }else{ if(typeof _30[i]=="object"){ if(_30[i].children){ var id=this.Dialog_nxtid++; }else{ var id=Linker.nxtid++; } if(_30[i].title){ var _34=_30[i].title; }else{ if(_30[i].url){ var _34=_30[i].url.replace(/^.*\//,""); }else{ var _34="no title defined"; } } if(_30[i].url){ var _35="javascript:document.getElementsByName('"+this.dialog.id.href+"')[0].value=decodeURIComponent('"+encodeURIComponent(_30[i].url)+"');document.getElementsByName('"+this.dialog.id.type+"')[0].click();document.getElementsByName('"+this.dialog.id.href+"')[0].focus();void(0);"; }else{ var _35=""; } this.dTree.add(id,_31,_34,_35,_34); if(_30[i].children){ this.makeNodes(_30[i].children,id); } } } } } }; Linker.Dialog.prototype._lc=Linker.prototype._lc; Linker.Dialog.prototype.show=function(_36,ok,_38){ if(!this.ready){ var _39=this; window.setTimeout(function(){ _39.show(_36,ok,_38); },100); return; } if(this.ddTree.innerHTML==""){ this.ddTree.innerHTML=this.dTree._linker_premade; } if(_36.type=="url"){ this.dialog.getElementById("urltable").style.display=""; this.dialog.getElementById("mailtable").style.display="none"; this.dialog.getElementById("anchortable").style.display="none"; }else{ if(_36.type=="anchor"){ this.dialog.getElementById("urltable").style.display="none"; this.dialog.getElementById("mailtable").style.display="none"; this.dialog.getElementById("anchortable").style.display=""; }else{ this.dialog.getElementById("urltable").style.display="none"; this.dialog.getElementById("mailtable").style.display=""; this.dialog.getElementById("anchortable").style.display="none"; } } if(_36.target=="popup"){ this.dialog.getElementById("popuptable").style.display=""; }else{ this.dialog.getElementById("popuptable").style.display="none"; } var _3a=this.dialog.getElementById("anchor"); for(var i=_3a.length;i>=0;i--){ _3a[i]=null; } var _3c=this.linker.editor.getHTML(); var _3d=new Array(); var m=_3c.match(/]+name="([^"]+)"/gi); if(m){ for(i=0;iInsert/Modify Link
(the dTree goes in here)
Target:
Size: x (px)
Name:
Menu Bar: Toolbar:
Location Bar: Status Bar:
Scrollbars: Resizeable:
mailbox/xinha/plugins/Linker/scan.php0100664000567100000120000000555410565362764017674 0ustar jcameronwheel [ ]; $url, 'children'=>$subdir); } } elseif(is_file($path)) { if(($include && !preg_match($include, $url)) || ($exclude && preg_match($exclude, $url))) continue; $files[] = array('url'=>$url); } } } @closedir($dh); return dirsort($files); } function dirsort($files) { usort($files, 'dircomp'); return $files; } function dircomp($a, $b) { if(is_array($a)) $a = array_shift($a); if(is_array($b)) $b = array_shift($b); return strcmp(strtolower($a), strtolower($b)); } echo xinha_to_js(scan($dir)); ?> mailbox/xinha/plugins/Linker/dTree/0040775000567100000120000000000010567167545017276 5ustar jcameronwheelmailbox/xinha/plugins/Linker/dTree/api.html0100664000567100000120000001267610565362764020744 0ustar jcameronwheel Destroydrop » Javascripts » Tree » Api

Overview

Functions

add()

Adds a node to the tree.
Can only be called before the tree is drawn.

id, pid and name are required.

Parameters

Name Type Description
id Number Unique identity number.
pid Number Number refering to the parent node. The value for the root node has to be -1.
name String Text label for the node.
url String Url for the node.
title String Title for the node.
target String Target for the node.
icon String Image file to use as the icon. Uses default if not specified.
iconOpen String Image file to use as the open icon. Uses default if not specified.
open Boolean Is the node open.

Example

mytree.add(1, 0, 'My node', 'node.html', 'node title', 'mainframe', 'img/musicfolder.gif');


openAll()

Opens all the nodes.
Can be called before and after the tree is drawn.

Example

mytree.openAll();


closeAll()

Closes all the nodes.
Can be called before and after the tree is drawn.

Example

mytree.closeAll();


openTo()

Opens the tree to a certain node and can also select the node.
Can only be called after the tree is drawn.

Parameters

Name Type Description
id Number Identity number for the node.
select Boolean Should the node be selected.

Example

mytree.openTo(4, true);

Configuration

Variable Type Default Description
target String true Target for all the nodes.
folderLinks Boolean true Should folders be links.
useSelection Boolean true Nodes can be selected(highlighted).
useCookies Boolean true The tree uses cookies to rember it's state.
useLines Boolean true Tree is drawn with lines.
useIcons Boolean true Tree is drawn with icons.
useStatusText Boolean false Displays node names in the statusbar instead of the url.
closeSameLevel Boolean false Only one node within a parent can be expanded at the same time. openAll() and closeAll() functions do not work when this is enabled.
inOrder Boolean false If parent nodes are always added before children, setting this to true speeds up the tree.

Example

mytree.config.target = "mytarget";

mailbox/xinha/plugins/Linker/dTree/dtree.css0100664000567100000120000000163710565362764021115 0ustar jcameronwheel/*--------------------------------------------------| | dTree 2.05 | www.destroydrop.com/javascript/tree/ | |---------------------------------------------------| | Copyright (c) 2002-2003 Geir Landr? | |--------------------------------------------------*/ .dtree { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #666; white-space: nowrap; } .dtree img { border: 0px; vertical-align: middle; } .dtree a,.dtree a:visited { color: #333; text-decoration: none; } .dtree a.node, .dtree a.nodeSel { white-space: nowrap; padding: 1px 2px 1px 2px; /*padding: 0px 1px 0px 1px;*/ } .dtree a.node:hover, .dtree a.nodeSel:hover { color: #333; text-decoration: underline; } .dtree a.nodeSel { background-color: #c0d2ec; /* -moz-border-radius : 4px; border:1px dotted #333; */ } .dtree .clip { overflow: hidden; }mailbox/xinha/plugins/Linker/dTree/img/0040775000567100000120000000000010567167545020052 5ustar jcameronwheelmailbox/xinha/plugins/Linker/dTree/img/minusbottom.gif0100664000567100000120000000011410565364776023115 0ustar jcameronwheelGIF89a!, ˭b VW> jr;mailbox/xinha/plugins/Linker/dTree/img/minus.gif0100664000567100000120000000012210565364776021667 0ustar jcameronwheelGIF89a!,#˭b VW> jr% lT;mailbox/xinha/plugins/Linker/dTree/img/page.gif0100664000567100000120000000105410565364776021455 0ustar jcameronwheelGIF89aux뷷tgm}匮ipozr|zҊلU큕^aktmwejs~ꐣ!, $ =/@0, )>&# -?A6 % '<*"9 !+ú ;5. 38 4 (27:1Hp @;mailbox/xinha/plugins/Linker/dTree/img/move.gif0100664000567100000120000000121510565364776021506 0ustar jcameronwheelGIF89avggg99jjjuuuʮ̙鸸]]]㷷Å####LLL000f222NNN4466eeeWWW00\\\!  ,,,.--...&&&((()))˟nnnHH77fffGGՄyy! ,[(NV( 2S'v$ a d>W;'iR#t`CmPkI ^fb\3M =BG c*!gj)qs$]"<%&"&* eX 1% o?2H \,i AV,b D(28u:|`…yBD;8@BL6ڼA~."`  "&Hhݪ5;mailbox/xinha/plugins/Linker/dTree/img/plusbottom.gif0100664000567100000120000000012210565364776022744 0ustar jcameronwheelGIF89a!, #˭b VW>Yp|x6y"jB0YS;mailbox/xinha/plugins/Linker/dTree/img/empty.gif0100664000567100000120000000007610565362764021675 0ustar jcameronwheelGIF89a!,ڋޜ;mailbox/xinha/plugins/Linker/dTree/img/question.gif0100664000567100000120000000201210565364776022403 0ustar jcameronwheelGIF89a]kkψLlc\px]kfv])FК7EhKh)Unw虶OX0_PqdBd$=>EBcu8Yfpעf.\Ny_j/Me䞨”s|e7X7Yzp^ڳ*Htp甯﮽ҽɂle!,\QEl|@0$9q^ 0#҈> DA'4&p gA| 10P&$ @BϦsJisD'#Y~A"GQ8%pA T0(uNLԁ  ̗9SQQ0p\ 4-(!#% 7D %( ,1EDž(ka!N!޴1i\7"PPu#4Npr0q;mailbox/xinha/plugins/Linker/dTree/img/musicfolder.gif0100664000567100000120000000116210565364776023055 0ustar jcameronwheelGIF89aIƚu00dWs _`{̙444gNN~|ɖ1ddŚh˘3nljoɠ!%zĞqȕ0umlPp okڿlޙgƚr q ߚn*׸@cccu넉!,π +. 4 A@!,  /9;G2 )'DH* !Ƹ >:? BE0F8%  3" I#kA 4` y@B F ":XF #HBAP rI  );mailbox/xinha/plugins/Linker/dTree/img/cd.gif0100664000567100000120000000034410565364774021126 0ustar jcameronwheelGIF89a``a!,HV9RDG"4TE8A0A2CD.7 &c9c̐@$Ba0# vbxt gWF1C@,GR8+T!m'@  fT*]g5 &(;mailbox/xinha/plugins/Linker/dTree/img/join.gif0100664000567100000120000000007610565364776021503 0ustar jcameronwheelGIF89a!,  kޞAN%`HM;mailbox/xinha/plugins/Linker/dTree/img/joinbottom.gif0100664000567100000120000000006710565364776022730 0ustar jcameronwheelGIF89a!,  kޞA;mailbox/xinha/plugins/Linker/dTree/img/copy.gif0100664000567100000120000000120110565364774021503 0ustar jcameronwheelGIF89afgggjjjuuu泳ȷᙙ]]]...///000\\\LLL222WWWNNN ((())),,,&&&ݧäfffeee˝nnn! ,ހF,9?, 3B.) Y RJ+^($'T--@c$WPf4e8 KXQC;`( ]52N!M S gb)D#\& "#  UE/ % Z6LxAÄ Ѐ "у 1 AP+l)Q$DH@/-+@ >*@ȹHؠǐPA;mailbox/xinha/plugins/Linker/dTree/img/base.gif0100664000567100000120000000177210565364774021460 0ustar jcameronwheelGIF89aFFKQnjikэWeZqpgﱩ珘ϭ돏nneeЛeWz[[b䏠̾TĿ8‰e[qO־li㚚Vzn;\gȗ_蜘FFnnQQ||׶—l_V39׃wj音˭DZĚmdrl{k`ܖ~z݅yc^Pu_Qvjpk~x̂v䴴!, ∇CZ҈ N~(jl/}g Nr /cly`cvvE^/LV^8@㫼z[^~JG~ߖV6k' d}MX__'u=c{Yb~טTe rYO(`%JfI&LҲk`n8 pr=*_|چu}L`j: /gff}Ey~^<1-_;Onw.=T:.ȎSPZcrC~|Qy}Q޹6_>bLbIENDB`mailbox/xinha/plugins/Linker/dTree/img/nolines_minus.gif0100664000567100000120000000010010565364776023412 0ustar jcameronwheelGIF89a!,  ^ @X;e;mailbox/xinha/plugins/Linker/dTree/img/plus.gif0100664000567100000120000000012610565364776021523 0ustar jcameronwheelGIF89a!,'˭b VW>Yp|x6y"jB0Y?G;mailbox/xinha/plugins/Linker/dTree/img/trash.gif0100664000567100000120000000201410565364776021657 0ustar jcameronwheelGIF89aAA!!QQᢢuuusso~́́qqqpppﯽޥsssʽ}ˁw𡱱λߥu}}ޡذ򑑑kmm邿zŰggg𽽽{{{~ҏqq!,(PHDAP e(CG 2aÚBJ@켰P# 6ܘDyr!yO8  LG^ Xȃ1.itAX I"fPYIS* ސHSE"eG? >Qѣ  g D}!)p2r=P *?0 K'*H:S "G(Й`&h1`@;mailbox/xinha/plugins/Linker/dTree/img/offline.gif0100664000567100000120000000175110565364776022167 0ustar jcameronwheelGIF89aخ͗uuuXXXccczzzgggwbo]~ryb|vXCUqqqD;>"pppA#kficS9T8J,E$vuuL8ponhcb9,SK3,&+2";5\VA;oooQKSFjjjNG! ,HD  ETQ .N0h@Q: #0"vqD:\2@0dʰH '! ʃH~Hb/"ZE4z"!"h%М*lb!n6\H@9;mailbox/xinha/plugins/Linker/dTree/img/nolines_plus.gif0100664000567100000120000000010310565364776023245 0ustar jcameronwheelGIF89a!,  ʉ{[xqtR;mailbox/xinha/plugins/Linker/dTree/img/imgfolder.gif0100664000567100000120000000114110565364776022506 0ustar jcameronwheelGIF89aƚfus ój䩩ꠟjln{n𡋥h׸@ƚlBzwzq pur ׄϢ&C~r}ڿlp ̙4~ɖ1P߄guɠ!˘3!,1"$A<@ 4;"+?##:G7BI$!(*C)E0D5.  =3 8/ H9< @h0aī| H( #6ظQ"`P\N=S]p ;ERouQ1b[^t\p}S`[ި-FmݻvW4_|EfbqFWeYź2Hxh[>cD`|BQSġ_j{󆙨HUr*&hHcuUX-_iy|R~EEx)S; > 9)fL7ibl}}>~=6c3K~itdr]ug2LXo)MnG:xl$~[ev*P G]n{k~+'7O7gmKdm'w+Y}~5S2Yxmg$]J%%Ljbqrvxq@Hm>aVZ-!,HP( X4TUa .Y6,Dž@5X) 7Xrf%cGfܲIQÇo: Ws"neH-:`eblRL [1%R6 jI305^BF VY:s뙦#vJ>D# Oxq1@*j&E 4̐Ee/l H3rp:DD:<3懠%"e*ԣI!lVpƗOytqcbd< @;mailbox/xinha/plugins/Linker/dTree/img/folder.gif0100664000567100000120000000054310565364776022016 0ustar jcameronwheelGIF89auo۷R̙4~˘3l"jq *ɖ1۷qn%gzvs Œ-uǔ/Ʈ|hyȕ0(!,@hZp)t d:6lv㩔8 c,ˡ&Ph߁SP.+   `*,"$ #  IA;mailbox/xinha/plugins/Linker/dTree/img/folderopen.gif0100664000567100000120000000055510565364776022703 0ustar jcameronwheelGIF89aƚus ̙4ɖ1˘3hnljׄ"pr Ƭzq ȕ0ɠ!C~p *uzƚϢ&%gP넷ڿl׸@!,@DB pt dlf, )h Destroydrop » Javascripts » Tree

Destroydrop » Javascripts » Tree

Example

open all | close all

©2002-2003 Geir Landrö

mailbox/xinha/plugins/Linker/dTree/dtree.js0100664000567100000120000002203010565363452020722 0ustar jcameronwheelfunction Node(id,_2,_3,_4,_5,_6,_7,_8,_9){ this.id=id; this.pid=_2; this.name=_3; this.url=_4; this.title=_5; this.target=_6; this.icon=_7; this.iconOpen=_8; this._io=_9||false; this._is=false; this._ls=false; this._hc=false; this._ai=0; this._p; } function dTree(_a,_b){ this.config={target:null,folderLinks:true,useSelection:true,useCookies:true,useLines:true,useIcons:true,useStatusText:false,closeSameLevel:false,inOrder:false}; this.icon={root:_b+"img/base.gif",folder:_b+"img/folder.gif",folderOpen:_b+"img/folderopen.gif",node:_b+"img/page.gif",empty:_b+"img/empty.gif",line:_b+"img/line.gif",join:_b+"img/join.gif",joinBottom:_b+"img/joinbottom.gif",plus:_b+"img/plus.gif",plusBottom:_b+"img/plusbottom.gif",minus:_b+"img/minus.gif",minusBottom:_b+"img/minusbottom.gif",nlPlus:_b+"img/nolines_plus.gif",nlMinus:_b+"img/nolines_minus.gif"}; this.obj=_a; this.aNodes=[]; this.aIndent=[]; this.root=new Node(-1); this.selectedNode=null; this.selectedFound=false; this.completed=false; } dTree.prototype.add=function(id,_d,_e,_f,_10,_11,_12,_13,_14){ this.aNodes[this.aNodes.length]=new Node(id,_d,_e,_f,_10,_11,_12,_13,_14); }; dTree.prototype.openAll=function(){ this.oAll(true); }; dTree.prototype.closeAll=function(){ this.oAll(false); }; dTree.prototype.toString=function(){ this.setCS_All(); var str="
\n"; if(document.getElementById){ if(this.config.useCookies){ this.selectedNode=this.getSelected(); } str+=this.addNode(this.root); }else{ str+="Browser not supported."; } str+="
"; if(!this.selectedFound){ this.selectedNode=null; } this.completed=true; return str; }; dTree.prototype.addNode=function(_16){ var str=""; var n=0; if(this.config.inOrder){ n=_16._ai; } for(n;n"+this.indent(_1a,_1b); if(this.config.useIcons){ if(!_1a.icon){ _1a.icon=(this.root.id==_1a.pid)?this.icon.root:((_1a._hc)?this.icon.folder:this.icon.node); } if(!_1a.iconOpen){ _1a.iconOpen=(_1a._hc)?this.icon.folderOpen:this.icon.node; } if(this.root.id==_1a.pid){ _1a.icon=this.icon.root; _1a.iconOpen=this.icon.root; } str+="\"\""; } if(_1a.url){ str+=""; } } str+=_1a.name; if(_1a.url||((!this.config.folderLinks||!_1a.url)&&_1a._hc)){ str+=""; } str+=""; if(_1a._hc){ str+="
"; str+=this.addNode(_1a); str+="
"; } this.aIndent.pop(); return str; }; dTree.prototype.indent=function(_1d,_1e){ var str=""; if(this.root.id!=_1d.pid){ for(var n=0;n"; } (_1d._ls)?this.aIndent.push(0):this.aIndent.push(1); if(_1d._hc){ str+="\"\""; }else{ str+="\"\""; } } return str; }; dTree.prototype.setCS=function(_21){ var _22; for(var n=0;n Page Cleaner
Page Cleaner
Cleaning Area Selection All

Cleaning options
Formatting:

All HTML:



Select which types of formatting you would like to remove.

mailbox/xinha/plugins/UnFormat/img/0040775000567100000120000000000010567167546017317 5ustar jcameronwheelmailbox/xinha/plugins/UnFormat/img/unformat.gif0100664000567100000120000000021010565364776021631 0ustar jcameronwheelGIF89afffff333f!, 5 u]PNZ\mm)d"д1 NS;mailbox/xinha/plugins/UnFormat/un-format.js0100664000567100000120000000352210565363034020774 0ustar jcameronwheel// Unormat plugin for HTMLArea function UnFormat(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton({ id : "unformat", tooltip : this._lc("Page Cleaner"), image : editor.imgURL("unformat.gif", "UnFormat"), textMode : false, action : function(editor) { self.buttonPress(editor); } }); cfg.addToolbarElement("unformat", "killword", 1); } UnFormat._pluginInfo = { name : "UnFormat", version : "1.0", license : "htmlArea" }; UnFormat.prototype._lc = function(string) { return HTMLArea._lc(string, 'UnFormat'); }; UnFormat.prototype.buttonPress = function(editor){ editor._popupDialog( "plugin://UnFormat/unformat", function( param){ if (param) { if (param["cleaning_area"] == "all") { var html = editor._doc.body.innerHTML; } else { var html = editor.getSelectedHTML(); } if (param["html_all"]== true) { html = html.replace(/<[\!]*?[^<>]*?>/g, ""); } if (param["formatting"] == true) { html = html.replace(/style="[^"]*"/gi, ""); html = html.replace(/<\/?font[^>]*>/gi,""); html = html.replace(/<\/?b>/gi,""); html = html.replace(/<\/?strong[^>]*>/gi,""); html = html.replace(/<\/?i>/gi,""); html = html.replace(/<\/?em[^>]*>/gi,""); html = html.replace(/<\/?u[^>]*>/gi,""); html = html.replace(/<\/?strike[^>]*>/gi,""); html = html.replace(/ align=[^\s|>]*/gi,""); html = html.replace(/ class=[^\s|>]*/gi,""); } if (param["cleaning_area"] == "all") { editor._doc.body.innerHTML = html; } else { editor.insertHTML(html); } } else { return false; } }, null); };mailbox/xinha/plugins/UnFormat/lang/0040775000567100000120000000000010567167546017464 5ustar jcameronwheelmailbox/xinha/plugins/UnFormat/lang/ja.js0100664000567100000120000000067610565363034020406 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Page Cleaner": "ページクリーナー", "Cleaning Area": "クリーニング領域", "Selection": "選択部分", "All": "すべて", "Cleaning options": "クリーニングオプション", "Formatting:": "書式指定タグ:", "All HTML:": "全HTMLタグ:", "Select which types of formatting you would like to remove.": "削除する書式を選択してください。" };mailbox/xinha/plugins/UnFormat/lang/nl.js0100664000567100000120000000063510565363034020420 0ustar jcameronwheel// I18N constants // LANG: "nl", ENCODING: UTF-8 { "Page Cleaner": "Pagina Schoonmaker", "Cleaning Area": "Schoonmaak gebied", "Selection": "Geselecteerde tekst", "All": "Alles", "Cleaning options": "Schoonmaak opties", "Formatting:": "Format", "All HTML:": "Alle html", "Select which types of formatting you would like to remove." : "Selecteer welke types van Formatteren je wilt verwijderen" }; mailbox/xinha/plugins/UnFormat/lang/de.js0100664000567100000120000000066710565363034020404 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 | ISO-8859-1 { "Page Cleaner": "Seite bereinigen", "Cleaning Area": "Reinigungsbereich", "Selection": "Ausgewählter Bereich", "All": "Alles", "Cleaning options": "Reinigungsoptionen", "Formatting:": "Formatierung:", "All HTML:": "Ganzes HTML:", "Select which types of formatting you would like to remove." : "Wählen Sie aus welche Formatierungen Sie entfernen wollen." }; mailbox/xinha/plugins/UnFormat/lang/nb.js0100664000567100000120000000074210565363034020405 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Page Cleaner": "Dokumentvasker", "Cleaning Area": "Vaskeområde", "Selection": "Markert område", "All": "Hele dokumentet", "Cleaning options": "Vaskemetoder", "Formatting:": "Formattering:", "All HTML:": "All HTML-kode:", "Select which types of formatting you would like to remove.": "Velg hva slags formattering du ønsker å fjerne." };mailbox/xinha/plugins/UnFormat/lang/fr.js0100664000567100000120000000063010565363034020411 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Page Cleaner": "Nettoyeur de page", "Cleaning Area": "Zone de nettoyage", "Selection": "Sélection", "All": "Tout", "Cleaning options": "Options de nettoyage", "Formatting:": "Format", "All HTML:": "Tout le HTML", "Select which types of formatting you would like to remove.": "Sélectionnez quel type de formatage vous voulez supprimer." };mailbox/xinha/plugins/Abbreviation/0040775000567100000120000000000010567167541017410 5ustar jcameronwheelmailbox/xinha/plugins/Abbreviation/popups/0040775000567100000120000000000010567167541020736 5ustar jcameronwheelmailbox/xinha/plugins/Abbreviation/popups/abbreviation.html0100664000567100000120000000535310565363016024265 0ustar jcameronwheel Abbreviation
Abbreviation
Expansion:
mailbox/xinha/plugins/Abbreviation/img/0040775000567100000120000000000010567167541020164 5ustar jcameronwheelmailbox/xinha/plugins/Abbreviation/img/ed_abbreviation.gif0100664000567100000120000000020610565364774023770 0ustar jcameronwheelGIF89a!,K*H"Ozdda`FcA}aP j1o:mSy|$,i;(G-`pv!.C;mailbox/xinha/plugins/Abbreviation/lang/0040775000567100000120000000000010567167541020331 5ustar jcameronwheelmailbox/xinha/plugins/Abbreviation/lang/ja.js0100664000567100000120000000021510565363014021243 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Abbreviation": "略語", "Expansion:": "展開される語:", "Delete": "削除" };mailbox/xinha/plugins/Abbreviation/lang/de.js0100664000567100000120000000035110565363014021242 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Abbreviation": "Abkürzung", "Expansion:": "Erklärung:", "Delete": "Löschen" }; mailbox/xinha/plugins/Abbreviation/lang/nb.js0100664000567100000120000000033510565363014021253 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Abbreviation": "Beskrive forkortelse", "Expansion:": "Betydning:", "Delete": "Fjerne" };mailbox/xinha/plugins/Abbreviation/lang/fr.js0100664000567100000120000000021610565363014021261 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Abbreviation": "Abréviation", "Expansion:": "Explication", "Delete": "Supprimer" };mailbox/xinha/plugins/Abbreviation/abbreviation.css0100664000567100000120000000042310565363016022554 0ustar jcameronwheelabbr, acronym, span.abbr { width: 18px; height: 18px; background-image: url(img/ed_abbreviation.gif); background-repeat: no-repeat; background-position: left top; white-space : nowrap; cursor: help; border-bottom: 1px dashed #000; padding-left: 19px; }mailbox/xinha/plugins/Abbreviation/abbr/0040775000567100000120000000000010567167541020316 5ustar jcameronwheelmailbox/xinha/plugins/Abbreviation/abbr/en.js0100664000567100000120000000106210565363014021241 0ustar jcameronwheel// I18N constants // LANG: "en", ENCODING: UTF-8 // Author: Udo Schmal, // // (c) Udo Schmal & Schaffrath NeueMedien 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "ANSI": "American National Standards Institute", "ASA": "American Standards Association", "ISO": "International Organisation for Standardization", "mime": "Multipurpose Internet Mail Extensions", "UTF": "Unicode Transformation Format", "W3C": "World Wide Web Consortium" }; mailbox/xinha/plugins/Abbreviation/abbr/de.js0100664000567100000120000000207110565363014021230 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Author: Udo Schmal, // // (c) Udo Schmal & Schaffrath NeueMedien 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Abs.": "Absatz", "bspw.": "Beispielsweise", "bzw.": "beziehungsweise", "c/o": "care of / bei, zu Händen von", "ca.": "circa", "d.h.": "das heißt", "d.J.": "des Jahres", "Dr.": "Doktor", "e.V.": "Eingetragener Verein", "eG.": "Eingetragene Genossenschaft", "ehem.": "ehemals", "einschl.": "einschließlich", "etc.": "et cetera / und so weiter", "evtl.": "eventuell", "ff.": "(fort) folgende", "gem.": "gemäß", "inkl.": "inklusive", "max.": "maximal / maximum", "min.": "mindestens / minimum / minimal", "o.g.": "oben genannt", "rd.": "rund", "S.": "Seite", "u.a.": "unter anderem", "u.ä.": "und ähnlich", "usw.": "und so weiter", "vgl.": "vergleiche", "z.B.": "zum Beispiel", "z.T.": "zum Teil", "z.Z.": "zur Zeit", "zzgl.": "zuzüglich" }; mailbox/xinha/plugins/Abbreviation/abbreviation.js0100664000567100000120000000344410565363432022410 0ustar jcameronwheelfunction Abbreviation(_1){ this.editor=_1; var _2=_1.config; var _3=this; _2.registerButton({id:"abbreviation",tooltip:this._lc("Abbreviation"),image:_1.imgURL("ed_abbreviation.gif","Abbreviation"),textMode:false,action:function(_4){ _3.buttonPress(_4); }}); _2.addToolbarElement("abbreviation","inserthorizontalrule",1); } Abbreviation._pluginInfo={name:"Abbreviation",version:"1.0",developer:"Udo Schmal",developer_url:"",sponsor:"L.N.Schaffrath NeueMedien",sponsor_url:"http://www.schaffrath-neuemedien.de/",c_owner:"Udo Schmal & Schaffrath-NeueMedien",license:"htmlArea"}; Abbreviation.prototype._lc=function(_5){ return HTMLArea._lc(_5,"Abbreviation"); }; Abbreviation.prototype.onGenerate=function(){ var _6="Abbr-style"; var _7=this.editor._doc.getElementById(_6); if(_7==null){ _7=this.editor._doc.createElement("link"); _7.id=_6; _7.rel="stylesheet"; _7.href=_editor_url+"plugins/Abbreviation/abbreviation.css"; this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(_7); } }; Abbreviation.prototype.buttonPress=function(_8,_9,_a){ var _b=null; var _c=_8.getSelectedHTML(); var _d=_8._getSelection(); var _e=_8._createRange(_d); var _f=_8._activeElement(_d); if(!(_f!=null&&_f.tagName.toLowerCase()=="abbr")){ _f=_8._getFirstAncestor(_d,"abbr"); } if(_f!=null&&_f.tagName.toLowerCase()=="abbr"){ _b={title:_f.title,text:_f.innerHTML}; }else{ _b={title:"",text:_c}; } _8._popupDialog("plugin://Abbreviation/abbreviation",function(_10){ if(_10){ var _11=_10["title"]; if(_11==""||_11==null){ if(_f){ var _12=_f.innerHTML; _f.parentNode.removeChild(_f); _8.insertHTML(_12); } return; } try{ var doc=_8._doc; if(!_f){ _f=doc.createElement("abbr"); _f.title=_11; _f.innerHTML=_c; if(HTMLArea.is_ie){ _e.pasteHTML(_f.outerHTML); }else{ _8.insertNodeAtSelection(_f); } }else{ _f.title=_11; } } catch(e){ } } },_b); }; mailbox/xinha/plugins/FullPage/0040775000567100000120000000000010567167542016503 5ustar jcameronwheelmailbox/xinha/plugins/FullPage/popups/0040775000567100000120000000000010567167542020031 5ustar jcameronwheelmailbox/xinha/plugins/FullPage/popups/docprop.html0100664000567100000120000001051010565363042022346 0ustar jcameronwheel Document properties
Document properties
mailbox/xinha/plugins/FullPage/full-page.js0100664000567100000120000001012510565363444020706 0ustar jcameronwheelfunction FullPage(_1){ this.editor=_1; var _2=_1.config; _2.fullPage=true; var _3=this; _2.registerButton("FP-docprop",this._lc("Document properties"),_1.imgURL("docprop.gif","FullPage"),false,function(_4,id){ _3.buttonPress(_4,id); }); _2.addToolbarElement(["separator","FP-docprop"],"separator",-1); } FullPage._pluginInfo={name:"FullPage",version:"1.0",developer:"Mihai Bazon",developer_url:"http://dynarch.com/mishoo/",c_owner:"Mihai Bazon",sponsor:"Thycotic Software Ltd.",sponsor_url:"http://thycotic.com",license:"htmlArea"}; FullPage.prototype._lc=function(_6){ return HTMLArea._lc(_6,"FullPage"); }; FullPage.prototype.buttonPress=function(_7,id){ var _9=this; switch(id){ case "FP-docprop": var _a=_7._doc; var _b=_a.getElementsByTagName("link"); var _c=""; var _d=""; var _e=""; var _f=""; var _10=""; for(var i=_b.length;--i>=0;){ var _12=_b[i]; if(/stylesheet/i.test(_12.rel)){ if(/alternate/i.test(_12.rel)){ _d=_12.href; }else{ _c=_12.href; } } } var _13=_a.getElementsByTagName("meta"); for(var i=_13.length;--i>=0;){ var _14=_13[i]; if(/content-type/i.test(_14.httpEquiv)){ r=/^text\/html; *charset=(.*)$/i.exec(_14.content); _10=r[1]; }else{ if((/keywords/i.test(_14.name))||(/keywords/i.test(_14.id))){ _e=_14.content; }else{ if((/description/i.test(_14.name))||(/description/i.test(_14.id))){ _f=_14.content; } } } } var _15=_a.getElementsByTagName("title")[0]; _15=_15?_15.innerHTML:""; var _16={f_doctype:_7.doctype,f_title:_15,f_body_bgcolor:HTMLArea._colorToRgb(_a.body.style.backgroundColor),f_body_fgcolor:HTMLArea._colorToRgb(_a.body.style.color),f_base_style:_c,f_alt_style:_d,f_charset:_10,f_keywords:_e,f_description:_f,editor:_7}; _7._popupDialog("plugin://FullPage/docprop",function(_17){ _9.setDocProp(_17); },_16); break; } }; FullPage.prototype.setDocProp=function(_18){ var txt=""; var doc=this.editor._doc; var _1b=doc.getElementsByTagName("head")[0]; var _1c=doc.getElementsByTagName("link"); var _1d=doc.getElementsByTagName("meta"); var _1e=null; var _1f=null; var _20=null; var _21=null; var _22=null; var _23=null; for(var i=_1c.length;--i>=0;){ var _25=_1c[i]; if(/stylesheet/i.test(_25.rel)){ if(/alternate/i.test(_25.rel)){ _1f=_25; }else{ _1e=_25; } } } for(var i=_1d.length;--i>=0;){ var _26=_1d[i]; if(/content-type/i.test(_26.httpEquiv)){ r=/^text\/html; *charset=(.*)$/i.exec(_26.content); _20=r[1]; _21=_26; }else{ if((/keywords/i.test(_26.name))||(/keywords/i.test(_26.id))){ _22=_26; }else{ if((/description/i.test(_26.name))||(/description/i.test(_26.id))){ _23=_26; } } } } function createLink(alt){ var _28=doc.createElement("link"); _28.rel=alt?"alternate stylesheet":"stylesheet"; _1b.appendChild(_28); return _28; } function createMeta(_29,_2a,_2b){ var _2c=doc.createElement("meta"); if(_29!=""){ _2c.httpEquiv=_29; } if(_2a!=""){ _2c.name=_2a; } if(_2a!=""){ _2c.id=_2a; } _2c.content=_2b; _1b.appendChild(_2c); return _2c; } if(!_1e&&_18.f_base_style){ _1e=createLink(false); } if(_18.f_base_style){ _1e.href=_18.f_base_style; }else{ if(_1e){ _1b.removeChild(_1e); } } if(!_1f&&_18.f_alt_style){ _1f=createLink(true); } if(_18.f_alt_style){ _1f.href=_18.f_alt_style; }else{ if(_1f){ _1b.removeChild(_1f); } } if(_21){ _1b.removeChild(_21); _21=null; } if(!_21&&_18.f_charset){ _21=createMeta("Content-Type","","text/html; charset="+_18.f_charset); } if(!_22&&_18.f_keywords){ _22=createMeta("","keywords",_18.f_keywords); }else{ if(_18.f_keywords){ _22.content=_18.f_keywords; }else{ if(_22){ _1b.removeChild(_22); } } } if(!_23&&_18.f_description){ _23=createMeta("","description",_18.f_description); }else{ if(_18.f_description){ _23.content=_18.f_description; }else{ if(_23){ _1b.removeChild(_23); } } } for(var i in _18){ var val=_18[i]; switch(i){ case "f_title": var _2e=doc.getElementsByTagName("title")[0]; if(!_2e){ _2e=doc.createElement("title"); _1b.appendChild(_2e); }else{ while(node=_2e.lastChild){ _2e.removeChild(node); } } if(!HTMLArea.is_ie){ _2e.appendChild(doc.createTextNode(val)); }else{ doc.title=val; } break; case "f_doctype": this.editor.setDoctype(val); break; case "f_body_bgcolor": doc.body.style.backgroundColor=val; break; case "f_body_fgcolor": doc.body.style.color=val; break; } } }; mailbox/xinha/plugins/FullPage/img/0040775000567100000120000000000010567167542017257 5ustar jcameronwheelmailbox/xinha/plugins/FullPage/img/docprop.gif0100664000567100000120000000114510565364774021416 0ustar jcameronwheelGIF89a0H`𐠰@p@x@P`РPppАu[pw`ਞ3f̙̐pЄhpwphP@Xp{`@@80PXp` `x@0 Р pp``P@@0~`hp`𸨓Phcfffpppp`Pа`!,€"&X  `!!?)031<:0 (8>E9J-5 A%Q, (//@$D%Y UԽ;7##W^'+Z8҃&\\ʼnY,XE0 z( T0b-6@ē$C4Q3;mailbox/xinha/plugins/FullPage/lang/0040775000567100000120000000000010567167542017424 5ustar jcameronwheelmailbox/xinha/plugins/FullPage/lang/ja.js0100664000567100000120000000103510565363036020342 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Alternate style-sheet:": "代替スタイルシート:", "Background color:": "背景色:", "Cancel": "中止", "DOCTYPE:": "DOCTYPE:", "Document properties": "文書のプロパティ", "Document title:": "文書の表題:", "OK": "OK", "Primary style-sheet:": "優先スタイルシート:", "Text color:": "文字色:", "Character set:": "文字セット:", "Description:": "説明:", "Keywords:": "キーワード:", "UTF-8 (recommended)": "UTF-8 (推奨)" };mailbox/xinha/plugins/FullPage/lang/nl.js0100664000567100000120000000064010565363036020362 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "nl", ENCODING: UTF-8 { "Alternate style-sheet:": "Wisselen van style-sheet:", "Background color:": "Achtergrondkleur:", "Cancel": "Annuleren", "DOCTYPE:": "DOCTYPE:", "Document properties": "Documenteigenschappen", "Document title:": "Documenttitel:", "OK": "OK", "Primary style-sheet:": "Primaire style-sheet:", "Text color:": "Tekstkleur:" };mailbox/xinha/plugins/FullPage/lang/de.js0100664000567100000120000000114310565363036020340 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "de", ENCODING: UTF-8 // Author: Holger Hees, http://www.systemconcept.de { "Alternate style-sheet:": "Alternativer Stylesheet:", "Background color:": "Hintergrundfarbe:", "Cancel": "Abbrechen", "DOCTYPE:": "DOCTYPE:", "Document properties": "Dokumenteigenschaften", "Document title:": "Dokumenttitel:", "OK": "OK", "Primary style-sheet:": "Stylesheet:", "Text color:": "Textfarbe:", "Character set:": "Zeichensatz", "Description:": "Beschreibung", "Keywords:": "Schlüsselworte", "UTF-8 (recommended)": "UTF-8 (empfohlen)" } mailbox/xinha/plugins/FullPage/lang/pl.js0100664000567100000120000000116710565363036020371 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "pl", ENCODING: UTF-8 // translated: Krzysztof Kotowicz, koto1sa@o2.pl, http://www.eskot.krakow.pl/portfolio { "Alternate style-sheet:": "Alternatywny arkusz stylów:", "Background color:": "Kolor tła:", "Cancel": "Anuluj", "DOCTYPE:": "DOCTYPE:", "Document properties": "Właściwości dokumentu", "Document title:": "Tytuł dokumentu:", "OK": "OK", "Primary style-sheet:": "Arkusz stylów:", "Text color:": "Kolor tekstu:", "Character set:": "Zestaw znaków", "Description:": "Opis", "Keywords:": "Słowa kluczowe", "UTF-8 (recommended)": "UTF-8 (zalecany)" }; mailbox/xinha/plugins/FullPage/lang/ro.js0100664000567100000120000000075410565363040020372 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "en", ENCODING: UTF-8 // Author: Mihai Bazon, http://dynarch.com/mishoo { "Alternate style-sheet:": "Template CSS alternativ:", "Background color:": "Culoare de fundal:", "Cancel": "Renunţă", "DOCTYPE:": "DOCTYPE:", "Document properties": "Proprietăţile documentului", "Document title:": "Titlul documentului:", "OK": "Acceptă", "Primary style-sheet:": "Template CSS principal:", "Text color:": "Culoare text:" }; mailbox/xinha/plugins/FullPage/lang/nb.js0100664000567100000120000000104210565363040020340 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Alternate style-sheet:": "Alternativt stilsett:", "Background color:": "Bakgrunnsfarge:", "Cancel": "Avbryt", "DOCTYPE:": "DOCTYPE:", "Keywords:": "Nøkkelord", "Description:": "Beskrivelse", "Character set:": "Tegnsett", "Document properties": "Egenskaper for dokument", "Document title:": "Tittel på dokument:", "OK": "OK", "Primary style-sheet:": "Stilsett:", "Text color:": "Tekstfarge:" };mailbox/xinha/plugins/FullPage/lang/fr.js0100664000567100000120000000110710565363036020357 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "fr", ENCODING: UTF-8 { "Alternate style-sheet:": "Feuille CSS alternative", "Background color:": "Couleur d'arrière plan", "Cancel": "Annuler", "DOCTYPE:": "DOCTYPE", "Document properties": "Propriétés du document", "Document title:": "Titre du document", "OK": "OK", "Primary style-sheet:": "Feuille CSS primaire", "Text color:": "Couleur de texte", "Character set:": "Jeu de caractères", "Description:": "Description", "Keywords:": "Mots clés", "UTF-8 (recommended)": "UTF-8 (recommandé)" };mailbox/xinha/plugins/FullPage/lang/he.js0100664000567100000120000000102410565363036020342 0ustar jcameronwheel// I18N for the FullPage plugin // LANG: "he", ENCODING: UTF-8 // Author: Liron Newman, http://www.eesh.net, { "Alternate style-sheet:": "גיליון סגנון אחר:", "Background color:": "צבע רקע:", "Cancel": "ביטול", "DOCTYPE:": "DOCTYPE:", "Document properties": "מאפייני מסמך", "Document title:": "כותרת מסמך:", "OK": "אישור", "Primary style-sheet:": "גיליון סגנון ראשי:", "Text color:": "צבע טקסט:" }; mailbox/xinha/plugins/FindReplace/0040775000567100000120000000000010567167542017160 5ustar jcameronwheelmailbox/xinha/plugins/FindReplace/fr_engine.js0100664000567100000120000000600310565363442021441 0ustar jcameronwheelvar FindReplace=window.opener.FindReplace; var editor=FindReplace.editor; var is_mo=window.opener.HTMLArea.is_gecko; var tosearch=""; var pater=null; var buffer=null; var matches=0; var replaces=0; var fr_spans=new Array(); function _lc(_1){ return (window.opener.HTMLArea._lc(_1,"FindReplace")); } function execSearch(_2){ var _3=editor._doc.body.innerHTML; if(buffer==null){ buffer=_3; } if(_2["fr_pattern"]!=tosearch){ if(tosearch!=""){ clearDoc(); } tosearch=_2["fr_pattern"]; } if(matches==0){ er=_2["fr_words"]?"/(?!<[^>]*)(\\b"+_2["fr_pattern"]+"\\b)(?![^<]*>)/g":"/(?!<[^>]*)("+_2["fr_pattern"]+")(?![^<]*>)/g"; if(!_2["fr_matchcase"]){ er+="i"; } pater=eval(er); var _4=""; var _5=""; var _6=_3.replace(pater,_4+"$1"+_5); editor.setHTML(_6); var _7=editor._doc.body.getElementsByTagName("span"); for(var i=0;i<_7.length;i++){ if(/^frmark/.test(_7[i].id)){ fr_spans.push(_7[i]); } } } spanWalker(_2["fr_pattern"],_2["fr_replacement"],_2["fr_replaceall"]); } function spanWalker(_9,_a,_b){ var _c=false; clearMarks(); for(var i=matches;i=fr_spans.length-1); if(_f||!_c){ var _10=_lc("Done")+":\n\n"; if(matches>0){ if(matches==1){ _10+=matches+" "+_lc("found item"); }else{ _10+=matches+" "+_lc("found items"); } if(replaces>0){ if(replaces==1){ _10+=",\n"+replaces+" "+_lc("replaced item"); }else{ _10+=",\n"+replaces+" "+_lc("replaced items"); } } hiliteAll(); disab("fr_hiliteall",false); }else{ _10+="\""+_9+"\" "+_lc("not found"); } alert(_10+"."); } } function clearDoc(){ var doc=editor._doc.body.innerHTML; var er=/(]*id=.?frmark[^>]*>)([^<>]*)(<\/span>)/gi; editor._doc.body.innerHTML=doc.replace(er,"$2"); pater=null; tosearch=""; fr_spans=new Array(); matches=0; replaces=0; disab("fr_hiliteall,fr_clear",true); } function clearMarks(){ var _13=editor._doc.body.getElementsByTagName("span"); for(var i=0;i<_13.length;i++){ var elm=_13[i]; if(/^frmark/.test(elm.id)){ var _16=editor._doc.getElementById(elm.id).style; _16.backgroundColor=""; _16.color=""; _16.fontWeight=""; } } } function hiliteAll(){ var _17=editor._doc.body.getElementsByTagName("span"); for(var i=0;i<_17.length;i++){ var elm=_17[i]; if(/^frmark/.test(elm.id)){ var _1a=editor._doc.getElementById(elm.id).style; _1a.backgroundColor="highlight"; _1a.color="white"; _1a.fontWeight="bold"; } } } function resetContents(){ if(buffer==null){ return; } var _1b=editor._doc.body.innerHTML; editor._doc.body.innerHTML=buffer; buffer=_1b; } function disab(_1c,_1d){ var _1e=_1c.split(/[,; ]+/); for(var i=0;i<_1e.length;i++){ document.getElementById(_1e[i]).disabled=_1d; } } mailbox/xinha/plugins/FindReplace/popups/0040775000567100000120000000000010567167542020506 5ustar jcameronwheelmailbox/xinha/plugins/FindReplace/popups/find_replace.html0100664000567100000120000001241210565363022023771 0ustar jcameronwheel Find and Replace
Find and Replace
Search for:
Replace with:
Options Whole words only
Case sensitive search
Substitute all occurrences
mailbox/xinha/plugins/FindReplace/img/0040775000567100000120000000000010567167542017734 5ustar jcameronwheelmailbox/xinha/plugins/FindReplace/img/ed_find.gif0100664000567100000120000000014210565364774022011 0ustar jcameronwheelGIF89a!, '* !jؔpEa8.7tXj PXg06r3 ;mailbox/xinha/plugins/FindReplace/lang/0040775000567100000120000000000010567167542020101 5ustar jcameronwheelmailbox/xinha/plugins/FindReplace/lang/ja.js0100664000567100000120000000162710565363022021021 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { // messages "Substitute this occurrence?": "置換しますか?", "Enter the text you want to find": "検索したいテキストを入力します", "Inform a replacement word": "単語の置換を知らせる", "found items": "件が検索されました", "replaced items": "件が置換されました", "found item": "件が検索されました", "replaced item": "件が置換されました", "not found": "はありません", // window "Find and Replace": "検索/置換", "Search for:": "検索:", "Replace with:": "置換:", "Options": "設定", "Whole words only": "完全一致のみ", "Case sensitive search": "大文字/小文字区別", "Substitute all occurrences": "すべて置換", "Clear": "通常表示", "Highlight": "強調表示", "Undo": "元に戻す", "Next": "次を検索", "Done": "終了" };mailbox/xinha/plugins/FindReplace/lang/pt_br.js0100664000567100000120000000164710565363022021537 0ustar jcameronwheel// I18N constants // LANG: "pt-br" // Author: Cau guanabara (independent developer), caugb@ibest.com.br { // mensagens "Substitute this occurrence?": "Substituir?", "Enter the text you want to find": "Digite um termo para a busca", "Inform a replacement word": "Informe um termo para a substituição", "found items": "itens localizados", "replaced items": "itens substituídos", "found item": "item localizado", "replaced item": "item substituído", "not found": "não encontrado", // janela "Find and Replace": "Localizar e Substituir", "Search for:": "Localizar:", "Replace with:": "Substituir por:", "Options": "Opções", "Whole words only": "Apenas palavras inteiras", "Case sensitive search": "Diferenciar caixa alta/baixa", "Substitute all occurrences": "Substituir todas", "Highlight": "Remarcar", "Clear": "Limpar", "Undo": "Desfazer", "Next": "Próxima", "Done": "Concluído" }; mailbox/xinha/plugins/FindReplace/lang/de.js0100664000567100000120000000172610565363022021017 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { // messages "Substitute this occurrence?": "Treffer ersetzen?", "Enter the text you want to find": "Geben Sie einen Text ein den Sie finden möchten", "Inform a replacement word": "Geben sie einen Text zum ersetzen ein", "found items": "alle Treffer", "replaced items": "ersetzte Treffer", "found item": "Treffer", "replaced item": "ersetzter Treffer", "not found": "kein Teffer", // window "Find and Replace": "Suchen und ersetzen", "Search for:": "Suchen nach:", "Replace with:": "Ersetzen durch:", "Options": "Optionen", "Whole words only": "Ganze Wörter", "Case sensitive search": "Groß-/Kleinschreibung", "Substitute all occurrences": "alle Treffer ersetzen", "Clear": "Nächstes ersetzen", "Highlight": "Hervorheben", "Undo": "Rückgängig", "Next": "Nächster", "Done": "Fertig" };mailbox/xinha/plugins/FindReplace/lang/sv.js0100664000567100000120000000161510565363022021054 0ustar jcameronwheel// I18N constants // LANG: "sv" (Swedish), ENCODING: UTF-8 // translated: Erik Dalén, { // messages "Substitute this occurrence?": "Ersätt denna?", "Enter the text you want to find": "Skriv in text du vill söka", "Inform a replacement word": "Skriv in ett ersättningsord", "found items": "förekomster funna i sökningen", "replaced items": "förekomster erstatta", "found item": "Träff", "replaced item": "erstatt träff", "not found": "inte funnet", // window "Find and Replace": "Sök och ersätt", "Search for:": "Sök efter:", "Replace with:": "Ersätt med:", "Options": "Välj", "Whole words only": "Bara hela ord", "Case sensitive search": "Skilj mellan stora och små bokstäver", "Substitute all occurrences": "Erstatt alla träffar", "Clear": "Töm", "Highlight": "Markera", "Undo": "Tillbaka", "Next": "Nästa", "Done": "Färdig" }; mailbox/xinha/plugins/FindReplace/lang/pl.js0100664000567100000120000000163210565363022021036 0ustar jcameronwheel// I18N constants // LANG: "pl", ENCODING: UTF-8 // translated: Krzysztof Kotowicz, koto1sa@o2.pl, http://www.eskot.krakow.pl/portfolio { // messages "Substitute this occurrence?": "Zamienić to wystąpienie?", "Enter the text you want to find": "Podaj tekst, jaki chcesz wyszukać", "Inform a replacement word": "Podaj tekst do zamiany", "found items": "znalezionych", "replaced items": "zamienionych", "found item": "znaleziony", "replaced item": "zamieniony", "not found": "nie znaleziony", // window "Find and Replace": "Znajdź i zamień", "Search for:": "Szukaj:", "Replace with:": "Zamień na:", "Options": "Opcje", "Whole words only": "Całe słowa", "Case sensitive search": "Wg wielkości liter", "Substitute all occurrences": "Zamień wszystkie wystąpienia", "Clear": "Wyczyść", "Highlight": "Podświetl", "Undo": "Cofnij", "Next": "Następny", "Done": "Gotowe" };mailbox/xinha/plugins/FindReplace/lang/ru.js0100664000567100000120000000213510565363022021050 0ustar jcameronwheel// I18N constants // LANG: "ru", ENCODING: UTF-8 // Author: Andrei Blagorazumov, a@fnr.ru { // messages "Substitute this occurrence?": "Заменить это вхождение?", "Enter the text you want to find": "Введите текст, который вы хотите найти", "Inform a replacement word": "Показать замещающее слово", "found items": "найти", "replaced items": "замененные", "found item": "найти", "replaced item": "замененная", "not found": "не найдено", // window "Find and Replace": "Найти и заменить", "Search for:": "Найти", "Replace with:": "Заменить с", "Options": "Опции", "Whole words only": "Только слова целиком", "Case sensitive search": "Поиск с учетом регистра", "Substitute all occurrences": "Заменить все вхождения", "Clear": "Очистить", "Highlight": "Выделить", "Undo": "Отменить", "Next": "След.", "Done": "OK" };mailbox/xinha/plugins/FindReplace/lang/nb.js0100664000567100000120000000170710565363022021025 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { // messages "Substitute this occurrence?": "Vennligst bekreft at du vil erstatte?", "Enter the text you want to find": "Skriv inn teksten du ønsker å finne", "Inform a replacement word": "Vennligst skriv inn et erstatningsord / setning", "found items": "forekomster funnet i søket", "replaced items": "forekomster erstattet", "found item": "Treff", "replaced item": "erstattet treff", "not found": "ikke funnet", // window "Find and Replace": "Søk og erstatt", "Search for:": "Søk etter:", "Replace with:": "Erstatt med:", "Options": "Valg", "Whole words only": "Bare hele ord", "Case sensitive search": "Skille mellom store og små bokstaver", "Substitute all occurrences": "Erstatt alle treff", "Clear": "Tøm", "Highlight": "Uthev", "Undo": "Tilbake", "Next": "Neste", "Done": "Ferdig" };mailbox/xinha/plugins/FindReplace/lang/fr.js0100664000567100000120000000156110565363022021033 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { // messages "Substitute this occurrence?": "Remplacer cette occurrence ?", "Enter the text you want to find": "Texte à trouver", "Inform a replacement word": "Indiquez un mot de remplacement", "found items": "éléments trouvés", "replaced items": "éléments remplacés", "found item": "élément trouvé", "replaced item": "élément remplacé", "not found": "non trouvé", // window "Find and Replace": "Chercher et Remplacer", "Search for:": "Chercher", "Replace with:": "Remplacer par", "Options": "Options", "Whole words only": "Mots entiers seulement", "Case sensitive search": "Recherche sensible à la casse", "Substitute all occurrences": "Remplacer toutes les occurences", "Clear": "Effacer", "Highlight": "Surligner", "Undo": "Annuler", "Next": "Suivant", "Done": "Fin" };mailbox/xinha/plugins/FindReplace/find-replace.js0100664000567100000120000000272010565363022022032 0ustar jcameronwheel/*---------------------------------------*\ Find and Replace Plugin for HTMLArea-3.0 ----------------------------------------- author: Cau guanabara e-mail: caugb@ibest.com.br \*---------------------------------------*/ function FindReplace(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton("FR-findreplace", this._lc("Find and Replace"), editor.imgURL("ed_find.gif", "FindReplace"), false, function(editor) { self.buttonPress(editor); }); cfg.addToolbarElement(["FR-findreplace","separator"], ["formatblock","fontsize","fontname"], -1); } FindReplace.prototype.buttonPress = function(editor) { FindReplace.editor = editor; var sel = editor.getSelectedHTML(); if(/\w/.test(sel)) { sel = sel.replace(/<[^>]*>/g,""); sel = sel.replace(/ /g,""); } var param = /\w/.test(sel) ? {fr_pattern: sel} : null; editor._popupDialog("plugin://FindReplace/find_replace", null, param); }; FindReplace._pluginInfo = { name : "FindReplace", 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/find-replace.html", license : "htmlArea" }; FindReplace.prototype._lc = function(string) { return HTMLArea._lc(string, 'FindReplace'); };mailbox/xinha/plugins/Stylist/0040775000567100000120000000000010567167546016463 5ustar jcameronwheelmailbox/xinha/plugins/Stylist/stylist.js0100664000567100000120000001731310565363456020532 0ustar jcameronwheelHTMLArea.Config.prototype.css_style={}; HTMLArea.Config.prototype.stylistLoadStylesheet=function(_1,_2){ if(!_2){ _2={}; } var _3=HTMLArea.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; }; HTMLArea.Config.prototype.stylistLoadStyles=function(_5,_6){ if(!_6){ _6={}; } var _7=HTMLArea.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; }; HTMLArea.prototype._fillStylist=function(){ if(!this._stylist){ return false; } this._stylist.innerHTML="

"+HTMLArea._lc("Styles","Stylist")+"

"; 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._stylist.appendChild(_13); } } }; HTMLArea.prototype._stylistAddClasses=function(el,tag,_17){ if(el=="new"){ this.insertHTML("<"+tag+" class=\""+_17+"\">"+this.getSelectedHTML()+""); }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")}]; } HTMLArea.addClasses(_18,_17); }else{ HTMLArea._addClasses(el,_17); } } this.focusEditor(); this.updateToolbar(); }; HTMLArea.prototype._stylistRemoveClasses=function(_19,_1a){ for(var x=0;x<_1a.length;x++){ this._stylistRemoveClassesFull(_1a[x],_19); } this.focusEditor(); this.updateToolbar(); }; HTMLArea.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=HTMLArea.arrayFilter(_24.className.trim().split(" "),function(c){ if(c==null||c.trim()==""){ return false; } return true; }); if((_1f.length==0)||(HTMLArea.arrayContainsArray(_1f,_25)&&HTMLArea.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); } } }; HTMLArea.prototype.switchElementTag=function(el,tag){ var _2b=el.parentNode; var _2c=this._doc.createElement(tag); if(HTMLArea.is_ie||el.hasAttribute("id")){ _2c.setAttribute("id",el.getAttribute("id")); } if(HTMLArea.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; }; HTMLArea.prototype._getAncestorsClassNames=function(sel){ var _30=this._activeElement(sel); if(_30==null){ _30=(HTMLArea.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; }; HTMLArea.prototype._ancestorsWithClasses=function(sel,tag,_36){ var _37=[]; var _38=this._activeElement(sel); if(_38==null){ try{ _38=(HTMLArea.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; }; HTMLArea.ripStylesFromCSSFile=function(URL){ var css=HTMLArea._geturlcontent(URL); return HTMLArea.ripStylesFromCSSString(css); }; HTMLArea.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=this.maxHTML){ HTMLArea._stopEvent(ev); return true; } } } }; CharCounter.prototype._updateCharCount=function(){ var _8=this.editor; var _9=_8.config; var _a=_8.getHTML(); var _b=new Array(); if(_9.CharCounter.showHtml){ _b[_b.length]=this._lc("HTML")+": "+_a.length; } this._HTML=_a.length; if(_9.CharCounter.showWord||_9.CharCounter.showChar){ _a=_a.replace(/<\/?\s*!--[^-->]*-->/gi,""); _a=_a.replace(/<(.+?)>/g,""); _a=_a.replace(/ /gi," "); _a=_a.replace(/([\n\r\t])/g," "); _a=_a.replace(/( +)/g," "); _a=_a.replace(/&(.*);/g," "); _a=_a.replace(/^\s*|\s*$/g,""); } if(_9.CharCounter.showWord){ this._Words=0; for(var x=0;x<_a.length;x++){ if(_a.charAt(x)==" "){ this._Words++; } } if(this._Words>=1){ this._Words++; } _b[_b.length]=this._lc("Words")+": "+this._Words; } if(_9.CharCounter.showChar){ _b[_b.length]=this._lc("Chars")+": "+_a.length; this._Chars=_a.length; } this.charCount.innerHTML=_b.join(_9.CharCounter.separator); }; CharCounter.prototype.onUpdateToolbar=function(){ this.charCount.innerHTML=this._lc("... in progress"); if(this._timeoutID){ window.clearTimeout(this._timeoutID); } var e=this; this._timeoutID=window.setTimeout(function(){ e._updateCharCount(); },1000); }; CharCounter.prototype.onMode=function(_e){ switch(_e){ case "textmode": this.charCount.style.display="none"; break; case "wysiwyg": this.charCount.style.display=""; break; default: alert("Mode <"+_e+"> not defined!"); return false; } }; mailbox/xinha/plugins/CharCounter/lang/0040775000567100000120000000000010567167541020141 5ustar jcameronwheelmailbox/xinha/plugins/CharCounter/lang/ja.js0100664000567100000120000000021210565363024021051 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Chars": "文字数", "Words": "単語数", "... in progress": "... 処理中" };mailbox/xinha/plugins/CharCounter/lang/de.js0100664000567100000120000000034710565363024021060 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Author: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Chars": "Zeichen", "Words": "Worte", "... in progress": "... in Bearbeitung" }; mailbox/xinha/plugins/CharCounter/lang/nb.js0100664000567100000120000000022710565363024021064 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Chars": "Tegn" };mailbox/xinha/plugins/CharCounter/lang/fr.js0100664000567100000120000000014110565363024021067 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Chars": "Caractères", "Words": "Mots" };mailbox/xinha/plugins/InsertAnchor/0040775000567100000120000000000010567167543017404 5ustar jcameronwheelmailbox/xinha/plugins/InsertAnchor/popups/0040775000567100000120000000000010567167543020732 5ustar jcameronwheelmailbox/xinha/plugins/InsertAnchor/popups/insert_anchor.html0100664000567100000120000000265310565363036024452 0ustar jcameronwheel Insert Anchor
Insert Anchor
Anchor name
mailbox/xinha/plugins/InsertAnchor/insert-anchor.css0100664000567100000120000000031610565363036022660 0ustar jcameronwheela.anchor { width: 18px; height: 18px; background-image: url(img/insert-anchor.gif); background-repeat: no-repeat; background-position: left top; padding-left: 19px; border: 1px dotted blue; } mailbox/xinha/plugins/InsertAnchor/insert-anchor.js0100664000567100000120000000360310565363452022510 0ustar jcameronwheelfunction InsertAnchor(_1){ this.editor=_1; var _2=_1.config; var _3=this; _2.registerButton({id:"insert-anchor",tooltip:this._lc("Insert Anchor"),image:_1.imgURL("insert-anchor.gif","InsertAnchor"),textMode:false,action:function(_4){ _3.buttonPress(_4); }}); _2.addToolbarElement("insert-anchor","createlink",1); } InsertAnchor._pluginInfo={name:"InsertAnchor",origin:"version: 1.0, by Andre Rabold, MR Printware GmbH, http://www.mr-printware.de",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"}; InsertAnchor.prototype._lc=function(_5){ return HTMLArea._lc(_5,"InsertAnchor"); }; InsertAnchor.prototype.onGenerate=function(){ var _6="IA-style"; var _7=this.editor._doc.getElementById(_6); if(_7==null){ _7=this.editor._doc.createElement("link"); _7.id=_6; _7.rel="stylesheet"; _7.href=_editor_url+"plugins/InsertAnchor/insert-anchor.css"; this.editor._doc.getElementsByTagName("HEAD")[0].appendChild(_7); } }; InsertAnchor.prototype.buttonPress=function(_8){ var _9=null; var _a=_8.getSelectedHTML(); var _b=_8._getSelection(); var _c=_8._createRange(_b); var a=_8._activeElement(_b); if(!(a!=null&&a.tagName.toLowerCase()=="a")){ a=_8._getFirstAncestor(_b,"a"); } if(a!=null&&a.tagName.toLowerCase()=="a"){ _9={name:a.id}; }else{ _9={name:""}; } _8._popupDialog("plugin://InsertAnchor/insert_anchor",function(_e){ if(_e){ var _f=_e["name"]; if(_f==""||_f==null){ if(a){ var _10=a.innerHTML; a.parentNode.removeChild(a); _8.insertHTML(_10); } return; } try{ var doc=_8._doc; if(!a){ a=doc.createElement("a"); a.id=_f; a.name=_f; a.title=_f; a.className="anchor"; a.innerHTML=_a; if(HTMLArea.is_ie){ _c.pasteHTML(a.outerHTML); }else{ _8.insertNodeAtSelection(a); } }else{ a.id=_f; a.name=_f; a.title=_f; a.className="anchor"; } } catch(e){ } } },_9); }; mailbox/xinha/plugins/InsertAnchor/img/0040775000567100000120000000000010567167543020160 5ustar jcameronwheelmailbox/xinha/plugins/InsertAnchor/img/insert-anchor.gif0100664000567100000120000000056210565364776023430 0ustar jcameronwheelGIF89a̧@~/@@@ɣ=޶`R+ӟȆȦJfffѭJԲVڽnğ;h'6VVVgS1ЮRӰRعeǨTp*<85δmvJ?VFʣRM@3)>cB6:⿣1αa333!,@ph Edit Tag By Peg
Tag Editor
mailbox/xinha/plugins/EditTag/edit-tag.js0100664000567100000120000000340510565362762020357 0ustar jcameronwheel// Character Map plugin for HTMLArea // Sponsored by http://www.systemconcept.de // Implementation by Holger Hees based on HTMLArea XTD 1.5 (http://mosforge.net/projects/htmlarea3xtd/) // Original Author - Bernhard Pfeifer novocaine@gmx.net // // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function EditTag(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton({ id : "edittag", tooltip : this._lc("Edit HTML for selected text"), image : editor.imgURL("ed_edit_tag.gif", "EditTag"), textMode : false, action : function(editor) { self.buttonPress(editor); } }); cfg.addToolbarElement("edittag", "htmlmode",1); } EditTag._pluginInfo = { name : "EditTag", version : "1.0", developer : "Pegoraro Marco", developer_url : "http://www.sin-italia.com/", c_owner : "Marco Pegoraro", sponsor : "Sin Italia", sponsor_url : "http://www.sin-italia.com/", license : "htmlArea" }; EditTag.prototype._lc = function(string) { return HTMLArea._lc(string, 'EditTag'); }; EditTag.prototype.buttonPress = function(editor) { // Costruzione dell'oggetto parametri da passare alla dialog. outparam = { content : editor.getSelectedHTML() }; // Fine costruzione parametri per il passaggio alla dialog. editor._popupDialog( "plugin://EditTag/edit_tag", function( html ) { if ( !html ) { //user must have pressed Cancel return false; } editor.insertHTML( html ); }, outparam); };mailbox/xinha/plugins/EditTag/img/0040775000567100000120000000000010567167541017100 5ustar jcameronwheelmailbox/xinha/plugins/EditTag/img/ed_edit_tag.gif0100664000567100000120000000044510565364774022024 0ustar jcameronwheelGIF89a僃fffRRR[[[rrr;;;{{{333CCCGGG!, 0,WR'a RI+8 0<(bLhAʭ #,o>HHjPW曂K" g/'u .// tU` Y~/;Tkpjx" 36/!;mailbox/xinha/plugins/EditTag/lang/0040775000567100000120000000000010567167541017245 5ustar jcameronwheelmailbox/xinha/plugins/EditTag/lang/ja.js0100664000567100000120000000025510565362762020174 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Edit HTML for selected text": "選択中テキストのHTMLを編集します", "Tag Editor": "タグエディタ" };mailbox/xinha/plugins/EditTag/lang/de.js0100664000567100000120000000040610565362762020170 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Edit HTML for selected text": "HTML im ausgewählten Bereich bearbeiten", "Tag Editor": "HTML tag Editor" }; mailbox/xinha/plugins/EditTag/lang/nb.js0100664000567100000120000000030710565362762020177 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Edit HTML for selected text": "Rediger HTML for den valgte teksten" };mailbox/xinha/plugins/EditTag/lang/fr.js0100664000567100000120000000025710565362762020213 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Edit HTML for selected text": "Editer le code HTML du texte sélectionné", "Tag Editor": "Editeur de tag HTML" };mailbox/xinha/plugins/Forms/0040775000567100000120000000000010567167542016072 5ustar jcameronwheelmailbox/xinha/plugins/Forms/popups/0040775000567100000120000000000010567167542017420 5ustar jcameronwheelmailbox/xinha/plugins/Forms/popups/textarea.html0100664000567100000120000000665210565362766022134 0ustar jcameronwheel Insert/Edit Form Element TEXTAREA
Form Element: TEXTAREA
Name/ID:

Dimensions
Columns:

Rows:

Wrap Mode:

Read Only

Disabled

Tab Index:

Access Key:

Initial Text:
mailbox/xinha/plugins/Forms/popups/select.html0100664000567100000120000001676610565362766021605 0ustar jcameronwheel Insert/Edit Form Element SELECT
Form Element: SELECT
Name/ID:

Size:

Multiple Select

Disabled

Tab Index:

Options


Lable: Value:
mailbox/xinha/plugins/Forms/popups/fieldset.html0100664000567100000120000000226410565362766022111 0ustar jcameronwheel Insert/Edit Form Element FIELDSET
Form Element: FIELDSET
Legend:

mailbox/xinha/plugins/Forms/popups/form.html0100664000567100000120000000447710565362766021265 0ustar jcameronwheel Insert/Edit Form
Form
Form Name:

Form handler script
Action URL:

Method:
Encoding:

Target Frame:

mailbox/xinha/plugins/Forms/popups/input.html0100664000567100000120000001315610565362766021453 0ustar jcameronwheel Insert/Edit Form Element INPUT
Name/ID:

Value:

Disabled

Checked

Tab Index:

Access Key:

Read Only

Dimensions
Size:
Max length:
Button Script
'onClick'=
Image source
Image URL:
mailbox/xinha/plugins/Forms/popups/label.html0100664000567100000120000000303110565362766021362 0ustar jcameronwheel Insert/Edit Form Element LABEL
Form Element: LABEL
Text:

For Control:

Access Key:

mailbox/xinha/plugins/Forms/forms.css0100664000567100000120000000004610565362766017732 0ustar jcameronwheelform { border: 1px dotted red; } mailbox/xinha/plugins/Forms/img/0040775000567100000120000000000010567167542016646 5ustar jcameronwheelmailbox/xinha/plugins/Forms/img/ed_select.gif0100664000567100000120000000015710565364774021270 0ustar jcameronwheelGIF89a!,@4 0 0ju A3\ a/Fo".G =b %;mailbox/xinha/plugins/Forms/img/ed_text.gif0100664000567100000120000000016010565364776020771 0ustar jcameronwheelGIF89a!,@580A(;@dYn]\5b0Kͪ| )bC㎷b:% ;mailbox/xinha/plugins/Forms/img/ed_radio.gif0100664000567100000120000000015010565364774021100 0ustar jcameronwheelGIF89a!, @- ӳj@+ lR]ai@-)4p|EOj$;mailbox/xinha/plugins/Forms/img/ed_label.gif0100664000567100000120000000007210565364774021064 0ustar jcameronwheelGIF89a!, @wMB_;mailbox/xinha/plugins/Forms/img/ed_checkbox.gif0100664000567100000120000000014610565364774021575 0ustar jcameronwheelGIF89a!, @+81"A$/ZYZXQZ*R+.Y;mailbox/xinha/plugins/Forms/img/ed_textarea.gif0100664000567100000120000000016310565364776021625 0ustar jcameronwheelGIF89a!,@88#!)$/ oZ``$Q$ia8p|'j `!;mailbox/xinha/plugins/Forms/img/ed_submit.gif0100664000567100000120000000013610565364776021313 0ustar jcameronwheelGIF89a!, @#807^"*Yh` XfvDm߷;mailbox/xinha/plugins/Forms/img/ed_hidden.gif0100664000567100000120000000012310565364774021235 0ustar jcameronwheelGIF89a!, @$̌!ڛJ[2¿mjdvUбv*?;mailbox/xinha/plugins/Forms/img/ed_fieldset.gif0100664000567100000120000000011410565364774021601 0ustar jcameronwheelGIF89a!,@#o؂M1iU%Rʮd%T;mailbox/xinha/plugins/Forms/img/ed_form.gif0100664000567100000120000000016210565364774020750 0ustar jcameronwheelGIF89accB!,@7(,@{۞H)(^͜%ތ 2Qi~N_;mailbox/xinha/plugins/Forms/img/ed_button.gif0100664000567100000120000000013110565364774021314 0ustar jcameronwheelGIF89a!, @807Q[aᘕƥ@p ;mailbox/xinha/plugins/Forms/img/ed_file.gif0100664000567100000120000000020210565364774020717 0ustar jcameronwheelGIF89a!,@G / AMщu5ʠÉPյ|_v(EoXXb(lS >D5VUM;mailbox/xinha/plugins/Forms/img/ed_image.gif0100664000567100000120000000106210565364774021067 0ustar jcameronwheelGIF89a}888aapppDDP\\\{DDI:Y\::GGGSXyxxzOttsܬTAAA```vvv}BBBrrNwbbc?hh~{@@xCCCz^^^vykkxqXXX!,@ 83(5 :A?.E+B#;'$47ɖD1% > )96/ "@ -!2C&  *X,X*;mailbox/xinha/plugins/Forms/img/ed_password.gif0100664000567100000120000000015710565364774021653 0ustar jcameronwheelGIF89a!,@480"J %yD(#֝WEԪlš Q|F /<%;mailbox/xinha/plugins/Forms/img/ed_reset.gif0100664000567100000120000000014110565364774021124 0ustar jcameronwheelGIF89a!, @&807 ^"q%[eZ@f~XvDﻐ;mailbox/xinha/plugins/Forms/forms.js0100664000567100000120000002017110565363444017551 0ustar jcameronwheelfunction Forms(_1){ this.editor=_1; var _2=_1.config; var bl=Forms.btnList; var _4=this; var _5=["linebreak"]; for(var i=0;i"); } } },_15); }else{ var _1c=""; if(typeof _12=="undefined"){ _12=_10.getParentElement(); var tag=_12.tagName.toLowerCase(); if(_12&&(tag=="legend")){ _12=_12.parentElement; tag=_12.tagName.toLowerCase(); } if(_12&&!(tag=="textarea"||tag=="select"||tag=="input"||tag=="label"||tag=="fieldset")){ _12=null; } } if(_12){ _16=_12.tagName.toLowerCase(); _15.f_name=_12.name; _1c=_12.tagName; if(_16=="input"){ _15.f_type=_12.type; _16=_12.type; } switch(_16){ case "textarea": _15.f_cols=_12.cols; _15.f_rows=_12.rows; _15.f_text=_12.innerHTML; _15.f_wrap=_12.getAttribute("wrap"); _15.f_readOnly=_12.getAttribute("readOnly"); _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "select": _15.f_size=parseInt(_12.size); _15.f_multiple=_12.getAttribute("multiple"); _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); var _1e=new Array(); for(var i=0;i<=_12.options.length-1;i++){ _1e[i]=new optionValues(_12.options[i].text,_12.options[i].value); } _15.f_options=_1e; break; case "text": case "password": _15.f_value=_12.value; _15.f_size=_12.size; _15.f_maxLength=_12.maxLength; _15.f_readOnly=_12.getAttribute("readOnly"); _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "hidden": _15.f_value=_12.value; break; case "submit": case "reset": _15.f_value=_12.value; _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "checkbox": case "radio": _15.f_value=_12.value; _15.f_checked=_12.checked; _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "button": _15.f_value=_12.value; _15.f_onclick=_12.getAttribute("onclick"); _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "image": _15.f_value=_12.value; _15.f_src=_12.src; _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "file": _15.f_disabled=_12.getAttribute("disabled"); _15.f_tabindex=_12.getAttribute("tabindex"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "label": _15.f_text=_12.innerHTML; _15.f_for=_12.getAttribute("for"); _15.f_accesskey=_12.getAttribute("accesskey"); break; case "fieldset": if(_12.firstChild.tagName.toLowerCase()=="legend"){ _15.f_text=_12.firstChild.innerHTML; }else{ _15.f_text=""; } break; } }else{ _15.f_name=""; switch(_11){ case "textarea": case "select": case "label": case "fieldset": _1c=_11; break; default: _1c="input"; _15.f_type=_11; break; } _15.f_options=""; _15.f_cols="20"; _15.f_rows="4"; _15.f_multiple="false"; _15.f_value=""; _15.f_size=""; _15.f_maxLength=""; _15.f_checked=""; _15.f_src=""; _15.f_onclick=""; _15.f_wrap=""; _15.f_readOnly="false"; _15.f_disabled="false"; _15.f_tabindex=""; _15.f_accesskey=""; _15.f_for=""; _15.f_text=""; _15.f_legend=""; } _10._popupDialog("plugin://Forms/"+_1c+".html",function(_20){ if(_20){ if(_20["f_cols"]){ if(isNaN(parseInt(_20["f_cols"],10))||parseInt(_20["f_cols"],10)<=0){ _20["f_cols"]=""; } } if(_20["f_rows"]){ if(isNaN(parseInt(_20["f_rows"],10))||parseInt(_20["f_rows"],10)<=0){ _20["f_rows"]=""; } } if(_20["f_size"]){ if(isNaN(parseInt(_20["f_size"],10))||parseInt(_20["f_size"],10)<=0){ _20["f_size"]=""; } } if(_20["f_maxlength"]){ if(isNaN(parseInt(_20["f_maxLength"],10))||parseInt(_20["f_maxLength"],10)<=0){ _20["f_maxLength"]=""; } } if(_12){ for(field in _20){ if((field=="f_text")||(field=="f_options")||(field=="f_onclick")||(field=="f_checked")){ continue; } if(_20[field]!=""){ _12.setAttribute(field.substring(2,20),_20[field]); }else{ _12.removeAttribute(field.substring(2,20)); } } if(_16=="textarea"){ _12.innerHTML=_20["f_text"]; }else{ if(_16=="select"){ _12.options.length=0; var _21=_20["f_options"]; for(i=0;i<=_21.length-1;i++){ _12.options[i]=new Option(_21[i].text,_21[i].value); } }else{ if(_16=="label"){ _12.innerHTML=_20["f_text"]; }else{ if(_16=="fieldset"){ if(_15.f_text!=""){ if(_12.firstChild.tagName.toLowerCase()=="legend"){ _12.firstChild.innerHTML=_20["f_text"]; } }else{ } }else{ if((_16=="checkbox")||(_16=="radio")){ if(_20["f_checked"]!=""){ _12.checked=true; }else{ _12.checked=false; } }else{ if(_20["f_onclick"]){ _12.onclick=""; if(_20["f_onclick"]!=""){ _12.onclick=_20["f_onclick"]; } } } } } } } }else{ var _22=""; for(field in _20){ if(!_20[field]){ continue; } if((_20[field]=="")||(field=="f_text")||(field=="f_options")){ continue; } _22+=" "+field.substring(2,20)+"=\""+_20[field]+"\""; } if(_16=="textarea"){ _22=""+_20["f_text"]+""; }else{ if(_16=="select"){ _22=""; var _21=_20["f_options"]; for(i=0;i<=_21.length-1;i++){ _22+=""; } _22+=""; }else{ if(_16=="label"){ _22=""+_20["f_text"]+""; }else{ if(_16=="fieldset"){ _22=""; if(_20["f_legend"]!=""){ _22+=""+_20["f_text"]+""; } _22+=""; }else{ _22=""; } } } } _10.insertHTML(_22); } } },_15); } }; mailbox/xinha/plugins/Forms/lang/0040775000567100000120000000000010567167542017013 5ustar jcameronwheelmailbox/xinha/plugins/Forms/lang/ja.js0100664000567100000120000000641610565362766017752 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Form": "フォーム", "Textarea": "テキストエリア", "Selection Field": "選択肢フィールド", "Checkbox": "チェックボックス", "Radio Button": "ラジオボタン", "Text Field": "テキストフィールド", "Password Field": "パスワードフィールド", "File Field": "ファイルフィールド", "Submit Button": "送信ボタン", "Reset Button": "リセットボタン", "Image Button": "画像ボタン", "Button": "ボタン", "Hidden Field": "非表示フィールド", "Label": "ラベル", "Field Set": "フィールドセット", "Form Element: INPUT": "フォーム要素: INPUT", "Form Element: SELECT": "フォーム要素: SELECT", "Form Element: TEXTAREA": "フォーム要素: TEXTAREA", "Form Element: LABEL": "フォーム要素: LABEL", "Form Element: FIELDSET": "フォーム要素: FIELDSET", "Form Name:": "フォーム名:", "Form handler script": "フォーム処理スクリプト", "Action URL:": "アクションURL:", "Method:": "メソッド:", "Post": "POST", "Get": "GET", "Encoding:": "エンコード:", "HTML-Form to CGI (default)": "HTMLフォームからCGIへ(デフォルト)", "multipart Form Data (File-Upload)": "マルチパート(ファイルアップロード用)", "Target Frame:": "ターゲット:", "Name/ID:": "名前/ID:", "Value:": "値:", "Disabled": "無効", "Checked": "チェック済み", "Tab Index:": "タブ順序:", "Access Key:": "アクセスキー:", "Read Only": "読み取り専用", "Dimensions": "大きさ", "Size:": "サイズ:", "Max length:": "最大長:", "Button Script": "ボタンスクリプト", "'onClick'=": "'onClick'=", "Image source": "画像ソース", "Image URL:": "画像URL:", "Multiple Select": "複数選択", "Options": "選択肢", "Lable:": "ラベル:", "Move Up": "上へ", "Move Down": "下へ", "Delete": "削除", "Add": "追加", "Columns:": "列数:", "Rows:": "行数:", "Wrap Mode:": "折り返し:", "Off": "オフ", "Soft": "ソフト", "Hard": "ハード", "Physical": "物理的", "Virtual": "仮想", "normal": "標準", "nowrap": "折り返しなし", "pre": "フォーマット済み", "Initial Text:": "初期テキスト:", "Text:": "テキスト:", "For Control:": "制御対象:", "Legend:": "グループ名:", "Cancel": "中止", "Name": "名前", "Name of the form input": "フォーム入力の名前", "Value of the form input": "フォーム入力の値", "Size of text box in characters": "文字数によるテキストボックスの大きさ", "Maximum number of characters accepted": "入力可能な最大文字数", "Javascript for button click": "ボタンクリック時のJavaScritp", "URL of image": "画像のURL", "Name of the form select": "", "name of the textarea": "テキストエリアの名前", "Width in number of characters": "文字数による幅", "Height in number of rows": "行数による高さ", "Default text (optional)": "テキスト初期値(オプション)", "You must enter the form name": "フォーム名が必要です", "You must enter a Name": "名前が必要です", "Please enter a Label": "ラベルを入力してください" }; mailbox/xinha/plugins/HorizontalRule/0040775000567100000120000000000010567167542017765 5ustar jcameronwheelmailbox/xinha/plugins/HorizontalRule/popups/0040775000567100000120000000000010567167542021313 5ustar jcameronwheelmailbox/xinha/plugins/HorizontalRule/popups/edit_horizontal_rule.html0100664000567100000120000001112210565363026026411 0ustar jcameronwheel Insert/Edit Horizontal Rule
Horizontal Rule
Layout
Width:

Height:
pixels
Alignment:
Style
Color:
  ×

No shading
mailbox/xinha/plugins/HorizontalRule/horizontal-rule.js0100664000567100000120000000552210565363444023457 0ustar jcameronwheelHorizontalRule._pluginInfo={name:"HorizontalRule",version:"1.0",developer:"Nelson Bright",developer_url:"http://www.brightworkweb.com/",c_owner:"Nelson Bright",sponsor:"BrightWork, Inc.",sponsor_url:"http://www.brightworkweb.com/",license:"htmlArea"}; function HorizontalRule(_1){ this.editor=_1; var _2=_1.config; var _3=_2.toolbar; var _4=this; _2.registerButton({id:"edithorizontalrule",tooltip:this._lc("Insert/edit horizontal rule"),image:[_editor_url+"images/ed_buttons_main.gif",6,0],textMode:false,action:function(_5){ _4.buttonPress(_5); }}); _2.addToolbarElement("edithorizontalrule","inserthorizontalrule",0); } HorizontalRule.prototype._lc=function(_6){ return Xinha._lc(_6,"HorizontalRule"); }; HorizontalRule.prototype.buttonPress=function(_7){ this.editor=_7; this._editHorizontalRule(); }; HorizontalRule.prototype._editHorizontalRule=function(_8){ editor=this.editor; var _9=editor._getSelection(); var _a=editor._createRange(_9); var _b=null; if(typeof _8=="undefined"){ _8=editor.getParentElement(); if(_8&&!/^hr$/i.test(_8.tagName)){ _8=null; } } if(_8){ var _c=_8.style.width||_8.width; _b={f_size:parseInt(_8.style.height,10)||_8.size,f_widthUnit:(/(%|px)$/.test(_c))?RegExp.$1:"px",f_width:parseInt(_c,10),f_color:Xinha._colorToRgb(_8.style.backgroundColor)||_8.color,f_align:_8.style.textAlign||_8.align,f_noshade:(parseInt(_8.style.borderWidth,10)==0)||_8.noShade}; } editor._popupDialog("plugin://HorizontalRule/edit_horizontal_rule.html",function(_d){ if(!_d){ return false; } var hr=_8; if(!hr){ var _f=editor._doc.createElement("hr"); for(var _10 in _d){ var _11=_d[_10]; if(_11==""){ continue; } switch(_10){ case "f_width": if(_d["f_widthUnit"]=="%"){ _f.style.width=_11+"%"; }else{ _f.style.width=_11+"px"; } break; case "f_size": _f.style.height=_11+"px"; break; case "f_align": _f.style.textAlign=_11; switch(_11){ case "left": _f.style.marginLeft="0"; break; case "right": _f.style.marginRight="0"; break; case "center": _f.style.marginLeft="auto"; _f.style.marginRight="auto"; break; } break; case "f_color": _f.style.backgroundColor=_11; break; case "f_noshade": _f.style.border="0"; break; } } if(Xinha.is_gecko){ editor.execCommand("inserthtml",false,Xinha.getOuterHTML(_f)); }else{ editor.insertNodeAtSelection(_f); } }else{ for(var _10 in _d){ var _11=_d[_10]; switch(_10){ case "f_width": if(_d["f_widthUnit"]=="%"){ hr.style.width=_11+"%"; }else{ hr.style.width=_11+"px"; } break; case "f_size": hr.style.height=_11+"px"; break; case "f_align": hr.style.textAlign=_11; switch(_11){ case "left": hr.style.marginLeft="0"; hr.style.marginRight=null; break; case "right": hr.style.marginRight="0"; hr.style.marginLeft=null; break; case "center": hr.style.marginLeft="auto"; hr.style.marginRight="auto"; break; } break; case "f_color": hr.style.backgroundColor=_11; break; case "f_noshade": break; } hr.style.border=(_d["f_noshade"])?"0":null; } } },_b); }; mailbox/xinha/plugins/HorizontalRule/lang/0040775000567100000120000000000010567167542020706 5ustar jcameronwheelmailbox/xinha/plugins/HorizontalRule/lang/ja.js0100664000567100000120000000130610565363026021624 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 // This string is for auto detection of multi-encoding editor : 国際化文字検出用文字列 { "Insert/edit horizontal rule": "水平線の挿入/修正", "Horizontal Rule": "水平線", "Layout": "レイアウト", "Width:": "幅:", "percent": "パーセント", "pixels": "ピクセル", "Height:": "高さ:", "Alignment:": "行揃え:", "Left": "左", "Center": "中央", "Right": "右", "Style": "スタイル", "Color:": "色:", "No shading": "影付けなし", "Note:": "備考", "To select an existing horizontal rule, a double-click may be needed.":"既存の水平線を選択するにはDoubleClickが必要。" };mailbox/xinha/plugins/HorizontalRule/lang/de.js0100664000567100000120000000134310565363026021623 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Insert/edit horizontal rule": "horizontale Linie einfügen/bearbeiten", "Horizontal Rule": "Horizontale Linie", "Layout": "Gestaltung", "Width:": "Breite:", "percent": "Prozent", "pixels": "Pixel", "Height:": "Höhe:", "Alignment:": "Ausrichtung:", "Left": "links", "Center": "zentriert", "Right": "rechts", "Style": "Stil", "Color:": "Farbe", "No shading": "keine Schattierung", "Note:": "Anmerkung", "To select an existing horizontal rule, a double-click may be needed.": "Um eine horizontale Linie auszuwählen kann ein Doppelklick erforderlich sein." }; mailbox/xinha/plugins/HorizontalRule/lang/nb.js0100664000567100000120000000126210565363026021632 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert/edit horizontal rule": "Sett inn/ rediger horisontal linje", "Horizontal Rule": "Horisontal linje", "Layout": "Oppsett", "Width:": "Bredde:", "percent": "prosent", "pixels": "Piksel", "Height:": "Høyde:", "Alignment:": "Justering:", "Left": "Venstre", "Center": "Sentrert", "Right": "Høyre", "Style": "Stil", "Color:": "Farge", "No shading": "Ingen skygge", "Note:": "Notat", "To select an existing horizontal rule, a double-click may be needed.": "For å velge en horisontal linje kan det hende du må dobbeltklikke." }; mailbox/xinha/plugins/HorizontalRule/lang/fr.js0100664000567100000120000000116010565363026021637 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Insert/edit horizontal rule": "Insérer une règle horizontale", "Horizontal Rule": "Règle horizontale", "Layout": "Layout", "Width:": "Largeur", "percent": "pourcent", "pixels": "pixels", "Height:": "Hauteur", "Alignment:": "Alignement", "Left": "Gauche", "Center": "Centre", "Right": "Droite", "Style": "Style", "Color:": "Couleur", "No shading": "Pas d'ombre", "Note:": "Note", "To select an existing horizontal rule, a double-click may be needed.": "Pour sélectionner une règle horizontale, un double-clic peut être nécessaire." };mailbox/xinha/plugins/GetHtml/0040775000567100000120000000000010567167542016350 5ustar jcameronwheelmailbox/xinha/plugins/GetHtml/get-html.js0100664000567100000120000000065010565363042020414 0ustar jcameronwheel/** Implemented now as GetHtmlImplementation plugin in modules/GetHtml/TransformInnerHTML.js */ function GetHtml(editor) { editor.config.getHtmlMethod = "TransformInnerHTML"; } GetHtml._pluginInfo = { name : "GetHtml", version : "1.0", developer : "Nelson Bright", developer_url : "http://www.brightworkweb.com/", sponsor : "", sponsor_url : "", license : "htmlArea" }; mailbox/xinha/plugins/NoteServer/0040775000567100000120000000000010567167545017103 5ustar jcameronwheelmailbox/xinha/plugins/NoteServer/popups/0040775000567100000120000000000010567167545020431 5ustar jcameronwheelmailbox/xinha/plugins/NoteServer/popups/codenote.html0100664000567100000120000001301210565363012023072 0ustar jcameronwheel Insert GUIDO Music Notation
Insert GUIDO Music Notation
Guido code :

Options Add MIDI link to allow students to hear the music
Add GUIDO Code in a textbox on the page
Format Image in applet
Zoom :

Image Preview:


Sample Guido Codes:

Code Sample 1 or type [ do re mi fa sol la si ] | Code Sample 2

Resources:

The Guido Specification (PDF) | (HTML)

GUIDO Music Notation Format Site | Guido Note Server | SourceForge Homepage

mailbox/xinha/plugins/NoteServer/img/0040775000567100000120000000000010567167545017657 5ustar jcameronwheelmailbox/xinha/plugins/NoteServer/img/note.gif0100664000567100000120000000012710565364776021313 0ustar jcameronwheelGIF89a! ,( øRZ`qiEV!h_ ?;'hғ _J;mailbox/xinha/plugins/NoteServer/note-server.js0100664000567100000120000000636310565363454021712 0ustar jcameronwheelfunction NoteServer(_1){ this.editor=_1; var _2=_1.config; var _3=this; _2.registerButton({id:"insertscore",tooltip:this._lc("Insert GUIDO Music Notation"),image:_1.imgURL("note.gif","NoteServer"),textMode:false,action:function(_4){ _3.buttonPress(_4); }}); _2.addToolbarElement("insertscore","insertimage",1); } NoteServer._pluginInfo={name:"NoteServer",version:"1.1",developer:"Richard Christophe",developer_url:"http://piano-go.chez.tiscali.fr/guido.html",c_owner:"Richard Christophe",sponsor:"",sponsor_url:"",license:"htmlArea"}; NoteServer.prototype._lc=function(_5){ return HTMLArea._lc(_5,"NoteServer"); }; NoteServer.prototype.buttonPress=function(_6){ _6._popupDialog("plugin://NoteServer/codenote",function(_7){ if(!_7){ return false; }else{ IncludeGuido(_6,_7); } },null); }; var noteserveraddress="clef.cs.ubc.ca"; var htmlbase="/salieri/nview"; var versionstring=""; function GetGIFURL(_8,_9,_a){ _8=escape(_8); _8=_8.replace(/\//g,"%2F"); if(!_9){ _9="1.0"; } if(!_a){ _a="1"; } var _b="http://"+noteserveraddress+"/scripts/salieri"+versionstring+"/gifserv.pl?"+"pagewidth=21"+"&pageheight=29.7"+"&zoomfactor="+_9+"&pagesizeadjust=yes"+"&outputformat=gif87"+"&pagenum="+_a+"&gmndata="+_8; return _b; } function GetMIDIURL(_c){ _c=escape(_c); _c=_c.replace(/\//g,"%2F"); var _d="http://"+noteserveraddress+"/scripts/salieri"+versionstring+"/midserv.pl?"+"gmndata="+_c; return _d; } function GetAPPLETURL(_e,_f){ _e=escape(_e); _e=_e.replace(/\//g,"%2F"); var _10=""+""+""+""+""+""+""+""; return _10; } function IncludeGuido(_11,_12){ if(!_12["f_zoom"]){ zoom=""; } var _13=GetGIFURL(_12["f_code"],_12["f_zoom"],""); var _14=GetMIDIURL(_12["f_code"]); var _15="
"; if(_12["f_applet"]==false){ if(((navigator.userAgent.toLowerCase().indexOf("msie")!=-1)&&(navigator.userAgent.toLowerCase().indexOf("opera")==-1))){ _11.focusEditor(); _11.insertHTML(""); }else{ img=new Image(); img.src=_13; var doc=_11._doc; var sel=_11._getSelection(); var _18=_11._createRange(sel); _11._doc.execCommand("insertimage",false,img.src); } }else{ var _19=GetAPPLETURL(_12["f_code"],_12["f_zoom"]); _15=_15+_19+"
"; } if(_12["f_affcode"]){ _15=_15+HTMLArea._lc("GUIDO Code","NoteServer")+" : "+_12["f_code"]+"
"; } if(_12["f_midi"]){ _15=_15+""+HTMLArea._lc("MIDI File","NoteServer")+"
"; } _11.focusEditor(); _11.insertHTML(_15); } function IncludeGuidoStringAsApplet(_1a,_1b,_1c){ _1b=escape(_1b); _1b=_1b.replace(/\//g,"%2F"); var _1d=""+""+""+""+""+""+""+""; alert(_1d); _1a.focusEditor(); _1a.insertHTML(_1d); } mailbox/xinha/plugins/NoteServer/lang/0040775000567100000120000000000010567167545020024 5ustar jcameronwheelmailbox/xinha/plugins/NoteServer/lang/ja.js0100664000567100000120000000174010565363012020734 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 // This string is for auto detection of multi-encoding editor : 国際化文字検出用文字列 { "Insert GUIDO Music Notation": "GUIDO Music Notationの挿入", "Guido code": "GUIDOコード", "Options": "オプション", "Format": "フォーマット", "Image in applet": "アプレット画像", "Zoom": "拡大率:", "MIDI File": "MIDIファイル", "Image Preview": "画像プレビュー", "Source Code": "ソースコード", "Preview": "表示", "Add MIDI link to allow students to hear the music": "MIDIへのリンクを追加し、楽曲を聴かせてもよい", "Add GUIDO Code in a textbox on the page": "ページ内のテキストボックスにGUIDOコードを追加", "With Mozilla, the applet will not be visible in editor, but only in Web page after submitting.": "Mozillaではエディタ内にアプレットは表示されませんが、送信後のWebページ内では有効です。" };mailbox/xinha/plugins/NoteServer/lang/de.js0100664000567100000120000000157610565363012020741 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 | ISO-8859-1 // Sponsored by http://www.systemconcept.de // Author: Holger Hees, // (c) systemconcept.de 2004 // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). { "Insert GUIDO Music Notation": "Einfügung einer GUIDO Musik-Tonfolge", "Guido code": "Guido code", "Options": "Einstellungen", "Format": "Format", "Image in applet": "Bild im Applet", "Zoom": "Zoom", "MIDI File": "MIDI Datei", "Image Preview": "Bild Voransicht", "Source Code": "Quell-Code", "Preview": "Voransicht", "Add MIDI link to allow students to hear the music": "MIDI-Link hinzufügen um Studenten das hören der Musik zu ermöglichen", "Add GUIDO Code in a textbox on the page": "GUIDO Code in einer Textbox auf der Seite anzeigen" }; mailbox/xinha/plugins/NoteServer/lang/nb.js0100664000567100000120000000122010565363012020732 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Insert GUIDO Music Notation": "Sett inn GUIDO-noter", "Guido code": "GUIDO-kode", "Options": "Muligheter", "Format": "Format", "Image in applet": "Bilde i applet", "Zoom": "Forstørr", "MIDI File": "MIDIfil", "Image Preview": "Bilde forhåndsvisning", "Source Code": "Kildekode", "Preview": "Preview", "Add MIDI link to allow students to hear the music": "Legg til MIDI-link for at studenter kan høre musikken", "Add GUIDO Code in a textbox on the page": "Sett inn GUIDO-kode i et tekstfelt på siden" };mailbox/xinha/plugins/NoteServer/lang/fr.js0100664000567100000120000000115310565363012020747 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Insert GUIDO Music Notation": "Insérer une partition musicale GUIDO", "Guido code": "Code Guido", "Options": "Options", "Format": "Format", "Image in applet": "Image dans une applet", "Zoom": "Zoom", "MIDI File": "Fichier MIDI", "Image Preview": "Aperçu de l'image", "Source Code": "Code source", "Preview": "Aperçu ", "Add MIDI link to allow students to hear the music": "Ajouter un lien MIDI pour permettre aux étudiants d'écouter la partition", "Add GUIDO Code in a textbox on the page": "Ajouter le code source GUIDO dans un cadre" };mailbox/xinha/plugins/DefinitionList/0040775000567100000120000000000010567167541017727 5ustar jcameronwheelmailbox/xinha/plugins/DefinitionList/img/0040775000567100000120000000000010567167541020503 5ustar jcameronwheelmailbox/xinha/plugins/DefinitionList/img/ed_dl.gif0100664000567100000120000000021010565364774022234 0ustar jcameronwheelGIF89a  !, 5H :v5w*{ -4 M`97hBE;mailbox/xinha/plugins/DefinitionList/img/ed_dd.gif0100664000567100000120000000021210565364774022226 0ustar jcameronwheelGIF89a !, 7H *_g@zH9f array("pipe", "r"), 1 => array("pipe", "w") ); $process = @proc_open("tidy -utf8 -config {$cwd}html-tidy-config.cfg", $descriptorspec, $pipes); // Make sure the program started and we got the hooks... // Either way, get some source code into $source if (is_resource($process)) { // Feed untidy source into the stdin fwrite($pipes[0], $source); fclose($pipes[0]); // Read clean source out to the browser while (!feof($pipes[1])) { //echo fgets($pipes[1], 1024); $newsrc .= fgets($pipes[1], 1024); } fclose($pipes[1]); // Clean up after ourselves proc_close($process); } else { /* Use tidy if it's available from PECL */ if( function_exists('tidy_parse_string') ) { $tempsrc = tidy_parse_string($source); tidy_clean_repair(); $newsrc = tidy_get_output(); } else { // Better give them back what they came with, so they don't lose it all... $newsrc = "\n" .$source. "\n"; } } // Split our source into an array by lines $srcLines = preg_split("/\n/",$newsrc,-1,PREG_SPLIT_NO_EMPTY); // Get only the lines between the body tags $startLn = 0; while ( strpos( $srcLines[$startLn++], ' var ns=""; editor.setHTML(ns); mailbox/xinha/plugins/HtmlTidy/img/0040775000567100000120000000000010567167543017317 5ustar jcameronwheelmailbox/xinha/plugins/HtmlTidy/img/html-tidy.gif0100664000567100000120000000112710565364776021724 0ustar jcameronwheelGIF89a???fff3332/9̙Δ[9ξAV;ԡܸS[80)4'*kۙ50:521'ڙfzJ3[+JFBd ƄXǏ3%'o$s?'ݸϡD?ϸ&κRyKǛrN[!, 65J M #0?7;-K(4E.+I2:)=9  $F3* @D" 8Hb!*hwD"x0^* A1 @0;mailbox/xinha/plugins/HtmlTidy/lang/0040775000567100000120000000000010567167543017464 5ustar jcameronwheelmailbox/xinha/plugins/HtmlTidy/lang/ja.js0100664000567100000120000000044610565363014020402 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "HTML Tidy": "HTML Tidy", "Auto-Tidy": "自動適正化", "Don't Tidy": "適正化しない", "Tidy failed. Check your HTML for syntax errors.":"適正化に失敗しました。HTMLの文法エラーを確認してください。" };mailbox/xinha/plugins/HtmlTidy/lang/nl.js0100664000567100000120000000013010565363014020407 0ustar jcameronwheel// I18N constants // LANG: "nl", ENCODING: UTF-8 { "HT-html-tidy": "HTML opschonen" };mailbox/xinha/plugins/HtmlTidy/lang/de.js0100664000567100000120000000037510565363014020401 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // Author: Raimund Meyer ray@ray-of-light.org { "HTML Tidy": "HTML Tidy", "Tidy failed. Check your HTML for syntax errors.": "Tidy fehlgeschlagen. Prüfen Sie den HTML Code nach Syntax-Fehlern." }; mailbox/xinha/plugins/HtmlTidy/lang/nb.js0100664000567100000120000000040310565363014020400 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "HTML Tidy": "HTML Tidy", "Tidy failed. Check your HTML for syntax errors.": "Tidy feilet. Sjekk HTML koden for syntaksfeil." };mailbox/xinha/plugins/HtmlTidy/lang/fr.js0100664000567100000120000000042210565363014020411 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "HTML Tidy": "HTML Tidy", "Auto-Tidy": "Tidy automatique", "Don't Tidy": "Tidy non utilisé", "Tidy failed. Check your HTML for syntax errors.": "Tidy a échoué. Vérifiez votre HTML for des erreurs de syntaxe" };mailbox/xinha/plugins/HtmlTidy/html-tidy-config.cfg0100664000567100000120000000141610565363014022366 0ustar jcameronwheel// Default configuration file for the htmlArea, HtmlTidy plugin // By Adam Wright, for The University of Western Australia // // Evertything you always wanted to know about HTML Tidy * // can be found at http://tidy.sourceforge.net/, and a // quick reference to the configuration options exists at // http://tidy.sourceforge.net/docs/quickref.html // // * But were afraid to ask // // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). word-2000: yes clean: yes drop-font-tags: no doctype: auto drop-empty-paras: yes drop-proprietary-attributes: yes enclose-block-text: yes enclose-text: yes escape-cdata: yes logical-emphasis: yes indent: auto indent-spaces: 2 break-before-br: yes output-xhtml: yes force-output: yes mailbox/xinha/plugins/HtmlTidy/html-tidy.js0100664000567100000120000000563710565363014021011 0ustar jcameronwheel// Plugin for htmlArea to run code through the server's HTML Tidy // By Adam Wright, for The University of Western Australia // // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function HtmlTidy(editor) { this.editor = editor; var cfg = editor.config; var bl = HtmlTidy.btnList; var self = this; this.onMode = this.__onMode; // register the toolbar buttons provided by this plugin var toolbar = []; for (var i = 0; i < bl.length; ++i) { var btn = bl[i]; if (btn == "html-tidy") { var id = "HT-html-tidy"; cfg.registerButton(id, this._lc("HTML Tidy"), editor.imgURL(btn[0] + ".gif", "HtmlTidy"), true, function(editor, id) { // dispatch button press event self.buttonPress(editor, id); }, btn[1]); toolbar.push(id); } else if (btn == "html-auto-tidy") { var btnTxt = [this._lc("Auto-Tidy"), this._lc("Don't Tidy")]; var optionItems = new Object(); optionItems[btnTxt[0]] = "auto"; optionItems[btnTxt[1]] = "noauto"; var ht_class = { id : "HT-auto-tidy", options : optionItems, action : function (editor) { self.__onSelect(editor, this); }, refresh : function (editor) { }, context : "body" }; cfg.registerDropdown(ht_class); } } for (var i in toolbar) { cfg.toolbar[0].push(toolbar[i]); } } HtmlTidy._pluginInfo = { name : "HtmlTidy", version : "1.0", developer : "Adam Wright", developer_url : "http://blog.hipikat.org/", sponsor : "The University of Western Australia", sponsor_url : "http://www.uwa.edu.au/", license : "htmlArea" }; HtmlTidy.prototype._lc = function(string) { return HTMLArea._lc(string, 'HtmlTidy'); }; HtmlTidy.prototype.__onSelect = function(editor, obj) { // Get the toolbar element object var elem = editor._toolbarObjects[obj.id].element; // Set our onMode event appropriately if (elem.value == "auto") this.onMode = this.__onMode; else this.onMode = null; }; HtmlTidy.prototype.__onMode = function(mode) { if ( mode == "textmode" ) { this.buttonPress(this.editor, "HT-html-tidy"); } }; HtmlTidy.btnList = [ null, // separator ["html-tidy"], ["html-auto-tidy"] ]; HtmlTidy.prototype.buttonPress = function(editor, id) { switch (id) { case "HT-html-tidy": { var oldhtml = editor.getHTML(); if(oldhtml=="") break; //don't clean empty text // Ask the server for some nice new html, based on the old... HTMLArea._postback(_editor_url + 'plugins/HtmlTidy/html-tidy-logic.php', {'htisource_name' : oldhtml}, function(javascriptResponse) { eval(javascriptResponse) }); } break; } }; HtmlTidy.prototype.processTidied = function(newSrc) { editor = this.editor; editor.setHTML(newSrc); };mailbox/xinha/plugins/HtmlTidy/README0100664000567100000120000000711110565363014017405 0ustar jcameronwheel// Plugin for htmlArea to run code through the server's HTML Tidy // By Adam Wright, for The University of Western Australia // // Email: zeno@ucc.gu.uwa.edu.au // Homepage: http://blog.hipikat.org/ // // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). // // Version: 0.5 // Released to the outside world: 04/03/04 HtmlTidy is a plugin for the popular cross-browser TTY WYSIWYG editor, htmlArea (http://www.interactivetools.com/products/htmlarea/). HtmlTidy basically queries HTML Tidy (http://tidy.sourceforge.net/) on the server side, getting it to make-html-nice, instead of relying on masses of javascript, which the client would have to download. Hi, this is a quick explanation of how to install HtmlTidy. Much better documentation is probably required, and you're welcome to write it :) * The HtmlTidy directory you should have found this file in should include the following: - README This file, providing help installing the plugin. - html-tidy-config.cfg This file contains the configuration options HTML Tidy uses to clean html, and can be modified to suit your organizations requirements. - html-tidy-logic.php This is the php script, which is queried with dirty html and is responsible for invoking HTML Tidy, getting nice new html and returning it to the client. - html-tidy.js The main htmlArea plugin, providing functionality to tidy html through the htmlArea interface. - htmlarea.js.onmode_event.diff At the time of publishing, an extra event handler was required inside the main htmlarea.js file. htmlarea.js may be patched against this file to make the changes reuquired, but be aware that the event handler may either now be in the core or htmlarea.js may have changed enough to invalidate the patch. UPDATE: now it exists in the official htmlarea.js; applying this patch is thus no longer necessary. - img/html-tidy.gif The HtmlTidy icon, for the htmlArea toolbar. Created by Dan Petty for The University of Western Australia. - lang/en.js English language file. Add your own language files here and please contribute back into the htmlArea community! The HtmlArea directory should be extracted to your htmlarea/plugins/ directory. * Make sure the onMode event handler mentioned above, regarding htmlarea.js.onmode_event.diff, exists in your htmlarea.js * html-tidy-logic.php should be executable, and your web server should be configured to execute php scripts in the directory html-tidy-logic.php exists in. * HTML Tidy needs to be installed on your server, and 'tidy' should be an alias to it, lying in the PATH known to the user executing such web scripts. * In your htmlArea configuration, do something like this: HTMLArea.loadPlugin("HtmlTidy"); editor = new HTMLArea("doc"); editor.registerPlugin("HtmlTidy"); * Then, in your htmlArea toolbar configuration, use: - "HT-html-tidy" This will create the 'tidy broom' icon on the toolbar, which will attempt to tidy html source when clicked, and; - "HT-auto-tidy" This will create an "Auto Tidy" / "Don't Tidy" dropdown, to select whether the source should be tidied automatically when entering source view. On by default, if you'd like it otherwise you can do so programatically after generating the toolbar :) (Or just hack it to be otherwise...) Thank you. Any bugs you find can be emailed to zeno@ucc.gu.uwa.edu.au mailbox/xinha/plugins/BackgroundImage/0040775000567100000120000000000010567167541020025 5ustar jcameronwheelmailbox/xinha/plugins/BackgroundImage/popups/0040775000567100000120000000000010567167541021353 5ustar jcameronwheelmailbox/xinha/plugins/BackgroundImage/popups/bgimage.html0100664000567100000120000000334010565362762023631 0ustar jcameronwheel Set Page Background Image
Set Page Background Image
mailbox/xinha/plugins/BackgroundImage/background-image.js0100664000567100000120000000343510565362762023564 0ustar jcameronwheel// BackgroundImage plugin for Xinha // Sponsored by http://www.schaffrath-neuemedien.de // Implementation by Udo Schmal // based on TinyMCE (http://tinymce.moxiecode.com/) Distributed under LGPL by Moxiecode Systems AB // // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function BackgroundImage(editor) { this.editor = editor; var cfg = editor.config; var self = this; cfg.registerButton({ id : "bgImage", tooltip : this._lc("Set page background image"), image : editor.imgURL("ed_bgimage.gif", "BackgroundImage"), textMode : false, action : function(editor) { self.buttonPress(editor); } }) cfg.addToolbarElement("bgImage", "inserthorizontalrule", 1); } BackgroundImage._pluginInfo = { name : "BackgroundImage", version : "1.0", developer : "Udo Schmal", developer_url : "http://www.schaffrath-neuemedien.de/", c_owner : "Udo Schmal & Schaffrath NeueMedien", sponsor : "L.N.Schaffrath NeueMedien", sponsor_url : "http://www.schaffrath-neuemedien.de.de/", license : "htmlArea" }; BackgroundImage.prototype._lc = function(string) { return HTMLArea._lc(string, 'BackgroundImage'); }; BackgroundImage.prototype.buttonPress = function(editor) { //var doc = this.editor._doc; editor._popupDialog( "plugin://BackgroundImage/bgimage", function( bgImage ) { if(bgImage) { if(HTMLArea.is_ie) editor.focusEditor(); if(bgImage=="*") { editor._doc.body.background = ""; } else { editor._doc.body.background = bgImage; } } }, null); };mailbox/xinha/plugins/BackgroundImage/backgrounds/0040775000567100000120000000000010567167541022327 5ustar jcameronwheelmailbox/xinha/plugins/BackgroundImage/backgrounds/blufur.jpg0100664000567100000120000000640110565362762024326 0ustar jcameronwheelJFIFHHC     C   +" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?hk\%ƉM=&%n\ϳmF<GO 'ŵrZlwMѕv]^I3]ݿTBs N9-b.&/M/?1y?XD=O$vl=:6@' ?_OSj-?O[1>~Ϸ{$L2j}'EmI$fkcGeoOhoүMXD7i>r|U,Hc ,O1BOuvyoi?l)$t8oA |?hJ翗7qS껫Y\[a;$sueǵpo\{){9gPo{A\ODƟ6fx\~o/!g7f7=XSO8և5K,~A, _܏?5ie-͟ISTi(O| 㷎y~MHǽaRuM9'G= w8?Boz4ׅ1RjG>K?$~ezmsY;~=~ CxUZG0͏&ݚ>Wukŕ͝~$q'-_Y%kowq Iٮ '؞tHOfժ6 {{<9]͟&_zecI#ܟ#:Pq~_XZ܎7BCǷOU{ȬOUH/5$&>.4O}G{>K-#O;m5=.m hkzlI<{yjdž4,PZKo|}^[>H.?gҥD䰆KW aOݜi榧j ^ĶO"M'ͻBM>KrN=sXMKx?ks2|()r~0..;8ߧǿd]ں}/\u ymM^:${U,ؑߢp\q~8٣G%}wqo ȯ'&[ۼtj4ϱ[̒y'NuU5M.CmK }k@_%Ysۘ Ώ& kY7y}ej wd?4{~ozE|R$r)-V4=)> >y#+Y I#{xcf9Igj//??NٵϹqV~ d<̑wVPqQHOՄy-i[\GzOJN5hhw q@m#5\ƭk0Om{\CWUa[jŝvvQtRſ&[5/i7c{o2&$oatySzEϭ]'(~{82|}ϻWťwTH#}z]wu}ku @'~iGQwxn>cM6mi~ м;'5INVd4;Y ϙ:M:2o+;{o2I/RWu-Kډa$#\vv^$Xh|sV~#T;"ΟPN`r>Vd-[C\I2[=բ|EYg)q%2?̾_G|kgOި' 9N+f:W.5G_G:XKOo/Mv Vxn%0$2bjxeybM[ d ^^bk-(o$<{Eݚ$i<+V"KP"{;ߤm'꼗Ɵ46dԟ/޵vX>DG=S;mn7cEYvUa4M.K&o[ˠ0h(5+iYtѸ"gi$6t]Է/i}}{-?{*}T:}W63Ksmailbox/xinha/plugins/BackgroundImage/backgrounds/thumbnails/0040775000567100000120000000000010567167541024475 5ustar jcameronwheelmailbox/xinha/plugins/BackgroundImage/backgrounds/thumbnails/blufur.jpg0100664000567100000120000000225110565362762026473 0ustar jcameronwheelJFIFHHC     C   ++" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?hk\%ƉM=&%n\ϳmF<GO 'ŵrZlwMѕv]^\I3]ݿT9@Ss 1O wOm0`|޴HǽvCuK G$l2Fh7BCǷOU{ȬOUH/5$&>.4O}G{>svhȗ6MQ俶~v4xM6i$MϞ=cq|o}%7{>Zs/"{={O GO%C 2kNPhM՜i榪>i5$ ,y͕W<'y=ŝywh=ZdQG5MYݻy?wz}gm2Gk}WL֡.!DVuAXGiaqT\k EMbĚ}X̟ Gje mXmailbox/xinha/plugins/BackgroundImage/backgrounds/thumbnails/palecnvs.jpg0100664000567100000120000000217110565362762027010 0ustar jcameronwheelJFIFHHC     C   00" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?B;}?51le=?^ϳI2FJQd[L|ϒp-,HߓuGq_&㒉/MB.Gx"?10I&ʎ;{xft|rq͟k]bG=q" ${/3:Ŵu>TMcζտ*94{GHkG1I@Iq,=vA-~\\ǿ~GGZ˴o$ޔ\[2yl$W(s~>JO.=oM.(O7>l߻WlH6}mailbox/xinha/plugins/BackgroundImage/backgrounds/thumbnails/ppplcnvs.jpg0100664000567100000120000000734310565362762027050 0ustar jcameronwheelJFIFHH Photoshop 3.08BIMHH8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM }JFIFHH'File written by Adobe Photoshop 4.0Adobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?%L5ă]Q-4$}3 :O3Rin?I%5\g ΐ3'"Jb$i' 4LdYs?S6EUy2Ĕ͡{(l!.DHHOP.>:$`#E&Vۺd}<no~ [{"zMx v .S9HJ[e?I꒑G-N׹Tݤt<&{$qPuֳ@ܦ^Z $\=$zq68p4 $ IL o{J;<,s~49dO| rO )c`˄_2NBRs})e$7_BiѴm)ovu1U!S OޒX&'Ds"d'k]ruѳ; k2;$;*6g-E SG:vIL*6=ڞO=@ZZ5T2:s^Q,[E9u>i)k> IEj$8kLgSZ=la'G-A_w1u<|gGѩvֈ'Ħ0^N[w|~-ΝӳtIR=7^xSp$(}Ŷ$Cf>r~Ojr\>bL۷DM] nv0짼0n=SYhft^&OQXDJA1'%?mDx){t I :ޛZ *UV]O8)A~FR#MLDgHIH^<kt;53[c[RSƙe8_A!KC )!ECki%ďJZth@vX Aqi ;$ iDk}I3Q}$wôRSGMh&F"PgX11=h)#F֑IKm!ӻD;66T 4G1{/Qw"#D_wG%3y{Α'>DF0tmpt)CʛֈA$s$p4#@Y} y~ 60L%(dI 7ǚgư>_%=MT}?yu γi2%D8X' OG_ R'txM07RIIK11y@0FDiEDJbCyTvg4R7 OJ3{L}$2n`-eӹhuEqkZ6@#q%#4@I9H mZ|SZt*M1QswC(3 JU'j*g_'IK8@$2cj<zouCԍ N͚&`-%2k{1O']9S_.hwS$?A&.*omRv'TjZD!l̓Jbj;!κC\u8BIM'File written by Adobe Photoshop 4.0Adobed              22"  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?/~0SG5.y-vrp7٣㪼p&y8Fſ&+骨Rjz~_*)T5W78Sێ1VIn*|(F*ʼn$ roݱSh+EAe}FZ/O6;E^lU) $QQ^K"=:cV4@TT-~6$M1@ CjӞ_iCBvRIn2vfqҠљUbH Gݏ1)+և-M| OT|O ؚ5mOٳQ?߽_џ+QR*N̡уUw'3F:(QҀqfhUJl>*sj^ "#n~yj 1hd Sq 4~Ru튬 ^4`Yث^#Y=lU#8O<{2}z{}ث?׾-o<͊a*[O=e͒ )\g|w4fϾSI)gzL\Z }ph:ANCcAtI))`a2tńOE{}RgRG MQ$]dv>*kw%0CXme3gD\C%'gu{rze[:(@))rE#Z@\tRx{ L>XIor|TMWSTlsGEB [4:eEp[]w:)A%$[֙'0CTxsDxe#%0mi5xkDHcDI3X{uHHk-G:h1grzI8!= ha`\q<[u>j.#|ԍo 2y4Ac#BmfhT v_Jfs΍E,<|aPsATcNBqH?%`ưeILE-fMѾ/!tRR'vVqa#NP0Ed;%?K p|+ibɍ|TxF~ AFɰ@ިw*Abր7x{+nԠi?ܠ=cwH?zJeijQTշM9ڃtO[LH ;DG9F3KvIHp%ZgV$ ;_JN-iiq!9p afIL Iٲ)V1)1M8Ӻm{SK K]̂?mXN [6ϒpH$8ᴟʒ0 ly'ȏ ہ4)Key {-{?$0<)@/plhkOC}:ONZH-5vrJY,.hg1$oh'_I>΍ a場$# vZt@'_ TZ?4A?~ C[orJcȳw5Opu;)9O%I%(56o rR;H_ R-\IOI$ݮ?ׄŬskCOvnp ~\6?9nHOJZ88s&tyؗۃ?IK]@уhԴԧ >&qh2ΎGIK{ 4āJ̇9Jm<<{{;]>;}ɉ<?%+v!xm'3h=g)s `^ NGIKӠ`9{@NZ֍?KFszz5 ۠7RqX1Z L)k9 4y$-$1ߕ# p0yj$ *@'._8,#B5WjcT}7h?I)8BIM'File written by Adobe Photoshop 4.0Adobed            0" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?id0D==wB[tF$ZΊT2a)ʈR t$$)pן"L& `\`Lh JI-))kaO t H'ZˏJ^xa%0oemt{vے0.' J\حJ廅?Q.GQukջS"Љ?P,n)0N [p5"JJD* ϐO:vO7kxH <%-Q)K#iTR 8ɝRȁ$'w|$K'}q< (9x4LjcH@Ъ\[K| rK'M `Ife@ )sdCCIsŪM-xeBXk]>$̤s vwׁۢŒU1=0KޛdwH52`8yhȇtxIL-1'jpDˆmDncx 涃"Im7~sKJv 5G$J\6R{}dX& Q,g<H0n5;ZI(9x4LkcDna4))ADb)$ clXZxd)2Ot'8sip:Ut=-2AHn$ܗ ́1ơ?!C))w;E-?M cUOe>8˧'[y#4&6cv꒘1wa:}\R~[B:G)`l77A1I ?8.v(RR.wa.\?Gw SZw%%,:ܜ$tm. 1=$ )v} %'4 e&K8sip:RSoG'YIKk˧PJmailbox/xinha/plugins/BackgroundImage/backgrounds/ppplcnvs.jpg0100664000567100000120000000734310565362762024702 0ustar jcameronwheelJFIFHH Photoshop 3.08BIMHH8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM }JFIFHH'File written by Adobe Photoshop 4.0Adobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?%L5ă]Q-4$}3 :O3Rin?I%5\g ΐ3'"Jb$i' 4LdYs?S6EUy2Ĕ͡{(l!.DHHOP.>:$`#E&Vۺd}<no~ [{"zMx v .S9HJ[e?I꒑G-N׹Tݤt<&{$qPuֳ@ܦ^Z $\=$zq68p4 $ IL o{J;<,s~49dO| rO )c`˄_2NBRs})e$7_BiѴm)ovu1U!S OޒX&'Ds"d'k]ruѳ; k2;$;*6g-E SG:vIL*6=ڞO=@ZZ5T2:s^Q,[E9u>i)k> IEj$8kLgSZ=la'G-A_w1u<|gGѩvֈ'Ħ0^N[w|~-ΝӳtIR=7^xSp$(}Ŷ$Cf>r~Ojr\>bL۷DM] nv0짼0n=SYhft^&OQXDJA1'%?mDx){t I :ޛZ *UV]O8)A~FR#MLDgHIH^<kt;53[c[RSƙe8_A!KC )!ECki%ďJZth@vX Aqi ;$ iDk}I3Q}$wôRSGMh&F"PgX11=h)#F֑IKm!ӻD;66T 4G1{/Qw"#D_wG%3y{Α'>DF0tmpt)CʛֈA$s$p4#@Y} y~ 60L%(dI 7ǚgư>_%=MT}?yu γi2%D8X' OG_ R'txM07RIIK11y@0FDiEDJbCyTvg4R7 OJ3{L}$2n`-eӹhuEqkZ6@#q%#4@I9H mZ|SZt*M1QswC(3 JU'j*g_'IK8@$2cj<zouCԍ N͚&`-%2k{1O']9S_.hwS$?A&.*omRv'TjZD!l̓Jbj;!κC\u8BIM'File written by Adobe Photoshop 4.0Adobed              22"  s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?/~0SG5.y-vrp7٣㪼p&y8Fſ&+骨Rjz~_*)T5W78Sێ1VIn*|(F*ʼn$ roݱSh+EAe}FZ/O6;E^lU) $QQ^K"=:cV4@TT-~6$M1@ CjӞ_iCBvRIn2vfqҠљUbH Gݏ1)+և-M| OT|O ؚ5mOٳQ?߽_џ+QR*N̡уUw'3F:(QҀqfhUJl>*sj^ "#n~yj 1hd Sq 4~Ru튬 ^4`Yث^#Y=lU#8O<{2}z{}ث?׾-o<͊a*[O=e͒ )\g|w4fϾSI)gzL\Z }ph:ANCcAtI))`a2tńOE{}RgRG MQ$]dv>*kw%0CXme3gD\C%'gu{rze[:(@))rE#Z@\tRx{ L>XIor|TMWSTlsGEB [4:eEp[]w:)A%$[֙'0CTxsDxe#%0mi5xkDHcDI3X{uHHk-G:h1grzI8!= ha`\q<[u>j.#|ԍo 2y4Ac#BmfhT v_Jfs΍E,<|aPsATcNBqH?%`ưeILE-fMѾ/!tRR'vVqa#NP0Ed;%?K p|+ibɍ|TxF~ AFɰ@ިw*Abր7x{+nԠi?ܠ=cwH?zJeijQTշM9ڃtO[LH ;DG9F3KvIHp%ZgV$ ;_JN-iiq!9p afIL Iٲ)V1)1M8Ӻm]*>/gi, ''); html = html.replace(/<\/\s*p\s*>/gi, ''); html = html.trim(); return html; } mailbox/xinha/plugins/SuperClean/filters/word.js0100664000567100000120000000405710565363042022020 0ustar jcameronwheelfunction(html) { // Remove HTML comments html = html.replace(//gi, "" ); html = html.replace(//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: html = html.replace(/<\/?\w+:[^>]*>/gi, "") ; // Replace the   html = html.replace(/ /, " " ); // Transform


to
//html = html.replace(/<\s*p[^>]*>\s*<\s*br\s*\/>\s*<\/\s*p[^>]*>/gi, "
"); html = html.replace(/<\s*p[^>]*><\s*br\s*\/?>\s*<\/\s*p[^>]*>/gi, "
"); // Remove

html = html.replace(/<\s*p[^>]*>/gi, ""); // Replace

with
html = html.replace(/<\/\s*p[^>]*>/gi, "
"); // Remove any
at the end html = html.replace(/(\s*
\s*)*$/, ""); html = html.trim(); return html; } mailbox/xinha/plugins/SuperClean/tidy.php0100664000567100000120000001150310565363042020513 0ustar jcameronwheel,{,},@,\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)) { // 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('/ mailbox/xinha/plugins/SuperClean/super-clean.js0100664000567100000120000001515310565363456021623 0ustar jcameronwheelfunction 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+="
\n"; var _2b=this.SuperClean.editor.config.SuperClean.filters[_2a]; if(typeof _2b.label=="undefined"){ _29+=" \n"; _29+=" \n"; }else{ _29+=" \n"; _29+=" \n"; } _29+="
\n"; } this.html=this.html.replace("",_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(); }; mailbox/xinha/plugins/SuperClean/img/0040775000567100000120000000000010567167546017625 5ustar jcameronwheelmailbox/xinha/plugins/SuperClean/img/ed_superclean.gif0100664000567100000120000000051610565364776023126 0ustar jcameronwheelGIF89aƄX29/ξܸVΔ[̙9Aԡ;kۙ5*1κDS0ϸ&3zJ'+[[fǸ'Ǜrϡd o$'s?ݸN[RyK?!,@k@pH$DD"H /A hҰ{nBZm #<XN:| eR";$R / QC(#[ +D'%836a.9RA;mailbox/xinha/plugins/SuperClean/lang/0040775000567100000120000000000010567167546017772 5ustar jcameronwheelmailbox/xinha/plugins/SuperClean/lang/ja.js0100664000567100000120000000224610565363042020706 0ustar jcameronwheel// 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": "中止" };mailbox/xinha/plugins/SuperClean/lang/de.js0100664000567100000120000000167510565363042020711 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Raimund Meyer xinha@ray-of-light.org { "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...!" }; mailbox/xinha/plugins/SuperClean/lang/nb.js0100664000567100000120000000212610565363042020710 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "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!" };mailbox/xinha/plugins/SuperClean/lang/fr.js0100664000567100000120000000170610565363042020723 0ustar jcameronwheel// 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 !" };mailbox/xinha/plugins/SuperClean/dialog.html0100664000567100000120000000052110565363042021154 0ustar jcameronwheel

Clean up HTML

Please select from the following cleaning options...
mailbox/xinha/plugins/Equation/0040775000567100000120000000000010567167541016570 5ustar jcameronwheelmailbox/xinha/plugins/Equation/popups/0040775000567100000120000000000010567167541020116 5ustar jcameronwheelmailbox/xinha/plugins/Equation/popups/dialog.html0100664000567100000120000003360510565363030022234 0ustar jcameronwheel AsciiMath Formula Input
AsciiMath Formula Input
`(x+1)/(x-1)` `x^(m+n)` `x_(mn)` `sqrt(x)` `root(n)(x)` `"text"`
`dy/dx` `lim_(x->oo)` `sum_(n=1)^oo` `int_a^bf(x)dx` `[[a,b],[c,d]]` `((n),(k))`
`*` `**` `//` `\\` `xx` `-:` `@` `o+` `ox` `o.` `sum` `prod` `^^` `∧` `vv` `∨`
`!=` `<=` `>=` `-<` `>-` `in` `!in` `sub` `sup` `sube` `supe` `O/` `nn` `∩` `uu` `∪`
`and` `or` `not` `=>` `if` `<=>` `AA` `EE` `_|_` `TT` `|--` `|==` `-=` `~=` `~~` `prop`
`int` `oint` `del` `grad` `+-` `oo` `aleph` `quad` `diamond` `square` `|__` `__|` `|~` `~|` `<x>` `/_`
`uarr` `darr` `larr` `->` `|->` `harr` `lArr` `rArr` `hArr` `hata` `ula` `dota` `ddota` `veca` `bara` `:.`
`NN` `ZZ` `QQ` `RR` `CC` `bba` `bbba` `cca` `fra` `sfa` `tta` `stackrel(->)(+)` `upsilon`
`alpha` `beta` `gamma` `Gamma` `delta` `Delta` `epsi` `zeta` `eta` `theta` `Theta` `iota` `kappa` `lambda` `Lambda` `mu`
`nu` `pi` `Pi` `rho` `sigma` `Sigma` `tau` `xi` `Xi` `phi` `Phi` `chi` `psi` `Psi` `omega` `Omega`
InputPreview
Based on ASCIIMathML by Peter Jipsen, Chapman University
For more information on AsciiMathML visit this page: http://www1.chapman.edu/~jipsen/mathml/asciimath.html
Attention: Editing the formula in the editor is not possible, please use this dialog!
mailbox/xinha/plugins/Equation/example.html0100664000567100000120000000334610565363030021101 0ustar jcameronwheel AsciiMathML Example

AsciiMathML Example

This shows how to set up your page to display MathML using AsciiMathML

Add this to the head section of your document:


  <!-- This block is optional configuration --<
  <script type="text/javascript">
    var mathcolor = "black"; // You may change the color of the formulae (default: red)
    var showasciiformulaonhover = false; // helps students learn ASCIIMath, set to false if you like  (default:true)
    var mathfontfamily = "Arial"; //and the font (default: serif, which is good I think)
  </script>
  <!-- THIS LOADS THE ACTUAL SCRIPT --<
  <script type="text/javascript" src="ASCIIMathML.js"></script>


`int_a^bf(x)dx`

`[[a,b],[c,d]]`

ASCIIMathML by Peter Jipsen, Chapman University
For more information on AsciiMathML visit this page: http://www1.chapman.edu/~jipsen/mathml/asciimath.html

mailbox/xinha/plugins/Equation/equation.js0100664000567100000120000000570210565363436020753 0ustar jcameronwheelfunction Equation(_1){ this.editor=_1; var _2=_1.config; var _3=this; _2.registerButton({id:"equation",tooltip:this._lc("Formula Editor"),image:_1.imgURL("equation.gif","Equation"),textMode:false,action:function(_4,id){ _3.buttonPress(_4,id); }}); _2.addToolbarElement("equation","inserthorizontalrule",-1); mathcolor=_2.Equation.mathcolor; mathfontfamily=_2.Equation.mathfontfamily; if(!Xinha.is_ie){ _1.notifyOn("modechange",function(e,_7){ _3.onModeChange(_7); }); Xinha.prependDom0Event(_1._textArea.form,"submit",function(){ _3.unParse(); _3.reParse=true; }); } if(typeof AMprocessNode!="function"){ Xinha._loadback(_editor_url+"plugins/Equation/ASCIIMathML.js",function(){ translate(); }); } } Xinha.Config.prototype.Equation={"mathcolor":"red","mathfontfamily":"serif"}; Equation._pluginInfo={name:"ASCIIMathML Formula Editor",version:"2.0",developer:"Raimund Meyer",developer_url:"http://rheinaufCMS.de",c_owner:"",sponsor:"Rheinauf",sponsor_url:"http://rheinaufCMS.de",license:"GNU/LGPL"}; Equation.prototype._lc=function(_8){ return Xinha._lc(_8,"Equation"); }; Equation.prototype.onGenerate=function(){ this.parse(); }; Equation.prototype.onUpdateToolbar=function(){ if(!Xinha.is_ie&&this.reParse){ AMprocessNode(this.editor._doc.body,false); } }; Equation.prototype.onModeChange=function(_9){ var _a=this.editor._doc; switch(_9.mode){ case "text": this.unParse(); break; case "wysiwyg": this.parse(); break; } }; Equation.prototype.parse=function(){ if(!Xinha.is_ie){ var _b=this.editor._doc; var _c=_b.getElementsByTagName("span"); for(var i=0;i<_c.length;i++){ var _e=_c[i]; if(_e.className!="AM"){ continue; } _e.title=_e.innerHTML; AMprocessNode(_e,false); } } }; Equation.prototype.unParse=function(){ var _f=this.editor._doc; var _10=_f.getElementsByTagName("span"); for(var i=0;i<_10.length;i++){ var _12=_10[i]; if(_12.className.indexOf("AM")==-1){ continue; } var _13=_12.getAttribute("title"); _12.innerHTML=_13; _12.setAttribute("title",null); this.editor.setHTML(this.editor.getHTML()); } }; Equation.prototype.buttonPress=function(){ var _14=this; var _15=this.editor; var _16={}; _16["editor"]=_15; var _17=_15._getFirstAncestor(_15.getSelection(),["span"]); if(_17){ _16["editedNode"]=_17; } _15._popupDialog("plugin://Equation/dialog",function(_18){ _14.insert(_18); },_16); }; Equation.prototype.insert=function(_19){ if(typeof _19["formula"]!="undefined"){ var _1a=(_19["formula"]!="")?_19["formula"].replace(/^`?(.*)`?$/m,"`$1`"):""; if(_19["editedNode"]&&(_19["editedNode"].tagName.toLowerCase()=="span")){ var _1b=_19["editedNode"]; if(_1a!=""){ _1b.innerHTML=_1a; _1b.title=_1a; }else{ _1b.parentNode.removeChild(_1b); } }else{ if(!_19["editedNode"]&&_1a!=""){ if(!Xinha.is_ie){ var _1b=document.createElement("span"); _1b.className="AM"; this.editor.insertNodeAtSelection(_1b); _1b.innerHTML=_1a; _1b.title=_1a; }else{ this.editor.insertHTML(""+_1a+""); } } } if(!Xinha.is_ie){ AMprocessNode(this.editor._doc.body,false); } } }; mailbox/xinha/plugins/Equation/ASCIIMathML.js0100664000567100000120000007504410565363434021025 0ustar jcameronwheelvar checkForMathML=true; var notifyIfNoMathML=true; if(typeof mathcolor=="undefined"){ var mathcolor="red"; } if(typeof mathfontfamily=="undefined"){ var mathfontfamily="serif"; } var displaystyle=true; if(typeof showasciiformulaonhover=="undefined"){ var showasciiformulaonhover=true; } var decimalsign="."; var AMdelimiter1="`",AMescape1="\\\\`"; var AMdelimiter2="$",AMescape2="\\\\\\$",AMdelimiter2regexp="\\$"; var doubleblankmathdelimiter=false; var isIE=document.createElementNS==null; if(document.getElementById==null){ alert("This webpage requires a recent browser such as\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer"); } function AMcreateElementXHTML(t){ if(isIE){ return document.createElement(t); }else{ return document.createElementNS("http://www.w3.org/1999/xhtml",t); } } function AMnoMathMLNote(){ var nd=AMcreateElementXHTML("h3"); nd.setAttribute("align","center"); nd.appendChild(AMcreateElementXHTML("p")); nd.appendChild(document.createTextNode("To view the ")); var an=AMcreateElementXHTML("a"); an.appendChild(document.createTextNode("ASCIIMathML")); an.setAttribute("href","http://www.chapman.edu/~jipsen/asciimath.html"); nd.appendChild(an); nd.appendChild(document.createTextNode(" notation use Internet Explorer 6+")); an=AMcreateElementXHTML("a"); an.appendChild(document.createTextNode("MathPlayer")); an.setAttribute("href","http://www.dessci.com/en/products/mathplayer/download.htm"); nd.appendChild(an); nd.appendChild(document.createTextNode(" or Netscape/Mozilla/Firefox")); nd.appendChild(AMcreateElementXHTML("p")); return nd; } function AMisMathMLavailable(){ if(navigator.appName.slice(0,8)=="Netscape"){ if(navigator.appVersion.slice(0,1)>="5"){ return null; }else{ return AMnoMathMLNote(); } }else{ if(navigator.appName.slice(0,9)=="Microsoft"){ try{ var _4=new ActiveXObject("MathPlayer.Factory.1"); return null; } catch(e){ return AMnoMathMLNote(); } }else{ return AMnoMathMLNote(); } } } var AMcal=[61237,8492,61238,61239,8496,8497,61240,8459,8464,61241,61242,8466,8499,61243,61244,61245,61246,8475,61247,61248,61249,61250,61251,61252,61253,61254]; var AMfrk=[61277,61278,8493,61279,61280,61281,61282,8460,8465,61283,61284,61285,61286,61287,61288,61289,61290,8476,61291,61292,61293,61294,61295,61296,61297,8488]; var AMbbb=[61324,61325,8450,61326,61327,61328,61329,8461,61330,61331,61332,61333,61334,8469,61335,8473,8474,8477,61336,61337,61338,61339,61340,61341,61342,8484]; var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,LEFTRIGHT=9,TEXT=10; var AMsqrt={input:"sqrt",tag:"msqrt",output:"sqrt",tex:null,ttype:UNARY},AMroot={input:"root",tag:"mroot",output:"root",tex:null,ttype:BINARY},AMfrac={input:"frac",tag:"mfrac",output:"/",tex:null,ttype:BINARY},AMdiv={input:"/",tag:"mfrac",output:"/",tex:null,ttype:INFIX},AMover={input:"stackrel",tag:"mover",output:"stackrel",tex:null,ttype:BINARY},AMsub={input:"_",tag:"msub",output:"_",tex:null,ttype:INFIX},AMsup={input:"^",tag:"msup",output:"^",tex:null,ttype:INFIX},AMtext={input:"text",tag:"mtext",output:"text",tex:null,ttype:TEXT},AMmbox={input:"mbox",tag:"mtext",output:"mbox",tex:null,ttype:TEXT},AMquote={input:"\"",tag:"mtext",output:"mbox",tex:null,ttype:TEXT}; var AMsymbols=[{input:"alpha",tag:"mi",output:"\u03b1",tex:null,ttype:CONST},{input:"beta",tag:"mi",output:"\u03b2",tex:null,ttype:CONST},{input:"chi",tag:"mi",output:"\u03c7",tex:null,ttype:CONST},{input:"delta",tag:"mi",output:"\u03b4",tex:null,ttype:CONST},{input:"Delta",tag:"mo",output:"\u0394",tex:null,ttype:CONST},{input:"epsi",tag:"mi",output:"\u03b5",tex:"epsilon",ttype:CONST},{input:"varepsilon",tag:"mi",output:"\u025b",tex:null,ttype:CONST},{input:"eta",tag:"mi",output:"\u03b7",tex:null,ttype:CONST},{input:"gamma",tag:"mi",output:"\u03b3",tex:null,ttype:CONST},{input:"Gamma",tag:"mo",output:"\u0393",tex:null,ttype:CONST},{input:"iota",tag:"mi",output:"\u03b9",tex:null,ttype:CONST},{input:"kappa",tag:"mi",output:"\u03ba",tex:null,ttype:CONST},{input:"lambda",tag:"mi",output:"\u03bb",tex:null,ttype:CONST},{input:"Lambda",tag:"mo",output:"\u039b",tex:null,ttype:CONST},{input:"mu",tag:"mi",output:"\u03bc",tex:null,ttype:CONST},{input:"nu",tag:"mi",output:"\u03bd",tex:null,ttype:CONST},{input:"omega",tag:"mi",output:"\u03c9",tex:null,ttype:CONST},{input:"Omega",tag:"mo",output:"\u03a9",tex:null,ttype:CONST},{input:"phi",tag:"mi",output:"\u03c6",tex:null,ttype:CONST},{input:"varphi",tag:"mi",output:"\u03d5",tex:null,ttype:CONST},{input:"Phi",tag:"mo",output:"\u03a6",tex:null,ttype:CONST},{input:"pi",tag:"mi",output:"\u03c0",tex:null,ttype:CONST},{input:"Pi",tag:"mo",output:"\u03a0",tex:null,ttype:CONST},{input:"psi",tag:"mi",output:"\u03c8",tex:null,ttype:CONST},{input:"Psi",tag:"mi",output:"\u03a8",tex:null,ttype:CONST},{input:"rho",tag:"mi",output:"\u03c1",tex:null,ttype:CONST},{input:"sigma",tag:"mi",output:"\u03c3",tex:null,ttype:CONST},{input:"Sigma",tag:"mo",output:"\u03a3",tex:null,ttype:CONST},{input:"tau",tag:"mi",output:"\u03c4",tex:null,ttype:CONST},{input:"theta",tag:"mi",output:"\u03b8",tex:null,ttype:CONST},{input:"vartheta",tag:"mi",output:"\u03d1",tex:null,ttype:CONST},{input:"Theta",tag:"mo",output:"\u0398",tex:null,ttype:CONST},{input:"upsilon",tag:"mi",output:"\u03c5",tex:null,ttype:CONST},{input:"xi",tag:"mi",output:"\u03be",tex:null,ttype:CONST},{input:"Xi",tag:"mo",output:"\u039e",tex:null,ttype:CONST},{input:"zeta",tag:"mi",output:"\u03b6",tex:null,ttype:CONST},{input:"*",tag:"mo",output:"\u22c5",tex:"cdot",ttype:CONST},{input:"**",tag:"mo",output:"\u22c6",tex:"star",ttype:CONST},{input:"//",tag:"mo",output:"/",tex:null,ttype:CONST},{input:"\\\\",tag:"mo",output:"\\",tex:"backslash",ttype:CONST},{input:"setminus",tag:"mo",output:"\\",tex:null,ttype:CONST},{input:"xx",tag:"mo",output:"\xd7",tex:"times",ttype:CONST},{input:"-:",tag:"mo",output:"\xf7",tex:"divide",ttype:CONST},{input:"@",tag:"mo",output:"\u2218",tex:"circ",ttype:CONST},{input:"o+",tag:"mo",output:"\u2295",tex:"oplus",ttype:CONST},{input:"ox",tag:"mo",output:"\u2297",tex:"otimes",ttype:CONST},{input:"o.",tag:"mo",output:"\u2299",tex:"odot",ttype:CONST},{input:"sum",tag:"mo",output:"\u2211",tex:null,ttype:UNDEROVER},{input:"prod",tag:"mo",output:"\u220f",tex:null,ttype:UNDEROVER},{input:"^^",tag:"mo",output:"\u2227",tex:"wedge",ttype:CONST},{input:"^^^",tag:"mo",output:"\u22c0",tex:"bigwedge",ttype:UNDEROVER},{input:"vv",tag:"mo",output:"\u2228",tex:"vee",ttype:CONST},{input:"vvv",tag:"mo",output:"\u22c1",tex:"bigvee",ttype:UNDEROVER},{input:"nn",tag:"mo",output:"\u2229",tex:"cap",ttype:CONST},{input:"nnn",tag:"mo",output:"\u22c2",tex:"bigcap",ttype:UNDEROVER},{input:"uu",tag:"mo",output:"\u222a",tex:"cup",ttype:CONST},{input:"uuu",tag:"mo",output:"\u22c3",tex:"bigcup",ttype:UNDEROVER},{input:"!=",tag:"mo",output:"\u2260",tex:"ne",ttype:CONST},{input:":=",tag:"mo",output:":=",tex:null,ttype:CONST},{input:"lt",tag:"mo",output:"<",tex:null,ttype:CONST},{input:"<=",tag:"mo",output:"\u2264",tex:"le",ttype:CONST},{input:"lt=",tag:"mo",output:"\u2264",tex:"leq",ttype:CONST},{input:">=",tag:"mo",output:"\u2265",tex:"ge",ttype:CONST},{input:"geq",tag:"mo",output:"\u2265",tex:null,ttype:CONST},{input:"-<",tag:"mo",output:"\u227a",tex:"prec",ttype:CONST},{input:"-lt",tag:"mo",output:"\u227a",tex:null,ttype:CONST},{input:">-",tag:"mo",output:"\u227b",tex:"succ",ttype:CONST},{input:"in",tag:"mo",output:"\u2208",tex:null,ttype:CONST},{input:"!in",tag:"mo",output:"\u2209",tex:"notin",ttype:CONST},{input:"sub",tag:"mo",output:"\u2282",tex:"subset",ttype:CONST},{input:"sup",tag:"mo",output:"\u2283",tex:"supset",ttype:CONST},{input:"sube",tag:"mo",output:"\u2286",tex:"subseteq",ttype:CONST},{input:"supe",tag:"mo",output:"\u2287",tex:"supseteq",ttype:CONST},{input:"-=",tag:"mo",output:"\u2261",tex:"equiv",ttype:CONST},{input:"~=",tag:"mo",output:"\u2245",tex:"cong",ttype:CONST},{input:"~~",tag:"mo",output:"\u2248",tex:"approx",ttype:CONST},{input:"prop",tag:"mo",output:"\u221d",tex:"propto",ttype:CONST},{input:"and",tag:"mtext",output:"and",tex:null,ttype:SPACE},{input:"or",tag:"mtext",output:"or",tex:null,ttype:SPACE},{input:"not",tag:"mo",output:"\xac",tex:"neg",ttype:CONST},{input:"=>",tag:"mo",output:"\u21d2",tex:"implies",ttype:CONST},{input:"if",tag:"mo",output:"if",tex:null,ttype:SPACE},{input:"<=>",tag:"mo",output:"\u21d4",tex:"iff",ttype:CONST},{input:"AA",tag:"mo",output:"\u2200",tex:"forall",ttype:CONST},{input:"EE",tag:"mo",output:"\u2203",tex:"exists",ttype:CONST},{input:"_|_",tag:"mo",output:"\u22a5",tex:"bot",ttype:CONST},{input:"TT",tag:"mo",output:"\u22a4",tex:"top",ttype:CONST},{input:"|--",tag:"mo",output:"\u22a2",tex:"vdash",ttype:CONST},{input:"|==",tag:"mo",output:"\u22a8",tex:"models",ttype:CONST},{input:"(",tag:"mo",output:"(",tex:null,ttype:LEFTBRACKET},{input:")",tag:"mo",output:")",tex:null,ttype:RIGHTBRACKET},{input:"[",tag:"mo",output:"[",tex:null,ttype:LEFTBRACKET},{input:"]",tag:"mo",output:"]",tex:null,ttype:RIGHTBRACKET},{input:"{",tag:"mo",output:"{",tex:null,ttype:LEFTBRACKET},{input:"}",tag:"mo",output:"}",tex:null,ttype:RIGHTBRACKET},{input:"|",tag:"mo",output:"|",tex:null,ttype:LEFTRIGHT},{input:"(:",tag:"mo",output:"\u2329",tex:"langle",ttype:LEFTBRACKET},{input:":)",tag:"mo",output:"\u232a",tex:"rangle",ttype:RIGHTBRACKET},{input:"<<",tag:"mo",output:"\u2329",tex:null,ttype:LEFTBRACKET},{input:">>",tag:"mo",output:"\u232a",tex:null,ttype:RIGHTBRACKET},{input:"{:",tag:"mo",output:"{:",tex:null,ttype:LEFTBRACKET,invisible:true},{input:":}",tag:"mo",output:":}",tex:null,ttype:RIGHTBRACKET,invisible:true},{input:"int",tag:"mo",output:"\u222b",tex:null,ttype:CONST},{input:"dx",tag:"mi",output:"{:d x:}",tex:null,ttype:DEFINITION},{input:"dy",tag:"mi",output:"{:d y:}",tex:null,ttype:DEFINITION},{input:"dz",tag:"mi",output:"{:d z:}",tex:null,ttype:DEFINITION},{input:"dt",tag:"mi",output:"{:d t:}",tex:null,ttype:DEFINITION},{input:"oint",tag:"mo",output:"\u222e",tex:null,ttype:CONST},{input:"del",tag:"mo",output:"\u2202",tex:"partial",ttype:CONST},{input:"grad",tag:"mo",output:"\u2207",tex:"nabla",ttype:CONST},{input:"+-",tag:"mo",output:"\xb1",tex:"pm",ttype:CONST},{input:"O/",tag:"mo",output:"\u2205",tex:"emptyset",ttype:CONST},{input:"oo",tag:"mo",output:"\u221e",tex:"infty",ttype:CONST},{input:"aleph",tag:"mo",output:"\u2135",tex:null,ttype:CONST},{input:"...",tag:"mo",output:"...",tex:"ldots",ttype:CONST},{input:":.",tag:"mo",output:"\u2234",tex:"therefore",ttype:CONST},{input:"/_",tag:"mo",output:"\u2220",tex:"angle",ttype:CONST},{input:"\\ ",tag:"mo",output:"\xa0",tex:null,ttype:CONST},{input:"quad",tag:"mo",output:"\xa0\xa0",tex:null,ttype:CONST},{input:"qquad",tag:"mo",output:"\xa0\xa0\xa0\xa0",tex:null,ttype:CONST},{input:"cdots",tag:"mo",output:"\u22ef",tex:null,ttype:CONST},{input:"vdots",tag:"mo",output:"\u22ee",tex:null,ttype:CONST},{input:"ddots",tag:"mo",output:"\u22f1",tex:null,ttype:CONST},{input:"diamond",tag:"mo",output:"\u22c4",tex:null,ttype:CONST},{input:"square",tag:"mo",output:"\u25a1",tex:null,ttype:CONST},{input:"|__",tag:"mo",output:"\u230a",tex:"lfloor",ttype:CONST},{input:"__|",tag:"mo",output:"\u230b",tex:"rfloor",ttype:CONST},{input:"|~",tag:"mo",output:"\u2308",tex:"lceiling",ttype:CONST},{input:"~|",tag:"mo",output:"\u2309",tex:"rceiling",ttype:CONST},{input:"CC",tag:"mo",output:"\u2102",tex:null,ttype:CONST},{input:"NN",tag:"mo",output:"\u2115",tex:null,ttype:CONST},{input:"QQ",tag:"mo",output:"\u211a",tex:null,ttype:CONST},{input:"RR",tag:"mo",output:"\u211d",tex:null,ttype:CONST},{input:"ZZ",tag:"mo",output:"\u2124",tex:null,ttype:CONST},{input:"f",tag:"mi",output:"f",tex:null,ttype:UNARY,func:true},{input:"g",tag:"mi",output:"g",tex:null,ttype:UNARY,func:true},{input:"lim",tag:"mo",output:"lim",tex:null,ttype:UNDEROVER},{input:"Lim",tag:"mo",output:"Lim",tex:null,ttype:UNDEROVER},{input:"sin",tag:"mo",output:"sin",tex:null,ttype:UNARY,func:true},{input:"cos",tag:"mo",output:"cos",tex:null,ttype:UNARY,func:true},{input:"tan",tag:"mo",output:"tan",tex:null,ttype:UNARY,func:true},{input:"sinh",tag:"mo",output:"sinh",tex:null,ttype:UNARY,func:true},{input:"cosh",tag:"mo",output:"cosh",tex:null,ttype:UNARY,func:true},{input:"tanh",tag:"mo",output:"tanh",tex:null,ttype:UNARY,func:true},{input:"cot",tag:"mo",output:"cot",tex:null,ttype:UNARY,func:true},{input:"sec",tag:"mo",output:"sec",tex:null,ttype:UNARY,func:true},{input:"csc",tag:"mo",output:"csc",tex:null,ttype:UNARY,func:true},{input:"log",tag:"mo",output:"log",tex:null,ttype:UNARY,func:true},{input:"ln",tag:"mo",output:"ln",tex:null,ttype:UNARY,func:true},{input:"det",tag:"mo",output:"det",tex:null,ttype:UNARY,func:true},{input:"dim",tag:"mo",output:"dim",tex:null,ttype:CONST},{input:"mod",tag:"mo",output:"mod",tex:null,ttype:CONST},{input:"gcd",tag:"mo",output:"gcd",tex:null,ttype:UNARY,func:true},{input:"lcm",tag:"mo",output:"lcm",tex:null,ttype:UNARY,func:true},{input:"lub",tag:"mo",output:"lub",tex:null,ttype:CONST},{input:"glb",tag:"mo",output:"glb",tex:null,ttype:CONST},{input:"min",tag:"mo",output:"min",tex:null,ttype:UNDEROVER},{input:"max",tag:"mo",output:"max",tex:null,ttype:UNDEROVER},{input:"uarr",tag:"mo",output:"\u2191",tex:"uparrow",ttype:CONST},{input:"darr",tag:"mo",output:"\u2193",tex:"downarrow",ttype:CONST},{input:"rarr",tag:"mo",output:"\u2192",tex:"rightarrow",ttype:CONST},{input:"->",tag:"mo",output:"\u2192",tex:"to",ttype:CONST},{input:"|->",tag:"mo",output:"\u21a6",tex:"mapsto",ttype:CONST},{input:"larr",tag:"mo",output:"\u2190",tex:"leftarrow",ttype:CONST},{input:"harr",tag:"mo",output:"\u2194",tex:"leftrightarrow",ttype:CONST},{input:"rArr",tag:"mo",output:"\u21d2",tex:"Rightarrow",ttype:CONST},{input:"lArr",tag:"mo",output:"\u21d0",tex:"Leftarrow",ttype:CONST},{input:"hArr",tag:"mo",output:"\u21d4",tex:"Leftrightarrow",ttype:CONST},AMsqrt,AMroot,AMfrac,AMdiv,AMover,AMsub,AMsup,{input:"hat",tag:"mover",output:"^",tex:null,ttype:UNARY,acc:true},{input:"bar",tag:"mover",output:"\xaf",tex:"overline",ttype:UNARY,acc:true},{input:"vec",tag:"mover",output:"\u2192",tex:null,ttype:UNARY,acc:true},{input:"dot",tag:"mover",output:".",tex:null,ttype:UNARY,acc:true},{input:"ddot",tag:"mover",output:"..",tex:null,ttype:UNARY,acc:true},{input:"ul",tag:"munder",output:"\u0332",tex:"underline",ttype:UNARY,acc:true},AMtext,AMmbox,AMquote,{input:"bb",tag:"mstyle",atname:"fontweight",atval:"bold",output:"bb",tex:null,ttype:UNARY},{input:"mathbf",tag:"mstyle",atname:"fontweight",atval:"bold",output:"mathbf",tex:null,ttype:UNARY},{input:"sf",tag:"mstyle",atname:"fontfamily",atval:"sans-serif",output:"sf",tex:null,ttype:UNARY},{input:"mathsf",tag:"mstyle",atname:"fontfamily",atval:"sans-serif",output:"mathsf",tex:null,ttype:UNARY},{input:"bbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"bbb",tex:null,ttype:UNARY,codes:AMbbb},{input:"mathbb",tag:"mstyle",atname:"mathvariant",atval:"double-struck",output:"mathbb",tex:null,ttype:UNARY,codes:AMbbb},{input:"cc",tag:"mstyle",atname:"mathvariant",atval:"script",output:"cc",tex:null,ttype:UNARY,codes:AMcal},{input:"mathcal",tag:"mstyle",atname:"mathvariant",atval:"script",output:"mathcal",tex:null,ttype:UNARY,codes:AMcal},{input:"tt",tag:"mstyle",atname:"fontfamily",atval:"monospace",output:"tt",tex:null,ttype:UNARY},{input:"mathtt",tag:"mstyle",atname:"fontfamily",atval:"monospace",output:"mathtt",tex:null,ttype:UNARY},{input:"fr",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"fr",tex:null,ttype:UNARY,codes:AMfrk},{input:"mathfrak",tag:"mstyle",atname:"mathvariant",atval:"fraktur",output:"mathfrak",tex:null,ttype:UNARY,codes:AMfrk}]; function compareNames(s1,s2){ if(s1.input>s2.input){ return 1; }else{ return -1; } } var AMnames=[]; function AMinitSymbols(){ var _7=[],i; for(i=0;i>1; if(arr[m]=AMnames[k]; } AMpreviousSymbol=AMcurrentSymbol; if(_1d!=""){ AMcurrentSymbol=AMsymbols[mk].ttype; return AMsymbols[mk]; } AMcurrentSymbol=CONST; k=1; st=str.slice(0,1); var _20=true; while("0"<=st&&st<="9"&&k<=str.length){ st=str.slice(k,k+1); k++; } if(st==decimalsign){ st=str.slice(k,k+1); if("0"<=st&&st<="9"){ _20=false; k++; while("0"<=st&&st<="9"&&k<=str.length){ st=str.slice(k,k+1); k++; } } } if((_20&&k>1)||k>2){ st=str.slice(0,k-1); _1c="mn"; }else{ k=2; st=str.slice(0,1); _1c=(("A">st||st>"Z")&&("a">st||st>"z")?"mo":"mi"); } if(st=="-"&&AMpreviousSymbol==INFIX){ return {input:st,tag:_1c,output:st,ttype:UNARY,func:true}; } return {input:st,tag:_1c,output:st,ttype:CONST}; } function AMremoveBrackets(_21){ var st; if(_21.nodeName=="mrow"){ st=_21.firstChild.firstChild.nodeValue; if(st=="("||st=="["||st=="{"){ _21.removeChild(_21.firstChild); } } if(_21.nodeName=="mrow"){ st=_21.lastChild.firstChild.nodeValue; if(st==")"||st=="]"||st=="}"){ _21.removeChild(_21.lastChild); } } } var AMnestingDepth,AMpreviousSymbol,AMcurrentSymbol; function AMparseSexpr(str){ var _24,node,result,i,st,newFrag=document.createDocumentFragment(); str=AMremoveCharsAndBlanks(str,0); _24=AMgetSymbol(str); if(_24==null||_24.ttype==RIGHTBRACKET&&AMnestingDepth>0){ return [null,str]; } if(_24.ttype==DEFINITION){ str=_24.output+AMremoveCharsAndBlanks(str,_24.input.length); _24=AMgetSymbol(str); } switch(_24.ttype){ case UNDEROVER: case CONST: str=AMremoveCharsAndBlanks(str,_24.input.length); return [AMcreateMmlNode(_24.tag,document.createTextNode(_24.output)),str]; case LEFTBRACKET: AMnestingDepth++; str=AMremoveCharsAndBlanks(str,_24.input.length); result=AMparseExpr(str,true); AMnestingDepth--; if(typeof _24.invisible=="boolean"&&_24.invisible){ node=AMcreateMmlNode("mrow",result[0]); }else{ node=AMcreateMmlNode("mo",document.createTextNode(_24.output)); node=AMcreateMmlNode("mrow",node); node.appendChild(result[0]); } return [node,result[1]]; case TEXT: if(_24!=AMquote){ str=AMremoveCharsAndBlanks(str,_24.input.length); } if(str.charAt(0)=="{"){ i=str.indexOf("}"); }else{ if(str.charAt(0)=="("){ i=str.indexOf(")"); }else{ if(str.charAt(0)=="["){ i=str.indexOf("]"); }else{ if(_24==AMquote){ i=str.slice(1).indexOf("\"")+1; }else{ i=0; } } } } if(i==-1){ i=str.length; } st=str.slice(1,i); if(st.charAt(0)==" "){ node=AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); } newFrag.appendChild(AMcreateMmlNode(_24.tag,document.createTextNode(st))); if(st.charAt(st.length-1)==" "){ node=AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); } str=AMremoveCharsAndBlanks(str,i+1); return [AMcreateMmlNode("mrow",newFrag),str]; case UNARY: str=AMremoveCharsAndBlanks(str,_24.input.length); result=AMparseSexpr(str); if(result[0]==null){ return [AMcreateMmlNode(_24.tag,document.createTextNode(_24.output)),str]; } if(typeof _24.func=="boolean"&&_24.func){ st=str.charAt(0); if(st=="^"||st=="_"||st=="/"||st=="|"){ return [AMcreateMmlNode(_24.tag,document.createTextNode(_24.output)),str]; }else{ node=AMcreateMmlNode("mrow",AMcreateMmlNode(_24.tag,document.createTextNode(_24.output))); node.appendChild(result[0]); return [node,result[1]]; } } AMremoveBrackets(result[0]); if(_24.input=="sqrt"){ return [AMcreateMmlNode(_24.tag,result[0]),result[1]]; }else{ if(typeof _24.acc=="boolean"&&_24.acc){ node=AMcreateMmlNode(_24.tag,result[0]); node.appendChild(AMcreateMmlNode("mo",document.createTextNode(_24.output))); return [node,result[1]]; }else{ if(!isIE&&typeof _24.codes!="undefined"){ for(i=0;i64&&st.charCodeAt(j)<91){ _25=_25+String.fromCharCode(_24.codes[st.charCodeAt(j)-65]); }else{ _25=_25+st.charAt(j); } } if(result[0].nodeName=="mi"){ result[0]=AMcreateElementMathML("mo").appendChild(document.createTextNode(_25)); }else{ result[0].replaceChild(AMcreateElementMathML("mo").appendChild(document.createTextNode(_25)),result[0].childNodes[i]); } } } } node=AMcreateMmlNode(_24.tag,result[0]); node.setAttribute(_24.atname,_24.atval); return [node,result[1]]; } } case BINARY: str=AMremoveCharsAndBlanks(str,_24.input.length); result=AMparseSexpr(str); if(result[0]==null){ return [AMcreateMmlNode("mo",document.createTextNode(_24.input)),str]; } AMremoveBrackets(result[0]); var _27=AMparseSexpr(result[1]); if(_27[0]==null){ return [AMcreateMmlNode("mo",document.createTextNode(_24.input)),str]; } AMremoveBrackets(_27[0]); if(_24.input=="root"||_24.input=="stackrel"){ newFrag.appendChild(_27[0]); } newFrag.appendChild(result[0]); if(_24.input=="frac"){ newFrag.appendChild(_27[0]); } return [AMcreateMmlNode(_24.tag,newFrag),_27[1]]; case INFIX: str=AMremoveCharsAndBlanks(str,_24.input.length); return [AMcreateMmlNode("mo",document.createTextNode(_24.output)),str]; case SPACE: str=AMremoveCharsAndBlanks(str,_24.input.length); node=AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); newFrag.appendChild(AMcreateMmlNode(_24.tag,document.createTextNode(_24.output))); node=AMcreateElementMathML("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); return [AMcreateMmlNode("mrow",newFrag),str]; case LEFTRIGHT: AMnestingDepth++; str=AMremoveCharsAndBlanks(str,_24.input.length); result=AMparseExpr(str,false); AMnestingDepth--; var st=""; if(result[0].lastChild!=null){ st=result[0].lastChild.firstChild.nodeValue; } if(st=="|"){ node=AMcreateMmlNode("mo",document.createTextNode(_24.output)); node=AMcreateMmlNode("mrow",node); node.appendChild(result[0]); return [node,result[1]]; }else{ node=AMcreateMmlNode("mo",document.createTextNode(_24.output)); node=AMcreateMmlNode("mrow",node); return [node,str]; } default: str=AMremoveCharsAndBlanks(str,_24.input.length); return [AMcreateMmlNode(_24.tag,document.createTextNode(_24.output)),str]; } } function AMparseIexpr(str){ var _2a,sym1,sym2,node,result,underover; str=AMremoveCharsAndBlanks(str,0); sym1=AMgetSymbol(str); result=AMparseSexpr(str); node=result[0]; str=result[1]; _2a=AMgetSymbol(str); if(_2a.ttype==INFIX&&_2a.input!="/"){ str=AMremoveCharsAndBlanks(str,_2a.input.length); result=AMparseSexpr(str); if(result[0]==null){ result[0]=AMcreateMmlNode("mo",document.createTextNode("\u25a1")); }else{ AMremoveBrackets(result[0]); } str=result[1]; if(_2a.input=="_"){ sym2=AMgetSymbol(str); underover=(sym1.ttype==UNDEROVER); if(sym2.input=="^"){ str=AMremoveCharsAndBlanks(str,sym2.input.length); var _2b=AMparseSexpr(str); AMremoveBrackets(_2b[0]); str=_2b[1]; node=AMcreateMmlNode((underover?"munderover":"msubsup"),node); node.appendChild(result[0]); node.appendChild(_2b[0]); node=AMcreateMmlNode("mrow",node); }else{ node=AMcreateMmlNode((underover?"munder":"msub"),node); node.appendChild(result[0]); } }else{ node=AMcreateMmlNode(_2a.tag,node); node.appendChild(result[0]); } } return [node,str]; } function AMparseExpr(str,_2d){ var _2e,node,result,i,nodeList=[],newFrag=document.createDocumentFragment(); do{ str=AMremoveCharsAndBlanks(str,0); result=AMparseIexpr(str); node=result[0]; str=result[1]; _2e=AMgetSymbol(str); if(_2e.ttype==INFIX&&_2e.input=="/"){ str=AMremoveCharsAndBlanks(str,_2e.input.length); result=AMparseIexpr(str); if(result[0]==null){ result[0]=AMcreateMmlNode("mo",document.createTextNode("\u25a1")); }else{ AMremoveBrackets(result[0]); } str=result[1]; AMremoveBrackets(node); node=AMcreateMmlNode(_2e.tag,node); node.appendChild(result[0]); newFrag.appendChild(node); _2e=AMgetSymbol(str); }else{ if(node!=undefined){ newFrag.appendChild(node); } } }while((_2e.ttype!=RIGHTBRACKET&&(_2e.ttype!=LEFTRIGHT||_2d)||AMnestingDepth==0)&&_2e!=null&&_2e.output!=""); if(_2e.ttype==RIGHTBRACKET||_2e.ttype==LEFTRIGHT){ var len=newFrag.childNodes.length; if(len>0&&newFrag.childNodes[len-1].nodeName=="mrow"&&len>1&&newFrag.childNodes[len-2].nodeName=="mo"&&newFrag.childNodes[len-2].firstChild.nodeValue==","){ var _30=newFrag.childNodes[len-1].lastChild.firstChild.nodeValue; if(_30==")"||_30=="]"){ var _31=newFrag.childNodes[len-1].firstChild.firstChild.nodeValue; if(_31=="("&&_30==")"&&_2e.output!="}"||_31=="["&&_30=="]"){ var pos=[]; var _33=true; var m=newFrag.childNodes.length; for(i=0;_33&&i1){ _33=pos[i].length==pos[i-2].length; } } if(_33){ var row,frag,n,k,table=document.createDocumentFragment(); for(i=0;i2){ newFrag.removeChild(newFrag.firstChild); newFrag.removeChild(newFrag.firstChild); } table.appendChild(AMcreateMmlNode("mtr",row)); } node=AMcreateMmlNode("mtable",table); if(typeof _2e.invisible=="boolean"&&_2e.invisible){ node.setAttribute("columnalign","left"); } newFrag.replaceChild(node,newFrag.firstChild); } } } } str=AMremoveCharsAndBlanks(str,_2e.input.length); if(typeof _2e.invisible!="boolean"||!_2e.invisible){ node=AMcreateMmlNode("mo",document.createTextNode(_2e.output)); newFrag.appendChild(node); } } return [newFrag,str]; } function AMparseMath(str){ var _38,node=AMcreateElementMathML("mstyle"); if(mathcolor!=""){ node.setAttribute("mathcolor",mathcolor); } if(displaystyle){ node.setAttribute("displaystyle","true"); } if(mathfontfamily!=""){ node.setAttribute("fontfamily",mathfontfamily); } AMnestingDepth=0; node.appendChild(AMparseExpr(str.replace(/^\s+/g,""),false)[0]); node=AMcreateMmlNode("math",node); if(showasciiformulaonhover){ node.setAttribute("title",str); } if(mathfontfamily!=""&&(isIE||mathfontfamily!="serif")){ var _39=AMcreateElementXHTML("font"); _39.setAttribute("face",mathfontfamily); _39.appendChild(node); return _39; } return node; } function AMstrarr2docFrag(arr,_3b){ var _3c=document.createDocumentFragment(); var _3d=false; for(var i=0;i1||_43){ if(checkForMathML){ checkForMathML=false; var nd=AMisMathMLavailable(); AMnoMathML=nd!=null; if(AMnoMathML&¬ifyIfNoMathML){ AMbody.insertBefore(nd,AMbody.childNodes[0]); } } if(!AMnoMathML){ frg=AMstrarr2docFrag(arr,n.nodeType==8); var len=frg.childNodes.length; n.parentNode.replaceChild(frg,n); return len-1; }else{ return 0; } } } }else{ return 0; } }else{ if(n.nodeName!="math"){ for(i=0;i"); document.write(""); } function generic(){ translate(); } if(typeof window.addEventListener!="undefined"){ window.addEventListener("load",generic,false); }else{ if(typeof document.addEventListener!="undefined"){ document.addEventListener("load",generic,false); }else{ if(typeof window.attachEvent!="undefined"){ window.attachEvent("onload",generic); }else{ if(typeof window.onload=="function"){ var existing=onload; window.onload=function(){ existing(); generic(); }; }else{ window.onload=generic; } } } } mailbox/xinha/plugins/Equation/img/0040775000567100000120000000000010567167541017344 5ustar jcameronwheelmailbox/xinha/plugins/Equation/img/diag_fraction.gif0100664000567100000120000000010610565364774022623 0ustar jcameronwheelGIF87a,%kL*wB5ǁ)U%r@;mailbox/xinha/plugins/Equation/img/dsp_notequal.gif0100664000567100000120000000017710565364774022540 0ustar jcameronwheelGIF87adfd<><TRT,4I8ͻ^8F6,{pqF" ܌@bHph,(;mailbox/xinha/plugins/Equation/img/dsp_less_equal.gif0100664000567100000120000000030010565364774023031 0ustar jcameronwheelGIF87adfd424䜚<>pS;mailbox/xinha/plugins/Equation/img/square_root.gif0100664000567100000120000000010610565364776022377 0ustar jcameronwheelGIF87a,%.dbiaX%Ƒl+(y;mailbox/xinha/plugins/Equation/img/root.gif0100664000567100000120000000011210565364776021014 0ustar jcameronwheelGIF87a,)źseGrfZbx.:VձR;mailbox/xinha/plugins/Equation/img/equation.old.gif0100664000567100000120000000035010565364776022437 0ustar jcameronwheelGIF87aļLNL$"$464,*,<><|z||~|TRTljl$&$DBD\Z\tvtdfd424,.,DFD,m H⨦AۢCGaĄ!(cRHI7]Ijލ*rXwỦ;$h@S)"{+ to*Z!;mailbox/xinha/plugins/Equation/img/less_equal_than.gif0100664000567100000120000000007010565364776023203 0ustar jcameronwheelGIF87a,3i s=ָy;mailbox/xinha/plugins/Equation/img/equation.gif0100664000567100000120000000031010565364776021656 0ustar jcameronwheelGIF89aLNL$"$464,*,<><|z|ljl|~|$&$DBDTRT\Z\,.,424dfdDFDtvt!, E`"`t000Ro T1t纘  hE؁pI2 '`*$R"DIŠ(G!0H;mailbox/xinha/plugins/Equation/img/hor_fraction.gif0100664000567100000120000000010110565364776022504 0ustar jcameronwheelGIF87a, нT;k<ۅHng歝rR;mailbox/xinha/plugins/Equation/img/parenthesis.gif0100664000567100000120000000011010565364776022354 0ustar jcameronwheelGIF87a,'VmS؅x)L+?;mailbox/xinha/plugins/Equation/img/abs_value.gif0100664000567100000120000000011010565364774021766 0ustar jcameronwheelGIF87a,'ZTsU46Jy@2XjrXw;mailbox/xinha/plugins/Equation/img/divide.gif0100664000567100000120000000010210565364774021272 0ustar jcameronwheelGIF87a, Aj3mbZ5;mailbox/xinha/plugins/Equation/img/greater_equal_than.gif0100664000567100000120000000007010565364776023666 0ustar jcameronwheelGIF87a,1j,^Q9;mailbox/xinha/plugins/Equation/img/dsp_greater_equal.gif0100664000567100000120000000030110565364774023515 0ustar jcameronwheelGIF87adfd<><424lnlTRT|z|\^\,F dih$ =˗5 >1(H)>#ChdNx);mailbox/xinha/plugins/Equation/img/notequal.gif0100664000567100000120000000007110565364776021665 0ustar jcameronwheelGIF87a,aޚZ q\YF;mailbox/xinha/plugins/Equation/img/mul.gif0100664000567100000120000000007010565364776020631 0ustar jcameronwheelGIF87a,3T`m \f|QH&R;mailbox/xinha/plugins/Equation/readme.txt0100664000567100000120000000343610565363030020556 0ustar jcameronwheelAsciiMathML Formula Editor for Xinha _______________________ Based on AsciiMathML by Peter Jipsen (http://www.chapman.edu/~jipsen). Plugin by Raimund Meyer (ray) xinha@raimundmeyer.de AsciiMathML is a JavaScript library for translating ASCII math notation to Presentation MathML. Usage The formmulae are stored in their ASCII representation, so you have to include the ASCIIMathML library which can be found in the plugin folder in order render the MathML output in your pages. Example (also see example.html): var mathcolor = "black"; // You may change the color of the formulae (default: red) var mathfontfamily = "Arial"; //and the font (default: serif, which is good I think) var showasciiformulaonhover = false; // if true helps students learn ASCIIMath (default:true) The recommended browser for using this plugin is Mozilla/Firefox. At the moment showing the MathML output inside the editor is not supported in Internet Explorer. License information This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License (at http://www.gnu.org/licenses/lgpl.html) for more details. NOTE: I have changed the license of AsciiMathML from GPL to LGPL according to a permission from the author (see http://xinha.gogo.co.nz/punbb/viewtopic.php?pid=4150#p4150) Raimund Meyer 11-29-2006mailbox/xinha/plugins/Equation/lang/0040775000567100000120000000000010567167541017511 5ustar jcameronwheelmailbox/xinha/plugins/Equation/lang/ja.js0100664000567100000120000000111410565363026020425 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "AsciiMath Formula Input": "AsciiMath 数式入力", "Formula Editor": "数式エディタ", "Input":"入力", "Preview":"表示", "Based on ASCIIMathML by ": "Based on ASCIIMathML by ", "For more information on AsciiMathML visit this page: ":"AsciiMathの詳細はこのページにあります: ", "Attention: Editing the formula in the editor is not possible, please use this dialog!" : "注意: エディタで数式を編集することはできません。必ず、このダイアログを使用してください" };mailbox/xinha/plugins/Equation/lang/de.js0100664000567100000120000000156710565363026020437 0ustar jcameronwheel// I18N constants // //LANG: "base", ENCODING: UTF-8 //Author: Translator-Name, // FOR TRANSLATORS: // // 1. PLEASE PUT YOUR CONTACT INFO IN THE ABOVE LINE // (at least a valid email address) // // 2. PLEASE TRY TO USE UTF-8 FOR ENCODING; // (if this is not possible, please include a comment // that states what encoding is necessary.) { "AsciiMath Formula Input": "AsciiMath Formeleditor", "Formula Editor": "Formeleditor", "Input":"Eingabe", "Preview":"Vorschau", "Based on ASCIIMathML by ": "Basiert auf ASCIIMathML von ", "For more information on AsciiMathML visit this page: ":"Für weitere Informationen besuchen Sie bitte diese Seite: ", "Attention: Editing the formula in the editor is not possible, please use this dialog!" : "Achtung, ändern der Formel im Editor ist nicht möglich. Bitte benutzen Sie diesen Dialog!" } mailbox/xinha/plugins/SpellChecker/0040775000567100000120000000000010567167546017354 5ustar jcameronwheelmailbox/xinha/plugins/SpellChecker/spell-check-logic.cgi0100664000567100000120000001435410565363042023314 0ustar jcameronwheel#! /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^ ^; 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^
$dictionaries
^; } print ''; # 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 = ''.$text.''; 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{(.*)}{$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; }; mailbox/xinha/plugins/SpellChecker/spell-check-ui.js0100664000567100000120000002366110565363456022520 0ustar jcameronwheelvar 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=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"+currentElement.__msh_origWord+"\""; 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 (info)"; 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; }; } } mailbox/xinha/plugins/SpellChecker/img/0040775000567100000120000000000010567167545020127 5ustar jcameronwheelmailbox/xinha/plugins/SpellChecker/img/he-spell-check.gif0100664000567100000120000000014410565364776023401 0ustar jcameronwheelGIF89a!,53R .A歅q-r'!l m7ِx0">b;mailbox/xinha/plugins/SpellChecker/img/spell-check.gif0100664000567100000120000000052110565364776023006 0ustar jcameronwheelGIF89ap@`Tt`~@h0Xۛ0HPx0P쐨↘€;hPl@h쀪ᆤ`w㐨``;a!,n@ Frhd cy6 :$Zs&1'); unlink($temptext); } ?>mailbox/xinha/plugins/SpellChecker/lang/0040775000567100000120000000000010567167546020275 5ustar jcameronwheelmailbox/xinha/plugins/SpellChecker/lang/ja.js0100664000567100000120000000275110565363042021212 0ustar jcameronwheel// 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": "学習" };mailbox/xinha/plugins/SpellChecker/lang/nl.js0100664000567100000120000000262010565363042021224 0ustar jcameronwheel// 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 ;-)" }; mailbox/xinha/plugins/SpellChecker/lang/de.js0100664000567100000120000000245510565363042021211 0ustar jcameronwheel// I18N constants // LANG: "en", ENCODING: UTF-8 // Author: Broxx, { "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..." }; mailbox/xinha/plugins/SpellChecker/lang/hu.js0100664000567100000120000000247310565363042021235 0ustar jcameronwheel// I18N constants // LANG: "hu", ENCODING: UTF-8 // Author: Miklós Somogyi, { "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 ;-)" }; mailbox/xinha/plugins/SpellChecker/lang/ro.js0100664000567100000120000000261010565363042021232 0ustar jcameronwheel// 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 ;-)" }; mailbox/xinha/plugins/SpellChecker/lang/da.js0100664000567100000120000000243410565363042021202 0ustar jcameronwheel// I18N constants // LANG: "da", ENCODING: UTF-8 // Author: Steen SÞnderup, { "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" }; mailbox/xinha/plugins/SpellChecker/lang/nb.js0100664000567100000120000000250110565363042021210 0ustar jcameronwheel// 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..." };mailbox/xinha/plugins/SpellChecker/lang/cz.js0100664000567100000120000000262210565363042021231 0ustar jcameronwheel// I18N constants // LANG: "cz", ENCODING: UTF-8 // Author: Jiri Löw, { "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 ;-)" }; mailbox/xinha/plugins/SpellChecker/lang/fr.js0100664000567100000120000000247610565363042021233 0ustar jcameronwheel// 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" };mailbox/xinha/plugins/SpellChecker/lang/he.js0100664000567100000120000000310510565363042021206 0ustar jcameronwheel// 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...": "ענא המטן ;-)" }; mailbox/xinha/plugins/SpellChecker/readme-tech.html0100664000567100000120000001116610565363042022405 0ustar jcameronwheel HTMLArea Spell Checker

HTMLArea Spell Checker

The HTMLArea Spell Checker subsystem consists of the following files:

  • spell-checker.js — the spell checker plugin interface for HTMLArea
  • spell-checker-ui.html — the HTML code for the user interface
  • spell-checker-ui.js — functionality of the user interface
  • spell-checker-logic.cgi — Perl CGI script that checks a text given through POST for spelling errors
  • spell-checker-style.css — style for mispelled words
  • lang/en.js — main language file (English).

Process overview

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 window.opener.SpellChecker.editor 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.

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.

The server-side script (spell-check-logic.cgi)

Unicode safety — the program is 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). However, Aspell seems to not support Unicode yet (thread concerning Aspell and Unicode). This mean that words containing Unicode characters that are not in 0..255 are likely to be reported as "mispelled" by Aspell.

Update: though I've never seen it mentioned anywhere, it looks that Aspell does, in fact, speak Unicode. Or else, maybe Text::Aspell does transparent conversion; anyway, this new version of our SpellChecker plugin is, as tests show so far, fully Unicode-safe... well, probably the only freeware Web-based spell-checker which happens to have Unicode support.

The Perl Unicode manual (man perluniintro) states:

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.

In other words, do not assume that this script is Unicode-safe on Perl interpreters older than 5.8.0.

The following Perl modules are required:

Of these, only Text::Aspell might need to be installed manually. The others are likely to be available by default in most Perl distributions.


Mihai Bazon
Last modified: Fri Jan 30 19:14:11 EET 2004 mailbox/xinha/plugins/SpellChecker/spell-check-style.css0100664000567100000120000000070110565363042023374 0ustar jcameronwheel.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; } mailbox/xinha/plugins/SpellChecker/aspell_setup.php0100664000567100000120000000714310565363042022552 0ustar jcameronwheel (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"; ?> mailbox/xinha/plugins/SpellChecker/spell-check-ui.html0100664000567100000120000001124710565363042023034 0ustar jcameronwheel Spell Checker
Dictionary
Please wait. Calling spell checker.
Original word
pliz weit ;-)
Replace with


Suggestions
mailbox/xinha/plugins/SpellChecker/spell-check-logic.php0100664000567100000120000001464310565363042023342 0ustar jcameronwheel '; // Lets define some values outside the condition below, in case we have an empty // document. $textarray = array(); $varlines = ''; echo ' '; foreach ($textarray as $key=>$value) { echo $value; } $dictionaries = str_replace(chr(10),",", shell_exec($aspelldictionaries)); if(ereg(",$",$dictionaries)) $dictionaries = ereg_replace(",$","",$dictionaries); echo '
'.$dictionaries.'
'; echo ''; ?>mailbox/xinha/plugins/SpellChecker/README0100664000567100000120000000061310565363042020214 0ustar jcameronwheelExecCGI 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.mailbox/xinha/plugins/ContextMenu/0040775000567100000120000000000010567167541017254 5ustar jcameronwheelmailbox/xinha/plugins/ContextMenu/1.pl0100664000567100000120000000150410565363044017740 0ustar jcameronwheel#! /usr/bin/perl -w use strict; my $file = 'context-menu.js'; my $outfile = $file.'-i18n'; my $langfile = 'en.js'; open FILE, "<$file"; #open OUTFILE, ">$outfile"; #open LANGFILE, ">$langfile"; my %texts = (); while () { if (/"(.*?)"/) { my $inline = $_; chomp $inline; my $key = $1; my $val = $1; print "Key: [$key]: "; my $line = ; if (defined $line) { chomp $line; if ($line =~ /(\S+)/) { $key = $1; print "-- using $key\n"; } $texts{$val} = $key; } else { print " -- skipped...\n"; } } } #close LANGFILE; #close OUTFILE; close FILE; print "\n\n\n"; print '"', join("\"\n\"", sort keys %texts), '"', "\n"; mailbox/xinha/plugins/ContextMenu/context-menu.js0100664000567100000120000002705410565363432022240 0ustar jcameronwheelHTMLArea.loadStyle("menu.css","ContextMenu"); function ContextMenu(_1){ this.editor=_1; } ContextMenu._pluginInfo={name:"ContextMenu",version:"1.0",developer:"Mihai Bazon",developer_url:"http://dynarch.com/mishoo/",c_owner:"dynarch.com",sponsor:"American Bible Society",sponsor_url:"http://www.americanbible.org",license:"htmlArea"}; ContextMenu.prototype.onGenerate=function(){ var _2=this; var _3=this.editordoc=this.editor._iframe.contentWindow.document; HTMLArea._addEvents(_3,["contextmenu"],function(_4){ return _2.popupMenu(HTMLArea.is_ie?_2.editor._iframe.contentWindow.event:_4); }); this.currentMenu=null; }; ContextMenu.prototype.getContextMenu=function(_5){ var _6=this; var _7=this.editor; var _8=_7.config; var _9=[]; var _a=this.editor.plugins.TableOperations; if(_a){ _a=_a.instance; } var _b=_7.hasSelectedText(); if(!HTMLArea.is_gecko){ if(_b){ _9.push([HTMLArea._lc("Cut","ContextMenu"),function(){ _7.execCommand("cut"); },null,_8.btnList["cut"][1]],[HTMLArea._lc("Copy","ContextMenu"),function(){ _7.execCommand("copy"); },null,_8.btnList["copy"][1]]); _9.push([HTMLArea._lc("Paste","ContextMenu"),function(){ _7.execCommand("paste"); },null,_8.btnList["paste"][1]]); } } var _c=_5; var _d=[]; var _e=null; var _f=null; var tr=null; var td=null; var img=null; function tableOperation(_13){ _a.buttonPress(_7,_13); } function insertPara(_14){ var el=_c; var par=el.parentNode; var p=_7._doc.createElement("p"); p.appendChild(_7._doc.createElement("br")); par.insertBefore(p,_14?el.nextSibling:el); var sel=_7._getSelection(); var _19=_7._createRange(sel); if(!HTMLArea.is_ie){ sel.removeAllRanges(); _19.selectNodeContents(p); _19.collapse(true); sel.addRange(_19); }else{ _19.moveToElementText(p); _19.collapse(true); _19.select(); } } for(;_5;_5=_5.parentNode){ var tag=_5.tagName; if(!tag){ continue; } tag=tag.toLowerCase(); switch(tag){ case "img": img=_5; _d.push(null,[HTMLArea._lc("_Image Properties...","ContextMenu"),function(){ _7._insertImage(img); },HTMLArea._lc("Show the image properties dialog","ContextMenu"),_8.btnList["insertimage"][1]]); break; case "a": _e=_5; _d.push(null,[HTMLArea._lc("_Modify Link...","ContextMenu"),function(){ _7.config.btnList["createlink"][3](_7); },HTMLArea._lc("Current URL is","ContextMenu")+": "+_e.href,_8.btnList["createlink"][1]],[HTMLArea._lc("Chec_k Link...","ContextMenu"),function(){ window.open(_e.href); },HTMLArea._lc("Opens this link in a new window","ContextMenu")],[HTMLArea._lc("_Remove Link...","ContextMenu"),function(){ if(confirm(HTMLArea._lc("Please confirm that you want to unlink this element.","ContextMenu")+"\n"+HTMLArea._lc("Link points to:","ContextMenu")+" "+_e.href)){ while(_e.firstChild){ _e.parentNode.insertBefore(_e.firstChild,_e); } _e.parentNode.removeChild(_e); } },HTMLArea._lc("Unlink the current element","ContextMenu")]); break; case "td": td=_5; if(!_a){ break; } _d.push(null,[HTMLArea._lc("C_ell Properties...","ContextMenu"),function(){ tableOperation("TO-cell-prop"); },HTMLArea._lc("Show the Table Cell Properties dialog","ContextMenu"),_8.btnList["TO-cell-prop"][1]],[HTMLArea._lc("Insert Cell After","ContextMenu"),function(){ tableOperation("TO-cell-insert-after"); },HTMLArea._lc("Insert Cell After","ContextMenu"),_8.btnList["TO-cell-insert-after"][1]],[HTMLArea._lc("Insert Cell Before","ContextMenu"),function(){ tableOperation("TO-cell-insert-before"); },HTMLArea._lc("Insert Cell After","ContextMenu"),_8.btnList["TO-cell-insert-before"][1]],[HTMLArea._lc("Delete Cell","ContextMenu"),function(){ tableOperation("TO-cell-delete"); },HTMLArea._lc("Delete Cell","ContextMenu"),_8.btnList["TO-cell-delete"][1]],[HTMLArea._lc("Merge Cells","ContextMenu"),function(){ tableOperation("TO-cell-merge"); },HTMLArea._lc("Merge Cells","ContextMenu"),_8.btnList["TO-cell-merge"][1]]); break; case "tr": tr=_5; if(!_a){ break; } _d.push(null,[HTMLArea._lc("Ro_w Properties...","ContextMenu"),function(){ tableOperation("TO-row-prop"); },HTMLArea._lc("Show the Table Row Properties dialog","ContextMenu"),_8.btnList["TO-row-prop"][1]],[HTMLArea._lc("I_nsert Row Before","ContextMenu"),function(){ tableOperation("TO-row-insert-above"); },HTMLArea._lc("Insert a new row before the current one","ContextMenu"),_8.btnList["TO-row-insert-above"][1]],[HTMLArea._lc("In_sert Row After","ContextMenu"),function(){ tableOperation("TO-row-insert-under"); },HTMLArea._lc("Insert a new row after the current one","ContextMenu"),_8.btnList["TO-row-insert-under"][1]],[HTMLArea._lc("_Delete Row","ContextMenu"),function(){ tableOperation("TO-row-delete"); },HTMLArea._lc("Delete the current row","ContextMenu"),_8.btnList["TO-row-delete"][1]]); break; case "table": _f=_5; if(!_a){ break; } _d.push(null,[HTMLArea._lc("_Table Properties...","ContextMenu"),function(){ tableOperation("TO-table-prop"); },HTMLArea._lc("Show the Table Properties dialog","ContextMenu"),_8.btnList["TO-table-prop"][1]],[HTMLArea._lc("Insert _Column Before","ContextMenu"),function(){ tableOperation("TO-col-insert-before"); },HTMLArea._lc("Insert a new column before the current one","ContextMenu"),_8.btnList["TO-col-insert-before"][1]],[HTMLArea._lc("Insert C_olumn After","ContextMenu"),function(){ tableOperation("TO-col-insert-after"); },HTMLArea._lc("Insert a new column after the current one","ContextMenu"),_8.btnList["TO-col-insert-after"][1]],[HTMLArea._lc("De_lete Column","ContextMenu"),function(){ tableOperation("TO-col-delete"); },HTMLArea._lc("Delete the current column","ContextMenu"),_8.btnList["TO-col-delete"][1]]); break; case "body": _d.push(null,[HTMLArea._lc("Justify Left","ContextMenu"),function(){ _7.execCommand("justifyleft"); },null,_8.btnList["justifyleft"][1]],[HTMLArea._lc("Justify Center","ContextMenu"),function(){ _7.execCommand("justifycenter"); },null,_8.btnList["justifycenter"][1]],[HTMLArea._lc("Justify Right","ContextMenu"),function(){ _7.execCommand("justifyright"); },null,_8.btnList["justifyright"][1]],[HTMLArea._lc("Justify Full","ContextMenu"),function(){ _7.execCommand("justifyfull"); },null,_8.btnList["justifyfull"][1]]); break; } } if(_b&&!_e){ _9.push(null,[HTMLArea._lc("Make lin_k...","ContextMenu"),function(){ _7.config.btnList["createlink"][3](_7); },HTMLArea._lc("Create a link","ContextMenu"),_8.btnList["createlink"][1]]); } for(var i=0;i<_d.length;++i){ _9.push(_d[i]); } if(!/html|body/i.test(_c.tagName)){ _9.push(null,[HTMLArea._lc({string:"Remove the $elem Element...",replace:{elem:"<"+_c.tagName+">"}},"ContextMenu"),function(){ if(confirm(HTMLArea._lc("Please confirm that you want to remove this element:","ContextMenu")+" "+_c.tagName)){ var el=_c; var p=el.parentNode; p.removeChild(el); if(HTMLArea.is_gecko){ if(p.tagName.toLowerCase()=="td"&&!p.hasChildNodes()){ p.appendChild(_7._doc.createElement("br")); } _7.forceRedraw(); _7.focusEditor(); _7.updateToolbar(); if(_f){ var _1e=_f.style.borderCollapse; _f.style.borderCollapse="collapse"; _f.style.borderCollapse="separate"; _f.style.borderCollapse=_1e; } } } },HTMLArea._lc("Remove this node from the document","ContextMenu")],[HTMLArea._lc("Insert paragraph before","ContextMenu"),function(){ insertPara(false); },HTMLArea._lc("Insert a paragraph before the current node","ContextMenu")],[HTMLArea._lc("Insert paragraph after","ContextMenu"),function(){ insertPara(true); },HTMLArea._lc("Insert a paragraph after the current node","ContextMenu")]); } if(!_9[0]){ _9.shift(); } return _9; }; ContextMenu.prototype.popupMenu=function(ev){ var _20=this; if(this.currentMenu){ this.closeMenu(); } function getPos(el){ var r={x:el.offsetLeft,y:el.offsetTop}; if(el.offsetParent){ var tmp=getPos(el.offsetParent); r.x+=tmp.x; r.y+=tmp.y; } return r; } function documentClick(ev){ ev||(ev=window.event); if(!_20.currentMenu){ alert(HTMLArea._lc("How did you get here? (Please report!)","ContextMenu")); return false; } var el=HTMLArea.is_ie?ev.srcElement:ev.target; for(;el!=null&&el!=_20.currentMenu;el=el.parentNode){ } if(el==null){ _20.closeMenu(); } } var _26=[]; function keyPress(ev){ ev||(ev=window.event); HTMLArea._stopEvent(ev); if(ev.keyCode==27){ _20.closeMenu(); return false; } var key=String.fromCharCode(HTMLArea.is_ie?ev.keyCode:ev.charCode).toLowerCase(); for(var i=_26.length;--i>=0;){ var k=_26[i]; if(k[0].toLowerCase()==key){ k[1].__msh.activate(); } } } _20.closeMenu=function(){ _20.currentMenu.parentNode.removeChild(_20.currentMenu); _20.currentMenu=null; HTMLArea._removeEvent(document,"mousedown",documentClick); HTMLArea._removeEvent(_20.editordoc,"mousedown",documentClick); if(_26.length>0){ HTMLArea._removeEvent(_20.editordoc,"keypress",keyPress); } if(HTMLArea.is_ie){ _20.iePopup.hide(); } }; var _2b=HTMLArea.is_ie?ev.srcElement:ev.target; var _2c=getPos(_20.editor._htmlArea); var x=ev.clientX+_2c.x; var y=ev.clientY+_2c.y; var div; var doc; if(!HTMLArea.is_ie){ doc=document; }else{ var _31=this.iePopup=window.createPopup(); doc=_31.document; doc.open(); doc.write(""); doc.close(); } div=doc.createElement("div"); if(HTMLArea.is_ie){ div.unselectable="on"; } div.oncontextmenu=function(){ return false; }; div.className="htmlarea-context-menu"; if(!HTMLArea.is_ie){ div.style.left=div.style.top="0px"; } doc.body.appendChild(div); var _32=doc.createElement("table"); div.appendChild(_32); _32.cellSpacing=0; _32.cellPadding=0; var _33=doc.createElement("tbody"); _32.appendChild(_33); var _34=this.getContextMenu(_2b); for(var i=0;i<_34.length;++i){ var _36=_34[i]; var _37=doc.createElement("tr"); _33.appendChild(_37); if(HTMLArea.is_ie){ _37.unselectable="on"; }else{ _37.onmousedown=function(ev){ HTMLArea._stopEvent(ev); return false; }; } if(!_36){ _37.className="separator"; var td=doc.createElement("td"); td.className="icon"; var _3a=">"; if(HTMLArea.is_ie){ td.unselectable="on"; _3a=" unselectable='on' style='height=1px'> "; } td.innerHTML=""; var td1=td.cloneNode(true); td1.className="label"; _37.appendChild(td); _37.appendChild(td1); }else{ var _3c=_36[0]; _37.className="item"; _37.__msh={item:_37,label:_3c,action:_36[1],tooltip:_36[2]||null,icon:_36[3]||null,activate:function(){ _20.closeMenu(); _20.editor.focusEditor(); this.action(); }}; _3c=_3c.replace(/_([a-zA-Z0-9])/,"$1"); if(_3c!=_36[0]){ _26.push([RegExp.$1,_37]); } _3c=_3c.replace(/__/,"_"); var td1=doc.createElement("td"); if(HTMLArea.is_ie){ td1.unselectable="on"; } _37.appendChild(td1); td1.className="icon"; if(_37.__msh.icon){ var t=HTMLArea.makeBtnImg(_37.__msh.icon,doc); td1.appendChild(t); } var td2=doc.createElement("td"); if(HTMLArea.is_ie){ td2.unselectable="on"; } _37.appendChild(td2); td2.className="label"; td2.innerHTML=_3c; _37.onmouseover=function(){ this.className+=" hover"; _20.editor._statusBarTree.innerHTML=this.__msh.tooltip||" "; }; _37.onmouseout=function(){ this.className="item"; }; _37.oncontextmenu=function(ev){ this.__msh.activate(); if(!HTMLArea.is_ie){ HTMLArea._stopEvent(ev); } return false; }; _37.onmouseup=function(ev){ var _41=(new Date()).getTime(); if(_41-_20.timeStamp>500){ this.__msh.activate(); } if(!HTMLArea.is_ie){ HTMLArea._stopEvent(ev); } return false; }; } } if(!HTMLArea.is_ie){ div.style.left=x+"px"; div.style.top=y+"px"; }else{ this.iePopup.show(ev.screenX,ev.screenY,300,50); var w=div.offsetWidth; var h=div.offsetHeight; this.iePopup.show(ev.screenX,ev.screenY,w,h); } this.currentMenu=div; this.timeStamp=(new Date()).getTime(); HTMLArea._addEvent(document,"mousedown",documentClick); HTMLArea._addEvent(this.editordoc,"mousedown",documentClick); if(_26.length>0){ HTMLArea._addEvent(this.editordoc,"keypress",keyPress); } HTMLArea._stopEvent(ev); return false; }; mailbox/xinha/plugins/ContextMenu/menu.css0100664000567100000120000000256010565363044020724 0ustar jcameronwheel/* styles for the ContextMenu /HTMLArea */ /* The ContextMenu plugin is (c) dynarch.com 2003. */ /* Distributed under the same terms as HTMLArea itself */ div.htmlarea-context-menu { position: absolute; border: 1px solid #aca899; padding: 2px; background-color: #fff; color: #000; cursor: default; z-index: 1000; } div.htmlarea-context-menu table { font: 11px tahoma,verdana,sans-serif; border-collapse: collapse; } div.htmlarea-context-menu tr.item td.icon img { /* taken care of by xinha.makeBtnImg() */ /* width: 18px; */ /* height: 18px; */ } div.htmlarea-context-menu tr.item td.icon { padding: 0px 3px; width: 18px; height: 18px; background-color: #cdf; } div.htmlarea-context-menu tr.item td.label { padding: 1px 10px 1px 3px; } div.htmlarea-context-menu tr.separator td { padding: 2px 0px; } div.htmlarea-context-menu tr.separator td div { border-top: 1px solid #aca899; overflow: hidden; position: relative; } div.htmlarea-context-menu tr.separator td.icon { background-color: #cdf; } div.htmlarea-context-menu tr.separator td.icon div { /* margin-left: 3px; */ border-color: #fff; } div.htmlarea-context-menu tr.separator td.label div { margin-right: 3px; } div.htmlarea-context-menu tr.item.hover { background-color: #316ac5; color: #fff; } div.htmlarea-context-menu tr.item.hover td.icon { background-color: #619af5; } mailbox/xinha/plugins/ContextMenu/lang/0040775000567100000120000000000010567167541020175 5ustar jcameronwheelmailbox/xinha/plugins/ContextMenu/lang/ja.js0100664000567100000120000000625310565363044021122 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Cut": "切り取り", "Copy": "コピー", "Paste": "貼り付け", "_Image Properties...": "画像のプロパティ(_I)...", "Show the image properties dialog": "この画像のプロパティダイアログを表示します", "_Modify Link...": "リンクの修正(_M)...", "Current URL is": "現在のURL", "Chec_k Link...": "リンクを確認(_K)...", "Opens this link in a new window": "このリンクを新しいウィンドウで開きます", "_Remove Link...": "リンクの削除(_R)", "Please confirm that you want to unlink this element.": "この要素のリンクを削除します。よろしいですか。", "Link points to:": "リンク先:", "Unlink the current element": "この要素のリンクを解除", "C_ell Properties...": "セルのプロパティ(_E)...", "Ro_w Properties...": "行のプロパティ(_W)...", "Show the Table Row Properties dialog": "テーブル行のプロパティダイアログを表示します", "I_nsert Row Before": "上に行を挿入(_N)", "Insert a new row before the current one": "選択中の行の上に一行挿入します", "In_sert Row After": "下に行を挿入(_S)", "Insert a new row after the current one": "選択中の行の下に一行挿入します", "_Delete Row": "行の削除(_D)", "Delete the current row": "選択中の行を削除します", "_Table Properties...": "テーブルのプロパティ(_T)...", "Show the Table Properties dialog": "テーブルのプロパティダイアログを表示します", "Insert _Column Before": "左に列を挿入(_C)", "Insert a new column before the current one": "選択中の列の左に一列挿入します", "Insert C_olumn After": "右に列を挿入(_O)", "Insert a new column after the current one": "選択中の列の右に一列挿入します", "De_lete Column": "列の削除(_L)", "Delete the current column": "選択中の列を削除します", "Justify Left": "左寄せ", "Justify Center": "中央寄せ", "Justify Right": "右寄せ", "Justify Full": "均等割付", "Make lin_k...": "リンクの作成(_K)...", "Create a link": "新たなリンクを作成します", "Remove the $elem Element...": "$elem 要素を削除 ...", "Please confirm that you want to remove this element:": "この要素を削除します。よろしいですか。:", "Remove this node from the document": "ドキュメントからこのノードを削除します", "Insert paragraph before": "前に段落を挿入", "Insert a paragraph before the current node": "選択中のノードの手前に段落を挿入します", "Insert paragraph after": "後に段落を挿入", "Insert a paragraph after the current node": "選択中のノードの後に段落を挿入します", "How did you get here? (Please report!)": "どうやってここに来ましたか?(どうか報告を!)", "Show the Table Cell Properties dialog": "テーブルセルのプロパティダイアログを表示します", "Insert Cell Before": "前にセルを挿入", "Insert Cell After": "後にセルを挿入", "Delete Cell": "セルの削除", "Merge Cells": "セルの結合" };mailbox/xinha/plugins/ContextMenu/lang/nl.js0100664000567100000120000000507210565363044021137 0ustar jcameronwheel// I18N constants // LANG: "nl", ENCODING: UTF-8 // Author: Michel Weegeerink (info@mmc-shop.nl), http://mmc-shop.nl { "Cut": "Knippen", "Copy": "Kopiëren", "Paste": "Plakken", "_Image Properties...": "Eigenschappen afbeelding...", "_Modify Link...": "Hyperlin_k aanpassen...", "Chec_k Link...": "Controleer hyperlin_k...", "_Remove Link...": "Ve_rwijder hyperlink...", "C_ell Properties...": "C_eleigenschappen...", "Ro_w Properties...": "Rijeigenscha_ppen...", "I_nsert Row Before": "Rij invoegen boven", "In_sert Row After": "Rij invoegen onder", "_Delete Row": "Rij _verwijderen", "_Table Properties...": "_Tabeleigenschappen...", "Insert _Column Before": "Kolom invoegen voor", "Insert C_olumn After": "Kolom invoegen na", "De_lete Column": "Kolom verwijderen", "Justify Left": "Links uitlijnen", "Justify Center": "Centreren", "Justify Right": "Rechts uitlijnen", "Justify Full": "Uitvullen", "Make lin_k...": "Maak hyperlin_k...", "Remove the $elem Element...": "Verwijder het $elem element...", "Please confirm that you want to remove this element:": "Is het werkelijk de bedoeling dit element te verwijderen:", "Remove this node from the document": "Verwijder dit punt van het document", "How did you get here? (Please report!)": "Hoe kwam je hier? (A.U.B. doorgeven!)", "Show the image properties dialog": "Laat het afbeeldingseigenschappen dialog zien", "Modify URL": "Aanpassen URL", "Current URL is": "Huidig URL is", "Opens this link in a new window": "Opend deze hyperlink in een nieuw venster", "Please confirm that you want to unlink this element.": "Is het werkelijk de bedoeling dit element te unlinken.", "Link points to:": "Hyperlink verwijst naar:", "Unlink the current element": "Unlink het huidige element", "Show the Table Cell Properties dialog": "Laat de tabel celeigenschappen dialog zien", "Show the Table Row Properties dialog": "Laat de tabel rijeigenschappen dialog zien", "Insert a new row before the current one": "Voeg een nieuwe rij in boven de huidige", "Insert a new row after the current one": "Voeg een nieuwe rij in onder de huidige", "Delete the current row": "Verwijder de huidige rij", "Show the Table Properties dialog": "Laat de tabel eigenschappen dialog zien", "Insert a new column before the current one": "Voeg een nieuwe kolom in voor de huidige", "Insert a new column after the current one": "Voeg een nieuwe kolom in na de huidige", "Delete the current column": "Verwijder de huidige kolom", "Create a link": "Maak een hyperlink" }; mailbox/xinha/plugins/ContextMenu/lang/de.js0100664000567100000120000000532710565363044021121 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Raimund Meyer xinha@ray-of-light.org { "Cut": "Ausschneiden", "Copy": "Kopieren", "Paste": "Einfügen", "_Image Properties...": "Eigenschaften", "Show the image properties dialog": "Fenster für die Bildoptionen anzeigen", "_Modify Link...": "Link ändern", "Current URL is": "Aktuelle URL ist", "Chec_k Link...": "Link testen", "Opens this link in a new window": "Diesen Link in neuem Fenster öffnen", "_Remove Link...": "Link entfernen", "Please confirm that you want to unlink this element.": "Wollen sie diesen Link wirklich entfernen?", "Link points to:": "Link zeigt auf:", "Unlink the current element": "Link auf Element entfernen", "C_ell Properties...": "Zellenoptionen", "Show the Table Cell Properties dialog": "Zellenoptionen anzeigen", "Ro_w Properties...": "Zeilenoptionen", "Show the Table Row Properties dialog": "Zeilenoptionen anzeigen", "I_nsert Row Before": "Zeile einfügen vor Position", "Insert a new row before the current one": "Zeile einfügen vor der aktuellen Position", "In_sert Row After": "Zeile einügen nach Position", "Insert a new row after the current one": "Zeile einfügen nach der aktuellen Position", "_Delete Row": "Zeile löschen", "Delete the current row": "Zeile löschen", "_Table Properties...": "Tabellenoptionen", "Show the Table Properties dialog": "Tabellenoptionen anzeigen", "Insert _Column Before": "Spalte einfügen vor Position", "Insert a new column before the current one": "Spalte einfügen vor der aktuellen Position", "Insert C_olumn After": "Spalte einfügen nach Position", "Insert a new column after the current one": "Spalte einfügen nach der aktuellen Position", "De_lete Column": "Spalte löschen", "Delete the current column": "Spalte löschen", "Justify Left": "Linksbündig", "Justify Center": "Zentriert", "Justify Right": "Rechtsbündig", "Justify Full": "Blocksatz", "Make lin_k...": "Link erstellen", "Create a link": "Link erstellen", "Remove the $elem Element...": "Element $elem entfernen...", "Please confirm that you want to remove this element:": "Wollen sie dieses Element wirklich entfernen?", "Remove this node from the document": "Dieses Element aus dem Dokument entfernen", "Insert paragraph before": "Absatz einfügen vor Position", "Insert a paragraph before the current node": "Absatz einfügen vor der aktuellen Position", "Insert paragraph after": "Absatz einfügen hinter Position", "Insert a paragraph after the current node": "Absatz einfügen hinter der aktuellen Position", "How did you get here? (Please report!)": "Wie sind Sie denn hier hin gekommen? (Please report!)" }; mailbox/xinha/plugins/ContextMenu/lang/sv.js0100664000567100000120000000527310565363044021161 0ustar jcameronwheel// I18N constants // LANG: "sv", ENCODING: UTF-8 // Swedish version for rev. 477 (Mar 2006) by Thomas Loo // TODO: Proper keybindings // C,D,e, ,I, ,k,k,l,M, ,n,o,R, ,s,T, ,w : English // H B j R m F v : Swedish { "Cut": "Klipp ut", "Copy": "Kopiera", "Paste": "Klistra in", "_Image Properties...": "_Bildegenskaper...", "Show the image properties dialog": "Visa bildegenskaper", "_Modify Link...": "_Redigera Länk...", "Current URL is": "Aktuellt URL är", "Chec_k Link...": "Kontrollera länk...", "Opens this link in a new window": "Öppna länk i nytt fönster", "_Remove Link...": "_Ta bort länk...", "Please confirm that you want to unlink this element.": "Bekräfta borttagning av länk", "Link points to:": "Länken pekar mot:", "Unlink the current element": "Ta bort länk kopplad till elementet", "C_ell Properties...": "C_ellegenskaper...", "Show the Table Cell Properties dialog": "Visa egenskaper for cellen", "Ro_w Properties...": "Radegenskaper... (_w)", "Show the Table Row Properties dialog": "Visa egenskaper för rad", "I_nsert Row Before": "I_nfoga rad före", "Insert a new row before the current one": "Infoga ny rad före aktuell", "In_sert Row After": "Infoga rad efter aktuell rad", "Insert a new row after the current one": "Infoga ny rad efter aktuell", "_Delete Row": "Radera rad (_d)", "Delete the current row": "T bort aktuell rad", "_Table Properties...": "_Tabellegenskaper...", "Show the Table Properties dialog": "Visa tabellegenskaper", "Insert _Column Before": "Infoga kolumn efter (_c)", "Insert a new column before the current one": "Infoga kolumn före aktuell", "Insert C_olumn After": "Infoga k_olumn efter", "Insert a new column after the current one": "Infoga kolumn efter aktuell", "De_lete Column": "_Radera kolumn", "Delete the current column": "Radera aktuell kolumn", "Justify Left": "_Vänsterjustera", "Justify Center": "_Centerjustera", "Justify Right": "_Högerjustera", "Justify Full": "Block_justera", "Make lin_k...": "Skapa län_k...", "Create a link": "SKapa ny länk", "Remove the $elem Element...": "Radera elementet $elem...", "Please confirm that you want to remove this element:": "Bekräfta borttagning av element:", "Remove this node from the document": "Radera nod från dokumentet", "Insert paragraph before": "Infoga paragraf före", "Insert a paragraph before the current node": "Infoga paragraf före aktuell nod", "Insert paragraph after": "Infoga paragraf efter", "Insert a paragraph after the current node": "Infoga paragraf efter aktuell nod", "How did you get here? (Please report!)": "Hur hamnade du här? (Beskriv förloppet)" };mailbox/xinha/plugins/ContextMenu/lang/pl.js0100664000567100000120000000524410565363044021142 0ustar jcameronwheel// I18N constants // LANG: "pl", ENCODING: UTF-8 // translated: Krzysztof Kotowicz, http://www.eskot.krakow.pl/portfolio/, koto@webworkers.pl { "Cut": "Wytnij", "Copy": "Kopiuj", "Paste": "Wklej", "_Image Properties...": "Właściwości obrazka", "Show the image properties dialog": "Pokaż okienko właściwości obrazka", "_Modify Link...": "Zmień odnośnik", "Current URL is": "Bieżący URL odnośnika", "Chec_k Link...": "Sprawdź odnośnik", "Opens this link in a new window": "Otwiera ten odnośnik w nowym oknie", "_Remove Link...": "Usuń odnośnik", "Please confirm that you want to unlink this element.": "Na pewno chcesz usunąć odnośnik?", "Link points to:": "Odnośnik wskazuje na:", "Unlink the current element": "Usuń odnośnik z zaznaczonego elementu", "C_ell Properties...": "Właściwości komórki", "Show the Table Cell Properties dialog": "Pokaż okno właściwości komórki", "Ro_w Properties...": "Właściwości wiersza", "Show the Table Row Properties dialog": "Pokaż okno właściwości wiersza", "I_nsert Row Before": "Wstaw wiersz przed", "Insert a new row before the current one": "Wstaw nowy wiersz przed bieżącym", "In_sert Row After": "Wstaw wiersz po", "Insert a new row after the current one": "Wstaw nowy wiersz po bieżącym", "_Delete Row": "Usuń wiersz", "Delete the current row": "Usuń bieżący wiersz", "_Table Properties...": "Właściwości tabeli", "Show the Table Properties dialog": "Pokaż okienko właściwości tabeli", "Insert _Column Before": "Wstaw kolumnę przed", "Insert a new column before the current one": "Wstaw nową kolumnę przed bieżącą", "Insert C_olumn After": "Wstaw kolumnę po", "Insert a new column after the current one": "Wstaw nową kolumnę po bieżącej", "De_lete Column": "Usuń kolumnę", "Delete the current column": "Usuwa bieżącą kolumnę", "Justify Left": "Wyrównaj do lewej", "Justify Center": "Wycentruj", "Justify Right": "Wyrównaj do prawej", "Justify Full": "Wyjustuj", "Make lin_k...": "Utwórz odnośnik", "Create a link": "Utwórz odnośnik", "Remove the $elem Element...": "Usuń $elem...", "Please confirm that you want to remove this element:": "Na pewno chcesz usunąć ten element?", "Remove this node from the document": "Usuń ten element z dokumentu", "Insert paragraph before": "Wstaw akapit przed", "Insert a paragraph before the current node": "Wstaw akapit przed bieżącym elementem", "Insert paragraph after": "Wstaw akapit po", "Insert a paragraph after the current node": "Wstaw akapit po bieżącym elemencie", "How did you get here? (Please report!)": "Jak tu trafiłeś (Proszę, podaj okoliczności!)" } mailbox/xinha/plugins/ContextMenu/lang/el.js0100664000567100000120000001321710565363044021126 0ustar jcameronwheel// I18N constants // LANG: "el", ENCODING: UTF-8 // Author: Dimitris Glezos, dimitris@glezos.com { "Cut": "ΑποκοπΞ�", "Copy": "ΑντιγραφΞ�", "Paste": "Ξ•Ο€ΞΉΞΊΟŒΞ»Ξ»Ξ·ΟƒΞ·", "_Image Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ•ΞΉΞΊΟŒΞ½Ξ±Ο‚...", "_Modify Link...": "Ξ�ροποποίηση συνδέσμου...", "Chec_k Link...": "ΞˆΞ»Ξ΅Ξ³Ο‡ΞΏΟ‚ συνδέσμων...", "_Remove Link...": "ΔιαγραφΞ� συνδέσμου...", "C_ell Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιού...", "Ro_w Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ γραμμΞ�Ο‚...", "I_nsert Row Before": "ΕισαγωγΞ� γραμμΞ�Ο‚ πριν", "In_sert Row After": "ΕισαγωγΞ� γραμμΞ�Ο‚ μΡτά", "_Delete Row": "ΔιαγραφΞ� γραμμΞ�Ο‚", "_Table Properties...": "Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ πίνακα...", "Insert _Column Before": "ΕισαγωγΞ� στΞ�λης πριν", "Insert C_olumn After": "ΕισαγωγΞ� στΞ�λης μΡτά", "De_lete Column": "ΔιαγραφΞ� στΞ�λης", "Justify Left": "Στοίχηση ΑριστΡρά", "Justify Center": "Στοίχηση ΞšΞ­Ξ½Ο„ΟΞΏ", "Justify Right": "Στοίχηση ΔΡξιά", "Justify Full": "Ξ Ξ»Ξ�ρης Στοίχηση", "Make lin_k...": "Δημιουργία συνδέσμου...", "Remove the $elem Element...": "ΑφαίρΡση $elem στοιχΡίου...", "Please confirm that you want to remove this element:": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞΏΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιρέσΡτΡ το στοιχΡίο ", "Remove this node from the document": "ΑφαίρΡση αυτού του ΞΊΟŒΞΌΞ²ΞΏΟ… Ξ±Ο€ΟŒ το έγγραφο", "How did you get here? (Please report!)": "Ξ ΟŽΟ‚ Ξ�ρθατΡ μέχρι Ρδώ; (ΠαρακαλούμΡ αναφέρΡτΡ το!)", "Show the image properties dialog": "Εμφάνιση Ξ΄ΞΉΞ±Ξ»ΟŒΞ³ΞΏΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ΅ΞΉΞΊΟŒΞ½Ξ±Ο‚", "Modify URL": "Ξ�ροποποίηση URL", "Current URL is": "Ξ�ΞΏ τρέχων URL Ρίναι", "Opens this link in a new window": "ΑνοίγΡι Ξ±Ο…Ο„ΟŒ τον σύνδΡσμο σΡ Ξ­Ξ½Ξ± Ξ½Ξ­ΞΏ παράθυρο", "Please confirm that you want to unlink this element.": "ΕίστΡ Ξ²Ξ­Ξ²Ξ±ΞΉΞΏΟ‚ πως θέλΡτΡ Ξ½Ξ± αφαιρέσΡτΡ τον σύνδΡσμο Ξ±Ο€ΟŒ Ξ±Ο…Ο„ΟŒ το στοιχΡίο:", "Link points to:": "Ο σύνδΡμος οδηγΡί Ρδώ:", "Unlink the current element": "ΑφαίρΡση συνδέσμου Ξ±Ο€ΟŒ το Ο€Ξ±ΟΟŽΞ½ στοιχΡίο", "Show the Table Cell Properties dialog": "Εμφάνιση Ξ΄ΞΉΞ±Ξ»ΟŒΞ³ΞΏΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ κΡλιού Ξ Ξ―Ξ½Ξ±ΞΊΞ±", "Show the Table Row Properties dialog": "Εμφάνιση Ξ΄ΞΉΞ±Ξ»ΟŒΞ³ΞΏΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ γραμμΞ�Ο‚ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", "Insert a new row before the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ γραμμΞ�Ο‚ πριν την ΡπιλΡγμένη", "Insert a new row after the current one": "ΕισαγωγΞ� ΞΌΞΉΞ±Ο‚ Ξ½Ξ­Ξ±Ο‚ γραμμΞ�Ο‚ μΡτά την ΡπιλΡγμένη", "Delete the current row": "ΔιαγραφΞ� ΡπιλΡγμένης γραμμΞ�Ο‚", "Show the Table Properties dialog": "Εμφάνιση Ξ΄ΞΉΞ±Ξ»ΟŒΞ³ΞΏΟ… ΞΌΞ΅ τις Ξ™Ξ΄ΞΉΟŒΟ„Ξ·Ο„Ξ΅Ο‚ Ξ Ξ―Ξ½Ξ±ΞΊΞ±", "Insert a new column before the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης πριν την ΡπιλΡγμένη", "Insert a new column after the current one": "ΕισαγωγΞ� Ξ½Ξ­Ξ±Ο‚ στΞ�λης μΡτά την ΡπιλΡγμένη", "Delete the current column": "ΔιαγραφΞ� ΡπιλΡγμένης στΞ�λης", "Create a link": "Δημιουργία συνδέσμου" }; mailbox/xinha/plugins/ContextMenu/lang/nb.js0100664000567100000120000000534210565363044021125 0ustar jcameronwheel// I18N constants // LANG: "no", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com // Used key commands // C,D,e, ,I, ,k,k,l,M, ,n,o,R, ,s,T, ,w : English // H B j R m F v : Norwegian { "Cut": "Klipp ut", "Copy": "Kopier", "Paste": "Lim inn", "_Image Properties...": "_Bildeegenskaper...", "Show the image properties dialog": "Vis bildeegenskaper", "_Modify Link...": "_Rediger Link...", "Current URL is": "Gjeldende URL er", "Chec_k Link...": "Sje_kk Link...", "Opens this link in a new window": "Åpner denne link i nytt vindu", "_Remove Link...": "_Fjerne Link...", "Please confirm that you want to unlink this element.": "Vennligst bekreft at du ønsker å fjerne link på elementet", "Link points to:": "Link peker til:", "Unlink the current element": "Fjerne link på gjeldende element", "C_ell Properties...": "C_elleegenskaper...", "Show the Table Cell Properties dialog": "Vis egenskaper for celle", "Ro_w Properties...": "Rad Egenskaper... (_w)", "Show the Table Row Properties dialog": "Vis egenskaper for rad", "I_nsert Row Before": "Sett I_nn rad før", "Insert a new row before the current one": "Sett inn ny rad før gjeldende", "In_sert Row After": "_Sett inn rad etter", "Insert a new row after the current one": "Sett inn ny rad etter gjeldende", "_Delete Row": "Slett rad (_d)", "Delete the current row": "Slett gjeldende rad", "_Table Properties...": "_Tabellegenskaper...", "Show the Table Properties dialog": "Vis egenskaper for tabellen", "Insert _Column Before": "Sett inn kolonne etter (_c)", "Insert a new column before the current one": "Sett inn kolonne før gjeldende", "Insert C_olumn After": "Sett inn k_olonne etter", "Insert a new column after the current one": "Sett inn kolonne etter gjeldende", "De_lete Column": "S_lett kolonne", "Delete the current column": "Slett gjeldende kolonne", "Justify Left": "_Venstrejuster", "Justify Center": "_Midtjuster", "Justify Right": "_Høyrejuster", "Justify Full": "Blokk_juster", "Make lin_k...": "Lag len_ke...", "Create a link": "Lag ny link", "Remove the $elem Element...": "Fjerne $elem elementet...", "Please confirm that you want to remove this element:": "Vennligst bekreft at du ønsker å fjerne elementet:", "Remove this node from the document": "Fjerne denne node fra dokumentet", "Insert paragraph before": "Sett inn paragraf før", "Insert a paragraph before the current node": "Sett inn paragraf før gjeldende node", "Insert paragraph after": "Sett inn paragraf etter", "Insert a paragraph after the current node": "Sett inn paragraf etter gjeldende node", "How did you get here? (Please report!)": "Hva skjedde? (Vennligst beskriv)" };mailbox/xinha/plugins/ContextMenu/lang/fr.js0100664000567100000120000000565110565363044021140 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Cut": "Couper", "Copy": "Copier", "Paste": "Coller", "_Image Properties...": "_Propriétés de l'image...", "_Modify Link...": "_Modifier le lien...", "Chec_k Link...": "_Vérifier le lien...", "_Remove Link...": "_Supprimer le lien...", "C_ell Properties...": "P_ropriétés de la cellule...", "Ro_w Properties...": "Pr_opriétés de la rangée...", "I_nsert Row Before": "Insérer une rangée a_vant", "In_sert Row After": "Insér_er une rangée après", "_Delete Row": "Suppr_imer une rangée", "_Table Properties...": "Proprié_tés de la table...", "Insert _Column Before": "I_nsérer une colonne avant", "Insert C_olumn After": "Insérer une colonne après", "De_lete Column": "_Supprimer la colonne", "Justify Left": "Aligner à gauche", "Justify Center": "Aligner au centre", "Justify Right": "Aligner à droite", "Justify Full": "Justifier", "Make lin_k...": "Convertir en lien...", "Remove the $elem Element...": "Supprimer Élément $elem...", "Insert paragraph before": "Insérer un paragraphe avant", "Insert paragraph after": "Insérer un paragraphe après", "Please confirm that you want to remove this element:": "Confirmer la suppression de cet élément:", "Remove this node from the document": "Supprimer ce noeud du document", "How did you get here? (Please report!)": "Comment êtes-vous arrivé ici ? (Reportez le bug SVP !)", "Show the image properties dialog": "Afficher le dialogue des propriétés d'image", "Modify URL": "Modifier l'URL", "Current URL is": "L'URL courante est", "Opens this link in a new window": "Ouvrir ce lien dans une nouvelle fenêtre", "Please confirm that you want to unlink this element.": "Voulez-vous vraiment enlever le lien présent sur cet élément.", "Link points to:": "Le lien pointe sur:", "Unlink the current element": "Enlever le lien sur cet élément", "Show the Table Cell Properties dialog": "Afficher la boite de propriété des cellules", "Show the Table Row Properties dialog": "Afficher la boite de propriété des rangées", "Insert a new row before the current one": "Insérer une nouvelle rangée avant celle-ci", "Insert a new row after the current one": "Insérer une nouvelle rangée après celle-ci", "Delete the current row": "Supprimer la rangée courante", "Show the Table Properties dialog": "Afficher la boite de propriété de tableau", "Insert a new column before the current one": "Insérer une nouvelle rangée avant celle-ci", "Insert a new column after the current one": "Insérer une nouvelle colonne après celle-ci", "Delete the current column": "Supprimer cette colonne", "Create a link": "Créer un lien", "Insert a paragraph before the current node": "Insérer un paragraphe avant le noeud courant", "Insert a paragraph after the current node": "Insérer un paragraphe après le noeud courant" };mailbox/xinha/plugins/ContextMenu/lang/he.js0100664000567100000120000000560310565363044021122 0ustar jcameronwheel// I18N constants // LANG: "he", ENCODING: UTF-8 // Author: Liron Newman, http://www.eesh.net, { "Cut": "גזור", "Copy": "העתק", "Paste": "הדבק", "_Image Properties...": "_מאפייני תמונה...", "_Modify Link...": "_שנה קישור...", "Chec_k Link...": "בדו_ק קישור...", "_Remove Link...": "_הסר קישור...", "C_ell Properties...": "מאפייני ת_א...", "Ro_w Properties...": "מאפייני _טור...", "I_nsert Row Before": "ה_כנס שורה לפני", "In_sert Row After": "הכנ_ס שורה אחרי", "_Delete Row": "_מחק שורה", "_Table Properties...": "מאפייני ט_בלה...", "Insert _Column Before": "הכנס _טור לפני", "Insert C_olumn After": "הכנס ט_ור אחרי", "De_lete Column": "מח_ק טור", "Justify Left": "ישור לשמאל", "Justify Center": "ישור למרכז", "Justify Right": "ישור לימין", "Justify Full": "ישור לשורה מלאה", "Make lin_k...": "צור קי_שור...", "Remove the $elem Element...": "הסר את אלמנט ה- $elem...", "Please confirm that you want to remove this element:": "אנא אשר שברצונך להסיר את האלמנט הזה:", "Remove this node from the document": "הסרה של node זה מהמסמך", "How did you get here? (Please report!)": "איך הגעת הנה? (אנא דווח!)", "Show the image properties dialog": "מציג את חלון הדו-שיח של מאפייני תמונה", "Modify URL": "שינוי URL", "Current URL is": "URL נוכחי הוא", "Opens this link in a new window": "פתיחת קישור זה בחלון חדש", "Please confirm that you want to unlink this element.": "אנא אשר שאתה רוצה לנתק את אלמנט זה.", "Link points to:": "הקישור מצביע אל:", "Unlink the current element": "ניתוק את האלמנט הנוכחי", "Show the Table Cell Properties dialog": "מציג את חלון הדו-שיח של מאפייני תא בטבלה", "Show the Table Row Properties dialog": "מציג את חלון הדו-שיח של מאפייני שורה בטבלה", "Insert a new row before the current one": "הוספת שורה חדשה לפני הנוכחית", "Insert a new row after the current one": "הוספת שורה חדשה אחרי הנוכחית", "Delete the current row": "מחיקת את השורה הנוכחית", "Show the Table Properties dialog": "מציג את חלון הדו-שיח של מאפייני טבלה", "Insert a new column before the current one": "הוספת טור חדש לפני הנוכחי", "Insert a new column after the current one": "הוספת טור חדש אחרי הנוכחי", "Delete the current column": "מחיקת את הטור הנוכחי", "Create a link": "יצירת קישור" }; mailbox/xinha/plugins/HtmlEntities/0040775000567100000120000000000010567167543017416 5ustar jcameronwheelmailbox/xinha/plugins/HtmlEntities/Entities.js0100664000567100000120000016706210565363444021545 0ustar jcameronwheeljs: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 2: missing ; before statement js: "¡" : "¡", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 3: syntax error js: "¢" : "¢", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 4: syntax error js: "£" : "£", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 5: syntax error js: "¤" : "¤", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 6: syntax error js: "¥" : "¥", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 7: syntax error js: "¦" : "¦", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 8: syntax error js: "§" : "§", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 9: syntax error js: "¨" : "¨", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 10: syntax error js: "©" : "©", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 11: syntax error js: "ª" : "ª", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 12: syntax error js: "«" : "«", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 13: syntax error js: "¬" : "¬", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 14: syntax error js: "®" : "®", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 15: syntax error js: "¯" : "¯", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 16: syntax error js: "°" : "°", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 17: syntax error js: "±" : "±", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 18: syntax error js: "²" : "²", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 19: syntax error js: "³" : "³", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 20: syntax error js: "´" : "´", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 21: syntax error js: "µ" : "µ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 22: syntax error js: "¶" : "¶", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 23: syntax error js: "·" : "·", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 24: syntax error js: "¸" : "¸", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 25: syntax error js: "¹" : "¹", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 26: syntax error js: "º" : "º", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 27: syntax error js: "»" : "»", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 28: syntax error js: "¼" : "¼", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 29: syntax error js: "½" : "½", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 30: syntax error js: "¾" : "¾", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 31: syntax error js: "¿" : "¿", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 32: syntax error js: "À" : "À", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 33: syntax error js: "Á" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 34: syntax error js: "Â" : "Â", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 35: syntax error js: "Ã" : "Ã", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 36: syntax error js: "Ä" : "Ä", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 37: syntax error js: "Å" : "Å", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 38: syntax error js: "Æ" : "Æ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 39: syntax error js: "Ç" : "Ç", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 40: syntax error js: "È" : "È", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 41: syntax error js: "É" : "É", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 42: syntax error js: "Ê" : "Ê", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 43: syntax error js: "Ë" : "Ë", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 44: syntax error js: "Ì" : "Ì", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 45: syntax error js: "Í" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 46: syntax error js: "Î" : "Î", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 47: syntax error js: "Ï" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 48: syntax error js: "Ð" : "?", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 49: syntax error js: "Ñ" : "Ñ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 50: syntax error js: "Ò" : "Ò", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 51: syntax error js: "Ó" : "Ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 52: syntax error js: "Ô" : "Ô", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 53: syntax error js: "Õ" : "Õ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 54: syntax error js: "Ö" : "Ö", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 55: syntax error js: "×" : "×", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 56: syntax error js: "Ø" : "Ø", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 57: syntax error js: "Ù" : "Ù", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 58: syntax error js: "Ú" : "Ú", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 59: syntax error js: "Û" : "Û", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 60: syntax error js: "Ü" : "Ü", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 61: syntax error js: "Ý" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 62: syntax error js: "Þ" : "Þ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 63: syntax error js: "ß" : "ß", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 64: syntax error js: "à" : "à", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 65: syntax error js: "á" : "á", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 66: syntax error js: "â" : "â", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 67: syntax error js: "ã" : "ã", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 68: syntax error js: "ä" : "ä", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 69: syntax error js: "å" : "å", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 70: syntax error js: "æ" : "æ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 71: syntax error js: "ç" : "ç", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 72: syntax error js: "è" : "è", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 73: syntax error js: "é" : "é", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 74: syntax error js: "ê" : "ê", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 75: syntax error js: "ë" : "ë", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 76: syntax error js: "ì" : "ì", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 77: syntax error js: "í" : "í", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 78: syntax error js: "î" : "î", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 79: syntax error js: "ï" : "ï", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 80: syntax error js: "ð" : "ð", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 81: syntax error js: "ñ" : "ñ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 82: syntax error js: "ò" : "ò", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 83: syntax error js: "ó" : "ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 84: syntax error js: "ó" : "ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 85: syntax error js: "ô" : "ô", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 86: syntax error js: "õ" : "õ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 87: syntax error js: "ö" : "ö", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 88: syntax error js: "÷" : "÷", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 89: syntax error js: "ø" : "ø", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 90: syntax error js: "ù" : "ù", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 91: syntax error js: "ú" : "ú", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 92: syntax error js: "û" : "û", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 93: syntax error js: "ü" : "ü", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 94: syntax error js: "ý" : "ý", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 95: syntax error js: "þ" : "þ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 96: syntax error js: "ÿ" : "ÿ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 97: syntax error js: "ƒ" : "ƒ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 98: syntax error js: "Α" : "Α", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 99: syntax error js: "Β" : "Β", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 100: syntax error js: "Γ" : "Γ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 101: syntax error js: "Δ" : "Δ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 102: syntax error js: "Ε" : "Ε", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 103: syntax error js: "Ζ" : "Ζ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 104: syntax error js: "Η" : "Η", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 105: syntax error js: "Θ" : "Θ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 106: syntax error js: "Ι" : "Ι", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 107: syntax error js: "Κ" : "Κ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 108: syntax error js: "Λ" : "Λ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 109: syntax error js: "Μ" : "Μ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 110: syntax error js: "Ν" : "?", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 111: syntax error js: "Ξ" : "Ξ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 112: syntax error js: "Ο" : "Ο ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 113: syntax error js: "Π" : "Π", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 114: syntax error js: "Ρ" : "Ρ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 115: syntax error js: "Σ" : "Σ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 116: syntax error js: "Τ" : "Τ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 117: syntax error js: "Υ" : "Υ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 118: syntax error js: "Φ" : "Φ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 119: syntax error js: "Χ" : "Χ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 120: syntax error js: "Ψ" : "Ψ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 121: syntax error js: "Ω" : "Ω", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 122: syntax error js: "α" : "α", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 123: syntax error js: "β" : "β", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 124: syntax error js: "γ" : "γ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 125: syntax error js: "δ" : "δ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 126: syntax error js: "ε" : "ε", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 127: syntax error js: "ζ" : "ζ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 128: syntax error js: "η" : "η", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 129: syntax error js: "θ" : "θ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 130: syntax error js: "ι" : "ι", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 131: syntax error js: "κ" : "κ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 132: syntax error js: "λ" : "λ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 133: syntax error js: "μ" : "μ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 134: syntax error js: "ν" : "ν", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 135: syntax error js: "ξ" : "ξ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 136: syntax error js: "ο" : "ο", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 137: syntax error js: "π" : "π", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 138: syntax error js: "ρ" : "?", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 139: syntax error js: "ς" : "ς", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 140: syntax error js: "σ" : "σ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 141: syntax error js: "τ" : "τ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 142: syntax error js: "υ" : "υ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 143: syntax error js: "φ" : "φ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 144: syntax error js: "ω" : "ω", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 145: syntax error js: "•" : "•", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 146: syntax error js: "…" : "…", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 147: syntax error js: "′" : "′", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 148: syntax error js: "″" : "″", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 149: syntax error js: "‾" : "‾", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 150: syntax error js: "⁄" : "?", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 151: syntax error js: "™" : "™", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 152: syntax error js: "←" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 153: syntax error js: "↑" : "↑", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 154: syntax error js: "→" : "→", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 155: syntax error js: "↓" : "↓", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 156: syntax error js: "↔" : "↔", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 157: syntax error js: "⇒" : "⇒", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 158: syntax error js: "∂" : "∂", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 159: syntax error js: "∏" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 160: syntax error js: "∑" : "∑", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 161: syntax error js: "−" : "−", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 162: syntax error js: "√" : "√", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 163: syntax error js: "∞" : "∞", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 164: syntax error js: "∩" : "∩", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 165: syntax error js: "∫" : "∫", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 166: syntax error js: "≈" : "≈", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 167: syntax error js: "≠" : "≠", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 168: syntax error js: "≡" : "≡", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 169: syntax error js: "≤" : "≤", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 170: syntax error js: "≥" : "≥", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 171: syntax error js: "◊" : "◊", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 172: syntax error js: "♠" : "♠", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 173: syntax error js: "♣" : "♣", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 174: syntax error js: "♥" : "♥", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 175: syntax error js: "♦" : "♦", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 176: syntax error js: "Œ" : "Œ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 177: syntax error js: "œ" : "œ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 178: syntax error js: "Š" : "Š", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 179: syntax error js: "š" : "š", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 180: syntax error js: "Ÿ" : "Ÿ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 181: syntax error js: "ˆ" : "ˆ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 182: syntax error js: "˜" : "˜", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 183: syntax error js: "–" : "–", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 184: syntax error js: "—" : "—", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 185: syntax error js: "‘" : "‘", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 186: syntax error js: "’" : "’", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 187: syntax error js: "‚" : "‚", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 188: syntax error js: "“" : "“", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 189: syntax error js: "”" : "?", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 190: syntax error js: "„" : "„", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 191: syntax error js: "†" : "†", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 192: syntax error js: "‡" : "‡", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 193: syntax error js: "‰" : "‰", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 194: syntax error js: "‹" : "‹", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 195: syntax error js: "›" : "›", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 196: syntax error js: "€" : "€", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 201: syntax error js: " " : "\xA0", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 202: syntax error js: "≤" : String.fromCharCode(0x2264), js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 203: syntax error js: "≥" : String.fromCharCode(0x2265) js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 204: missing } in compound statement js: } js: ^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 1: Compilation produced 199 syntax errors. js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 2: missing ; before statement js: "¡" : "¡", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 3: syntax error js: "¢" : "¢", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 4: syntax error js: "£" : "£", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 5: syntax error js: "¤" : "¤", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 6: syntax error js: "¥" : "¥", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 7: syntax error js: "¦" : "¦", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 8: syntax error js: "§" : "§", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 9: syntax error js: "¨" : "¨", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 10: syntax error js: "©" : "©", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 11: syntax error js: "ª" : "ª", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 12: syntax error js: "«" : "«", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 13: syntax error js: "¬" : "¬", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 14: syntax error js: "®" : "®", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 15: syntax error js: "¯" : "¯", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 16: syntax error js: "°" : "°", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 17: syntax error js: "±" : "±", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 18: syntax error js: "²" : "²", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 19: syntax error js: "³" : "³", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 20: syntax error js: "´" : "´", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 21: syntax error js: "µ" : "µ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 22: syntax error js: "¶" : "¶", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 23: syntax error js: "·" : "·", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 24: syntax error js: "¸" : "¸", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 25: syntax error js: "¹" : "¹", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 26: syntax error js: "º" : "º", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 27: syntax error js: "»" : "»", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 28: syntax error js: "¼" : "¼", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 29: syntax error js: "½" : "½", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 30: syntax error js: "¾" : "¾", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 31: syntax error js: "¿" : "¿", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 32: syntax error js: "À" : "À", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 33: syntax error js: "Á" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 34: syntax error js: "Â" : "Â", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 35: syntax error js: "Ã" : "Ã", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 36: syntax error js: "Ä" : "Ä", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 37: syntax error js: "Å" : "Å", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 38: syntax error js: "Æ" : "Æ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 39: syntax error js: "Ç" : "Ç", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 40: syntax error js: "È" : "È", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 41: syntax error js: "É" : "É", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 42: syntax error js: "Ê" : "Ê", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 43: syntax error js: "Ë" : "Ë", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 44: syntax error js: "Ì" : "Ì", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 45: syntax error js: "Í" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 46: syntax error js: "Î" : "Î", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 47: syntax error js: "Ï" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 48: syntax error js: "Ð" : "?", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 49: syntax error js: "Ñ" : "Ñ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 50: syntax error js: "Ò" : "Ò", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 51: syntax error js: "Ó" : "Ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 52: syntax error js: "Ô" : "Ô", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 53: syntax error js: "Õ" : "Õ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 54: syntax error js: "Ö" : "Ö", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 55: syntax error js: "×" : "×", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 56: syntax error js: "Ø" : "Ø", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 57: syntax error js: "Ù" : "Ù", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 58: syntax error js: "Ú" : "Ú", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 59: syntax error js: "Û" : "Û", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 60: syntax error js: "Ü" : "Ü", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 61: syntax error js: "Ý" : "?", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 62: syntax error js: "Þ" : "Þ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 63: syntax error js: "ß" : "ß", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 64: syntax error js: "à" : "à", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 65: syntax error js: "á" : "á", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 66: syntax error js: "â" : "â", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 67: syntax error js: "ã" : "ã", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 68: syntax error js: "ä" : "ä", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 69: syntax error js: "å" : "å", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 70: syntax error js: "æ" : "æ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 71: syntax error js: "ç" : "ç", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 72: syntax error js: "è" : "è", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 73: syntax error js: "é" : "é", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 74: syntax error js: "ê" : "ê", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 75: syntax error js: "ë" : "ë", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 76: syntax error js: "ì" : "ì", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 77: syntax error js: "í" : "í", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 78: syntax error js: "î" : "î", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 79: syntax error js: "ï" : "ï", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 80: syntax error js: "ð" : "ð", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 81: syntax error js: "ñ" : "ñ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 82: syntax error js: "ò" : "ò", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 83: syntax error js: "ó" : "ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 84: syntax error js: "ó" : "ó", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 85: syntax error js: "ô" : "ô", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 86: syntax error js: "õ" : "õ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 87: syntax error js: "ö" : "ö", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 88: syntax error js: "÷" : "÷", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 89: syntax error js: "ø" : "ø", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 90: syntax error js: "ù" : "ù", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 91: syntax error js: "ú" : "ú", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 92: syntax error js: "û" : "û", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 93: syntax error js: "ü" : "ü", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 94: syntax error js: "ý" : "ý", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 95: syntax error js: "þ" : "þ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 96: syntax error js: "ÿ" : "ÿ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 97: syntax error js: "ƒ" : "ƒ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 98: syntax error js: "Α" : "Α", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 99: syntax error js: "Β" : "Β", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 100: syntax error js: "Γ" : "Γ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 101: syntax error js: "Δ" : "Δ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 102: syntax error js: "Ε" : "Ε", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 103: syntax error js: "Ζ" : "Ζ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 104: syntax error js: "Η" : "Η", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 105: syntax error js: "Θ" : "Θ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 106: syntax error js: "Ι" : "Ι", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 107: syntax error js: "Κ" : "Κ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 108: syntax error js: "Λ" : "Λ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 109: syntax error js: "Μ" : "Μ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 110: syntax error js: "Ν" : "?", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 111: syntax error js: "Ξ" : "Ξ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 112: syntax error js: "Ο" : "Ο ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 113: syntax error js: "Π" : "Π", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 114: syntax error js: "Ρ" : "Ρ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 115: syntax error js: "Σ" : "Σ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 116: syntax error js: "Τ" : "Τ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 117: syntax error js: "Υ" : "Υ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 118: syntax error js: "Φ" : "Φ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 119: syntax error js: "Χ" : "Χ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 120: syntax error js: "Ψ" : "Ψ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 121: syntax error js: "Ω" : "Ω", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 122: syntax error js: "α" : "α", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 123: syntax error js: "β" : "β", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 124: syntax error js: "γ" : "γ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 125: syntax error js: "δ" : "δ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 126: syntax error js: "ε" : "ε", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 127: syntax error js: "ζ" : "ζ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 128: syntax error js: "η" : "η", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 129: syntax error js: "θ" : "θ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 130: syntax error js: "ι" : "ι", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 131: syntax error js: "κ" : "κ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 132: syntax error js: "λ" : "λ", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 133: syntax error js: "μ" : "μ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 134: syntax error js: "ν" : "ν", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 135: syntax error js: "ξ" : "ξ", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 136: syntax error js: "ο" : "ο", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 137: syntax error js: "π" : "π", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 138: syntax error js: "ρ" : "?", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 139: syntax error js: "ς" : "ς", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 140: syntax error js: "σ" : "σ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 141: syntax error js: "τ" : "τ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 142: syntax error js: "υ" : "υ", js: .............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 143: syntax error js: "φ" : "φ", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 144: syntax error js: "ω" : "ω", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 145: syntax error js: "•" : "•", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 146: syntax error js: "…" : "…", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 147: syntax error js: "′" : "′", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 148: syntax error js: "″" : "″", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 149: syntax error js: "‾" : "‾", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 150: syntax error js: "⁄" : "?", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 151: syntax error js: "™" : "™", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 152: syntax error js: "←" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 153: syntax error js: "↑" : "↑", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 154: syntax error js: "→" : "→", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 155: syntax error js: "↓" : "↓", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 156: syntax error js: "↔" : "↔", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 157: syntax error js: "⇒" : "⇒", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 158: syntax error js: "∂" : "∂", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 159: syntax error js: "∏" : "?", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 160: syntax error js: "∑" : "∑", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 161: syntax error js: "−" : "−", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 162: syntax error js: "√" : "√", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 163: syntax error js: "∞" : "∞", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 164: syntax error js: "∩" : "∩", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 165: syntax error js: "∫" : "∫", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 166: syntax error js: "≈" : "≈", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 167: syntax error js: "≠" : "≠", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 168: syntax error js: "≡" : "≡", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 169: syntax error js: "≤" : "≤", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 170: syntax error js: "≥" : "≥", js: ........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 171: syntax error js: "◊" : "◊", js: .........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 172: syntax error js: "♠" : "♠", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 173: syntax error js: "♣" : "♣", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 174: syntax error js: "♥" : "♥", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 175: syntax error js: "♦" : "♦", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 176: syntax error js: "Œ" : "Œ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 177: syntax error js: "œ" : "œ", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 178: syntax error js: "Š" : "Š", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 179: syntax error js: "š" : "š", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 180: syntax error js: "Ÿ" : "Ÿ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 181: syntax error js: "ˆ" : "ˆ", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 182: syntax error js: "˜" : "˜", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 183: syntax error js: "–" : "–", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 184: syntax error js: "—" : "—", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 185: syntax error js: "‘" : "‘", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 186: syntax error js: "’" : "’", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 187: syntax error js: "‚" : "‚", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 188: syntax error js: "“" : "“", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 189: syntax error js: "”" : "?", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 190: syntax error js: "„" : "„", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 191: syntax error js: "†" : "†", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 192: syntax error js: "‡" : "‡", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 193: syntax error js: "‰" : "‰", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 194: syntax error js: "‹" : "‹", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 195: syntax error js: "›" : "›", js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 196: syntax error js: "€" : "€", js: ..........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 201: syntax error js: " " : "\xA0", js: ...........^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 202: syntax error js: "≤" : String.fromCharCode(0x2264), js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 203: syntax error js: "≥" : String.fromCharCode(0x2265) js: ............^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 204: missing } in compound statement js: } js: ^ js: "C:\Programme\xampp\htdocs\x\0.92beta\plugins\HtmlEntities\Entities.js_uncompr.js", line 1: Compilation produced 199 syntax errors. null mailbox/xinha/plugins/HtmlEntities/iso-8859-1.js0100664000567100000120000000375210565363044021313 0ustar jcameronwheel{ "ƒ" : "ƒ", "Α" : "Α", "Β" : "Β", "Γ" : "Γ", "Δ" : "Δ", "Ε" : "Ε", "Ζ" : "Ζ", "Η" : "Η", "Θ" : "Θ", "Ι" : "Ι", "Κ" : "Κ", "Λ" : "Λ", "Μ" : "Μ", "Ν" : "Ν", "Ξ" : "Ξ", "Ο" : "Ο ", "Π" : "Π", "Ρ" : "Ρ", "Σ" : "Σ", "Τ" : "Τ", "Υ" : "Υ", "Φ" : "Φ", "Χ" : "Χ", "Ψ" : "Ψ", "Ω" : "Ω", "α" : "α", "β" : "β", "γ" : "γ", "δ" : "δ", "ε" : "ε", "ζ" : "ζ", "η" : "η", "θ" : "θ", "ι" : "ι", "κ" : "κ", "λ" : "λ", "μ" : "μ", "ν" : "ν", "ξ" : "ξ", "ο" : "ο", "π" : "π", "ρ" : "ρ", "ς" : "ς", "σ" : "σ", "τ" : "τ", "υ" : "υ", "φ" : "φ", "ω" : "ω", "•" : "•", "…" : "…", "′" : "′", "″" : "″", "‾" : "‾", "⁄" : "⁄", "™" : "™", "←" : "←", "↑" : "↑", "→" : "→", "↓" : "↓", "↔" : "↔", "⇒" : "⇒", "∂" : "∂", "∏" : "∏", "∑" : "∑", "−" : "−", "√" : "√", "∞" : "∞", "∩" : "∩", "∫" : "∫", "≈" : "≈", "≠" : "≠", "≡" : "≡", "≤" : "≤", "≥" : "≥", "◊" : "◊", "♠" : "♠", "♣" : "♣", "♥" : "♥", "♦" : "♦", "Œ" : "Œ", "œ" : "œ", "Š" : "Š", "š" : "š", "Ÿ" : "Ÿ", "ˆ" : "ˆ", "˜" : "˜", "–" : "–", "—" : "—", "‘" : "‘", "’" : "’", "‚" : "‚", "“" : "“", "”" : "”", "„" : "„", "†" : "†", "‡" : "‡", "‰" : "‰", "‹" : "‹", "›" : "›", "€" : "€", // \x22 means '"' -- we use hex reprezentation so that we don't disturb // JS compressors (well, at least mine fails.. ;) " " : "\xA0", "≤" : String.fromCharCode(0x2264), "≥" : String.fromCharCode(0x2265) } mailbox/xinha/plugins/HtmlEntities/html-entities.js0100664000567100000120000000323310565363044022530 0ustar jcameronwheel/*------------------------------------------*\ HtmlEntities for Xinha ____________________ Intended to faciliate the use of special characters with ISO 8 bit encodings. Using the conversion map provided by mharrisonline in ticket #127 If you want to adjust the list, e.g. to except the characters that are available in the used charset, edit Entities.js. You may save it under a different name using the xinha_config.HtmlEntities.EntitiesFile variable ISO-8859-1 preset is default, set xinha_config.HtmlEntities.Encoding = null; if you want all special characters to be converted or want to load a custom file \*------------------------------------------*/ function HtmlEntities(editor) { this.editor = editor; } HtmlEntities._pluginInfo = { name : "HtmlEntities", version : "1.0", developer : "Raimund Meyer", developer_url : "http://rheinauf.de", c_owner : "Xinha community", sponsor : "", sponsor_url : "", license : "Creative Commons Attribution-ShareAlike License" } Xinha.Config.prototype.HtmlEntities = { Encoding : 'iso-8859-1', EntitiesFile : _editor_url + "plugins/HtmlEntities/Entities.js" } HtmlEntities.prototype.onGenerate = function() { var e = this.editor; var url = (e.config.HtmlEntities.Encoding) ? _editor_url + "plugins/HtmlEntities/"+e.config.HtmlEntities.Encoding+".js" : e.config.HtmlEntities.EntitiesFile; var callback = function (getback) { var specialReplacements = e.config.specialReplacements; eval("var replacements =" + getback); for (var i in replacements) { specialReplacements[i] = replacements[i]; } } Xinha._getback(url,callback); } mailbox/xinha/plugins/CSS/0040775000567100000120000000000010567167541015433 5ustar jcameronwheelmailbox/xinha/plugins/CSS/css.js0100664000567100000120000000440110565363434016552 0ustar jcameronwheelHTMLArea.Config.prototype.cssPluginConfig={combos:[{label:"Syntax",options:{"None":"","Code":"code","String":"string","Comment":"comment","Variable name":"variable-name","Type":"type","Reference":"reference","Preprocessor":"preprocessor","Keyword":"keyword","Function name":"function-name","Html tag":"html-tag","Html italic":"html-helper-italic","Warning":"warning","Html bold":"html-helper-bold"},context:"pre"},{label:"Info",options:{"None":"","Quote":"quote","Highlight":"highlight","Deprecated":"deprecated"}}]}; function CSS(_1,_2){ this.editor=_1; var _3=_1.config; var _4=this; var _5; if(_2&&_2.length){ _5=_2[0]; }else{ _5=_1.config.cssPluginConfig; } var _6=_5.combos; for(var i=0;i<_6.length;i++){ var _8=_6[i]; var id="CSS-class"+i; var _a={id:id,options:_8.options,action:function(_b){ _4.onSelect(_b,this,_8.context,_8.updatecontextclass); },refresh:function(_c){ _4.updateValue(_c,this); },context:_8.context}; _3.registerDropdown(_a); _3.addToolbarElement(["T["+_8.label+"]",id,"separator"],"formatblock",-1); } } CSS._pluginInfo={name:"CSS",version:"1.0",developer:"Mihai Bazon",developer_url:"http://dynarch.com/mishoo/",c_owner:"Mihai Bazon",sponsor:"Miro International",sponsor_url:"http://www.miro.com.au",license:"htmlArea"}; CSS.prototype.onSelect=function(_d,_e,_f,_10){ var _11=_d._toolbarObjects[_e.id]; var _12=_11.element.selectedIndex; var _13=_11.element.value; var _14=_d.getParentElement(); var _15=true; var _16=(_14&&_14.tagName.toLowerCase()=="span"); var _17=(_f&&_10&&_14&&_14.tagName.toLowerCase()==_f); if(_17){ _14.className=_13; _d.updateToolbar(); return; } if(_16&&_12==0&&!/\S/.test(_14.style.cssText)){ while(_14.firstChild){ _14.parentNode.insertBefore(_14.firstChild,_14); } _14.parentNode.removeChild(_14); _d.updateToolbar(); return; } if(_16){ if(_14.childNodes.length==1){ _14.className=_13; _15=false; _d.updateToolbar(); } } if(_15){ _d.surroundHTML("",""); } }; CSS.prototype.updateValue=function(_18,obj){ var _1a=_18._toolbarObjects[obj.id].element; var _1b=_18.getParentElement(); if(typeof _1b.className!="undefined"&&/\S/.test(_1b.className)){ var _1c=_1a.options; var _1d=_1b.className; for(var i=_1c.length;--i>=0;){ var _1f=_1c[i]; if(_1d==_1f.value){ _1a.selectedIndex=i; return; } } } _1a.selectedIndex=0; }; mailbox/xinha/plugins/ClientsideSpellcheck/0040775000567100000120000000000010567167541021064 5ustar jcameronwheelmailbox/xinha/plugins/ClientsideSpellcheck/img/0040775000567100000120000000000010567167541021640 5ustar jcameronwheelmailbox/xinha/plugins/ClientsideSpellcheck/img/clientside-spellcheck.gif0100664000567100000120000000014110565364774026563 0ustar jcameronwheelGIF89a!,2˹~#Q21tߚ"«s40tA!x & ;mailbox/xinha/plugins/ClientsideSpellcheck/img/he-spell-check.gif0100664000567100000120000000014410565364776025116 0ustar jcameronwheelGIF89a!,53R .A歅q-r'!l m7ِx0">b;mailbox/xinha/plugins/ClientsideSpellcheck/lang/0040775000567100000120000000000010567167541022005 5ustar jcameronwheelmailbox/xinha/plugins/ClientsideSpellcheck/lang/ja.js0100664000567100000120000000065410565362760022735 0ustar jcameronwheel// I18N constants // LANG: "ja", ENCODING: UTF-8 { "Spell Check using ieSpell": "スペルチェックに ieSpell を使う", "ieSpell can only be used in Internet Explorer": "ieSpell は Internet Explorer でのみ使用できます", "ieSpell not detected. Click Ok to go to download page.": "ieSpell が検知されませんでした。OK をクリックしてダウンロードページを開いてください。" };mailbox/xinha/plugins/ClientsideSpellcheck/lang/de.js0100664000567100000120000000074010565362760022727 0ustar jcameronwheel// I18N constants // LANG: "de", ENCODING: UTF-8 // translated: Udo Schmal (gocher), http://www.schaffrath-neuemedien.de/, udo.schmal@t-online.de { "Spell Check using ieSpell": "Englische Rechtschreibkontrolle mit ieSpell", "ieSpell can only be used in Internet Explorer": "ieSpell kann nur mit dem Internet Explorer benutzt werden", "ieSpell not detected. Click Ok to go to download page.": "ieSpell wurde nicht gefunden. Drücken sie Ok um ieSpeck herunter zu laden." }; mailbox/xinha/plugins/ClientsideSpellcheck/lang/nb.js0100664000567100000120000000002410565362760022731 0ustar jcameronwheel// Dummy file {};mailbox/xinha/plugins/ClientsideSpellcheck/clientside-spellcheck.js0100664000567100000120000000372110565362760025656 0ustar jcameronwheel// IE Spell Implementation for XINHA //Client-side spell check plugin //This implements the API for ieSpell, which is owned by Red Egg Software //For more info about ieSpell, go to http://www.iespell.com/index.htm // Distributed under the same terms as HTMLArea itself. // This notice MUST stay intact for use (see license.txt). function ClientsideSpellcheck(editor) { this.editor = editor; var cfg = editor.config; var bl = ClientsideSpellcheck.btnList; var self = this; // see if we can find the mode switch button, insert this before that var id = "clientsidespellcheck"; cfg.registerButton(id, this._lc("Spell Check using ieSpell"), editor.imgURL("clientside-spellcheck.gif", "ClientsideSpellcheck"), false, function(editor, id) { // dispatch button press event self.buttonPress(editor, id); }); if(HTMLArea.is_ie) { cfg.addToolbarElement("clientsidespellcheck", "print", 1); } } ClientsideSpellcheck._pluginInfo = { name : "ClientsideSpellcheck", version : "1.0", developer : "Michael Harris", developer_url : "http://www.jonesinternational.edu", c_owner : "Red Egg Software", sponsor : "Jones International University", sponsor_url : "http://www.jonesinternational.edu", license : "htmlArea" }; ClientsideSpellcheck.prototype._lc = function(string) { return HTMLArea._lc(string, 'ClientsideSpellcheck'); }; ClientsideSpellcheck.prototype.buttonPress = function(editor) { try { var tmpis = new ActiveXObject("ieSpell.ieSpellExtension"); tmpis.CheckAllLinkedDocuments(document); } catch(exception) { if(exception.number==-2146827859) { if (confirm(this.lc("ieSpell not detected. Click Ok to go to download page."))) window.open("http://www.iespell.com/download.php","DownLoad"); } else { alert(this.lc("ieSpell can only be used in Internet Explorer")); } } };mailbox/xinha/plugins/ListType/0040775000567100000120000000000010567167545016564 5ustar jcameronwheelmailbox/xinha/plugins/ListType/list-type.js0100664000567100000120000001000410565363454021037 0ustar jcameronwheelHTMLArea.loadStyle("ListType.css","ListType"); function ListType(_1){ this.editor=_1; var _2=_1.config; var _3=this; if(_2.ListType.mode=="toolbar"){ var _4={}; _4[HTMLArea._lc("Decimal numbers","ListType")]="decimal"; _4[HTMLArea._lc("Lower roman numbers","ListType")]="lower-roman"; _4[HTMLArea._lc("Upper roman numbers","ListType")]="upper-roman"; _4[HTMLArea._lc("Lower latin letters","ListType")]="lower-alpha"; _4[HTMLArea._lc("Upper latin letters","ListType")]="upper-alpha"; if(!HTMLArea.is_ie){ _4[HTMLArea._lc("Lower greek letters","ListType")]="lower-greek"; } var _5={id:"listtype",tooltip:HTMLArea._lc("Choose list style type (for ordered lists)","ListType"),options:_4,action:function(_6){ _3.onSelect(_6,this); },refresh:function(_7){ _3.updateValue(_7,this); },context:"ol"}; _2.registerDropdown(_5); _2.addToolbarElement("listtype",["insertorderedlist","orderedlist"],1); }else{ _1._ListType=_1.addPanel("right"); HTMLArea.freeLater(_1,"_ListType"); HTMLArea.addClass(_1._ListType,"ListType"); HTMLArea.addClass(_1._ListType.parentNode,"dialog"); _1.notifyOn("modechange",function(e,_9){ if(_9.mode=="text"){ _1.hidePanel(_1._ListType); } }); var _a=["disc","circle","square","none"]; var _b=["decimal","lower-alpha","upper-alpha","lower-roman","upper-roman","none"]; var _c=document.createElement("div"); _c.style.height="90px"; var _d=document.createElement("div"); _d.id="LTdivUL"; _d.style.display="none"; for(var i=0;i<_a.length;i++){ _d.appendChild(this.createImage(_a[i])); } _c.appendChild(_d); var _d=document.createElement("div"); _d.id="LTdivOL"; _d.style.display="none"; for(var i=0;i<_b.length;i++){ _d.appendChild(this.createImage(_b[i])); } _c.appendChild(_d); _1._ListType.appendChild(_c); _1.hidePanel(_1._ListType); } } HTMLArea.Config.prototype.ListType={"mode":"toolbar"}; ListType._pluginInfo={name:"ListType",version:"2.1",developer:"Laurent Vilday",developer_url:"http://www.mokhet.com/",c_owner:"Xinha community",sponsor:"",sponsor_url:"",license:"Creative Commons Attribution-ShareAlike License"}; ListType.prototype.onSelect=function(_f,_10){ var _11=_f._toolbarObjects[_10.id].element; var _12=_f.getParentElement(); while(!/^ol$/i.test(_12.tagName)){ _12=_12.parentNode; } _12.style.listStyleType=_11.value; }; ListType.prototype.updateValue=function(_13,_14){ var _15=_13._toolbarObjects[_14.id].element; var _16=_13.getParentElement(); while(_16&&!/^ol$/i.test(_16.tagName)){ _16=_16.parentNode; } if(!_16){ _15.selectedIndex=0; return; } var _17=_16.style.listStyleType; if(!_17){ _15.selectedIndex=0; }else{ for(var i=_15.firstChild;i;i=i.nextSibling){ i.selected=(_17.indexOf(i.value)!=-1); } } }; ListType.prototype.onUpdateToolbar=function(){ if(this.editor.config.ListType.mode=="toolbar"){ return; } var _19=this.editor.getParentElement(); while(_19&&!/^[o|u]l$/i.test(_19.tagName)){ _19=_19.parentNode; } if(_19&&/^[o|u]l$/i.test(_19.tagName)){ this.showPanel(_19); }else{ if(this.editor._ListType.style.display!="none"){ this.editor.hidePanel(this.editor._ListType); } } }; ListType.prototype.createImage=function(_1a){ var _1b=this; var _1c=this.editor; var a=document.createElement("a"); a.href="javascript:void(0)"; HTMLArea._addClass(a,_1a); HTMLArea._addEvent(a,"click",function(){ var _1e=_1c._ListType.currentListTypeParent; _1e.style.listStyleType=_1a; _1b.showActive(_1e); return false; }); return a; }; ListType.prototype.showActive=function(_1f){ var _20=document.getElementById((_1f.tagName.toLowerCase()=="ul")?"LTdivUL":"LTdivOL"); document.getElementById("LTdivUL").style.display="none"; document.getElementById("LTdivOL").style.display="none"; _20.style.display="block"; var _21=_1f.style.listStyleType; if(""==_21){ _21=(_1f.tagName.toLowerCase()=="ul")?"disc":"decimal"; } for(var i=0;i<_20.childNodes.length;i++){ var elt=_20.childNodes[i]; if(HTMLArea._hasClass(elt,_21)){ HTMLArea._addClass(elt,"active"); }else{ HTMLArea._removeClass(elt,"active"); } } }; ListType.prototype.showPanel=function(_24){ this.editor._ListType.currentListTypeParent=_24; this.showActive(_24); this.editor.showPanel(this.editor._ListType); }; mailbox/xinha/plugins/ListType/img/0040775000567100000120000000000010567167545017340 5ustar jcameronwheelmailbox/xinha/plugins/ListType/img/square.png0100664000567100000120000000023410565363024021326 0ustar jcameronwheelPNG  IHDR2(3>cIDATx1 U>}nuupP2 rd3KTRHV<ꭟ.Dd>]Edq0s ,X`EUc"UMULiBMZ&IENDB`mailbox/xinha/plugins/ListType/img/none.png0100664000567100000120000000022210565363024020762 0ustar jcameronwheelPNG  IHDR2(3>YIDATx!0 Ѝ z>vx_U5O4uYe+)˖vg>GD?caaaaajU5V]89GIENDB`mailbox/xinha/plugins/ListType/img/decimal.png0100664000567100000120000000034610565363024021430 0ustar jcameronwheelPNG  IHDR2(3>IDATx1 P4tՍŅV|٫љ,|0R1ɬ'-:;N >siش5Z)ֿXMB|]~u 洰[Z[ΠIfV: J,Ո꧇X!* D/xU#|:=ax zdIENDB`mailbox/xinha/plugins/ListType/img/upper-roman.png0100664000567100000120000000031210565363024022270 0ustar jcameronwheelPNG  IHDR2(3>IDATx핱 D8{߈bHPԁ4лELj}|yHGKd~"lV `⛂KD? =Z~棺3P'D3PI$h{xq@˺,&j= VIENDB`mailbox/xinha/plugins/ListType/img/circle.png0100664000567100000120000000026410565363024021272 0ustar jcameronwheelPNG  IHDR2(3>{IDATx10E[3֭^Ё4 o^v4_4e3ԣ@tf.i+ߓyvo7"E=K,P5FըU UjVUbUlW IENDB`mailbox/xinha/plugins/ListType/img/upper-alpha.png0100664000567100000120000000033610565363024022247 0ustar jcameronwheelPNG  IHDR2(3>IDATxX Áߓ}#$12'e+ !!B !TB&9aNmSλJĬ3nλ[!yZy_ܦU8aDlxf6BThQV.[kkd|-u 9NO4PIENDB`mailbox/xinha/plugins/ListType/img/lower-alpha.png0100664000567100000120000000031110565363024022235 0ustar jcameronwheelPNG  IHDR2(3>IDATx1 Etz3-^1H)OA102s- fK.wATX|dV[vH[#ӿ!R#!D3uJuÈWX =Z8ϫړ|0T-yXU/4T#U? Ucc] !IENDB`mailbox/xinha/plugins/ListType/img/disc.png0100664000567100000120000000024610565363024020753 0ustar jcameronwheelPNG  IHDR2(3>mIDATx1 Etf"(He3Krky\ݢ4t+Fsλ՟gѪD UjTX`F`Z ѬIENDB`mailbox/xinha/plugins/ListType/img/lower-roman.png0100664000567100000120000000025710565363024022275 0ustar jcameronwheelPNG  IHDR2(3>vIDATx1 E8|+CtBl_&'y||YUSRșŪ{k?sZw WX>%+&ܬgi} ,{kkPuന { "Decimal numbers": "Desimaltal", "Lower roman numbers": "Små romerska siffror", "Upper roman numbers": "Stora romerska siffror", "Lower latin letters": "Små latinska bokstäver", "Upper latin letters": "Stora latinska bokstäver", "Lower greek letters": "Små grekiska bokstäver", "Choose list style type (for ordered lists)": "Välj listtyp (för numrerade listor)" }; mailbox/xinha/plugins/ListType/lang/pl.js0100664000567100000120000000073510565363024020444 0ustar jcameronwheel// I18N constants // LANG: "pl", ENCODING: UTF-8 // translated: Krzysztof Kotowicz, koto1sa@o2.pl, http://www.eskot.krakow.pl/portfolio { "Decimal numbers": "Cyfry arabskie", "Lower roman numbers": "Małe rzymskie", "Upper roman numbers": "Duże rzymskie", "Lower latin letters": "Małe litery", "Upper latin letters": "Duże litery", "Lower greek letters": "Małe litery greckie", "Choose list style type (for ordered lists)": "Wybierz typ listy numerowanej" }; mailbox/xinha/plugins/ListType/lang/ru.js0100664000567100000120000000127310565363024020455 0ustar jcameronwheel// I18N constants // LANG: "ru", ENCODING: UTF-8 // Author: Andrei Blagorazumov, a@fnr.ru { "Decimal numbers": "Десятичные числа", "Lower roman numbers": "Строчные романские числа", "Upper roman numbers": "Заглавные романские числа", "Lower latin letters": "Строчные латинские символы", "Upper latin letters": "Заглавные латинские символы", "Lower greek letters": "Строчные греческие символы", "Choose list style type (for ordered lists)": "Выберите стиль списков (для упорядоченных списков)" };mailbox/xinha/plugins/ListType/lang/nb.js0100664000567100000120000000077210565363024020431 0ustar jcameronwheel// I18N constants // LANG: "nb", ENCODING: UTF-8 // translated: Kim Steinhaug, http://www.steinhaug.com/, kim@steinhaug.com { "Decimal numbers": "Desimaltall", "Lower roman numbers": "Lower roman numbers", "Upper roman numbers": "Upper roman numbers", "Lower latin letters": "Lower latin letters", "Upper latin letters": "Upper latin letters", "Lower greek letters": "Lower greek letters", "Choose list style type (for ordered lists)": "Velg listetype (for nummererte lister)" }; mailbox/xinha/plugins/ListType/lang/fr.js0100664000567100000120000000073210565363024020435 0ustar jcameronwheel// I18N constants // LANG: "fr", ENCODING: UTF-8 { "Decimal numbers": "Nombres décimaux", "Lower roman numbers": "Nombres romains minuscule", "Upper roman numbers": "Nombres romains majuscule", "Lower latin letters": "Lettres latines minuscule", "Upper latin letters": "Lettres latines majuscule", "Lower greek letters": "Lettres grecques minuscule", "Choose list style type (for ordered lists)": "Choisissez le style de liste (pour les listes ordonnées)" };mailbox/xinha/plugins/ListType/ListType.css0100664000567100000120000000151410565363024021035 0ustar jcameronwheel.ListType { } .ListType a { display:block; float:left; margin:2px 0 0 5px; padding:0; width:50px; height:40px; border:1px solid #9c96a5; } .ListType a:hover { border:1px solid #ffd760; } .ListType a.active { border:1px solid #000084; } .ListType a.circle { background:url(img/circle.png); } .ListType a.disc { background:url(img/disc.png); } .ListType a.square { background:url(img/square.png); } .ListType a.decimal { background:url(img/decimal.png); } .ListType a.lower-alpha { background:url(img/lower-alpha.png); } .ListType a.upper-alpha { background:url(img/upper-alpha.png); } .ListType a.lower-roman { background:url(img/lower-roman.png); } .ListType a.upper-roman { background:url(img/upper-roman.png); } .ListType a.none { background:url(img/none.png); } mailbox/xinha/plugins/Template/0040775000567100000120000000000010567167546016563 5ustar jcameronwheelmailbox/xinha/plugins/Template/popups/0040775000567100000120000000000010567167546020111 5ustar jcameronwheelmailbox/xinha/plugins/Template/popups/template.html0100664000567100000120000000275010565363020022572 0ustar jcameronwheel Insert template
Insert template

mailbox/xinha/plugins/Template/img/0040775000567100000120000000000010567167546017337 5ustar jcameronwheelmailbox/xinha/plugins/Template/img/layout_03.gif0100664000567100000120000000053110565364776021643 0ustar jcameronwheelGIF87ajDzVKG,jDڋ޼jHIʶ -JLl ܂88#il҆R*ꖸ]y%&szo!=wP7xUpxx)Ci`yɓ)ə9(f Ҋ*F4K+fK+j(TZf|̶3X Zr- I -m^9\w^n +L r8 аCLῌ2'VrEFni2ʔV儘2#Ь&:w 4СD,;mailbox/xinha/plugins/Template/img/layout_01.gif0100664000567100000120000000046610565364776021650 0ustar jcameronwheelGIF87ajDVKGz,jDڋ޼jH扦ʦ 3zI 8L*UƦFFJnVKz+pOLNa}b1WGxe48(E`Ihĉ Ez`z Z:j* ;ŚiD[Z›̜|-B]4r]^;}.~o.oBo?O߈ 3a>s9(~ :z;z2ȑ$K P;mailbox/xinha/plugins/Template/img/ed_template.gif0100664000567100000120000000113010565364776022303 0ustar jcameronwheelGIF89ae{Ŀ ˶  Ϻ ½    𽹺ľ    !,;DABC<)32+$ '& % #.! /"0=  KHJ?:9 OM57 ,- (L F 461*XVlqE 8Qs 8A)8-Hi@(SIIe@ ;mailbox/xinha/plugins/Template/img/layout_02.gif0100664000567100000120000000050010565364776021636 0ustar jcameronwheelGIF87ajDzVKG,jDڋ޼jHIʶ 3 |Ģ(2kJ'E.WvS2M<1 ozu랏EX(HfX5Tiu9z#JEgڄz*:躵(;d{D+ۃ+N UP^wUprocessImage(); ?>
isGDEditable() == -1) { ?>
GIF format is not supported, image editing not supported.
0 && is_file($imageInfo['fullpath'])) { ?> alt="" id="theImage" name="theImage"> No Image Available
mailbox/xinha/plugins/ExtendedFileManager/icons/0040775000567100000120000000000010567167542021752 5ustar jcameronwheelmailbox/xinha/plugins/ExtendedFileManager/icons/js.gif0100664000567100000120000000032310565364776023056 0ustar jcameronwheelGIF89a00!,  ( 0BX)q F {Vo'gDǷi%>E@P TJX2`[B/ZrednNelZ,^CVe|n~G!zuvshv7So,a}=a(t::m]S ;mailbox/xinha/plugins/ExtendedFileManager/icons/html.gif0100664000567100000120000000425710565364776023420 0ustar jcameronwheelGIF89a00sqs)1RQ{1)kiJ)Ri1RR1q1Q{)cB9)91IsBaRB))Z))ZY!1sq)!{B!y9{99Ɣ9sca!1ZYc9cRRq9c{c)sޔBY{B))Ik1)cs9J!)q1Jikޥ9iJ9))Jys)BJRasZ1199qq{1Ak)1Zq1AZZk!cs9޵RQ)YJs1i9QkJ1JQ!Is)9c!Q{8c!,/.H j(PÍt"FD/_Q C @ɒRͦ0=I&^bvXMTr,ӧQhdȠh(GG&`Kq*j4 G#briC2Wn]@@VE?o3DZLR,+h+O P[IcDFW0Z0iCW18#MSݰAoG| \ZPљFE7noޱ-$(9!BJBѥ TOv BxqqbPDz䑆&Dw_~Uu "(B%=<v@D.J\  @K,$$ h_=`A4!+,W{$ 0 dIdhQwPA]&PKIi;*'rRPq Π j + fQҨ2xFG rjE&2(~*̉.Q,D&L+Q:*;b@&Aǻp`f+ . ENK>@p$m2Dp k\`K t*'l9< 2 P =`"8߼XAKzDZo/njB#E%93AVTg3tI+F MرQNxE*[b0_|yLL Ѓ0{KdQPTmDh@D!fQS=σ p,EW0 -54I]2<؁q9l :9M g䀢)N, +hDo0t%Ap3)ؠV<ӢJ3э 0)LmM<7[4@ PJT;-65TJժV5iVծz;mailbox/xinha/plugins/ExtendedFileManager/icons/txt_small.gif0100664000567100000120000000016710565364776024457 0ustar jcameronwheelGIF87aCCCYYY,DJܮɠ.paC8di*dJ.M;wnpDIy4 U~t;mailbox/xinha/plugins/ExtendedFileManager/icons/xls.gif0100664000567100000120000000072310565364776023254 0ustar jcameronwheelGIF89a00csss֔!,..0)8] diҁ,qH* qNNՀ!QdلJ6+#QxL.+7Ny͎z&CAp#z|td$awf}%$#l}{k#ct"ïŨֻf݋фȅb1ڷ~Lw.`fB),ēP`0"!EAzREiqE5t!`e eˍ/xq"":~H7I MvT)Π0R (d $F f 4^T4 ny,53n 4=[ K9iE BPIH1֟E+X&1<آ!Bnhv;mailbox/xinha/plugins/ExtendedFileManager/icons/ppt_small.gif0100664000567100000120000000021310565363032024413 0ustar jcameronwheelGIF89a!,Ph ܮЀB+ew`|VEPC:VB\÷,n2ңp_L0\KLs_ D!c)DʟP$(*湶ނ|„ P bCܠ<5{a30( !P5`>A/@Fׅ s^@y #A+ dH `F! 3\"0($Ap  +lQ8! ` HF3p&' '4ۈ $(p&`葏 @@zp"ԂWIM>р> L g8KEH%+@LW’ T)x Sx 90H! pXbD,Qkbذd! de1 N$3K%19PbB4* @ЂMhAЙh@ъZ(1 a HGJҒT Җ0KsЁ;mailbox/xinha/plugins/ExtendedFileManager/icons/xls_small.gif0100664000567100000120000000021310565363032024416 0ustar jcameronwheelGIF89a!,PhJܮАB+%C+Ŕ}I [ p! n@;#d*+$qIeqw«BFvhj;mailbox/xinha/plugins/ExtendedFileManager/icons/php_small.gif0100664000567100000120000000017010565364776024421 0ustar jcameronwheelGIF87a Ժlg,EJܮɠ.paC8di*drK־g+NțGI-(0Ut HDp;mailbox/xinha/plugins/ExtendedFileManager/icons/mov_small.gif0100664000567100000120000000054110565364776024435 0ustar jcameronwheelGIF89a1)!!!ZZZ9991119B֥{BJs甜Δƌ{Ƅք甭Ƶƽ甭έss!k!R)1BR9!!!!ZZkccscksJJJZcRs!,~`(A`8e@9>eVqY0Z 0(UpI42X& !%nZ N yEC3" )'L2(,$BVOmGGYlNOGC&…A;mailbox/xinha/plugins/ExtendedFileManager/icons/def_small.gif0100664000567100000120000000044310565364774024371 0ustar jcameronwheelGIF87a0e#YJQǗȡPys3m_ށmwJ1諒, D`UlpdPH<#cM`%T<XB" ZD2!@6d.@0`, @DWkFa&x kh ll g* koY |  +  3"  ,%0  #!;mailbox/xinha/plugins/ExtendedFileManager/icons/fla.gif0100664000567100000120000000050110565364776023202 0ustar jcameronwheelGIF89a00!,  PI ` &zx Wg0|\z=MZ`Pz倀 팳gЩz-x* 7 6s>!\B\QlT=|~@KL}\3RQ2IltyAu?J0MI@' n'"԰fMж̞1!^##$\Qཁġ3s;mailbox/xinha/plugins/ExtendedFileManager/icons/ppt.gif0100664000567100000120000000063510565364776023253 0ustar jcameronwheelGIF89a00 0ΔsqsޜcϜ!,/.098] diсlpp,ڂRnقP3oJa0RMJ'2ExL.Kn[ߧ|._ "1>^0{$}K~wmey"0:oTUg #w{ $ gW̌ ˊͩc؀p2]]Knb΄@EPZe1 *!Š0J.zXQ$ v>-]zx"%GR31,aRNJ0?j` H*=DPJJjSjʵׯ";mailbox/xinha/plugins/ExtendedFileManager/icons/zip_small.gif0100664000567100000120000000114410565364776024436 0ustar jcameronwheelGIF89a@sssZRR1c)ZJƵﵽ9{sw{s)cέέkZޜB֭ƧॵΜJsZsƥƌ9ީRBV{9k1cexZD)Z!Z9Zw{1k~!,&9=.0,$*L(1D4!F'83 )  >+?"  #   %J  :-E<H5 Cc 6B ` `B #@n@$ p)If&;mailbox/xinha/plugins/ExtendedFileManager/icons/txt.gif0100664000567100000120000000046010565364776023263 0ustar jcameronwheelGIF89a00SSSxxx!,*-0ʲ ͻA]V( "Yi ;gu:SV`CR%LAD*0z8dW6[x./oތZtu^f|}1Krh'vwlpS{ *& ˋͿ~ť‰)Yޱ2HXȰÇ#H;mailbox/xinha/plugins/ExtendedFileManager/icons/fla_small.gif0100664000567100000120000000037210565364776024400 0ustar jcameronwheelGIF87aF5V]w:`È.LJzsc(% 9nr^, dY>c,0B\QBe!`b!ɕƒ@ 7b, )2H6!p@b4xb!@ "  " 9 4#9d &" &""!;mailbox/xinha/plugins/ExtendedFileManager/icons/pdf.gif0100664000567100000120000000115510565364776023217 0ustar jcameronwheelGIF89a00ӳ+-.[NN tx{}45ZZ`*ci!,  @`hl0# F/k; DO@nHa9Ҡ(a` (C!$JPcho" t [9;kDl>c  hNom|s fO<<f*&  x,  пg# ϖ-% "(x'%JC@ 8x0aB8z$ԗ-@ E6 m–2 q)qv@ (H|z9]#Ztd.4X& PH HBO^$qBf @x 7L76Y_, 鰳[(u/NPxka{B}!;mailbox/xinha/plugins/ExtendedFileManager/icons/gif_small.gif0100664000567100000120000000016710565363032024365 0ustar jcameronwheelGIF89a!,*Ak im]d`(ʘzC |sm-bdB'Y4 ;mailbox/xinha/plugins/ExtendedFileManager/icons/gz_small.gif0100664000567100000120000000114410565364776024254 0ustar jcameronwheelGIF89a@sssZRR1c)ZJƵﵽ9{sw{s)cέέkZޜB֭ƧॵΜJsZsƥƌ9ީRBV{9k1cexZD)Z!Z9Zw{1k~!,&9=.0,$*L(1D4!F'83 )  >+?"  #   %J  :-E<H5 Cc 6B ` `B #@n@$ p)If&;mailbox/xinha/plugins/ExtendedFileManager/icons/doc.gif0100664000567100000120000000073710565364774023216 0ustar jcameronwheelGIF89a001)εsssބ!,/.098m diGсlpp,ڂRn(rlg"#0ЬZ@:IbEާvgaX:aD@!χ L`JL"ukv$^K0 #'  a Ű"I1l 5ʧJNМ5V{ us#{ Ƨy غ; 4g_Ld3lVPÓxKzBx ɛ(ɵ#SG=dQu :d(;~(QOʐꁧ֙Z*֩_cp5Jbe^ٮv5].۾~ƶÈ+.ǐ#KL񇈘3k;mailbox/xinha/plugins/ExtendedFileManager/icons/html_small.gif0100664000567100000120000000115610565363032024563 0ustar jcameronwheelGIF89aNcki)qsRQ)νs8c!9޵JB{Ba9)1)k1BJy1Aksq!1sk9i1AZ9cs)9))1!y1qca11sRQZY)YRsqs!N,ˀNK MM M' 2KJJM!JJ*-!M 9LN3(C;$M)J M?#/6L=+>#$ LI0 %"AL5I\KLs_ D!c)DʟP$(*湶ނ|„ P bCܠ<5{a30( !P5`>A/@Fׅ s^@y #A+ dH `F! 3\"0($Ap  +lQ8! ` HF3p&' '4ۈ $(p&`葏 @@zp"ԂWIM>р> L g8KEH%+@LW’ T)x Sx 90H! pXbD,Qkbذd! de1 N$3K%19PbB4* @ЂMhAЙh@ъZ(1 a HGJҒT Җ0KsЁ;mailbox/xinha/plugins/ExtendedFileManager/icons/rar.gif0100664000567100000120000000326610565364776023237 0ustar jcameronwheelGIF89a00R0BZ)8989A{101!0I){!Yq!(Ak8ZIYR09c8J!8 ޜYs8cZ8BJ0JIJAk{Ak! !sqs{y{{yZkikcaZ8As8ZYQZQJAcA{8cR0kARsqq1 )! Ƶ1!{I!RQB(sI9k8R{Q)skI!Y1cA!1Ik8J()J(9BAkI ƭQAcac{Q9 Bki!I{c8R8B!qR011010Z8!Ia91{iRy)k8J9QR891i)ky޾{1)IkcARIQ{8k΄c޵sa)I)qY!IaIsi){a9Yy1sI)!,*"\@A ,qaA/H@Ł?Zdj 0(1 )J(8}xRU0``Ϟ@ȁe-XsE DcG lj&J)pC<# D$CLL6I PD&$XFT^2@  9 ̐IEd^+ ti+B)Bj衆B F:pㅅm vwaBo<@vwV@j&h +afp,7a@P: 3(Q@JvlDŶZD@A  \»kb)>PD ,0l(57,[ d: eXP ,i5!G+Gfea~J@@Dmb (vt@a&Lt5 45ЄhMQG5AHPܥH`v %xOKM@4ZrE%H > P@p^zgQn曋G@ Q;@\H{l/o{ ]0/lwLݫd=觯 ;mailbox/xinha/plugins/ExtendedFileManager/icons/pdf_small.gif0100664000567100000120000000034610565363032024370 0ustar jcameronwheelGIF89a玌AB箭IJ綵ik瞜QZYZ熄y{羽YZAJQRacqs89018B綽()!,c`'ndYfn\붙4<Ϟ^h5nTv-U.[r B (.V"#h $ygqqE*(!;mailbox/xinha/plugins/ExtendedFileManager/icons/mov.gif0100664000567100000120000000442610565364776023253 0ustar jcameronwheelGIF89a00@!!!111999)))ssscccƽkkkBBBZZZJJJRRR{{{ք便Ƴްosqϗ{c^Θֵ{a׷cvvyʽƉdtהhk܆R19犩ƽhȢքbVNJs)ZhRk掠swJROkfcZZZ##!N99R!cBB!RBB9B3RB1))!igԌ)))-ڌZ_pBRJsRk֩Js9֥J{僚ܽRcRZRcRcJJRJ1cJJJRBZֽƽνbJRBRBkTTBR)9111B-1RJB9J9sRsJk9{9!B99!)!!!RZR!!11!!J))BZ)JZcZJkJ焔Bk猔RRRRJBJJBZ]9Z91s1{ޔBZBsBJm!,)0/-<& )p# Bh Nփx ;mailbox/xinha/plugins/ExtendedFileManager/icons/folder.gif0100664000567100000120000000224710565364776023724 0ustar jcameronwheelGIF89aPPu̙~{f͝rѫ9o٫)ٳ+ٱ:qqq~fffZv弪ٳAݷҍ|||y$晙ܼ]pҥxlĒ֬1T9٪hϝݞs'ÔוՂm4Ч+KҡfcYs1ܶGt lfRߨ޵RlpgJӣѲS}]HảT0xӭ;ؿrŲyI߹b9ֹd]߿S#D!,&%)uk(2N7r27+2%-)A-|;500 \v)bnVd!Ns,,oNE%[)3575U#V!!@  WwN2K Vp)Gp03đ!u XLȅjBfM.8r%~LUʂѣFqV8`]JhpW4IBe5%".pꀕݻx!…[|AxaDQ ǐmǬKQ"Mhh ɡm&B'M۴!8C%68Gp0@ȏ(0سkA…,J8Qd+Bx'OO8d(`U,_6 4` ,0 av!? |PZ %Xc(`8c-6#3BDiFBp G@ATViV*i貅X)&O`QVlpā\fx|y[FE&袋!\I@$8I@D7 Mda 1`\*!R8LA1`L 06끣D JAJzFzj3 1 D((\k:䀮 l;AG,ۭ;mailbox/xinha/plugins/ExtendedFileManager/icons/doc_small.gif0100664000567100000120000000021410565363032024356 0ustar jcameronwheelGIF89a!,QX ܮB+C;V%PCy^AgG0Gmx1xS%Y0Y\ͮjAtZQ ;mailbox/xinha/plugins/ExtendedFileManager/icons/php.gif0100664000567100000120000000064310565364776023236 0ustar jcameronwheelGIF89a00 £zzWWǣԸ֣ff!,,-08] di}lx0`* 8Ы-\hWUAB GKFaX xL.E7-p$sRު $rxwy} h   ##{zy ech[ 4"{x|4~Ƌo ifyoٵXY|pnkk7N9()b;0B @JHA 10PGLYbH0@@rJ$c3GGldWgL9uSePs -aͦKF)˦jg`ÊKl;mailbox/xinha/plugins/ExtendedFileManager/resizer.php0100664000567100000120000000422210565363034023020 0ustar jcameronwheel&height=[&to=/relative/path/to/newimage.jpg] * relative to the base_dir given in config.inc.php * This is pretty much just thumbs.php with some mods, I'm too lazy to do it properly * @author $Author: ray $ * @version $Id: resizer.php 677 2007-01-19 22:24:36Z ray $ * @package ImageManager */ require_once('config.inc.php'); require_once('Classes/ExtendedFileManager.php'); require_once('../ImageManager/Classes/Thumbnail.php'); function js_fail($message) { echo 'alert(\'ha ' . $message . '\'); false'; exit; } function js_success($resultFile) { echo '\'' . $resultFile . '\''; exit; } //check for img parameter in the url if(!isset($_GET['img']) || !isset($_GET['width']) || !isset($_GET['height'])) { js_fail('Missing parameter.'); } $manager = new ExtendedFileManager($IMConfig); //get the image and the full path to the image $image = $_GET['img']; $fullpath = Files::makeFile($manager->getImagesDir(),$image); //not a file, so exit if(!is_file($fullpath)) { js_fail("File {$fullpath} does not exist."); } $imgInfo = @getImageSize($fullpath); //Not an image, bail out. if(!is_array($imgInfo)) { js_fail("File {$fullpath} is not an image."); } if(!isset($_GET['to'])) { $resized = $manager->getResizedName($fullpath,$_GET['width'],$_GET['height']); $_GET['to'] = $manager->getResizedName($image,$_GET['width'],$_GET['height'], FALSE); } else { $resized = Files::makeFile($manager->getImagesDir(),$_GET['to']); } // Check to see if it already exists if(is_file($resized)) { // And is newer if(filemtime($resized) >= filemtime($fullpath)) { js_success($_GET['to']); } } // resize (thumbnailer will do this for us just fine) $thumbnailer = new Thumbnail($_GET['width'],$_GET['height']); $thumbnailer->proportional = FALSE; $thumbnailer->createThumbnail($fullpath, $resized); // did it work? if(is_file($resized)) { js_success($_GET['to']); } else { js_fail("Resize Failed."); } ?>mailbox/xinha/plugins/ExtendedFileManager/config.inc.php0100664000567100000120000002616310565363034023362 0ustar jcameronwheel * Package: ExtendedFileManager * http://www.afrusoft.com/htmlarea */ /* Configuration file usage: * There are two insertModes for this filemanager. * One is "image" and another is "link". * So you can assign config values as below * * if($insertMode=="image") $IMConfig['property']=somevalueforimagemode; * else if($insertMode=="link") $IMConfig['property']=somevalueforlinkmode; * * (or) you can directly as $IMConfig['property']=somevalueforbothmodes; * * Best of Luck :) Afru. */ /* * Getting the mode for further differentiation */ if(empty($insertMode)) $insertMode="image"; /** * Default backend URL * * URL to use for unified backend. * * The ?__plugin=ExtendedFileManager& is required. */ $IMConfig['backend_url'] = "backend.php?__plugin=ExtendedFileManager&"; /** * Backend Installation Directory * * location of backend install; these are used to link to css and js * assets because we may have the front end installed in a different * directory than the backend. (i.e. nothing assumes that the frontend * and the backend are in the same directory) */ $IMConfig['base_dir'] = getcwd(); $IMConfig['base_url'] = ''; /* File system path to the directory you want to manage the images for multiple user systems, set it dynamically. NOTE: This directory requires write access by PHP. That is, PHP must be able to create files in this directory. Able to create directories is nice, but not necessary. */ $IMConfig['images_dir'] = 'demo_images'; //You may set a different directory for the link mode; if you don't, the above setting will be used for both modes //$IMConfig['files_dir'] = 'demo_files'; /* The URL to the above path, the web browser needs to be able to see it. It can be protected via .htaccess on apache or directory permissions on IIS, check you web server documentation for futher information on directory protection If this directory needs to be publicly accessiable, remove scripting capabilities for this directory (i.e. disable PHP, Perl, CGI). We only want to store assets in this directory and its subdirectories. */ $IMConfig['images_url'] = str_replace( array("backend.php","manager.php"), "", $_SERVER["PHP_SELF"] ) . $IMConfig['images_dir']; //$IMConfig['files_url'] = 'url/to/files_dir'; /* Possible values: true, false TRUE - If PHP on the web server is in safe mode, set this to true. SAFE MODE restrictions: directory creation will not be possible, only the GD library can be used, other libraries require Safe Mode to be off. FALSE - Set to false if PHP on the web server is not in safe mode. */ $IMConfig['safe_mode'] = false; /* This specifies whether any image library is available to resize and edit images.TRUE - Thumbnails will be resized by image libraries and if there is no library, default thumbnail will be shown. FALSE - Thumbnails will be resized by browser ignoring image libraries. */ $IMConfig['img_library'] = true; /* View type when the File manager is in insert image mode. Valid values are "thumbview" and "listview". */ if ($insertMode == 'image') $IMConfig['view_type'] = "thumbview"; else if($insertMode == "link") $IMConfig['view_type'] = "listview"; $IMConfig['insert_mode'] = $insertMode; /* Possible values: 'GD', 'IM', or 'NetPBM' The image manipulation library to use, either GD or ImageMagick or NetPBM. If you have safe mode ON, or don't have the binaries to other packages, your choice is 'GD' only. Other packages require Safe Mode to be off. */ define('IMAGE_CLASS', 'GD'); /* After defining which library to use, if it is NetPBM or IM, you need to specify where the binary for the selected library are. And of course your server and PHP must be able to execute them (i.e. safe mode is OFF). GD does not require the following definition. */ define('IMAGE_TRANSFORM_LIB_PATH', 'C:/"Program Files"/ImageMagick-5.5.7-Q16/'); /* The prefix for thumbnail files, something like .thumb will do. The thumbnails files will be named as "prefix_imagefile.ext", that is, prefix + orginal filename. */ $IMConfig['thumbnail_prefix'] = 't_'; /* Thumbnail can also be stored in a directory, this directory will be created by PHP. If PHP is in safe mode, this parameter is ignored, you can not create directories. If you do not want to store thumbnails in a directory, set this to false or empty string ''; */ $IMConfig['thumbnail_dir'] = 't'; /** * Resized prefix * * The prefix for resized files, something like .resized will do. The * resized files will be named _x_ * resized files are created when one changes the dimensions of an image * in the image manager selection dialog - the image is scaled when the * user clicks the ok button. */ $IMConfig['resized_prefix'] = '.resized'; // ------------------------------------------------------------------------- /** * Resized Directory * * Resized images may also be stored in a directory, except in safe mode. */ $IMConfig['resized_dir'] = ''; /* Possible values: true, false TRUE - Allow the user to create new sub-directories in the $IMConfig['images_dir']/$IMConfig['files_dir']. FALSE - No directory creation. NOTE: If $IMConfig['safe_mode'] = true, this parameter is ignored, you can not create directories */ $IMConfig['allow_new_dir'] = true; /* Possible values: true, false TRUE - Allow the user to edit image by image editor. FALSE - No edit icon will be displayed. NOTE: If $IMConfig['img_library'] = false, this parameter is ignored, you can not edit images. */ $IMConfig['allow_edit_image'] = true; /* Possible values: true, false TRUE - Allow the user to rename files and folders. FALSE - No rename icon will be displayed. */ $IMConfig['allow_rename'] = true; /* Possible values: true, false TRUE - Allow the user to perform cut/copy/paste actions. FALSE - No cut/copy/paste icons will be displayed. */ $IMConfig['allow_cut_copy_paste'] = true; /* Possible values: true, false TRUE - Display color pickers for image background / border colors FALSE - Don't display color pickers */ $IMConfig['use_color_pickers'] = true; /* Possible values: true, false TRUE - Allow the user to set alt (alternative text) attribute. FALSE - No input field for alt attribute will be displayed. NOTE: The alt attribute is _obligatory_ for images, so will be inserted if 'images_enable_alt' is set to false */ $IMConfig['images_enable_alt'] = true; /* Possible values: true, false TRUE - Allow the user to set title attribute (usually displayed when mouse is over element). FALSE - No input field for title attribute will be displayed. */ $IMConfig['images_enable_title'] = false; /* Possible values: true, false TRUE - Allow the user to set align attribute. FALSE - No selection box for align attribute will be displayed. */ $IMConfig['images_enable_align'] = true; /* Possible values: true, false TRUE - Allow the user to set margin, padding, and border styles for the image FALSE - No styling input fields will be displayed. */ $IMConfig['images_enable_styling'] = true; /* Possible values: true, false TRUE - Allow the user to set target attribute for link (the window in which the link will be opened). FALSE - No selection box for target attribute will be displayed. */ $IMConfig['link_enable_target'] = true; /* Possible values: true, false TRUE - Allow the user to upload files. FALSE - No uploading allowed. */ $IMConfig['allow_upload'] = true; /* Maximum upload file size Possible values: number, "max" number - maximum size in Kilobytes. "max" - the maximum allowed by the server (the value is retrieved from the server configuration). */ $IMConfig['max_filesize_kb_image'] = 2000000; $IMConfig['max_filesize_kb_link'] = 5000; /* Maximum upload folder size in Megabytes. Use 0 to disable limit */ $IMConfig['max_foldersize_mb'] = 0; /* Allowed extensions that can be shown and allowed to upload. Available icons are for "doc,fla,gif,gz,html,jpg,js,mov,pdf,php,png,ppt,rar,txt,xls,zip" -Changed by AFRU. */ $IMConfig['allowed_image_extensions'] = array("jpg","gif","png","bmp"); $IMConfig['allowed_link_extensions'] = array("jpg","gif","js","php","pdf","zip","txt","psd","png","html","swf","xml","xls","doc"); /* The default thumbnail and list view icon in case thumbnails are not created and the files are of unknown. */ $IMConfig['default_thumbnail'] = 'icons/def.gif'; $IMConfig['default_listicon'] = 'icons/def_small.gif'; /* Only files with these extensions will be shown as thumbnails. All other files will be shown as icons. */ $IMConfig['thumbnail_extensions'] = array("jpg", "gif", "png", "bmp"); /* Thumbnail dimensions. */ $IMConfig['thumbnail_width'] = 84; $IMConfig['thumbnail_height'] = 84; /* Image Editor temporary filename prefix. */ $IMConfig['tmp_prefix'] = '.editor_'; // Standard PHP Backend Data Passing // if data was passed using xinha_pass_to_php_backend() we merge the items // provided into the Config require_once(realpath(dirname(__FILE__) . '/../../contrib/php-xinha.php')); if($passed_data = xinha_read_passed_data()) { $IMConfig = array_merge($IMConfig, $passed_data); $IMConfig['backend_url'] .= xinha_passed_data_querystring() . '&'; } // Deprecated config passing, don't use this way any more! elseif(isset($_REQUEST['backend_config'])) { if(get_magic_quotes_gpc()) { $_REQUEST['backend_config'] = stripslashes($_REQUEST['backend_config']); } // Config specified from front end, check that it's valid session_start(); if (!array_key_exists($_REQUEST['backend_config_secret_key_location'], $_SESSION)) die("Backend security error."); $secret = $_SESSION[$_REQUEST['backend_config_secret_key_location']]; if($_REQUEST['backend_config_hash'] !== sha1($_REQUEST['backend_config'] . $secret)) { die("Backend security error."); } $to_merge = unserialize($_REQUEST['backend_config']); if(!is_array($to_merge)) { die("Backend config syntax error."); } $IMConfig = array_merge($IMConfig, $to_merge); // changed config settings keys in relation to ImageManager $IMConfig['backend_url'] .= "backend_config=" . rawurlencode($_REQUEST['backend_config']) . '&'; $IMConfig['backend_url'] .= "backend_config_hash=" . rawurlencode($_REQUEST['backend_config_hash']) . '&'; $IMConfig['backend_url'] .= "backend_config_secret_key_location=" . rawurlencode($_REQUEST['backend_config_secret_key_location']) . '&'; } if ($IMConfig['max_filesize_kb_link'] == "max") { $IMConfig['max_filesize_kb_link'] = upload_max_filesize_kb(); } if ($IMConfig['max_filesize_kb_image'] == "max") { $IMConfig['max_filesize_kb_image'] = upload_max_filesize_kb(); } // END ?> mailbox/xinha/plugins/ExtendedFileManager/Readme.txt0100664000567100000120000000772210565363034022572 0ustar jcameronwheelPackage : Extended File Manager EFM 1.1.1 Version 1.1 created from 1.0 beta by Krzysztof Kotowicz Overview : ---------- Extended File Manager is an advanced plugin for Xinha It works in two different modes. 1). Insert Image Mode and 2). Insert File Link Mode. In Insert Image Mode, it replaces the basic insert image functionality of Xinha with its advanced image manager. If Insert File Link Mode is enabled, a new icon will be added to the toolbar with advanced file linking capability. Complete Features : ------------------- * Easy config.inc file that enables individual options for both modes. * Thumnail View * List View * Nice icons for both views * Create Folders * Vertical Scrolling * Allowed extensions to view or upload. * File Uploads * Max File upload limit * Max Upload Folder size (Including all subfolders and files. A must see option.) * Dynamic display of available free space in the Upload Folder * Dynamic Thumbnails using Image libraries or browser resize * Image Editor (Actually done by Wei...a great addon) * Can be used to insert images along with properties. * Can be used to insert link to non-image files like pdf or zip. * You can specify image margin / padding / background and border colors * You may edit Alt/title tags for inserted images (Most of the features can be enabled/disabled as needed) Installation : -------------- Installing involves extracting the archive to 'plugins' subdirectory of Xinha and selecting the plugin in appropriate xinha_plugins list. Plugin may be configured via xinha_config.ExtendedFileManager object. Look into ImageManager plugin documentation as this plugin uses almost identical settings. All available options can be found in the file config.inc.php. // only snippets of code from initializing file shown below xinha_plugins = xinha_plugins ? xinha_plugins : [ 'ContextMenu', 'SuperClean', 'CharacterMap', 'GetHtml', 'ExtendedFileManager', /*'ImageManager',*/ // replace image manager with EFM 'Linker' ]; ... //If you don't want to add a button for linking files and use only the advanced ImageManager xinha_config.ExtendedFileManager.use_linker = false; // pass the configuration to plugin if (xinha_config.ExtendedFileManager) { with (xinha_config.ExtendedFileManager) { '; $IMConfig['images_url'] = ''; $IMConfig['files_dir'] = ''; $IMConfig['files_url'] = ''; $IMConfig['thumbnail_prefix'] = 't_'; $IMConfig['thumbnail_dir'] = 't'; $IMConfig['resized_prefix'] = 'resized_'; $IMConfig['resized_dir'] = ''; $IMConfig['tmp_prefix'] = '_tmp'; $IMConfig['max_filesize_kb_image'] = 2000; // maximum size for uploading files in 'insert image' mode (2000 kB here) $IMConfig['max_filesize_kb_link'] = 5000; // maximum size for uploading files in 'insert link' mode (5000 kB here) // Maximum upload folder size in Megabytes. // Use 0 to disable limit $IMConfig['max_foldersize_mb'] = 0; $IMConfig['allowed_image_extensions'] = array("jpg","gif","png"); $IMConfig['allowed_link_extensions'] = array("jpg","gif","pdf","ip","txt", "psd","png","html","swf", "xml","xls"); require_once '/path/to/xinha/contrib/php-xinha.php'; xinha_pass_to_php_backend($IMConfig); ?> } } ===== afrusoft@gmail.com - author of EFM 1.0 beta koto@webworkers.pl - EFM 1.1 (most of the code taken from Xinha codebase)mailbox/xinha/plugins/ExtendedFileManager/demo_images/0040775000567100000120000000000010567167542023110 5ustar jcameronwheelmailbox/xinha/plugins/ExtendedFileManager/demo_images/linux/0040775000567100000120000000000010567167542024247 5ustar jcameronwheelmailbox/xinha/plugins/ExtendedFileManager/demo_images/linux/linux.gif0100664000567100000120000003606610565364776026113 0ustar jcameronwheelGIF89aGh ؜ߥ  ϔ $$$y̶~ NJ,,, ז 444m << XS6lExN׬ jϔ)VVTeC*r  J_}Sw 8&(C jKФ “ 1#0tSjٳ ~ f ,\C l f/~/L6w U;Ú|[ A21^xr \0G/9& ?G9* x*5ҨQ߬BTy3dɣ ޴\ ,~b ’'XaNtN"ȢL\~Ҍn$*"q?r.^JGhT0l$ƶxd ^>,֮XlRF,wL~D\k1r<~dhⴤ<^VDm-^N4zd:~4J: ! ,$*@H*\ȰÇHHŋ3jȑď CI$H ;\ɲK&cʌA J$:LhrˣH*-8ӑL@Bg@Ct:PEI.KlçhӪujۥ&kʅ+ `6jz'L#IDh@)B`5KmP(w# 2@M ;D.4{wDDfHGxc!B8(O`thP]bԾ{@gСlBS}ig`y"A }7A N`  PXp7b2BB74QwqADw>ց<&[`1P Za Tn\/^`:H4х(` G3!A J.ɤ `*0_hci,ܐ3P`¥$@A4p$p.Il!!ǭܪBz'H ġ'AfZd;tP%@Ol[^F*JPMӚvFd@[+niflQ4EeSX@@3 L(!XT@,sD1*#Gl(rÂu;C 9#]~<=`f!TUB1'>m%BE#`Ar0B Beޔ< "@@r!1\TR"\|p3 ^$:l|6!$~ԧD! i(`2bz@dƒm`zz p)dCtVqJQX+e \d&sZX +2ǡ&7`HصvԡڷP, 2&x&a`&' 06 '73fmr]$%_W2Tk0 p } LiPFEs#B7G;/59A1-g@j"60J2bCulǢ^R(i2(aP 0Vr;yג-=r|S22[zPu0D("2$DY:jVj@>H90_(9uKZe4vk6.1T! \[\t؏[1 C8Z?Z@ty Q7cHHHrasA3B. )RD9(CUф2@Y%xp2C=@زB(HuM< CrB|1a.4#0HJ:msDcDC/MqA>)P/9KRR9媯T&5Eb$[֟ `"2d@ )ȳB1i,h`W^%akul'^] KURR'VHb?AS @8ϓ>#AP T<AMTO0wKo7`;@) ?huƱ)\r!5@A=`-P9E0>tP/Q3<|!p1J:|rePdPyPa j~EPw2Q v L!An9Rإp05 !'Mvi%d 6Spϴ P p16!'$,b"2`!xh`%AL" zP= !RgS!2%Zه_r&W&aP&01ѢbbRBJ$rۅХ|*Wr\%Z&`r&7\ jIJ!ui~n]J%5}7׌ZMOapiCOIbo`H?-m7`W#/@a2&Rc`J"0eF)4ATک?C \be@I0M%2%xX }g2q5pO6Ӟ.f,7e-m1ܙH m}˂d M0pj,R,RH,n,0-#Ʀ|v-:"ߑ?2.0g 2iMol/(dZ2#c2V> x%@c"nA99`B*2 @ zȇg<82 Gn&A)p܈hl~-|8<>`<P )!6 @)H@cy~|168 3苾Gsy'g1>r\U1t \G.\6pc7~0{78un0^h_)ˆqÑJsD&6)T8b_^N,󾃘0DP`|};Z7>ƣ3>8@V=#<4@TwwЋƞ\ewi=Htqq=D.\vvTNF+<3ex'xcY$\;@a7 $Y%pl#"m1i> A(DC2h5nJEI)Ud%J\ d >R\hgE@0ϣ)Є$br$aՍ/nr*BIAC<6,ڳġE8uĄJV)nb%a3"Ԍ zD`{/_ 0uZgUZ1ƘH@0bر]oT] Oі+slbgn[Dl0Я#5w~x`-(Pcc;ENn~kDB !o®lP;/=3 Ej)"'DX` pılĐSkB:(T% (ȱ6C$Hhk K/P0mD0o$b:8 #B ,!T'O" +++ӂ1ؐOj:`ͦ| TG>PI9Dְ.2@`$XbD5  pR$PAU! UX),Tz`žRDQ,h3(Q*+@IW̘An`N% ()38\'5! 耆0SoU4IfG xU@4A-5 KCda@%5xR?FېJ_A,+uEr`o9C<@ f0 .0p <4놽=((A*j6=,AL4zmgyWV Nw^Uy3tIy;:< tˇ1$Hh&-3a]fnE$?a[=M[$LˑtR*`2DN{UEf> mSX x`SA74-Mnv0" PAjԳ.U|Ctak,&0Z;. F1lU>]EeXa¢3xЀ,  ͉,uU89^PVB0Q5xȅYsA 4@;#Bn܅BEa ׀: 䱡>fCC4 R('@Ҝ*ɷDMPag8!elǀO^C oze579V (ij" tلx [0'`V!-@ӓykbgޱ(Ш=Qg*,L ] =A GH: 0CPl(V~%ZQ TҤʔw&*[j)5,CMP@ FBTɹ\2=LPM`"B gz`bPCIe3S^FI :bH˟qo}<(^V ++@ bH 0d j]0@*4DYA<( ^5b#u1k uzR.``uMWƢ rJӺ@lU>EZ$X)\&(y1nvyc G@Pc]8Ie^D {HAG\@^J;l/ZcTyq]%%a + +'(N-y[Z J]-`e^҂nQ 08Z0'9&RB kŀCx y+G&0 "@\ k- y G(r $1':1pf)wp0^/DZQ-P0d.: CXu 04 }#wѢ5JM2%F,;qN𳧙;Zڊ&us=hlZ۹6cDL[)5`! IH5|1T wh!}o|`w=n%#'x_p\ 7ƒpG|O$~qs)KZ3o\HJ9\ hBD(tþ|;wI"I넠TAz Pxtq$HdP9љ@HuZi խ. Nכ.}Icyu kNnr] I;9՝^1/pC+?I|Uy^@}W֏>{ɧ;w(2, г1B/A^1%ȕ?xͤ< /@= ~!QAOxB I ()() K{?p@89)">@A> @ȁɀ( >yx# ) ̀ (( ߋ:((́̀ P(Ix"܀ ` (S9Aت,9(8@ x x? H (<\9(Ė #؁B Î؈؁ p!KA׈DIX͠+\C) HE>); b4`?,E؀s@Xk ȁg< ?ѨH ,xyYD*'ZNV/?8";ЄRJN\NttHȂ#r̅1'_a+pu-@0@4x:4tJ`?Xυ;inBJ %U$&mEP:aP,ZY5`?EHC(S@S;&z$UR]OS4-RMT:YXHY8H80PBqB8܌HbH62b:d:M1&cP!ݪdkdNdYO&0E5;eTIXϼ XeuB1eۑ˭^֊HC(ԋQYcPd`&jf i! g12~'L"Lc2]gBDzٝE rV!5InjƊpy)gpzR^&D (R>06& .i Х8U.}i> yrgYh" cr睎J~pdvP jF!EF&=& L&i~e[[> L0âize*J.kR C1Cj  /@1[l*hþ袸Ql `qeǎD5,bIc& RTl~%^Lbc8=ٖ/D fes rl8탾NATUH#=l 癑*kPiU)ofB2>8^E gۓ ЎLk}@IhSCE+ P6)h o'*m .T׋q. ?rM($('$`UqU=To$Rf ?d8 HbtY?kⵃ1wo&p A',>{ kIx; jISɌ(_DP> Kg_-LJ펪P԰>ێ9,'Pj;[;:wfS{s ` ?v fabsn XKqAiS Tg$Ib&` sO{h y›ɐP Ke~i~ϝXwNt%yp-Fp(vK(!h?$={gρOt  GQhg=0?T?<@ IϤmqקx\߈0ڿ8 ~Hm!~xz}p|H}@,H@ D%N,aEt#Hx\$ʐVl%̘2gL)r… BN( Ɗ@-8a\4Z(Ġ uJC6C(`+؏4ǒ-+3, HCXVܨuB5H5Ԭa Hf3B kK5mz݆5L秀 \"6Ӯ Dy KRO[iҭN ٶM Y7  hS oqh:승)zuT|4AȧZU!^Y!aLU%\~)!L]G _Mrgz B8\pX8]e"-@l eCW @ً1еP"]Z%y:vB:NpvEQGtaMPP4@E0f0B%UXȗPln<@ąI &`C p*`@R><0sW7Q6zy:ХaH =0Al9Q( ÝZjf(y;JhJȢB뢫=H" %}рĢ$9DA&P@X."PD{=RҺ>G" ,0Al2ᇾ' jBd z@A (`0sԁq1ܸ"=UȦ1/Xm:X-o{k")P3pp;?/jdjd?Ms\q}GHZA %zQd I)xX0 #6c-A:]ܩMrJܫ!FXqU%bȨ" @OY1&CMN hv sܩ3 5'a 4BiUxr=j@ C<+xjr G< q4QA!&(8x*L $L|C l@ e(qli)R Ro@-Hn< >\4@zt3MP! , |&G1<0zƬt9c%Lg*oAq K䑇x`?JB1\@5A%.p'Ct=3$˨0y2uN$ @p1k[I|t P d`|%yL?N P3%B\p p&ĩPCA;TaldXԙTA<\'']tw1'(|?gMdҥ(PH*ܡ-U `^ TPpQf=C|`8Q3t`j7$ƅ&C A#>M P 8@:O*f-k0f8Tiݎ88rk9$<ul0tEaKQI` $NPm [`FW=YWNL7  `_`OnBb-[K-=|H;Y,@cp&gQ2;vC^ ־, tU.-8n ЖӉp "j#I ~9K 9(ӿn. c{&Rs\Ie1kH,h̒+2>rU(o5g_f=UGqRe'wLr6!W5hưɧ? PVjm hHoapg9 aa]lhKJnrӗ~fk3ي,X8\TSR'ܗBÒ4 [͜Ki5Fs[KTIpܷ+j@|| VQY@%gs>MPE%!=0Tc@9!d&} p`' -a[FS5͸tA]A h0P6dm '0vw:Vқr3쇫6^ <z8 (Uf:ҎɥΒg͊k+gݠx XC8[lVYjrd!bp&^6+w`;}xPJON~ ߐXb4Q{W>i65%ڳ.{߇3Ѕ7LgoMDXlX0A[ASk]X!D-֟) xA/\!G <wܥyO$YTTT}(@  @fZ݋8Hd $ k= SIa&@`L*# @($AHT<4TvXA  lAqwԲ"% `LuM%YZn. Q ` G\GL̠4hQd<X"C5V@@MǙ(Q|(E]Wvi!ɛR\#5V*z8HACř`pTa%Yui4AMQ% u8#ciAaA ?dX0|E3&}@lGaY6Y۠\\%"]55J&;2(A J^%Jt_K& LE&%%9Vi,hp5YQD}V6)֎Qd(Q%M5!x $,(;adz@K @MpX^KR M^5 H $k fj5mDr5^%8\4SiHbJ@d6HA (A0xEZF(cQbiJ 8fƦedէD~e%7cwWs' ( @A Ds1*# 5y~Z'I%TR5f}Z Yl'{&|Z&\Jtme_&ߝx-"'r ,rJ>JJX& kz ehR4wVc5$pn'$z'{ikWEPuU]%&iZ&1S (0.g&F MXDgg^g7^hSgd+)T0p${ Qe]*ցI/uz) *A Ǣ2Bjl)v9:I֫gB lk**h{'` fijOh.c2"G 6<)kgO}jeYk"'cVA&,Kj+*{{i&+"(, ½b>*&lZVʦf&T AL%֬Kk4*pAjƖ*r,z:gV )*-ެ4Tn+Ѿr,Utm0mj&>j,He!ĽdѦm 0:ˢA؊-jBB ,E ,xzێ..;mailbox/xinha/plugins/ExtendedFileManager/demo_images/.htaccess0100664000567100000120000000013410565363032024667 0ustar jcameronwheelphp_flag engine off AddType text/html .html .htm .shtml .php .php3 .phtml .phtm .pl .py .cgimailbox/xinha/plugins/ExtendedFileManager/demo_images/bikerpeep.jpg0100664000567100000120000006604410565363032025555 0ustar jcameronwheelJFIF``Photoshop 3.08BIM``8BIM x8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM@@8BIM8BIM (pTPn@ JFIFHHAdobed            Tp"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?|iq׀PH[1Ę!h[:o8{MAҍyB$R }/hڂC[wC{be ?>ktBu`?/_ۉ@nnB\ ӐG*DFDXQ#IHKT |K{IMw0'V9$ڢU`h{PoV 8L g8;$1_6{׍ʃËd\w{bfA: Ol6<5֍\u:9}BVޅN/Uߢރ]sA $U\j:+\CqlKo!Ⱥ?Sc?=7w2sZزYmml-j9UkpK]Y*"W5G~f{-^ָuϩmg֨rcmp'n$zs1 dqQޭ",_f I9*LX o'hk`}';_o+smx`dcϴ}G:Ouv?socXvU[I"#+[! }]1 H{|x?0+x%Yhyeb9q!ܨpL,|< [x Zgg']g4źn0gKM !}%G۲ m'kNg*>Zcʥ\g|xqu \!E%9qN|ӑu'W-)Mm-nX/D\/Ŵmդ~swUKC.cArogҫkIWt3ttKqyTO*wdo~funͪܖ_k=';oͮʱs+_VV\NlvKD0kS>zߤ\SΡ{v㸳ЇꩊgAr/ضS$|][a xuvM8?{CѰ][}nDbeGOia0Vyh3ȫv7cu𞚛zk]V8P޶F״zw˽e?G$9Ж ?|D"d%!z{1zf5#&pߥ2c,O>9>ꍩs d͗}&9ޗGk̘n8B эel{6{?~ln7 &lw2ezc1:Fﮟ73cVd9ᦇ!A+sQ6swf1Od1?',ŮkG ML~I c'GƯ/_cc޻[ǭٸm}mE]Q-O"2܉&,(}_? kb\cIuVc߸cÛU,[%^_}ҹl>_8>jaf\gE?,Xw :WO/;hqf9{L܏_Z^>Skqhr ^ 55co/萑ؠQv[F-U<[v2zoud_~E+v[ mZ}u1c=?Oԫ,s32ٟV0k"};ɻ;87l=̓n,}=W8l\~I@Eu[m B{l[cXz}Nݍ'%x,']=Vu[v9c}G@4};!2sA}&tmYWO鏥/ߜo1XoEݾ3*_c/nXXWuPCkgdSrS3=vsgXT3!O_̐<^ίi9lۯ-#cl&72GnN~CAs ooc}`MinUnwf5GnMQ3zq?8 8"bc.]5c*71.;l&td{x/?nNw֬cӎ5ʹQ@h>u qXO}R2KDTD6كΜUhWuV% kMypź^_ѻ}=]o,s/6X~MJJvQ8K`9L'cIzkCZ6cFV6ƣ}?y]3kǚ`1S8;So;.GF9l юj`x&4bi=$GWW.mݕ;k#]qNH:`#ཉ,SuN\G)iK -o8ChuyP:$kgm߆檕}P tNn^}fU;?R(醿vU瓤g[?4{>H~^ O߉<;c/ I5/:"AV*}ގ?oj 8BIM XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmAdobed@q     u!"1A2# QBa$3Rqb%C&4r 5'S6DTsEF7Gc(UVWdte)8fu*9:HIJXYZghijvwxyzm!1"AQ2aqB#Rb3 $Cr4%ScD&5T6Ed' sFtUeuV7)(GWf8vgwHXhx9IYiy*:JZjz ?؈a)U@@PP,n1:XYֺn0T̒YFYVk??zuY$2!.WQJb~}Dǯ}6MF]ZkYٮ|jyu}9RL$(j $}#Y6( I_|LӴY2ItG邮ttQBm<v :LӐ[5R-asc}ֺd4yޑÒ\9%(\du_F=.$-iQU/-YFPC׽16:ښhZffE,4 DDrk=@&H_?@oI'bcAIhhꢺP"ʑU@ ,n>_UE [5yt\9jU+qQ<{AxLQZq@ptnZK@[+48ɯFo; N8zY; 9vr]~242=)n*LCADZHU$@hd͹\Z ȸ 0*\ՌSSkCP+Q Z)Y,4,2)  #qb*,T skqQVud19gQPs wEs1=t )GXF+Y˦X{'NNgDWB!-%X egsk1:uͬKn8~5T#&FYơ^- KiAkx>5I2I&z IQ*VYq04FIEZJuG:lX<pڞ9]" Z _pzRWSx^:N2$G45b1-\{xo%UL (A0 &H?MՑ+(CnÅ:ߟt4Ok`Pe%t7G`').Ho@, z>Qt<©CSGU&rHX;rmUK*xbbSGw;s6y wnc@v騥sҴ6?I2}vQƟħ_Jcu`;K?S!oenm `h+A@1ׯ>c!$kihicgk:EW nI\XGhNEWNdeTzgB)+{~>Hj>@bmXqKP7*VZzHb$C <q4U=;ImR=H/+ RjzEQ8OX**6[^ڮʷ Hq94kO DR҉m 30j# pӧU]28Pi@($9V]]tQE"ફd*訡#3-<:E H#@[p],1ЂzW#s%E)Oz+C6GhV7~3fvmܤ%̧y.饪mnj9 @Y2%i֯v|+Y!3zMn,B8*djx(+ktcJtoAo$S) 0 Rd(ԅ[_@asM^t4706K1H.TboqڒXti׫WGT.״dSb4PFLpM+FURM h*7E@"[[=4-;SG3M82˜#ibJ[y,A$W@#HU\ 'R_s0,Į)v,jao=h+TW?ZUa?_P \cv<i'(e8tT/@eRaQJ Z7T@ :#5}-s7sq,ߥBj'9@3[K6-!]Õݵ؝xZݯKOG$kb('AQu_<S^i\8}d>Db*wۀNO?D}+:ϰ6 Fwe`zvHW 5*g嫗_ÒG>. SEI,v.oYej"s 57R@EZ'4g[cm*h7G=U S/W9V:P'Z f?r)B s1~ayD+N jE+s:1]IR$:3:>"67e[{k૶v|]!KYI ,n;'apHki;ւMq55 ¼I.K(94PS(%( mŅi<Ϡcjxt+vDf3$i8t?rwnܶN|ug6ĕk_uMMN7n9$/PuvFu%ysk RgTd yu(@VКG0ZNURjxS65Ie%-M68 Ԉ)ڨ h¤a.|@"ȋV6!kP>!SE$~mJؠxLXeRVx4҈α3S2FJ3k k\sãTfY&HFe$CQ֙z8SrEzxj)i&ds*HZz6:=SqHfZ2ۉwCf&d yܘ֊ɰYY(57ϧ(A54Pҹi$U`ۛW2%h>W>S]ٻ沦g ۋ?Qz@Ԕ42L}=4vTiUQ t(5:kOO1#`O$kV7w܉I{ ltgvI vn Sc11IM$Xע/ A.jBMeo1tXҭ:2Ej)G#7n-q{3amZ [b[ UWVN %*OYYQ4p!kdX!L抵5F51:!V,QOΙQY;*>[G,div][QU*+;y&*8UW_ GǣGW\ח^ICA6$--Qb'qfgsbVťb5Vf:O)N+O=o> 3=q1 ;NZE-/zj]7G}ükJM.BVT!9F 2*5vɲ0儖{ ]42EX09G|^X>;vII7뚓絶&­SCnm[Fx H:0 OF/{Gj.6Тm`gЗ#CNyjSW,QFĤ/smsor4$Z.D`&z7x"V> MG4W4@C>BBS:%UZy:JWi*24QEـ iRT!Y$lR k2:%V`j'VPDmWM+TQ=V"Xi1Pc!iM]U9iI(V~9Y_}I“{>XVfqq00 P y31Ռ?!fA᎖V<&ZA^}z.Uӫ_FiOʔ^*AXhT+Z'%q,]-U.> PYIg*+bF^ᘅIf*cʸ'֋u[͟kvTwXuܝs=[j+;^]ܕwǽUDPckbA5B4:PIu /\tnT9TϧADjO;s8~sm,v&c۽-OG"u)+SOF!p*bobHz.E*(rČzyB[PÚxe겵)Y$xGzv/,k,֑(Ҷ~l=dk_V˧ĉzիn(]pnXw]^ n،f ''_oݔ*6Wn$/YN.^[F. JA cfRA% ^ hd :r>F:헷dV?m}UԵbkwj^<3GuEQQ2EN\ܙks~&i@Wj5k[4- Z<1_:q ]ܻdu;RoG#r1ْ Ϻs]aڛr.ڴ9+r8U+jN nB t3ˤ(UGjj4Kesn4 YE$zZR|z+/ܟvQf6s{۰z?gbsr}hWS4{ޢ7Uj7%Fee0*Xq ϟntP,P޽~"DRH5wmJʰkF: 9{n;vCB{1>Oq3ݝ״p}[9a|Hڵ=b<խݻ;);o!Y,-ȫPˎ0EF;>MwWҾM$d"$,vV f7 VbzuLiZF$TfZ ٿwogdwluU'Nfۥv?\N˘E>; ώEǾ?-GG0Tq?alǕ9Zdd9o aIUW EIܝ%͛\]q%)Hyuf?w]#3RCMwDV=gIȴr2Cs>"~KPsY !!hH8,>b}y1.yZz3C!M]xR4XItsQ2X 1Db}-vMeXj"EԪp(zs{~ջja-WzÁ*j8BsӶkUvdi&{4J'39]]@9"AUV*d`T>}Eo%(8tZ{[2_7yL-&͎$J섓2a4d (D\Ejn ?U]4e{ظ]@&Zre.Ԫ8 |B?ƾuVȭk{Rgz.6*1uQ6ۆik4YEuT!M'?Qeլ[O>'#y-Ht:me.m.?Q>ntAb|Wa夦G$Pra[TjГʲY.YSMd/]X(}lUa7N+cew\EWE%0Rj#}*a\+9ot_3tTAkj"x6=DutIvjeC7x'. l$P_#O1>!S:{)MUM͛d鱻ko$Y %\5EV̑:Խ•%VV]6ಝP,"]D灓\u]V#v]V{";}_I27yo2bC>h/.$n@;n mE 1%E2ޥ^Q_p|Cj50SʦJ'`P˥t`w.yAydfp9,,ib*}»͝w-٣ UF硴P+mFՂ!h*@MHvdjivkveUxӗO hoÚ dQ*!6ohf]Ďҡ UP0j4} F]&¦h=:O!ոY,n7 NCn.oQH54*O+Jn]H $SUZmU1 dKhtSˇ ӣ6`&rUj\T=7C$i(d`wfQIS5 Ա* g|qw%hd--t58R۶X"S@*B$ji4+UD4fji Ӯ`>ª@'Ѕ d[FUT%fr +WcRO:iJؾ [ۍ K ;[QfUzf41ƥS.U4r<,KN)'Y$$iK!eiBI˒PrpP%O45z"ۋl܋Y 5B(3u8g3f3XI -}ެEqna`SY_ZE1ЫnLW& ECwcA:~ܝaGN6ncslR,6cUE&#J(5 O#*\ܝ˼Ϩ-%!~9d䨩:ZhݸQ_.uunWh TR 䑪t.WIx&bŤ[p 6obٞ2f@DE@eRl䛟M/~(O'S 20hÇ*\ar,yM&IIКA2 XP2Z$$oAM U!=ݵdum}֝3vQK8b&)[ֲScqOUC$Xʯ,GQ_,z*D-Uϧ??_g;@l*9YwF[&y#쭵X|]d jSK#9(6H)~|z9s(CJ~yUݾfaLnMn\>\ C-c2[+wT'#u|e=-YEQQn(T$7+f%_`BT2F j1\+q!/~-.>>߽GΊv궗cluEoÍUSA!Y!cAC-.$B OPpj1iK|M"z<Cjmn.rm,.-N3uoX*q6hwˡXF b)22ԑW$XjW @A/8t'鯨Ǘ*!C|آhR*7㫳jn 5\9,uPF,T4ҴD"zH}z߹>gksD#d{1SA䯞dwsSybg1 bʕfvҜj|CgǶGW it|ٽ5НEw~{n-{|Tga޽Η05-]#Ju18$dBq48|C<*&xsqMӟliUo}>c)c6oWmw>ufw%Kq3RUѽT=3 3{mGquc\C'&@3QI*e*ih%X& o~i}k[[8cW%!Qk1$rfјҚjkJ׭nף{/iluL7nUqᎱiMSZxi㯬YfӬ.5\_.^9Vիn52hw,I9[廜[}?%N+^H9<].H{Lٖa:㌢އHbUAj$!tVjW˭?o,;򪗤>$Ak֓y֟4<ƣ%*K7vFbӦs~b_ eqKSU%ZJ@sspGRrI?Y HΜ։D m:R=()Pk:Nvafu3y7la;l4{ӵAWc.UE U<<?/n8 ^׎Iރ'.ثh<K Ae̻nm̑ݼ֍,mHXYu=5:~h6'!*QI$PSm_MTvtV>oSdv~Jf44"R9KKW#1Ȝ aӘe7 x7+{A)cruQkdkRԐ[ٷ5mRX@|p4BqλW+d%OWB+ӡx9Z%d0 [r@⍂|3@h28`xt*݊+tK)~S瞲Vl~ 8|ulð%cTZ:x<C}MBy+% U`-[WFe:@LRYZ$ns,T )MUaz lS<̓4%^\LrRc 8KIu!{{r;<pUN,⏩ BN.QJJu*5 xfJ=+q׭*Tfj֙eH3Z))mSO$h|9`t[ެA(^QiS@s=Q>.׻Lde uIHȢ\oeq^n9)rhV0C,A#K:9M|ÏZt(zpAKJf"2AfM… I$GKBRo3_%!M~|TRA6+o Y#Jt]HbbBmĠy$ AWE@ SJ&E]}7/[b;+]`a0.ۛufsf3`ō6΃kB)I. I$4Fwr[ X#ʪ҅s:;T~f)eV8T=ɧv>X 7fl_ [Ulde|rop2|f:$U2GI^%łη)S,DjZ@jUrP=1b RF=T5{h|i/voŕt;hݱw>r|KCV819O70I[N %EdpT;mz;(  Bt;Jqr=>eP4*GV9.OFNlݣqIKGaI K?34k4]vKm3OäAEEKI^Ҟ}1HeRFv!4[$pAdq>}.J??K nKSWVSVd) ᚎzFS$RX1/4]kEI|3i_R>=U5G@vn4؝G>{R6y*:ITU&#XnhZd +j}rHi}̻mW1'3Lqj#9M&SIIE~^]vC4L6")`RL;*Ž6,7ZyS׏NfS,] W>cC1ݽהK)& MGHtZʲB~mb~P$9RY(oN_#D(&ʵۛvll{=[4kof+9K:YB"*TZAQu"fynm6]kn0\ēF ֞"N8C=  })ՀLN&̧hّ;9H =0MScy`]"o[-hɻ^OeLa*}UQ0r?T P7o-w`|Nz42+E6ME 6J#|dwV;A#!Y\m]~CM__URii+Ij aX_%+ܽ{yMJKr R#+#S 検 L_LxiYyy[GZKߖi7 .hD}ݺqYJ:(pjIUjcҥ39d{y֛աܤte~Wzkx8b *=*1Qpȩo5uusA%GY%c+tA+EE'>4y?FC~ljz8Fl~jBG%^NoUEDayu-ēR@jˣ}JyyWta6GE(멫64s**{myiB|_.{Rj ?gJ̽dX˭*1>Uuʈvْl2(7r/88h>OǺztqKEQSJ70 ja@ $1ƾgkCuzp펫efD;ٰ=[22Ӏ;k <y5j)ɉIt, Eշ3-RkYQ0 IqrF8ӈS(2iU5P# %+\ݾ $Kk1<-Sg:W=VE+Adž+D̟Cť^(("pXj-t$jz$m Ċi.t/4_F i3BIT %~坬N4ꪠw|y>Z %f1-9Eٍ3p|Ÿ~~TPF ds_ }z] UޜvhBK6%s)Ӈ82 ?]+* Ē1:)whα#} ³+׉$m:C_O隻 A;bO]zS+Ʈ ɾCR4^V#_t}U˦@LQW}dcLV8̡Ԅ`J?e#:ό`@H1JP|yQW?̏-`fGuIQW2pdwֵ 3<9(0l"GSٞfu_Y3cQV)ǸI-o"Q̥e)t! ް2\ZIV~ek_.=maTW[av22}w+ՀzjήJ.=!>9_~٨kACȐzu`j跑k~:~Ua궆!F/+Lriw:58`O-mIп(t70#ZVKvk3GBGWյU`[[kk)1;zOZby2YZeK%*"|` H҆-Yll44Td*|x|!)w1+@ӨK4JKON=/t_w/ǸͦDpv>Cxt5z_;oZ$$U2y,QHIu"4'ܓ7NpY"aTZ\:ƞLL>d_*'#8fQFKVмۂeHꮥN4xQt*#BXC=L]1+se>驩~cz׏Ŋ\PyW%▢%Hf:h|4V*P*cm$ moiӐqLpOZ:w1 `䏝@^d/$+"+XmR!J$l# Q<~GӀBH5=1ÇV%*uG(PdptȞ:ya&B[,M|KG^DZ9jA#W NZD5o .2f$7 W3- ʧ5p<֣Rk:MUDFKm*J{NlT4"_25#4KXqcI0 ElxӍO&u>A>]?zA{8p꽗M5or'#)?EO7.@:A=O8>7Y)[!unQ:LYIOm'[)2??m.Ob{]zq=`1u?^gGJ}Bn:'3%jiJ-[KZE_G^w:_ӑ?gHlLcW^{5/i?MOI? O]5?_zu?mailbox/xinha/plugins/ExtendedFileManager/demo_images/wesnoth078.jpg0100664000567100000120000002041410565363032025524 0ustar jcameronwheelJFIFHHC    $.' ",#(7),01444'9=82<.342C  2!!222222222222222222222222222222222222222222222222229 !1A"Qaq2#$BR3%b1!1AQ"2aBqC#3 ?Vu"av|XDIZ6h %2I*3m*#SRfUoMDy"'))1U"Iyd/ إcV4=MST,2M+ 9"V K&hٷ( jWߟ UI.y"|6ַ?\?bxRΌyB2:AA:O`>11+. ;7Ȍ]rAZ(Zq+Luғ$z܅xOƌ|]0 }_ā)F +p$q-E:f=}~tMf-Í݌RQ5QM.?ƒe ׸5?JIՌtM=<9c>bPiEO'튄fV84}5~"ɪQIjk]L" il2 vQ(4 ] |3sh3q V+`DVՈ\0t9XH+'K-iU6dZA\Ց6JA Mnr쉣ϵd.-3+qm1?9n)?r>%*( Txy$ :}FǫFs2&PizM we^K0.@77a߆f=y| ţތȽYM)vDSB20<)ʒm#qھI3M'sc((i_z"MX IE[ upMd䆾2G_sf@&xtMJ*ٴuT"$l#?/01!*JyqR-ip!.YUo O*;(&\ɨeGIqTb09ũ6X\PUYX<uyX9TZbf|eH2Ty@>Pm䵭QWYM!Bl f0.̩7&Փȓsiz_rOSp65;+w,-5;[h2QE@F=S_a~ek@^A[;*5| ѾK-rՔ8HIc cZjLȰϒ":؀FLSj(ń!Y %=y91p`IN,=FTys0n-X}4(x3EY#8򳌲<3#j1@ԟ[*V\vs٣#Y `*0龃3T<7ƨtr:=;饘iuA=4S$^-4y$+`-ץNL.yX>AO$~IÐəN5Ab#&xf?=۾'Y!%djt4rWqg)"^&)m* o1E887%=JMƇp6=4*6ƾc Ca`G懊I)IDgM:h1㊱\:2tuyjHEُ4،q_zjM\"57&ĴlxϞ]D)>ao.rFߟ#<@qɢ}W퐢4֐}7ӥB6-,Ճ,`҆nH;EG rb@9' qLئ˦1<ow cC-E$#]J@G t'G#xQM/$Yv+Ge˪KQe`P *)2M-D#|{cn\Q)hԍj2 2z||d"rGJ`nfͿY Eng>r*r٫5Ұ:A W$(Ytd1Q'pI=8kl9%@8Gsrm7@kqi/y]$u#d9cHTq_CVD*Btq -l󎍵y!O@rH Owf=0enÁC,]# JTCu&yNT~I75`!2 Vʞ1,zY*a.Mtf+9,qmm+ifąUCDpe.;2JS;;p?gr:(}JF)5vSHH*K|'#j=K!G%"bAܒj{8)EŃK<ڴpgptcS#W/5b_mN%焺jA&,d$X-R6o6h%FPCBnSWSIF[libQ*LxxO!Kfl2/@(ȍ?3K?yP L5!#JP*31I8ǡY<+'BQ]f!C~qg}dY䍯9ƃ-0{"}-Ѿ X╣* BtÆ)ϤB=5;]CmfX˵[ؿi}J|8&6X&Byۛ/emR6&p{鋊W<6;I$ { MxiÅ>@VYtR[$UW(v$3M2"u#h[8ťn~b qL5]Ǒv=8pRRum,;HhS7"UfȢsI8%s|/c,GVeQОb4o,F*kOsٯOaj2Jz |XC%hSyO,zr׹G'ʒ'H[7phJkpzwC+w9bpu"52b8шI[[a7٣9:l&htJ3O*h \$iDuQu1r3C =k鄥^ƴf.dQ.V Ok}Eu_,st9"vU f`TC/Ӯ[7xe.%͒э%Afm j\nu@}a#FG(r 25G_[PdCҢ,. fj't8K5(E> w0L>RɴyjJO%qo>g=FRDI=~%?sܖeE׌~!Rk֍!% sY49AV& Lဎ;`@@⢟4-p)ڽu 7 ҁKrII<ٳhJ] T|óm "_Eק}V_IH4X|j_\(/E_eӨ午0-7&#iv/}JԯAʭP }[VkyKi&,WC#M%FHQGdkc`VWl&~vBy nMy{Ɨb?B1%ʷ5}**.Y[Жµ أcqzԴzIrs"R_GUp8=;|_e{\ EY _!QN$Њdp8{d p?&'6X;-AYH<5(c;N"uOM6% ˵b`7&43r~c;϶6AM*L^\FU.U-u?& sL(bѨp$8r7f* h:ԬaY GՅ7!Ihkm IY##K=;Wkj[x~M4EgJr|N?0B+ #nqTpoA*ksCzs9!rWr.@UƊ8UQa mt5&Y(ol_˗aG5fUFa7tQT'%]+I=Z|Ի ;V)P㏮#th(M13|^d~;o: 67*9tyr4Rv&B6M;BO12 QJGxj./e\jv=OO3Ƌ&(b[\7ǾMQJZǠcՆ (;!10'P#טqV V2tzM6w)&e; Mλu3HsOiRk@&$K8 "6 vf'נeIaluۮRv9^jŃ{"UD/~= AhnZ7!7nrA4He@GŔܱLK*PAAKE8g%lā6]48B> w_pf"F]GP>ՙ?{_;AN=m΃6.-a֤j䨣\/?LҒk_iS|Uep?#RQyi/ im*=&H7FnϵH|Str` 9` }V~K- =$H'畚n*OoѦ(.jnS< =d2)b\8fbz|t Mۑ m( ϶Gvtb qDIh8a{~xUFRj>i$#m/\M{*rU/<8 Y ,̥D@'p=w(CYU\h$@+9 ^BQaG<_囼O'&BXZ;'XFNN%L42A;z@fuEv_4bZ tkQvB<6O2 ޔY'rh`TRWk|e )U HYmX~KQj#ߵ9pf|F«oBqfaBTXYkRQRM\&tV+T'#WI`źCeI=ɸ5%t@NWLك o'G9h}l v+$8OnCz795NKZd f/J#,{9cw/+_OzbT7%oٝbj@bgTDNk8Pw'&O9 Gy2)J~:=o0^ʊCTx/B5 "\?+F[(mYw c!y$M'm arI}Uێ|Ì]Nd ^(ʅeX 7btZ6QזZ*}c8;Dk3UQٺRϒ*dvDڈA,:mj@J/hwr W;FWWϒVj(!YXԂ(SI#V}$7ƕ2ԭj:I=ajƔQL72y:ݛaMFg,]8'8tD}82+CD9&\4TSnK(=EWM%dp٧gFl7CA(mailbox/xinha/plugins/ExtendedFileManager/img/0040775000567100000120000000000010567167542021413 5ustar jcameronwheelmailbox/xinha/plugins/ExtendedFileManager/img/2x2_w.gif0100664000567100000120000000043610565363032023031 0ustar jcameronwheelGIF89add!,dd tzsݺ?GUjgL˵gn> )2*pJЪt%ZǬ ,+Ij ϸ碸]Bo|H HXXxxȷi7Ww 9IY6VvJz֊5V+v;|U\u4ܕLռ=ovVOOſKP 6DC;mailbox/xinha/plugins/ExtendedFileManager/img/hand.gif0100664000567100000120000000014710565364776023021 0ustar jcameronwheelGIF89aff!,8Ȧ^[\XB!5;智ۦgoxejb<y(;mailbox/xinha/plugins/ExtendedFileManager/img/btnFolderUp.gif0100664000567100000120000000026610565363032024315 0ustar jcameronwheelGIF89aL 3 [ܹ*,ڤCiOJXxfS!,cI@5#nHcRÑ3`8Hg~r-`*`aKT pIp,[ BX좞&k܅{9 ;mailbox/xinha/plugins/ExtendedFileManager/img/default.gif0100664000567100000120000000034210565364774023526 0ustar jcameronwheelGIF89aaafff!,'V \υ2yb2rHFBjS 4C6k3LbJʬ P},ԞqM ׇ~aemڱnM}6(8HXhx)9Y7U17YTyVIJu''fw5xjfqVe(3z 7zhwKP;mailbox/xinha/plugins/ExtendedFileManager/img/rotate.gif0100664000567100000120000000012510565364776023401 0ustar jcameronwheelGIF89aff!,&h m3R}b4Vad렫8043-;mailbox/xinha/plugins/ExtendedFileManager/img/edit_trash.gif0100664000567100000120000000020410565364774024225 0ustar jcameronwheelGIF89a3fOOO3ff!, 1H $r` 8Q,+w m6o7F Si6;mailbox/xinha/plugins/ExtendedFileManager/img/edit_paste.gif0100664000567100000120000000041110565364774024220 0ustar jcameronwheelGIF89a͙l @0 opbLYm0`P@nJBSd؏p ̙!, v\x0H2(p, F| m/AMDa.z ,I6BNˏxTy8 o{s<{f _   ff)" !;mailbox/xinha/plugins/ExtendedFileManager/img/edit_cut.gif0100664000567100000120000000033110565364774023700 0ustar jcameronwheelGIF89aWxhsP/P̭G\o5JdEk牦Je(>mpМh@pp{{{333!, V @9=@vH%6MR  "`C ppB,BG@@ X(Pa(>PP J!;mailbox/xinha/plugins/ExtendedFileManager/img/noimages.gif0100664000567100000120000000140410565364776023706 0ustar jcameronwheelGIF87a0,00I8ͻ`(dihlp,tmx|pH,Ȥrl:ШtJZ`r7گs-ů[yӟ^m|r}v1dh yq1nzbsu0o9sz v jtYdvl  [o Z^ű[Ɯ { { z2_sq4ڝI.n,6")B5L@_NR ۂxƢ8˳Q$m f*VA8cJcetZUxCQ'F\*6R$N=YR|zs^`0-!œ%c WO%xټu^H5t^B{g،8a9@%B.V)Y2>`!zf #ŐGv>Vo3qσj۩G͗P/;ڦU HxzWxVUQSw_6G[T B>AtYwH#.dbyVgP}#="Q'tZ[-*HZeVq X@__`C#JB2Hdl hT. ͉@tB@wU_"&*(裐F*餔Vj饘f馜v駠*ꨤR;mailbox/xinha/plugins/ExtendedFileManager/img/edit_active.gif0100664000567100000120000000022710565364774024364 0ustar jcameronwheelGIF89aUUUBBB333wwwݲ!, D(E*'B1 u_5@$:YUT `lCp̱lËe1h@pPNB+;mailbox/xinha/plugins/ExtendedFileManager/img/t_white.gif0100664000567100000120000000012510565364776023546 0ustar jcameronwheelGIF89a!,&@NhRHh~ /sco9;mailbox/xinha/plugins/ExtendedFileManager/img/save.gif0100664000567100000120000000013710565364776023044 0ustar jcameronwheelGIF89aff!,0XBI+L[%FWݧrbpb K ĢX;mailbox/xinha/plugins/ExtendedFileManager/img/unlocked_empty.gif0100664000567100000120000000011110565363032025100 0ustar jcameronwheelGIF89a !, ڋ޼H扦;mailbox/xinha/plugins/ExtendedFileManager/img/dots.gif0100664000567100000120000000024710565364774023057 0ustar jcameronwheelGIF89a f̵挵! NETSCAPE2.0!, 0I8M`BrN!,  ( 3 3! ,  H " 3;mailbox/xinha/plugins/ExtendedFileManager/img/islocked2.gif0100664000567100000120000000050110565363032023740 0ustar jcameronwheelGIF89a̽ɻõzzzuuufff[[[SSSIIIBBA::9333(((!!,^bD!P$cd@1|A0SQ,0S8l  ggyg s A;mailbox/xinha/plugins/ExtendedFileManager/img/2x2.gif0100664000567100000120000000043610565363032022503 0ustar jcameronwheelGIF89add!,dd tzsݺ?GUjgL˵gn> )2*pJЪt%ZǬ ,+Ij ϸ碸]Bo|H HXXxxȷi7Ww 9IY6VvJz֊5V+v;|U\u4ܕLռ=ovVOOſKP 6DC;mailbox/xinha/plugins/ExtendedFileManager/img/ed_linkfile.gif0100664000567100000120000000044010565364774024346 0ustar jcameronwheelGIF89a2,31%qHxfSqZںSQQV)4uQesJ%Vx_?Ts5!, P(Z,QzD1xS1ՈD$c9`z`+l"+pi7p"8mJq}= ya Zk acdr Zq {d5 !;mailbox/xinha/plugins/ExtendedFileManager/img/div.gif0100664000567100000120000000005210565364774022662 0ustar jcameronwheelGIF87a, L;mailbox/xinha/plugins/ExtendedFileManager/img/edit_rename.gif0100664000567100000120000000050110565364774024353 0ustar jcameronwheelGIF89a"Knd!, ^@@QȤTtZ l֒ Da0$L !8 { ~/P"   ILMDFA;mailbox/xinha/plugins/ExtendedFileManager/img/spacer.gif0100664000567100000120000000005310565363032023340 0ustar jcameronwheelGIF89a!,D;mailbox/xinha/plugins/ExtendedFileManager/img/btn_cancel.gif0100664000567100000120000000124010565364774024170 0ustar jcameronwheelGIF89aԲtt88''::SS22DD$$++""ZZuull\\::''ԮVV!!33JJ22ggCC^^茌ZZIIތѫ33^^ffݪ11PPKK""@@aa̳**Сuu66[[rr::33}}||EEjjú\\]]YYԽBBNN!,(@Y= (+N /3 M;g[_81E Z0  \&%WTDHd b*'Of-9iVUR&J)" !` ?, F&5KrAa% j4b'Fs%Ŕ`a0l cd#c /BD3e:@cS'!$DEOP F pAr0BC28V H5 `@ ;mailbox/xinha/plugins/ExtendedFileManager/img/measure.gif0100664000567100000120000000013510565364776023545 0ustar jcameronwheelGIF89aff!,.ɸT<[n !aFX:\ ;/$z8\F;mailbox/xinha/plugins/ExtendedFileManager/img/locked.gif0100664000567100000120000000061610565364776023351 0ustar jcameronwheelGIF89a (((333õfffuuuIII::9zzzBBAɻŭSSS̽ᩧ[[[!, pHG2l:§ʜ>V'6rn5 v&GbFh_ X8RQ ! L"  wh      ZL   Ʒ  deca^_\YVKCSA;mailbox/xinha/plugins/ExtendedFileManager/img/unlocked.gif0100664000567100000120000000033210565364776023707 0ustar jcameronwheelGIF89a Ԣ zzz666û[i%/悈צU\!,PIpC;Ođ@Ez`8" 2[" i`:`0#i` le}%-c}5(im7G{ }Z oB >2>x TJ ;mailbox/xinha/plugins/ExtendedFileManager/img/edit_pencil.gif0100664000567100000120000000020410565364774024356 0ustar jcameronwheelGIF89afffff3fUUU̙ff݆̙3!, 19à&` e d(uK² dJO @)8 t0;mailbox/xinha/plugins/ExtendedFileManager/img/btn_ok.gif0100664000567100000120000000050610565364774023360 0ustar jcameronwheelGIF89aنY~6#Ϲy{u|3m擠R)-ۅiY镠&TgJ3mSɛjO鏣6OiR<`xt FYۧu!, c@pH$"2$˯pժ]s^ٷ҉ġ?xӍʱjzsi!,!M-)8FP'5( 4>,?R0#KL:ZQ*@A<=HE %" +WY C16V GU9. X3 T@" );T@@ P G B*xa";mailbox/xinha/plugins/ExtendedFileManager/img/ed_linkfile1.gif0100664000567100000120000000037510565364774024436 0ustar jcameronwheelGIF89axfSJ/'HyڠnT_ycN^6DlCWѤ~$5!,z 6F L 8M$0厁 A#0(N $.h/DbAeb oB@b,  orSb [~annH!;mailbox/xinha/plugins/ExtendedFileManager/img/btnFolderUp1.gif0100664000567100000120000000112410565364774024406 0ustar jcameronwheelGIF89aݯ5n;߷L{ǤfeF}ٔڅzG;:pf3(Iޢ {MݴQ#d$؊9E*רr޹b;)0#ܮ,;+!ܾbѓ8џ xP\L,p8CL&GfRݻU1,3fҔ߭[\ώzu֭1[ا$y)dP\.5I$ګ#XCüW3u/-!w<OK<%|z؝q]f_\ޱ;lD!,  W mgp&!(Z?G ]AN6BXYDnv/RHcT\eui,O<#tb4P jd )Vr 5E ak1S*I%q;_L2UJKf$l X0a00A! D i1g&٢# .f;mailbox/xinha/plugins/ExtendedFileManager/img/folder.gif0100664000567100000120000000224710565364776023365 0ustar jcameronwheelGIF89aPPu̙~{f͝rѫ9o٫)ٳ+ٱ:qqq~fffZv弪ٳAݷҍ|||y$晙ܼ]pҥxlĒ֬1T9٪hϝݞs'ÔוՂm4Ч+KҡfcYs1ܶGt lfRߨ޵RlpgJӣѲS}]HảT0xӭ;ؿrŲyI߹b9ֹd]߿S#D!,&%)uk(2N7r27+2%-)A-|;500 \v)bnVd!Ns,,oNE%[)3575U#V!!@  WwN2K Vp)Gp03đ!u XLȅjBfM.8r%~LUʂѣFqV8`]JhpW4IBe5%".pꀕݻx!…[|AxaDQ ǐmǬKQ"Mhh ɡm&B'M۴!8C%68Gp0@ȏ(0سkA…,J8Qd+Bx'OO8d(`U,_6 4` ,0 av!? |PZ %Xc(`8c-6#3BDiFBp G@ATViV*i貅X)&O`QVlpā\fx|y[FE&袋!\I@$8I@D7 Mda 1`\*!R8LA1`L 06끣D JAJzFzj3 1 D((\k:䀮 l;AG,ۭ;mailbox/xinha/plugins/ExtendedFileManager/img/1x1_transparent.gif0100664000567100000120000000005310565363032025115 0ustar jcameronwheelGIF89a!,D;mailbox/xinha/plugins/ExtendedFileManager/img/unlocked2.gif0100664000567100000120000000027710565364776024001 0ustar jcameronwheelGIF89afffzzz(((III333uuuSSS::9BBA!,< @1Ā1@DB,BL Ht@ CQ(4" b`2 Bd:!;mailbox/xinha/plugins/ExtendedFileManager/img/t_black.gif0100664000567100000120000000012510565364776023502 0ustar jcameronwheelGIF89a!,&@Nh܊/tvx.ˌtkW;mailbox/xinha/plugins/ExtendedFileManager/img/edit_copy.gif0100664000567100000120000000036510565364774024066 0ustar jcameronwheelGIF89a!KjP4b0H`ϒٕݧkн֐Hsau*_Յ!, r`1hFA ٩v U@@$axa!Hl,p&M@A P%PIŠ. 'p!t -v::3h!;mailbox/xinha/plugins/ExtendedFileManager/img/scale.gif0100664000567100000120000000015210565364776023172 0ustar jcameronwheelGIF89aff!,;g!:2~BtWfؙ"t"0rmkY?̟;Ph 锇;mailbox/xinha/plugins/ExtendedFileManager/manager.php0100664000567100000120000003170410565363034022754 0ustar jcameronwheelgetDirs(); // calculate number of table rows to span for the preview cell $num_rows = 4; // filename & upload & disk info message & width+margin if ($insertMode=='image') { if ($IMConfig['images_enable_styling'] === false) { $hidden_fields[] = 'f_margin'; $hidden_fields[] = 'f_padding'; $hidden_fields[] = 'f_border'; $hidden_fields[] = 'f_backgroundColor'; $hidden_fields[] = 'f_borderColor'; $num_rows +=2; } else if ($IMConfig['use_color_pickers'] === false) { $hidden_fields[] = 'f_backgroundColor'; $hidden_fields[] = 'f_borderColor'; $num_rows +=2; } if ($IMConfig['images_enable_align'] === false) { $hidden_fields[] = 'f_align'; } if ($IMConfig['images_enable_alt']) { $num_rows++; } else { $hidden_fields[] = 'f_alt'; } if ($IMConfig['images_enable_title']) { $num_rows++; } else { $hidden_fields[] = 'f_title'; } } if ($insertMode == 'link') { if ($IMConfig['link_enable_target'] === false) { $hidden_fields[] = 'f_target'; } $num_rows +=2; } ?> Insert <?php echo ($insertMode == 'image' ? 'Image' : 'File Link') ?>
Insert
File Manager
Directory Up New Folder
getImagesDir()) > ($IMConfig['max_foldersize_mb']*1048576)) { ?>


Maximum folder size limit reached. Upload disabled.
( max.)
"; ?>
Constrained Proportions
Color
Border Color

mailbox/xinha/plugins/ExtendedFileManager/assets/0040775000567100000120000000000010567167542022141 5ustar jcameronwheelmailbox/xinha/plugins/ExtendedFileManager/assets/wz_jsgraphics.js0100664000567100000120000002553110565363442025352 0ustar jcameronwheelvar jg_ihtm,jg_ie,jg_dom,jg_n4=(document.layers&&typeof document.classes!="undefined"); function chkDHTM(x,i){ x=document.body||null; jg_ie=(x&&typeof x.insertAdjacentHTML!="undefined"); jg_dom=(x&&!jg_ie&&typeof x.appendChild!="undefined"&&typeof document.createRange!="undefined"&&typeof (i=document.createRange()).setStartBefore!="undefined"&&typeof i.createContextualFragment!="undefined"); jg_ihtm=(!jg_ie&&!jg_dom&&x&&typeof x.innerHTML!="undefined"); } function pntDoc(){ this.wnd.document.write(this.htm); this.htm=""; } function pntCnvDom(){ var x=document.createRange(); x.setStartBefore(this.cnv); x=x.createContextualFragment(this.htm); this.cnv.appendChild(x); this.htm=""; } function pntCnvIe(){ this.cnv.insertAdjacentHTML("BeforeEnd",this.htm); this.htm=""; } function pntCnvIhtm(){ this.cnv.innerHTML+=this.htm; this.htm=""; } function pntCnv(){ this.htm=""; } function mkDiv(x,y,w,h){ this.htm+="
"; } function mkDivPrint(x,y,w,h){ this.htm+="
"; } function mkLyr(x,y,w,h){ this.htm+="\n"; } function mkLbl(txt,x,y){ this.htm+="
"+txt+"
"; } function mkLin(x1,y1,x2,y2){ if(x1>x2){ var _x2=x2; var _y2=y2; x2=x1; y2=y1; x1=_x2; y1=_y2; } var dx=x2-x1,dy=Math.abs(y2-y1),x=x1,y=y1,yIncr=(y1>y2)?-1:1; if(dx>=dy){ var pr=dy<<1,pru=pr-(dx<<1),p=pr-dx,ox=x; while((dx--)>0){ ++x; if(p>0){ this.mkDiv(ox,y,x-ox,1); y+=yIncr; p+=pru; ox=x; }else{ p+=pr; } } this.mkDiv(ox,y,x2-ox+1,1); }else{ var pr=dx<<1,pru=pr-(dy<<1),p=pr-dy,oy=y; if(y2<=y1){ while((dy--)>0){ if(p>0){ this.mkDiv(x++,y,1,oy-y+1); y+=yIncr; p+=pru; oy=y; }else{ y+=yIncr; p+=pr; } } this.mkDiv(x2,y2,1,oy-y2+1); }else{ while((dy--)>0){ y+=yIncr; if(p>0){ this.mkDiv(x++,oy,1,y-oy); p+=pru; oy=y; }else{ p+=pr; } } this.mkDiv(x2,oy,1,y2-oy+1); } } } function mkLin2D(x1,y1,x2,y2){ if(x1>x2){ var _x2=x2; var _y2=y2; x2=x1; y2=y1; x1=_x2; y1=_y2; } var dx=x2-x1,dy=Math.abs(y2-y1),x=x1,y=y1,yIncr=(y1>y2)?-1:1; var s=this.stroke; if(dx>=dy){ if(s-3>0){ var _s=(s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy)/dx; _s=(!(s-4)?Math.ceil(_s):Math.round(_s))+1; }else{ var _s=s; } var ad=Math.ceil(s/2); var pr=dy<<1,pru=pr-(dx<<1),p=pr-dx,ox=x; while((dx--)>0){ ++x; if(p>0){ this.mkDiv(ox,y,x-ox+ad,_s); y+=yIncr; p+=pru; ox=x; }else{ p+=pr; } } this.mkDiv(ox,y,x2-ox+ad+1,_s); }else{ if(s-3>0){ var _s=(s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy)/dy; _s=(!(s-4)?Math.ceil(_s):Math.round(_s))+1; }else{ var _s=s; } var ad=Math.round(s/2); var pr=dx<<1,pru=pr-(dy<<1),p=pr-dy,oy=y; if(y2<=y1){ ++ad; while((dy--)>0){ if(p>0){ this.mkDiv(x++,y,_s,oy-y+ad); y+=yIncr; p+=pru; oy=y; }else{ y+=yIncr; p+=pr; } } this.mkDiv(x2,y2,_s,oy-y2+ad); }else{ while((dy--)>0){ y+=yIncr; if(p>0){ this.mkDiv(x++,oy,_s,y-oy+ad); p+=pru; oy=y; }else{ p+=pr; } } this.mkDiv(x2,oy,_s,y2-oy+ad+1); } } } function mkLinDott(x1,y1,x2,y2){ if(x1>x2){ var _x2=x2; var _y2=y2; x2=x1; y2=y1; x1=_x2; y1=_y2; } var dx=x2-x1,dy=Math.abs(y2-y1),x=x1,y=y1,yIncr=(y1>y2)?-1:1,drw=true; if(dx>=dy){ var pr=dy<<1,pru=pr-(dx<<1),p=pr-dx; while((dx--)>0){ if(drw){ this.mkDiv(x,y,1,1); } drw=!drw; if(p>0){ y+=yIncr; p+=pru; }else{ p+=pr; } ++x; } if(drw){ this.mkDiv(x,y,1,1); } }else{ var pr=dx<<1,pru=pr-(dy<<1),p=pr-dy; while((dy--)>0){ if(drw){ this.mkDiv(x,y,1,1); } drw=!drw; y+=yIncr; if(p>0){ ++x; p+=pru; }else{ p+=pr; } } if(drw){ this.mkDiv(x,y,1,1); } } } function mkOv(_2e,top,_30,_31){ var a=_30>>1,b=_31>>1,wod=_30&1,hod=(_31&1)+1,cx=_2e+a,cy=top+b,x=0,y=b,ox=0,oy=b,aa=(a*a)<<1,bb=(b*b)<<1,st=(aa>>1)*(1-(b<<1))+bb,tt=(bb>>1)-aa*((b<<1)-1),w,h; while(y>0){ if(st<0){ st+=bb*((x<<1)+3); tt+=(bb<<1)*(++x); }else{ if(tt<0){ st+=bb*((x<<1)+3)-(aa<<1)*(y-1); tt+=(bb<<1)*(++x)-aa*(((y--)<<1)-3); w=x-ox; h=oy-y; if(w&2&&h&2){ this.mkOvQds(cx,cy,-x+2,ox+wod,-oy,oy-1+hod,1,1); this.mkOvQds(cx,cy,-x+1,x-1+wod,-y-1,y+hod,1,1); }else{ this.mkOvQds(cx,cy,-x+1,ox+wod,-oy,oy-h+hod,w,h); } ox=x; oy=y; }else{ tt-=aa*((y<<1)-3); st-=(aa<<1)*(--y); } } } this.mkDiv(cx-a,cy-oy,a-ox+1,(oy<<1)+hod); this.mkDiv(cx+ox+wod,cy-oy,a-ox+1,(oy<<1)+hod); } function mkOv2D(_33,top,_35,_36){ var s=this.stroke; _35+=s-1; _36+=s-1; var a=_35>>1,b=_36>>1,wod=_35&1,hod=(_36&1)+1,cx=_33+a,cy=top+b,x=0,y=b,aa=(a*a)<<1,bb=(b*b)<<1,st=(aa>>1)*(1-(b<<1))+bb,tt=(bb>>1)-aa*((b<<1)-1); if(s-4<0&&(!(s-2)||_35-51>0&&_36-51>0)){ var ox=0,oy=b,w,h,pxl,pxr,pxt,pxb,pxw; while(y>0){ if(st<0){ st+=bb*((x<<1)+3); tt+=(bb<<1)*(++x); }else{ if(tt<0){ st+=bb*((x<<1)+3)-(aa<<1)*(y-1); tt+=(bb<<1)*(++x)-aa*(((y--)<<1)-3); w=x-ox; h=oy-y; if(w-1){ pxw=w+1+(s&1); h=s; }else{ if(h-1){ pxw=s; h+=1+(s&1); }else{ pxw=h=s; } } this.mkOvQds(cx,cy,-x+1,ox-pxw+w+wod,-oy,-h+oy+hod,pxw,h); ox=x; oy=y; }else{ tt-=aa*((y<<1)-3); st-=(aa<<1)*(--y); } } } this.mkDiv(cx-a,cy-oy,s,(oy<<1)+hod); this.mkDiv(cx+a+wod-s+1,cy-oy,s,(oy<<1)+hod); }else{ var _a=(_35-((s-1)<<1))>>1,_b=(_36-((s-1)<<1))>>1,_x=0,_y=_b,_aa=(_a*_a)<<1,_bb=(_b*_b)<<1,_st=(_aa>>1)*(1-(_b<<1))+_bb,_tt=(_bb>>1)-_aa*((_b<<1)-1),pxl=new Array(),pxt=new Array(),_pxb=new Array(); pxl[0]=0; pxt[0]=b; _pxb[0]=_b-1; while(y>0){ if(st<0){ st+=bb*((x<<1)+3); tt+=(bb<<1)*(++x); pxl[pxl.length]=x; pxt[pxt.length]=y; }else{ if(tt<0){ st+=bb*((x<<1)+3)-(aa<<1)*(y-1); tt+=(bb<<1)*(++x)-aa*(((y--)<<1)-3); pxl[pxl.length]=x; pxt[pxt.length]=y; }else{ tt-=aa*((y<<1)-3); st-=(aa<<1)*(--y); } } if(_y>0){ if(_st<0){ _st+=_bb*((_x<<1)+3); _tt+=(_bb<<1)*(++_x); _pxb[_pxb.length]=_y-1; }else{ if(_tt<0){ _st+=_bb*((_x<<1)+3)-(_aa<<1)*(_y-1); _tt+=(_bb<<1)*(++_x)-_aa*(((_y--)<<1)-3); _pxb[_pxb.length]=_y-1; }else{ _tt-=_aa*((_y<<1)-3); _st-=(_aa<<1)*(--_y); _pxb[_pxb.length-1]--; } } } } var ox=0,oy=b,_oy=_pxb[0],l=pxl.length,w,h; for(var i=0;i>1,b=_3f>>1,wod=_3e&1,hod=_3f&1,cx=_3c+a,cy=top+b,x=0,y=b,aa2=(a*a)<<1,aa4=aa2<<1,bb=(b*b)<<1,st=(aa2>>1)*(1-(b<<1))+bb,tt=(bb>>1)-aa2*((b<<1)-1),drw=true; while(y>0){ if(st<0){ st+=bb*((x<<1)+3); tt+=(bb<<1)*(++x); }else{ if(tt<0){ st+=bb*((x<<1)+3)-aa4*(y-1); tt+=(bb<<1)*(++x)-aa2*(((y--)<<1)-3); }else{ tt-=aa2*((y<<1)-3); st-=aa4*(--y); } } if(drw){ this.mkOvQds(cx,cy,-x,x+wod,-y,y+hod,1,1); } drw=!drw; } } function mkRect(x,y,w,h){ var s=this.stroke; this.mkDiv(x,y,w,s); this.mkDiv(x+w,y,s,h); this.mkDiv(x,y+h,w+s,s); this.mkDiv(x,y+s,s,h-s); } function mkRectDott(x,y,w,h){ this.drawLine(x,y,x+w,y); this.drawLine(x+w,y,x+w,y+h); this.drawLine(x,y+h,x+w,y+h); this.drawLine(x,y,x,y+h); } function jsgFont(){ this.PLAIN="font-weight:normal;"; this.BOLD="font-weight:bold;"; this.ITALIC="font-style:italic;"; this.ITALIC_BOLD=this.ITALIC+this.BOLD; this.BOLD_ITALIC=this.ITALIC_BOLD; } var Font=new jsgFont(); function jsgStroke(){ this.DOTTED=-1; } var Stroke=new jsgStroke(); function jsGraphics(id,wnd){ this.setColor=new Function("arg","this.color = arg;"); this.getColor=new Function("return this.color"); this.setStroke=function(x){ this.stroke=x; if(!(x+1)){ this.drawLine=mkLinDott; this.mkOv=mkOvDott; this.drawRect=mkRectDott; }else{ if(x-1>0){ this.drawLine=mkLin2D; this.mkOv=mkOv2D; this.drawRect=mkRect; }else{ this.drawLine=mkLin; this.mkOv=mkOv; this.drawRect=mkRect; } } }; this.setPrintable=function(arg){ this.printable=arg; this.mkDiv=jg_n4?mkLyr:arg?mkDivPrint:mkDiv; }; this.setFont=function(fam,sz,sty){ this.ftFam=fam; this.ftSz=sz; this.ftSty=sty||Font.PLAIN; }; this.drawPolyline=this.drawPolyLine=function(x,y,s){ var i=x.length-1; while(i>=0){ this.drawLine(x[i],y[i],x[--i],y[i]); } }; this.fillRect=function(x,y,w,h){ this.mkDiv(x,y,w,h); }; this.fillRectPattern=function(x,y,w,h,url){ this.htm+="
"; }; this.drawHandle=function(x,y,w,h,_62){ this.htm+="
"; }; this.drawHandleBox=function(x,y,w,h,_67){ this.htm+="
"; }; this.drawPolygon=function(x,y){ this.drawPolyline(x,y); this.drawLine(x[x.length-1],y[x.length-1],x[0],y[0]); }; this.drawEllipse=this.drawOval=function(x,y,w,h){ this.mkOv(x,y,w,h); }; this.fillEllipse=this.fillOval=function(_6e,top,w,h){ var a=(w-=1)>>1,b=(h-=1)>>1,wod=(w&1)+1,hod=(h&1)+1,cx=_6e+a,cy=top+b,x=0,y=b,ox=0,oy=b,aa2=(a*a)<<1,aa4=aa2<<1,bb=(b*b)<<1,st=(aa2>>1)*(1-(b<<1))+bb,tt=(bb>>1)-aa2*((b<<1)-1),pxl,dw,dh; if(w+1){ while(y>0){ if(st<0){ st+=bb*((x<<1)+3); tt+=(bb<<1)*(++x); }else{ if(tt<0){ st+=bb*((x<<1)+3)-aa4*(y-1); pxl=cx-x; dw=(x<<1)+wod; tt+=(bb<<1)*(++x)-aa2*(((y--)<<1)-3); dh=oy-y; this.mkDiv(pxl,cy-oy,dw,dh); this.mkDiv(pxl,cy+oy-dh+hod,dw,dh); ox=x; oy=y; }else{ tt-=aa2*((y<<1)-3); st-=aa4*(--y); } } } } this.mkDiv(cx-a,cy-oy,w+1,(oy<<1)+hod); }; this.drawString=mkLbl; this.clear=function(){ this.htm=""; if(this.cnv){ this.cnv.innerHTML=this.defhtm; } }; this.mkOvQds=function(cx,cy,xl,xr,yt,yb,w,h){ this.mkDiv(xr+cx,yt+cy,w,h); this.mkDiv(xr+cx,yb+cy,w,h); this.mkDiv(xl+cx,yb+cy,w,h); this.mkDiv(xl+cx,yt+cy,w,h); }; this.setStroke(1); this.setPrintable(false); this.setFont("verdana,geneva,helvetica,sans-serif",String.fromCharCode(49,50,112,120),Font.PLAIN); this.color="#000000"; this.htm=""; this.wnd=wnd||window; if(!(jg_ie||jg_dom||jg_ihtm)){ chkDHTM(); } if(typeof id!="string"||!id){ this.paint=pntDoc; }else{ this.cnv=document.all?(this.wnd.document.all[id]||null):document.getElementById?(this.wnd.document.getElementById(id)||null):null; this.defhtm=(this.cnv&&this.cnv.innerHTML)?this.cnv.innerHTML:""; this.paint=jg_dom?pntCnvDom:jg_ie?pntCnvIe:jg_ihtm?pntCnvIhtm:pntCnv; } } mailbox/xinha/plugins/ExtendedFileManager/assets/slider.js0100664000567100000120000000427210565363032023751 0ustar jcameronwheel/** * ImageEditor slider file. * Authors: Wei Zhuo, Afru, Krzysztof Kotowicz * Version: Updated on 08-01-2005 by Afru * Version: Updated on 20-06-2006 by Krzysztof Kotowicz * Package: ExtendedFileManager (EFM 1.1.1) * http://www.afrusoft.com/htmlarea */ var ie=document.all; var ns6=document.getElementById&&!document.all; document.onmouseup = captureStop; var currentSlider = null,sliderField = null; var rangeMin = null, rangeMax= null, sx = -1, sy = -1, initX=0; function getMouseXY(e) { //alert('hello'); x = ns6? e.clientX: event.clientX y = ns6? e.clientY: event.clientY if (sx < 0) sx = x; if (sy < 0) sy = y; var dx = initX +(x-sx); if (dx <= rangeMin) dx = rangeMin; else if (dx >= rangeMax) dx = rangeMax; var range = (dx-rangeMin)/(rangeMax - rangeMin)*100; if (currentSlider != null) currentSlider.style.left = dx+"px"; if (sliderField != null) { sliderField.value = parseInt(range); } return false; } function initSlider() { if (currentSlider == null) currentSlider = document.getElementById('sliderbar'); if (sliderField == null) sliderField = document.getElementById('quality'); if (rangeMin == null) rangeMin = 3 if (rangeMax == null) { var track = document.getElementById('slidertrack'); rangeMax = parseInt(track.style.width); } } function updateSlider(value) { initSlider(); var newValue = parseInt(value)/100*(rangeMax-rangeMin); if (newValue <= rangeMin) newValue = rangeMin; else if (newValue >= rangeMax) newValue = rangeMax; if (currentSlider != null) currentSlider.style.left = newValue+"px"; var range = newValue/(rangeMax - rangeMin)*100; if (sliderField != null) sliderField.value = parseInt(range); } function captureStart() { initSlider(); initX = parseInt(currentSlider.style.left); if (initX > rangeMax) initX = rangeMax; else if (initX < rangeMin) initX = rangeMin; document.onmousemove = getMouseXY; return false; } function captureStop() { sx = -1; sy = -1; document.onmousemove = null; return false; }mailbox/xinha/plugins/ExtendedFileManager/assets/popup.js0100664000567100000120000000320110565363032023621 0ustar jcameronwheel// htmlArea v3.0 - Copyright (c) 2002, 2003 interactivetools.com, inc. // This copyright notice MUST stay intact for use (see license.txt). // // Portions (c) dynarch.com, 2003 // // A free WYSIWYG editor replacement for